docs(phase-33.5): task 14.5 close — log entry (the record 56 files / 358 copies; kit_coverage 83 rules + 59 entries, 0 uncovered; the mining pass 777/634/143 → DK-69–DK-80; dry-run 5 PASS 20/20; the two instrument findings) + checkpoint (NEXT = task 15, Max, Tier 1)

This commit is contained in:
Drew T
2026-09-07 23:54:29 -06:00
parent 8594081d86
commit 9044c35b65
2 changed files with 80 additions and 16 deletions
File diff suppressed because one or more lines are too long
+79 -15
View File
@@ -54,7 +54,7 @@ in-tree links to `docs/wiki/<Page>.md`. 8. `.run/`: only what git tracks; no sca
- [x] **13** Dry-run install under D6's guardrails; fix; re-run to green; fixture + expected manifest + logs tracked under `.run/P33.5/kit-dryrun/` — xHigh — see Log 2026-09-07 Task 13
- [x] **13.5** *(added 2026-09-07 by Drew — plan amendment, P5d; AMENDED the same day after the dry-run: the dictionaries, in-tree)* **Tools audit + the derived tool index + the two corpora as dictionaries:** `tools/tool_census.py` — for every file under `tools/` outside submodules/vendored code: the docstring line, its consumers (Makefile/`.mk` targets, CI, the wave playbook, its SETUP row, other tools by import or subprocess), its class (LIVE · REFERENCED · ORPHAN; PORTABLE vs PROJECT-ONLY) and its ladder phase; coverage-asserted against `find` (R32) → the generated `docs/tool-index.md` (KEEP-GEN, `--check` in tools-health, a Reference-index row, linked from The-matching-workflow + Toolchain-setup, one pointer line in how-to ch.04/05/10) whose rows are **dictionary entries keyed by the NEED they answer** (what · when the need shows up · why — the SETUP row's incident · what proved it — its consumer/control · what to adapt — the hard-codes); the kit's `tools/MANIFEST.md` RE-DERIVED from the census (`--manifest`, byte-equality asserted); the hand review of the no-consumer class (91 of 326 at S91) under **Drew's criterion: a tool that served a purpose and was REQUIRED to complete the decomp is judged on its value to a FUTURE decomp — still needed (stays live and/or becomes a port task), superseded by a better tool (retired, the row NAMING the successor), or a one-off (retired, the row naming what it produced)**; retirement = `git mv` → `tools/sunset/` only after the census proves 0 consumers, an archive-index-style row per tool, its SETUP row moved to a retired section; Drew reviews and deletes later. **The dictionaries (Drew, 2026-09-07, confirmed in-tree now):** `tool_census.py --corpus` materialises the tools VERBATIM into `decomp-architect/corpus/tools/<phase>/` (LIVE + REFERENCED portable tools and the project-only shape references; retired one-offs out; superseded ones as a pointer file naming the successor) and the knowledge base VERBATIM into `decomp-architect/corpus/cookbook/` (the cookbook, its symptom index, the codegen map) behind one front page stating what transfers (gcc 2.7.2 family = direct use, re-proven on the new bytes; other compilers = the symptom → the named pass → read the same pass in your compiler → a five-line reproducer → your lever); both copies regenerated by a `make kit-corpus` target and asserted EQUAL to the live files in tools-health (no drift, R51); `kit_lint` exempts `corpus/tools/` and `corpus/cookbook/` from the de-specialisation check (evidence, verbatim) and asserts coverage (every corpus file has an index entry) — the ROM audit covers them like everything else; the new project installs only the index + the front page + an ops-setup row naming the corpus (SETUP Step 6; its row count derived from the manifest header, no typed 325). **Two memory seeds + two registry rules** in the kit: consult-the-tool-dictionary-first (before designing or debugging a tool, look the need up; the proven implementation is the jumping-off point, its incident row the failure mode to avoid) and translate-the-source-idiom (a symptom + a named pass + a lever + a byte proof; translate through the pass, never copy the lever; re-prove on your bytes) — G66/G67 in `registry-E.decomp.md`, cited from the ladder's Phase 7 row and the methodology. **A five-tool layout-contract probe** (the corpus oracle, `match_one`, `rtu_match`, `harvest_verify`, `dedup_propagate`: count the layout assumptions — paths, aliases, config names, make targets) → `decomp-architect/templates/layout-contract.md` (a draft; stamping it at Step 4 is a split-phase decision) — xHigh (the ORPHAN review draft is breadth-shaped: one read-only Explore agent, verified against the consumer list) — verify: rows == `find` count; `tool-index --check` green; every retired tool has 0 consumers AND a named successor or product; MANIFEST regenerated byte-equal; the two corpora equal to their sources; `kit_lint` OK; `doc_links --strict` rc 0; the dry-run's Step 6 re-verified by a resume on the run-3 throwaway; `make tools-health` OK (detached) — see Log 2026-09-07 Task 13.5
- [x] **14** Wiki `Start-a-new-decomp-project.md` + README/`Tools-from-this-project.md` rows + SETUP rows (R21) + decision-log entry (R31) + accelerators entry if earned — xHigh — **AMENDED S91 (Drew): also implement the types hindsight into the kit per `docs/decision-log.md` "P33.5 S91-b" items (a)–(e): DK-65, the Phase-6 milestone's canonical type layer, G62 extended (or G68), the type tools' need-keys re-pointed at Phase 6, the cookbook front page's width sentence, one paragraph in the methodology; then `make kit-corpus` + `tool_census --check` + `kit_lint`** — see Log 2026-09-07 Task 14
- [ ] **14.5** *(added 2026-09-07 by Drew — plan amendment 3, P5d, S92: "do all three")* **The record as the third dictionary + the two coverage checks + the phase-log mining pass.** (1) `decomp-architect/corpus/record/` — the how-to (13 chapters), `docs/decision-log.md`, `docs/accelerators.md`, `docs/retrospective.md`, `docs/story.md`, `docs/wave-playbook.md`, `docs/effort-map.md`, `docs/gen3-standards.md`, `docs/gen3-handoff.md`, `phase-ends/DIGEST.md` and every `phase-ends/PhaseEnd_*.md` — VERBATIM behind an authored front page (what each is, how to read it, that the phase logs are NOT in it — R19 — and that item 3 is their distillation), regenerated by `make kit-corpus`, asserted sha1-equal by `tool_census --check`, lint-exempt like the other two corpora; SETUP Step 6 installs the front page (`docs/inherited-record.md`); every "two dictionaries" → three (kit README/tree, ops-setup rows, the methodology, the wiki page, the Tools page, README, the SETUP row). (2) `tools/kit_coverage.py` + `config/kit_coverage_map.tsv` (the authored residue): every R1–R83 is cited by a registry provenance line OR has a disposition row (the G-ids it became / ENV = environment-specific, not portable / PA = ProjectArchitect's own / FOLDED into a named G); every `## ` entry of `docs/accelerators.md` is cited by a kernel provenance line OR has a row; unknown ids refused; denominators printed; wired into tools-health after `tool_census --check`; SETUP row + dictionary row (R21/R32). (3) the phase-log mining pass — the 26 logs under `phase-ends/logs/` (30,510 lines) as 22 read-only slices (the three giants split by line range), one Opus agent each in two batches of ≤11, briefed by `.run/P33.5/log-mining/BRIEF.md`: extract ONLY lessons that appear in no cookbook section, decision-log entry, accelerator, kernel, rule, playbook or how-to chapter — with the greps that prove it — into `.run/P33.5/log-mining/<slice>.md` (deliverable early, one JSON line last, R67); my review verifies each against the cited log lines (R14) and banks the real ones as DK-66+ / accelerator entries / decision-log entries, with a harvest table (candidate · verdict · where banked) in this log. (4) Step 6 changed → re-verify by a resume on the run-4 throwaway (`.run/P33.5/kit-dryrun/repo/`, from Step 6); `expected-manifest.txt` +1 (`docs/inherited-record.md`); the judge re-run — xHigh (item 3 is breadth: Opus agents) — verify: `tool_census --check` OK incl. the record; `kit_lint` OK; `kit_coverage` OK with its denominators; the resume PASS + judge PASS; `doc_links --strict` rc 0; render selftest 32/0; every mined candidate banked or dispositioned
- [x] **14.5** *(added 2026-09-07 by Drew — plan amendment 3, P5d, S92: "do all three")* **The record as the third dictionary + the two coverage checks + the phase-log mining pass.** (1) `decomp-architect/corpus/record/` — the how-to (13 chapters), `docs/decision-log.md`, `docs/accelerators.md`, `docs/retrospective.md`, `docs/story.md`, `docs/wave-playbook.md`, `docs/effort-map.md`, `docs/gen3-standards.md`, `docs/gen3-handoff.md`, `phase-ends/DIGEST.md` and every `phase-ends/PhaseEnd_*.md` — VERBATIM behind an authored front page (what each is, how to read it, that the phase logs are NOT in it — R19 — and that item 3 is their distillation), regenerated by `make kit-corpus`, asserted sha1-equal by `tool_census --check`, lint-exempt like the other two corpora; SETUP Step 6 installs the front page (`docs/inherited-record.md`); every "two dictionaries" → three (kit README/tree, ops-setup rows, the methodology, the wiki page, the Tools page, README, the SETUP row). (2) `tools/kit_coverage.py` + `config/kit_coverage_map.tsv` (the authored residue): every R1–R83 is cited by a registry provenance line OR has a disposition row (the G-ids it became / ENV = environment-specific, not portable / PA = ProjectArchitect's own / FOLDED into a named G); every `## ` entry of `docs/accelerators.md` is cited by a kernel provenance line OR has a row; unknown ids refused; denominators printed; wired into tools-health after `tool_census --check`; SETUP row + dictionary row (R21/R32). (3) the phase-log mining pass — the 26 logs under `phase-ends/logs/` (30,510 lines) as 22 read-only slices (the three giants split by line range), one Opus agent each in two batches of ≤11, briefed by `.run/P33.5/log-mining/BRIEF.md`: extract ONLY lessons that appear in no cookbook section, decision-log entry, accelerator, kernel, rule, playbook or how-to chapter — with the greps that prove it — into `.run/P33.5/log-mining/<slice>.md` (deliverable early, one JSON line last, R67); my review verifies each against the cited log lines (R14) and banks the real ones as DK-66+ / accelerator entries / decision-log entries, with a harvest table (candidate · verdict · where banked) in this log. (4) Step 6 changed → re-verify by a resume on the run-4 throwaway (`.run/P33.5/kit-dryrun/repo/`, from Step 6); `expected-manifest.txt` +1 (`docs/inherited-record.md`); the judge re-run — xHigh (item 3 is breadth: Opus agents) — verify: `tool_census --check` OK incl. the record; `kit_lint` OK; `kit_coverage` OK with its denominators; the resume PASS + judge PASS; `doc_links --strict` rc 0; render selftest 32/0; every mined candidate banked or dispositioned — see Log 2026-09-07 Task 14.5
- [ ] **15** Close: real render; tools-health foreground; `doc_links --strict`; `audit_public`; `PhaseEnd_Phase33.5.md` + DIGEST §0/§2 + log archive; left for Drew — Max (Tier 1, WAIT for gate 2)
## Blockers
@@ -738,12 +738,65 @@ has a skeleton with an empty measurement column —, the digest); memories 18 of
in PA's seed, 1 off-project). Recommended three items; Drew: **"do all three, add task 14.5"**. Inserted after task 14 (the wiki
page will describe three dictionaries), before the close. Harness task list 17 → 18 (R28).
## 🛑 SESSION CHECKPOINT — Tasks 0–14 ✓; NEXT = task 15 (the close: real render, tools-health, `doc_links --strict`, `audit_public`, the P7 walk, `PhaseEnd_Phase33.5.md` + DIGEST §0/§2 + the log archive; **Max — Tier 1, prompt Drew (R27) and WAIT for gate 2**)
### 2026-09-07 — Task 14.5 — The record as the third dictionary, the coverage check, the phase-log mining pass, dry-run 5 (xHigh; S92; three commits `0c29c9e16` / `8a698e1b7` / `8594081d8` + this one)
**(1) The record** — `decomp-architect/corpus/record/`: the 13 how-to chapters, `decision-log.md`, `accelerators.md`, `retrospective.md`,
`story.md`, `wave-playbook.md`, `effort-map.md`, `gen3-standards.md`, `gen3-handoff.md`, `phase-ends/DIGEST.md` and every
`PhaseEnd_*.md` (34) — 56 files VERBATIM behind an authored front page (what each is and how to read it; what is NOT there — the
worklogs, R19 — and that the mining pass is their distillation; the vocabulary caveat). `tool_census.py`: `RECORD_SOURCES` +
`record_dest` + the third corpus in plan/write/check → **358 copies + 28 pointers, `--check` OK**; `kit_lint` exempts it; the kit's
SETUP Step 6 gains 2c (`docs/inherited-record.md`, verify line extended); ops-setup "The three dictionaries" + the record row; the
kit README table/tree, the methodology, the wiki page, Home, the Tools page, README, the SETUP row: two → three.
**(2) The coverage check** — `tools/kit_coverage.py` (+ `config/kit_coverage_map.tsv`, the authored residue; a dictionary row; SETUP row;
tools-health after `tool_census --check`): derives R1..R83 from DIGEST §3 (asserted contiguous) and the accelerator entries at
numbered-item granularity (58 then, 59 now), and refuses an entry no registry/kernel `provenance:` line cites unless the map dispositions
it (`G<id>` / `DK-<n>` / `FOLDED:G<id>` / `ENV` / `PA` / `SEED:<file>` / `KIT:<path>` / `RECORD` / `COOKBOOK` / `NOT-PORTABLE`; unknown
ids refused; an un-numbered entry must be cited by its FULL group text). **First run: 26 uncited rules + 21 uncited entries.** Three
were genuine gaps → **DK-66** (a ledger's tie-break, a checker's widening and a blanket commit are part of the instrument — R70/R80/R52),
**DK-67** (the ignore file's directory-form wall — S91 (1)), **DK-68** (a summarised signal is a claim, not ground truth — R14/R66) in a
new kernels section 8 (the museum → 9; the intake's "part 8" → 9); 41 dispositions authored (rules: 15 PA, 3 ENV, folds into G6/G18,
DK-22/66/68, 1 KIT template; accelerators: folds into DK-12/19/20/25/26/31/35/44/45/46/57/61, G38/G66, 1 COOKBOOK). **Now 0 UNCOVERED
on both populations** (rules 57 cited + 26 dispositioned / 83; accelerators 42 cited + 15 dispositioned / 59).
**(3) The mining pass** — `.run/P33.5/log-mining/BRIEF.md` (read-only; the "already banked?" grep protocol over every distilled record
with the greps recorded; deliverable early; one JSON line last); **21 Opus slices over the 26 worklogs** (batch 1 eleven small slices,
batch 2 the giants split by line range: P29 ×4, P30 ×2, P31 ×3, P33) — **777 candidates considered, 634 ALREADY-BANKED (82%), 143 NEW,
30,540 lines read (of 30,510 + overlaps)**; `harvest.py` printed every candidate's cited log line VERBATIM (R14: 0 unparsable, 0 out of
range; every quote read and on-topic); `bank.py` clustered them by theme into **DK-69 … DK-80** (instrument blind spots; verdict
staleness + the health suite; what earns belief; denominators/units/labels; leverage vs tractability + campaign scoping; models and
prompts; the unattended run; agents and the tree; edits that keep their proofs; the search harness + the compiler as evidence;
maintaining the knowledge base; hosts and services) with a GENERATED `provenance:` line per kernel naming every worklog line (142 banked;
1 dropped on the miner's own verdict — `HARVEST_TABLE.md` has all 143 with verdict and home); Coverage "In all: DK-1 … DK-80"; every
DK cite resolves (80/80). `docs/accelerators.md` **"P33.5 S92"** (two accelerators: a distillation ships with a coverage check; the
end-of-project worklog pass recovers the fixed-but-never-generalised — one in five here) — cited by the twelve kernels so the coverage
check stays green; `docs/decision-log.md` **"P33.5 S92"** (R31: the question, the measurement, the pivot, the 82/18 why, the hindsight
path). **Cost (R41):** 21 agents ≈ 4.3M tokens, 8–15 min each, two batches; the coordinator's cost was the brief, the two scripts, the
clustering prose (~20 KB) and the provenance generation. **Evidence tracked** under `.run/P33.5/log-mining/` (dated `.gitignore`
block): BRIEF, 21 slice reports, HARVEST.md, HARVEST_TABLE.md, harvest.py, bank.py.
**(4) Dry-run 5** — Step 6 changed, so a FRESH full run (rule from task 13), not a resume: `repo/` re-initialised (run 4's throwaway
→ `repo-run4/`, its evidence → `*.run4.*`), PA 2.0 + the final kit copied in, `BRIEF-run5.md`, one Opus agent: **PA §1–§9 + kit Steps
0–10, 4 trailer-free commits, `stopped_at: null`, `failed_verify_lines: []`**; judge **PASS 20/20** (manifest 57 == 57 incl.
`docs/inherited-record.md`; G 67; seeds 34/34; probes 9/9 + 5/5; audit OK in the throwaway; tree clean; every guardrail unchanged).
Acted on from its notes: SETUP Steps 6/8 named `pa-overlays.md` without `templates/` → `$KIT/templates/pa-overlays.md`; the agent's
own write-scope slip (two staging files under /tmp, deleted before the verdict — outside the measured guardrails; recorded); the
manifest rule's silence on a file the installer creates and deletes itself (noted, no change). **Two instrument findings of my own
(R40/R57):** my BEFORE snapshot `.strip()`-ed the porcelain output and ate the first line's status space, so a deletion under the dry-run's
own directory (`after.txt`, renamed for run 4) read as `run/…` and escaped the exclusion → the judge's first FAIL was the snapshot's;
re-FILTERED the recorded value (not re-snapshotted); and the judge's reader crashed on an empty dirty set (a one-token line, never seen
in runs 1–4) → tolerated. The second judge pass flagged exactly my six post-run edits (the wording fix + the run-5 rows) — attributed,
committed as part 3a, judged again on the tree the agent left: PASS.
**Verify (literal):** `tool_census --check` OK (358 copies + 28 pointers, 0 gaps) · `kit_coverage` OK (0 UNCOVERED ×2) · `kit_lint` OK
(0 leaks over 436 files; 389 corpus files exempt) · `doc_links --strict` OK · `wiki_render --selftest` 12/12, 32 pages / 0 unlisted ·
`audit_public --paths` OK on the new files · judge PASS 20/20. `make tools-health` NOT run (task 15's gate; it now carries
`kit_coverage`). No build input changed.
**Deviations:** three commits for one task (parts 1/2/3a) + this close commit — each a bank, each before the next command that could
touch the tree (R42); the giants' slices read 30 lines of overlap for context (counted in "lines read", hence 30,540 > 30,510); the
first BEFORE snapshot's parse defect and the judge's empty-value crash are recorded above rather than hidden.
## 🛑 SESSION CHECKPOINT — Tasks 0–14 and 14.5 ✓; NEXT = task 15 (the close: real render, tools-health, `doc_links --strict`, `audit_public`, the P7 walk, `PhaseEnd_Phase33.5.md` + DIGEST §0/§2 + the log archive; **Max — Tier 1, prompt Drew (R27) and WAIT for gate 2**)
### 0. How to use this block
You are a FRESH SESSION (or this one, continuing) that has read `PROJECT_CONTEXT.md`, `phase-ends/DIGEST.md`, `PhaseEnd_Phase31/32/33.md`
and this file, and nothing else (R64). Replay this block verbatim, state phase / done / NEXT / effort, list the rules from the digest
(R1–R83), then WAIT for Drew. Rebuild the harness task list (17 rows incl. task 13.5, R28) marking tasks 0–14 completed and task 15
(R1–R83), then WAIT for Drew. Rebuild the harness task list (18 rows incl. tasks 13.5 and 14.5, R28) marking tasks 0–14 and 14.5 completed and task 15
in progress. Task 15 is **Max** — state the Tier 1 prompt and wait for `/effort max` before starting it.
### 1. Where we are
@@ -751,14 +804,20 @@ in progress. Task 15 is **Max** — state the Tier 1 prompt and wait for `/effor
task 0 = `39d524991`; task 1 = `a0cf302e5`; task 2 = `d06923a06`; task 3 = `5d10a0d12`; task 4 = `9970f1e62`; task 5 = `a0d4ae836`;
task 6 = `6ec4786bd`; task 7 = `21c98ed5a`; task 8 = `ae71efe56`; task 9 = `caefe9872`; S90 checkpoint = `e1463d430`; task 10 =
`83de29c02`; task 11 = `9235800fb`; amendment 1 = `6fb2bc7f8`; task 12 = `4c1d5d9f7`; task 13 = `a291c2b47`; amendment 2 = `3307775e5`;
task 13.5 = `827295e24`; S91-b decision-log entry = `3c4e185fe`; **task 14 = the commit after this block (S92, 2026-09-07)**. No build
input has changed in this phase; the fleet is 218/218 at the Phase-33 close; the last `make tools-health` OK on this tree was at
task 13.5 (`.run/P33.5/tools_health_t135.log`) — task 14 changed docs + the kit + `config/tool_dictionary.tsv` + the generated
`docs/tool-index.md` only, every per-tool check green (task-14 log). `doc_links --strict` rc 0; pending list EMPTY; `kit_lint` OK;
`tool_census --check` OK; render selftest 32 pages / 0 unlisted. **Every plan task except the close is done:** the wiki is the
task 13.5 = `827295e24`; S91-b decision-log entry = `3c4e185fe`; task 14 = `9937fd7e3`; amendment 3 = `ecd1c2f51`; task 14.5 =
`0c29c9e16` (the record + kit_coverage) / `8a698e1b7` (the mining pass banked) / `8594081d8` (dry-run 5) / the commit after this
block (S92, 2026-09-07). No build input has changed in this phase; the fleet is 218/218 at the Phase-33 close; the last `make tools-health` OK on this tree was at
task 13.5 (`.run/P33.5/tools_health_t135.log`) — tasks 14 and 14.5 changed docs + the kit + `config/` (tool_dictionary,
kit_coverage_map) + `tools/` (tool_census, kit_lint, the new kit_coverage) + the Makefile (kit_coverage wired into tools-health after
tool_census --check), every per-tool check green (the task-14 and task-14.5 logs); **task 15's tools-health is the first run that
exercises kit_coverage in the chain.** `doc_links --strict` rc 0; pending list EMPTY; `kit_lint` OK;
`tool_census --check` OK; render selftest 32 pages / 0 unlisted. **The kit now carries THREE dictionaries** (tools 302+28, cookbook, the record 56 files — `tool_census --check` 358 copies), **80
kernels** (DK-66–68 from the coverage check, DK-69–80 from the worklog mining pass: 777 candidates / 634 already banked / 143 new),
`tools/kit_coverage.py` green (83 rules, 59 accelerator entries, 0 uncovered), and **dry-run 5 PASS 20/20** on the final kit.
**Every plan task except the close is done:** the wiki is the
source of truth (five new pages: conventions, firewall, reference index, direction, start-a-new-project; the archive index), 59
docs + 34 tools sunset with indexes, tracked `.run/` 1,086 → 868, the memory store reconciled, the kit complete with the two
dictionaries and DK-65 / the type layer (S91-b) — dry-run-proven four times. **Phase 34's gate is OPEN** (the purge probe PASSED
docs + 34 tools sunset with indexes, tracked `.run/` 1,086 → 868, the memory store reconciled, the kit complete with the three
dictionaries, DK-1–DK-80 and the type layer (S91-b) — dry-run-proven five times. **Phase 34's gate is OPEN** (the purge probe PASSED
2026-09-07, `.run/P33.5/probe_github_s91.log`, untracked). Nothing runs in the background; the headless Ghidra MCP was never used
(no RE work; nothing under `ghidra/` is tracked). The plan file `~/.claude/plans/max-effort-set-plan-encapsulated-muffin.md` is a copy
of the "Approved plan" section below — this file is the one that counts.
@@ -783,8 +842,9 @@ of the "Approved plan" section below — this file is the one that counts.
`git ls-files -ci --exclude-standard .run | wc -l` = 0; `git status --porcelain .run | grep -c '^??'` = 0; the two listings named
in `tools/public_rewrite/untracked_after_rewrite.txt`; `purge_set.txt` unchanged since `80d45b29b` (`git diff 80d45b29b --
tools/public_rewrite/purge_set.txt` empty); `gate_scan.py --all --worktree` PASS (73 s at task 8 — re-run or cite); (4)
`kit_lint` OK + the run-4 judge verdict (`.run/P33.5/kit-dryrun/verdict.json` PASS 10/10, manifest 56 == 56) — the S91-b kit
edits changed no SETUP step, so NO fresh dry-run is owed (a resume on `repo/` is optional, not required); (5) `ls
`kit_lint` OK + `tool_census --check` OK + `kit_coverage` OK + the run-5 judge verdict (`python3 .run/P33.5/kit-dryrun/judge.py`
→ PASS 20/20 on the tree the agent left; `verdict.json` run 5, 0 failed verify lines) — the final kit is dry-run-proven; no
further run is owed unless a SETUP step changes; (5) `ls
~/.claude/projects/-home-musashi-bfm-decomp/memory/*.md | wc -l` == the `MEMORY.md` row count (80 == 80 at task 9; re-count) and
`decomp-architect/memory-seed/` 18 files == its index rows; (6) this item is the PhaseEnd itself.
5. **`phase-ends/PhaseEnd_Phase33.5.md`** — the constitution's format + the narrative axis (Build Log with every file/tool, the
@@ -797,7 +857,11 @@ of the "Approved plan" section below — this file is the one that counts.
(v) re-run `doc_links --strict` after ANY untrack or archive move, not only after a docs edit; (vi) an unattended installer's
manifest is specified as a derivable SET, or two honest agents produce two honest sizes; (vii) a governance system that keeps
transcripts in the repository needs the firewall's class-7 line (a decomp's transcripts quote the target); (viii) a foreign
project's path is named in prose, never as a backticked `docs/…` citation (the checker reads every such citation as this repo's) —
project's path is named in prose, never as a backticked `docs/…` citation (the checker reads every such citation as this repo's);
(ix) a DISTILLATION ships with a coverage check against the populations it claims to distil (kit_coverage: 26 + 21 uncited on its
first run, three genuine gaps); (x) the worklogs get one final read at the end of the project with an "already banked?" grep per
candidate (one in five candidates was banked nowhere); (xi) a snapshot instrument never `.strip()`s a porcelain listing (the run-5
false flag) —
plus the S91-b doctrine as a candidate if Drew wants it as a rule: types are a banking and width lever, the canonical type file
from the first bank; PhaseEnd Changelog v1.32.0 → v1.32.1; **the Plain-English Recap (R18/R25)**; 🛑 Stop Here).
6. **DIGEST §0 + §2 append** (the P33.5 synopsis: what it delivered, the key findings, "R74–R83 ratified at gate 1", the candidates);
@@ -807,8 +871,8 @@ of the "Approved plan" section below — this file is the one that counts.
(that one goes in the task-15 prep commit BEFORE the PhaseEnd is written, so Drew's close commit carries only the close).
8. Final message: the plain-English recap + "PhaseEnd file created. Commit the file and start a new Claude Code session for the
next phase." HARD STOP — do not preview Phase 34 (its seed is `docs/phase34-seed.md`; plan mode, Max, fresh session).
**P6 count:** rules checks were done after tasks 4, 8 and 12; tasks 13, 13.5 and 14 are three since — task 15 opens with the
fourth check ("Rules check — re-read complete. Continuing with task 15.").
**P6 count:** rules checks were done after tasks 4, 8 and 12; tasks 13, 13.5, 14 and 14.5 are FOUR since — task 15 opens with the
check ("Rules check — re-read complete. Continuing with task 15.").
### 3. Standing facts for every task of this phase
- One commit per task, after this file's log line (R8/R42 form); commit by explicit path; no trailers (R5); Drew pushes (R6).