Spec docs/superpowers/specs/2026-09-23-stream-backpressure-design.md §7 requires: "The operator-facing readout must say the stream is degraded and at what frame rate. A stream quietly running at 15 fps is the same class of defect as a silent codec downgrade."
That was not built by the #597 backpressure branch, and the branch's own final review caught that neither the Outcome nor the "Not established" section listed it as deferred — so a reader of the spec would believe it shipped.
What exists today. The evidence is on the wire and nothing more:
sessionState().outputSenderSession.senders[].backpressure carries divisor (this destination's request), appliedDivisor (the rate it is actually fed at), level, bufferedMs, queuedChunks, enteredCount, discardedChunks, discardEvents, lastReason, runId, observedAtMs.
realtimeEvidence.encoderExport carries the global divisor/shedFrames/exporting.
GET /snapshot serves all of it verbatim.
What is missing. No shell or renderer file is touched anywhere on the branch. So a stream degraded to a quarter rate is visible to a diagnostician reading /snapshot and invisible to the operator running the show — exactly the silent-downgrade shape the spec sentence exists to forbid.
Suggested shape (not a design, just the constraints this repo already imposes): a scalar readout next to the existing stream status, not a new snapshot-rate bound collection (0xc000027b discipline); read appliedDivisor, not divisor, because Lever A is per-encoder and the per-destination request is not the rate the destination runs at; and say the resulting frame rate as programFps / appliedDivisor, never a hard-coded 60/30/20/15 ladder (the divisor applies to render frame numbers and the program rate is configurable).
Filed from the #597 final-review fix wave.
Spec
docs/superpowers/specs/2026-09-23-stream-backpressure-design.md§7 requires: "The operator-facing readout must say the stream is degraded and at what frame rate. A stream quietly running at 15 fps is the same class of defect as a silent codec downgrade."That was not built by the #597 backpressure branch, and the branch's own final review caught that neither the Outcome nor the "Not established" section listed it as deferred — so a reader of the spec would believe it shipped.
What exists today. The evidence is on the wire and nothing more:
sessionState().outputSenderSession.senders[].backpressurecarriesdivisor(this destination's request),appliedDivisor(the rate it is actually fed at),level,bufferedMs,queuedChunks,enteredCount,discardedChunks,discardEvents,lastReason,runId,observedAtMs.realtimeEvidence.encoderExportcarries the globaldivisor/shedFrames/exporting.GET /snapshotserves all of it verbatim.What is missing. No shell or renderer file is touched anywhere on the branch. So a stream degraded to a quarter rate is visible to a diagnostician reading /snapshot and invisible to the operator running the show — exactly the silent-downgrade shape the spec sentence exists to forbid.
Suggested shape (not a design, just the constraints this repo already imposes): a scalar readout next to the existing stream status, not a new snapshot-rate bound collection (0xc000027b discipline); read
appliedDivisor, notdivisor, because Lever A is per-encoder and the per-destination request is not the rate the destination runs at; and say the resulting frame rate asprogramFps / appliedDivisor, never a hard-coded 60/30/20/15 ladder (the divisor applies to render frame numbers and the program rate is configurable).Filed from the #597 final-review fix wave.