From ebccdd84a7426b3b68057a6df3a0dce9ebea1028 Mon Sep 17 00:00:00 2001 From: David F Glidden Date: Tue, 25 Aug 2026 15:42:01 +0200 Subject: [PATCH] =?UTF-8?q?session=202026-08-25:=20skill-harvest=20proposa?= =?UTF-8?q?l=20155=20=E2=80=94=20control=20fixtures=20vs=20a=20dirty=20tre?= =?UTF-8?q?e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Claude-Session: https://claude.ai/code/session_01J6hZXNYSxEfZseBGTni4sf --- claude/memory/skill-harvest-register.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/claude/memory/skill-harvest-register.md b/claude/memory/skill-harvest-register.md index fa66f4c..e7887c7 100644 --- a/claude/memory/skill-harvest-register.md +++ b/claude/memory/skill-harvest-register.md @@ -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 finalising a note the hook already created, so `SKELETON` is the natural source. **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.**