<!-- spt:source=llm spt:routed_at_ms=1785380152655 spt:node=14efb80cb72297a1068c87a4aa45f30547c4474b60d1284b122bdc1a91c85f2d spt:vector=14efb80cb72297a1068c87a4aa45f30547c4474b60d1284b122bdc1a91c85f2d:635137 -->
## spt-core requirement confusion audit — paused at weekly cap, resume later

**Run dir (everything lives here, nothing in the repo):**
`C:/Users/decid/AppData/Local/Temp/claude/C--Users-decid-Documents-projects-liaison/29287739-71ae-4df9-a62d-b2c76b202b34/scratchpad/rca`

**READ FIRST on resume, in this order:** `RESUME.md` (procedure + every ruling on
record), `STATE.md` (scoring coverage), `STATE_GATE4.md` (consolidation state + an
open concern that must be read before dispatching more S1).

**Mode: AUDIT ONLY, read-only.** Phases A–E then STOP. No edits, commits, or branch
changes in spt-core. Applying a fix needs explicit operator authorization; committing
is a separate one after that.

### Where it stands
- **Scoring is DONE: 177,906 / 177,906 pairs = 100%, zero unscored.** All 1,250
  chunks passed the gates. Matrix written, 597x597, family-ordered.
- **Gate 4 consolidation is ~11% done.** 88 slices total, 10 framed, 78 remaining
  (63 never dispatched, 15 dispatched-and-held).
- Findings banked so far: 357/597 requirements have no doc-stage evidence (scored on
  id+title alone); titles are mini-specs (mean 960 chars, max 20,164, capped at 1200
  for scoring, 145 affected); 8,728 candidates >=30; ~225 pairs look genuinely
  overlapping. One early cluster to chase in Phase D: stale-latched-status pairs
  (CONTROL-STAMP-CONVERGENCE with LIVEHOST-BOOT-LIVENESS-GATE at 45, and with
  BOUNDARY-READY-STRAND at 44 from an independent scorer).

### Immediate next steps
1. Read `STATE_GATE4.md` OPEN CONCERN first: 60% of returned slices failed the
   calibration gate on their merits. Do not loosen the gate; measure why. Cheapest
   checks listed there (slice size, whether re-dispatch passes at a better rate,
   content pattern). Bring doyle the measurement before touching any threshold.
2. Finish S1 over the remaining 78 slices, in tranches sized to the window.
3. Then S2 (everything >=40, ordered DESCENDING), then S3 — a single agent over the
   top band. Only S3 output is citable as a ranking.
4. Then Phase D diagnosis against the implementation, Phase E exact wording
   proposals, then STOP and report.

### Rulings in force (all recorded in RESUME.md — do not relitigate)
- S1 entry threshold >=30, deliberately not >=40.
- S2 ceiling 3,000 HARD; report the ACTUAL count, not a projection; if it exceeds
  3,000, checkpoint doyle before dispatching S2.
- Concordance gate >=0.75, gating BEFORE slope; deadband FROZEN at 10 and explicitly
  not a tunable knob; always report raw AND deadbanded concordance.
- Ballast (20 known-low pairs/slice, drawn fresh per slice) doubles as a gate input.
- The 6 chunk-stage reference pairs keep their values verbatim in every slice; a
  reference needing re-judgment is a FINDING, not a silent update. Asserted in code.
- Hold reasons stay in separate buckets; a held slice re-dispatches ONCE, then
  escalates to doyle. Never average two bad frames into one acceptable-looking one.
- Every cell carries attribution: consolidated / provisional / coordinator-scored / NS.

### Operational facts worth not rediscovering
- Harvest is idempotent and safe on a live or already-harvested run; a session death
  is a pause, not a loss. Always check a run's journal before assuming data is gone —
  twice the harness reported no completion record while the journal held full results.
- Size a dispatch to the REMAINING window, never to the work left. Overshooting burns
  four retry rounds per dead agent; measured cost was roughly half a window wasted.
- Never hand-edit generated state or the is/ns vectors; regenerate them.
- Parked, operator's call only: dropping the 49 placeholder requirements would cut
  ~16% of the work. Operator chose the full roster at the start, so it stands.