fix(pipeline): complete the gitignored-specs refactor (review gaps)

An adversarial review of 08bc2aa found three gaps:

- templates/CLAUDE.md.fragment still described the OLD git-tracked /
  git-rm-at-close model verbatim — the worst place to miss it, since new
  projects import this fragment into their CLAUDE.md. Rewritten to the
  gitignored / shell-rm / ledger-only model.
- INSTALL.md still cited "4-digit naming" — now slug-only.
- The fieldtest cross-cycle deletion rule was self-defeating: it keyed
  the spare/delete decision on the permanent fieldtest- prefix, which
  cannot encode "spare once, then delete." Because fieldtest runs only
  AFTER audit closes, the fresh fieldtest spec never exists at the
  cycle-close sweep, so the rule is simply "audit discards every
  working-tree spec/plan"; the spent fieldtest spec present at N+1's
  close was already consumed and goes with the rest. The prefix is now
  only a working-tree label, not a delete discriminator. Reconciled
  across audit, conventions, pipeline, fieldtest, fieldtester.
This commit is contained in:
2026-07-02 11:46:29 +02:00
parent 9ca2c8ab87
commit 2bc0cf025f
7 changed files with 40 additions and 31 deletions
+12 -9
View File
@@ -125,11 +125,12 @@ The orchestrator picks per item:
### Step 5 — Discard the cycle's spec and plan
Once the cycle is drift-clean (or the drift is ratified) and the
architect has read the spec, the cycle's spec and plan have served their
purpose. Discard them from the working tree with a plain shell `rm`:
architect has read the spec, the working-tree spec and plan have served
their purpose. Discard **every** spec/plan file present in the working
tree with a plain shell `rm`:
```
rm -f docs/specs/<slug>.md docs/plans/<slug>.md
rm -f docs/specs/*.md docs/plans/*.md
```
This is a shell delete, NOT `git rm` — the files are git-ignored and were
@@ -138,12 +139,14 @@ only code and ledger changes. **Ordering is load-bearing:** the
architect's read (Step 1) must precede this delete, because a git-ignored
spec has no `git show` recovery once it is gone.
**Spare any `fieldtest-`-prefixed spec.** A `fieldtest-<slug>.md` under
`docs/specs` belongs to the *next* cycle (it is the input to its
`planner`), so it is not this cycle's to discard — leave it for the next
cycle's close. If this cycle is itself a milestone close with no
following `planner`, discard the fieldtest spec too (see
`../fieldtest/SKILL.md`).
Deleting *everything present* is correct, not over-broad: `fieldtest`
runs only **after** audit closes clean, so this cycle's own fieldtest
spec does not exist yet at this point. The only `fieldtest-<slug>.md`
that can be present here is a spent one — written after the *previous*
cycle's close and already consumed as this cycle's `planner` input — so
it too should go. There is nothing to spare: the newly-written fieldtest
spec appears *after* this step and survives until the next cycle's close,
when this same sweep removes it.
## Handoff Contract