c28a9b7b49
The server exits when the database does not answer within about ten seconds, so while the database is down the pod crash-loops with a restart backoff that grows to five minutes, and /healthz only answers after it has connected. The hook gave up after a fixed two minutes per attempt, and Flux's default five-minute timeout came first anyway. A failed hook fails the release and nothing runs it again until the next upgrade, so a database that was merely slow left the install without an administrator. Each attempt now waits bootstrap.waitSeconds (default 600), logging progress, and the Job gets an activeDeadlineSeconds derived from it so a database that never comes up still ends the hook. No change to the binary, API or schema. Claude-Session: https://claude.ai/code/session_016mBLURvJoMuUEr9cB2RpUN
Terminal Duty documentation
The README is the short tour. These pages hold the detail.
Running it
- Deployment: Docker, the Helm chart, the database, backups, and the operator.
- Configuration: environment variables and settings.
- Single sign-on: OIDC, group mapping, the terminal device flow.
Using it
- The web UI: sessions, the Team and Admin tabs.
- Alertmanager configuration: routes, integration keys and webhooks.
- Alerts and incidents: correlation, lifecycle, on-call assignment, stale-alert expiry.
- Notifications: channels and providers, ntfy pages, and acknowledging from them.
- Escalation: ladders, repeats and the fallback.
- Dead man's switches: noticing that alerts stopped arriving.
Integrating and contributing
- API reference: every endpoint, authentication and error shape.
- Service accounts: non-human credentials for automation.
- Development and releasing: tests, the CI gate, the release pipeline.