# Job stage observability

outcome: every request card's stage strip shows the real current stage (spec → build → verify → land → deploy → live), written by the machinery; "Stage not recorded" only for rows with genuinely no evidence.
status: ACTIVE — Sonnet lane dispatched 2026-08-16.
source request: owner 2026-08-16 /brainstorm (screenshot: card strip renders "Stage not recorded").
design spec: docs/specs/2026-08-16-job-stage-observability-design.md — vocabulary, writers per seam, reader, decisions.

## Execution

- [ ] collector: stage vocabulary + stampStage on the trail (idempotent, validated)
- [ ] writers piggybacked on existing stamp paths (factory start, gate start, landed, deployed, proof)
- [ ] UI: strip lights current + done chips from latest stage entry; honest fallback preserved; drawer timeline shows transitions
- [ ] live acceptance: a real landing advances a card's strip end-to-end with no hand-written stages

constraints: fail-open writes; edge-triggered stamps; land dark if receipt_trail not yet on main; no new services.
current receipt: spec+plan authored 2026-08-16; lane dispatched.
next executable action: lane implements per spec.
