---
name: uniform-table-blindness-sweep
description: "Uniform-table blindness — a table-walk test proves nothing when the shipped rows are uniform in the property under test; hertz's 2026-07-31 sweep found 4 real holes, refuted 2, in lane fix/uniform-table-blindness @b6fbe40."
metadata: 
  node_type: memory
  type: project
  originSessionId: cc1be5ee-a7e1-4b7b-861d-4c0a98570a34
  modified: 2026-07-31T14:44:14.223Z
---

**The class** (caught by todlando in W4 T1, swept by hertz 2026-07-31): a test that walks a table/enum and asserts a property proves nothing if the SHIPPED rows are uniform (or N-1 of N) in that property — a reader hardcoded to the distinguished value agrees on every shipped row and stays green under exactly the drift the test forbids. Gate question per test: **would a hardcoded reader pass this fixture?** Fix = a fixture row that breaks the shipped uniformity + mutation-to-prove.

**Lane `fix/uniform-table-blindness` @b6fbe40** (off main 5af470f, test-side only), 4 fixed, each with the full cycle proven (hardcode passes OLD fixture → reds NEW → real reader green):
1. `cli.rs` routable denominator — every fixture row Active-or-Offline, where `routable()` and `== Active` agree. Added Dormant + Suspended.
2. `registry.rs` ghost eviction — same shape; the mutated decay predicate evicted routable rows with the test still green.
3. `dispatch.rs` `family_is_one_way` / `finished_row_is_terminal` — hand-typed negative lists had drifted behind `StreamFamily` (5 of 12 unasserted; DigestPull missing). Now walk a new `StreamFamily::ALL` under a **wildcard-free match**, so a new variant is `error[E0004]`. Idiom copied from `RouteLeg` in `pump/mod.rs` — the repo's existing pattern.
4. `cli.rs` `--json` guard — `json` is a clap root flag with `global = true`, so `parsed.json` is true for ANY parsing command. Deleting `notif list`'s `print_json` sink left it green. Renamed to `..._accepts_the_global_json_flag`; real emission coverage added to `tests/json_emit.rs` for the three local-store readers needing no daemon (4 of 14 covered → 7).

**Two REFUTED** (see [[torn-window-needs-reachability]] — same discipline):
- pairing `wire.rs` frame codec: the "unpinned additive fields" claim is false; `hello_intro_*`, `spake2_second_candidate_*`, `seed_frame_roster_*` each destructure and assert them. Only scalar payloads (Announce/Confirm/Done) are unpinned — low severity.
- `manifest.rs` `RETIRED_UNSPAWNED_ROLES`: structurally the calibration shape (1 of 7) but **not exploitable** — hardcoding the reader makes the const dead and `-D warnings` fails the build. **The compiler can close a uniform-table hole; check that before reporting one.**

**Unverified tail → parked as `spt-bs-releases#58`** (BACKLOG, mutation-proof-first constraint written in), doyle 2026-07-31. Contents: `access.rs` `knock_exempts` (constant `false`), `access.rs` RC_VIEW/RC_ATTACH inbound-lock bypass, `servicehost.rs` `hold_outranks_everything` (walks 3 of 4 Opportunity, omits HoldRelease), `broker.rs` `fail_keeps_hold` (JoinFail 1-of-6), and untested N-1 predicates `EffectKind::is_durable` / `QuiesceOutcome::clear_to_swap`.

**Two sequencing facts — DO NOT re-file these as new findings:**
- Both `access.rs` items are **FROZEN until #53 W4 lands** (todlando rebuilt the knock family); `knock_exempts` constant-`false` is almost certainly the pre-W4 placeholder and may be moot. **Status 2026-07-31: W4 is COMPLETE — all 11 tasks in, T11 cross-node knock ladder GREEN on the real rig @58b46d3 (pushed), int activated on REQ-KNOCK-VERBS, awaiting doyle's gate.** Frozen until it actually LANDS ON MAIN, not merely gates. Then **re-audit against the merged tree — do not re-file blind**, the knock family may moot both.
- `surface::is_attributable` having **zero production readers is EXPECTED** on main@5af470f — W4 T5/T7 wire them. Recorded only so nobody re-files it.

The servicehost/broker/predicate-walk items may ride any future test-rework lane; no urgency.

**Method note:** two Explore subagents enumerated candidates workspace-wide; every verdict was re-proven locally before reporting. Agent verdicts ran ~2 false positives out of 6 strong SUSPECTs — useful for breadth, never trustworthy as findings.
