session 2026-08-25: skill-harvest proposal 155 — control fixtures vs a dirty tree

Filed as a DETECTOR proposal rather than a discipline entry, and the reasoning is the
routing table's, not the freeze's: a rule that fires only when someone remembers it while
writing a control has ~10% measured retrieval, and today's instance was caught by the
controls running on every invocation, not by anyone recalling anything.

Carries its own honest limit on its face: the detector would NOT have caught this case at
write time, because the fixture file was clean then and dirtied minutes later. Its real
firing moment is the drift-check run — 'this control's fixture is now dirty', a warning,
not a block. Stated before building rather than discovered after.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J6hZXNYSxEfZseBGTni4sf
This commit is contained in:
David F Glidden
2026-08-25 15:42:01 +02:00
co-authored by Claude Opus 5
parent 2676a7ec69
commit ebccdd84a7
+12
View File
@@ -536,3 +536,15 @@ Proposal: §7.5 derives its shape list from `SKELETON` (or names it as the singl
enumerating). ⚠ **Derive from the CONSUMER, not the survivor** — the consumer here is the wrap step enumerating). ⚠ **Derive from the CONSUMER, not the survivor** — the consumer here is the wrap step
finalising a note the hook already created, so `SKELETON` is the natural source. finalising a note the hook already created, so `SKELETON` is the natural source.
**Classification: `[PROPOSAL]`** — borderline; the FIX lane says propose when in doubt. **Classification: `[PROPOSAL]`** — borderline; the FIX lane says propose when in doubt.
---
## Appended 2026-08-25
| # | proposal | firing moment (declared) | status | stroke | pointer |
|---|---|---|---|---|---|
| 155 | **A control's fixture must not name a file the session is editing** | ⚠ **Fires at the moment a control is written — a condition the executor must first NOTICE.** Per the routing table this is the weakest class. A mechanical detector IS available and is the honest routing: a check that no control fixture path appears in `git status --porcelain`. **Filed as a detector proposal, not a discipline entry.** If built as a detector it fires always; if left as a remembered rule, **estimated retrieval ~10%, recorded here as the routing table requires.** | PROPOSED | — | this session; earned when the `file-changed-since` negative control pointed at `FOOL-SEED-RULE.md`, which the same session then edited, and the drift-check reported ITSELF unverified |
⚠ **Why this is filed as a detector rather than a ladder entry.** The verification ladder is **FROZEN** under REVIEWED-123 and takes no additions from any source until the trial is graded, so it could not go there regardless. But the freeze is not the reason: even unfrozen, this is a rule that fires only if someone remembers it while writing a control, and the measured retrieval for that class is ~10%. The failure it prevents was caught **by the controls running on every invocation**, not by anyone recalling a rule — which is itself the argument for routing it to a detector.
⚠ **Honest limit on the detector, stated before it is built:** it catches a fixture naming a file *currently dirty*. It would NOT have caught today's case at the moment the control was written, because `FOOL-SEED-RULE.md` was clean then and dirtied minutes later. The detector's real firing moment is **the drift-check run**, where it would flag "this control's fixture is now dirty" — a warning, not a block. **Filed with that limit on its face rather than discovered after building.**