---
name: consumer-tally-needs-a-producer-side-control
description: "A frozen CONSUMER counter proves a routing defect only if the PRODUCER kept producing — without that control, a dead/starved producer is indistinguishable from a stolen consumer."
metadata: 
  node_type: memory
  type: feedback
  originSessionId: 3af0675c-3744-4c28-b1ba-0f1bf9c1a162
  modified: 2026-08-04T06:26:15.344Z
---

Any assertion of the form "my counter stopped climbing, therefore the thing feeding me was
taken away" needs a second counter on the PRODUCER side, read over the same window. Without
it, "the producer keeps producing either way" is a comment, and a starved or dead producer
fails the assertion in the defect's exact shape.

**Why:** resume_no_control_steal_e2e asserted controller theft from a frozen tick tally while
its own comment carried the unmeasured premise ("the child keeps ticking either way, so a
frozen tally is a displaced controller"). Its baseline only required ticks>0 ONCE at start —
nothing about the window that decides the verdict. deployah's a4 specimen: gained=[0,15,17]
through ONE resume_sessions, where a real steal displaces the SET, and session 0 was already
~4x behind before the window opened. The producer counter already existed as public API
(`Broker::session_output_seq`, the output-log high-water) — the control cost no product
surface, only the idea of asking.

**How to apply:** three-way verdict, never two — (a) consumer frozen AND producer advanced =
the real defect, say so with the producer's numbers in the message; (b) consumer frozen AND
producer flat = PRECONDITION, the run decides NOTHING in either direction and must say it is
not evidence of the defect; (c) producer unreadable/absent = its own bucket, never collapsed
into (b). Kin: [[probe-before-teardown-not-at-assert]] (where to read it),
[[hedging-classification-is-not-grounding-the-observation]], [[stale-carried-forward-sentence]]
(the comment that outlived its evidence).
