troubleshooting · internal
The event tail is polling instead of waking
DATABASE_URL_DIRECT is unset, so the API can't hold the LISTEN session that turns Postgres notifications into long-poll wakeups. Nothing is lost — every connected client just re-queries once per second instead of waking the moment an event lands.
fix
Set the direct, non-pooler DSN on the app: flyctl secrets set DATABASE_URL_DIRECT='<direct DSN>'. It must bypass PgBouncer — transaction pooling hands each transaction a different backend, so a LISTEN would never hear its own notifications.
eventbus-no-direct-dsn
Run shoti explain eventbus-no-direct-dsn to read this offline. Still stuck? hello@shoti.ai.
All topics: shoti.ai/troubleshooting.