6e95c86521
A metric that only ever reads 0 or 1 (up == 0, anything with bool) gave the line chart nothing to show: a flat line or a square wave on a y axis padded to -1..2. When every drawn series is 0/1 the incident page now draws one row per series instead, filled where the value was 1, a thin mark where it was 0, and the bare track where Prometheus returned no samples, which for these expressions means the condition did not hold. The decision is per chart, so one chart never mixes styles; any other value keeps the line chart as before. Frontend only: the endpoint already returns the points and step_seconds, which pick() now passes on so the last sample gets a width and a gap in the samples shows as a gap. 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.