---
name: a-battery-is-silent-about-arms-no-cell-drives
description: "A claim with N arms needs a cell per arm. A battery that drives a subset is green about the subset and SILENT about the rest — and that silence is indistinguishable from coverage, including to traceable-reqs, which is green on TAGS and not on truth."
metadata: 
  node_type: memory
  type: feedback
  originSessionId: ce86e2f4-9819-4bde-b3e1-03d891562bf2
  modified: 2026-08-29T02:30:44.099Z
---

**Enumerate the arms your CLAIM makes, then check that a cell drives each one.**
A battery that exercises a subset returns green about the subset and says nothing
whatever about the rest — and nothing in the output distinguishes "this arm
passed" from "no cell touched this arm."

**Measured 2026-08-28, my own CONDUIT W3 (releases#234), found AFTER it passed
doyle's gate and while the head was mid-rerun.** My REQ title, `api.md`,
`CONTEXT.md` and the integration checklist all asserted **all six IO kinds are
visible** through `spt api io-events`. Two of them — `COMMUNE`, `COMMUNE_FAIL` —
were structurally impossible: their only publisher (`publish_commune_io`,
`spt-daemon/src/lifecycle.rs`) hand-builds `IoBus::new()` with one sink instead of
calling `default_bus`, so my new sink was never registered on that path.

What every instrument did, and why none could see it:
- the **e2e** drove `api state busy|idle` — `USER_INPUT` and `AGENT_OUTPUT` only.
  It was VACUOUS on exactly the two broken kinds. It could not have failed.
- the **units** synthesized `IoLogRow` values directly and never traversed the
  publish path, so a missing registration is invisible to them by construction.
- **`traceable-reqs check` was green on TAGS, not on truth.** The tags existed and
  pointed at real evidence; the evidence just did not cover the arms the REQ's own
  title enumerated. Coverage is a statement about tag placement.
- clippy both OS, a gate PASS, and a content-parity check I ran myself: all blind,
  because none of them is an instrument for this.

Four green legs and a gate, and the thing that actually found it was a census
doyle ordered for an unrelated lane.

**The tell you can act on: a claim that ENUMERATES is a claim with arms.** The
moment a REQ title or a doc says "all six kinds", "every surface", "both
directions", that list is a test plan. Count the list, count the cells that drive
it, and if the numbers differ, say which arms are uncovered BY NAME rather than
reporting a percentage — see [[declining-a-credit-specifies-the-requirement]].

**A test that cannot fail is worse than a missing test**, because a missing test
is visibly missing. deployah's framing, kept: *"a green test that cannot fail is
what let this reach a gate."*

**How to apply:**
- Write the arm list from the CLAIM (the REQ title, the published sentence), never
  from the code you happened to write. The code is what you are checking.
- Drive each arm through the REAL path. A unit that constructs the record
  bypasses the registration/wiring layer where this class of defect lives.
- Prefer one int leg that traverses every arm over N units that synthesize.
- When you cannot cover an arm, name it as uncovered in the hand-off. Silence gets
  read as coverage by the next person, and by you in three weeks.

Kin: [[a-coverage-fix-is-measured-over-the-population-it-claims]] (same
claim-vs-population shape, pointed at a scanner instead of a suite),
[[env-gated-test-returns-vacuous-green]], [[condition-reproduced-race-did-not]],
[[declining-a-credit-specifies-the-requirement]],
[[an-undiscoverable-shipped-surface-reads-as-missing]] (the docs half: here the
docs were not missing, they were WRONG, which is the worse direction).
