Context / Motivation
StatusBeam has the two ends of incident handling but nothing in between. The D1 incident schema exists (apps/worker/schema.sql:20-35) and the incident lifecycle timeline UI exists (apps/web/src/components/IncidentList.tsx), but:
- ingest never writes an incident row, and
- there is no way for an operator to create, update, or resolve one.
The consequence is that a production status page falls back to the bundled sample incidents — a deployed page shows fabricated history. This is documented in the persistence-gap section of .please/docs/knowledge/product.md.
This is the blocking gap for the rest of the roadmap. Subscriber notifications have nothing to notify about, SLA reporting has nothing to measure, and the RSS/Atom feeds have nothing real to publish, until incidents are real data.
Proposed scope
Close the loop end to end, so that both automatic (detected) and manual (operator-declared) incidents are persisted, rendered, and syndicated:
- Automatic — ingest persists response-time samples and opens/resolves incidents from status transitions.
- Manual — an authenticated API plus CLI for the operator-driven lifecycle (create, update, resolve).
- Addressable — per-incident permalink pages, so feed items link to something real.
- Operator surface — a slimmed admin panel on top of the same API, with an MCP surface as follow-up.
Sub-issues (tracked natively):
Acceptance criteria
Priority / Effort / Dependencies
Context / Motivation
StatusBeam has the two ends of incident handling but nothing in between. The D1 incident schema exists (
apps/worker/schema.sql:20-35) and the incident lifecycle timeline UI exists (apps/web/src/components/IncidentList.tsx), but:The consequence is that a production status page falls back to the bundled sample incidents — a deployed page shows fabricated history. This is documented in the persistence-gap section of
.please/docs/knowledge/product.md.This is the blocking gap for the rest of the roadmap. Subscriber notifications have nothing to notify about, SLA reporting has nothing to measure, and the RSS/Atom feeds have nothing real to publish, until incidents are real data.
Proposed scope
Close the loop end to end, so that both automatic (detected) and manual (operator-declared) incidents are persisted, rendered, and syndicated:
Sub-issues (tracked natively):
Acceptance criteria
Priority / Effort / Dependencies