diff --git a/.run/P34/c11/inventory_before.txt b/.run/P34/c11/inventory_before.txt new file mode 100644 index 000000000..93425a1b6 --- /dev/null +++ b/.run/P34/c11/inventory_before.txt @@ -0,0 +1,30 @@ +== .run top-level sizes (largest 30) +/bin/bash: line 1: /usr/bin/du: Argument list too long +== untracked top-level dirs under .run (no tracked file inside) +118M .run/wave_ei/ +118M .run/wave_ek/ +119M .run/wave_fa/ +119M .run/wave_fd/ +121M .run/wave_en/ +121M .run/wave_ep/ +121M .run/wave_es/ +122M .run/wave_eh/ +123M .run/wave_eo/ +123M .run/wave_ex/ +123M .run/wave_ez/ +124M .run/wave_et/ +129M .run/wave_eu/ +129M .run/wave_ev/ +131M .run/wave_eq/ +139M .run/ghidra_export/ +196M .run/c954/ +220M .run/audit/ +220M .run/crack3/ +222M .run/resolver/ +321M .run/rtu_shadow/ +357M .run/wave4/ +592M .run/permuter/ +1.1G .run/public_rewrite/ +4.1G .run/match/ +== disk +/dev/sdd 73G 46G 24G 67% / diff --git a/.run/P34/c11/prune.txt b/.run/P34/c11/prune.txt new file mode 100644 index 000000000..7b47f2832 --- /dev/null +++ b/.run/P34/c11/prune.txt @@ -0,0 +1,33 @@ +== before (2026-09-08) +/dev/sdd 73G 46G 24G 67% / +118M .run/wave_ei +118M .run/wave_ek +119M .run/wave_fa +119M .run/wave_fd +121M .run/wave_en +121M .run/wave_ep +121M .run/wave_es +122M .run/wave_eh +123M .run/wave_eo +123M .run/wave_ex +123M .run/wave_ez +124M .run/wave_et +129M .run/wave_eu +129M .run/wave_ev +131M .run/wave_eq +196M .run/c954 +220M .run/audit +220M .run/crack3 +222M .run/resolver +321M .run/rtu_shadow +357M .run/wave4 +592M .run/permuter +4.1G .run/match +1.1G .run/public_rewrite +6.7M .run/objdiff +== after +old-to-new.tsv +old_tag_tip.txt +352K .run/public_rewrite +keep-set present: 5/5, sig files 223, tracked .run files 952, tracked-but-missing 0 +/dev/sdd 73G 37G 33G 54% / diff --git a/README.md b/README.md index 82d175b36..d3262b0de 100644 --- a/README.md +++ b/README.md @@ -28,6 +28,11 @@ originals; nothing "functionally equivalent" counts. What the repository claims _Generated by `tools/progress.py --readme` from `docs/progress.json` — numbers are never typed by hand._ +![Matched percentage over time — the project timeline](docs/story-timeline.svg) + +The timeline is generated from the committed progress digests by `tools/timeline.py` (never drawn by hand); the dated rows behind +it are in [`docs/story-timeline.md`](docs/story-timeline.md) and the narrative in [`docs/story.md`](docs/story.md). + Two things in those binaries are deliberately **not** our C, and are stated as such: - **1,256 functions of the main executable are Sony's PsyQ library code** (libcd, libgs, libgte, libgpu, libspu/libsnd, diff --git a/docs/SETUP.md b/docs/SETUP.md index e0a338e45..7e7f52a93 100644 --- a/docs/SETUP.md +++ b/docs/SETUP.md @@ -945,10 +945,14 @@ Every script under `tools/` (plus the two report make-targets), grouped by purpo --- -## Backup & repository posture (rules R20/R21) — PUBLIC since Phase 33 +## Backup & repository posture (rules R20/R21) — PUBLIC since 2026-09-08 (Phase 34) The repository is **public** (`https://github.com/Druthulu/BFM-decomp`, AGPL-3.0 for `tools/`+`docs/`, `src/NOTICE.md` -for the game sources, `THIRD_PARTY.md`). **H1 is in force:** no ROM-derived or proprietary bytes are in git or in its +for the game sources, `THIRD_PARTY.md`) — **flipped 2026-09-08** (Phase 34 task 1) after `tools/public_rewrite/probe_github.sh` +passed immediately before (33/33 sampled old hashes gone) and again after (`--after-flip`, incl. the unauthenticated commit pages); +the **`protect-main` ruleset** (id 22564862: no deletion, no force-push of `main`, no bypass actors — edit the ruleset first if a +rewrite is ever needed) guards the published history; the wiki (`docs/wiki/` + the how-to, 32 pages) is live and synced by +`tools/wiki_sync.sh`; the progress card is `https://decomp.dev/Druthulu/BFM-decomp`. **H1 is in force:** no ROM-derived or proprietary bytes are in git or in its history — the retail EXE, the RAM dumps, the Ghidra project, the Sony SDK, the session archive, the extension zips and `brave.exe` were purged from every commit before the flip (`docs/public-flip-runbook.md`), and `tools/audit_public.py` + CI (`.github/workflows/no-rom.yml`) keep it that way. The disc dump (`disks/`), `extracted/`, `build/`, `asm/`, `expected/` diff --git a/docs/accelerators.md b/docs/accelerators.md index dd20dd6c4..e34800120 100644 --- a/docs/accelerators.md +++ b/docs/accelerators.md @@ -892,3 +892,17 @@ lessons that were fixed but never generalised; on this project one in five candi ~4.3M tokens, ~13 min wall each in two batches; the coordinator's cost was the brief, the harvest script, the clustering and the provenance generation. +## P34 S93 (2026-09-08) — the flip day: a third-party step proven through the third party's toolchain, and the public-tree decisions + +The one failure of the flip day was a browser step nobody could have exercised while the repository was private: `docs/decompme-preset.md` +told the owner to paste the regenerated target listing into decomp.me, and decomp.me's assembler refused it (`invalid operands 'li a2,2'`). +The listing is the project's word oracle — nothing on our side assembles it; its bare register names resolve only through `macro.inc` and +its branch targets are absolute addresses — and the replica that had "proven the preset" compared words from the listing's comments, +never the listing itself. **Accelerator: a step that hands a file to a third party is proven through that party's own toolchain, on the +file itself, before the owner's browser session — and the tool that proves it writes the paste** (`verbatim_target_s.py --gas`; +`decompme_replica.sh` steps D and E; the retry matched 100% first time). Two smaller ones from the same day. **A calendar gate is read +the morning after the ticket, not "daily for a week":** the Support purge took one day; the probe passed during the previous sub-phase and +the flip could have opened a day earlier. **Decide what a public tree carries before the flip:** the sent outreach drafts and the +document archive were always going to leave (the owner removed both within hours of going public), and deciding at the consolidation +sub-phase would have spared two untrack commits on a public history; the Archive-index rule that made the removal harmless — name +archived files as paths, never links — held. diff --git a/docs/decision-log.md b/docs/decision-log.md index 8c883fb82..b05b45a2e 100644 --- a/docs/decision-log.md +++ b/docs/decision-log.md @@ -3645,3 +3645,41 @@ register lever (accelerators (16)), and treat "PROVED" as "proved against this l above any mid-campaign harvest's. Both are now the kit's own rules: the coverage check is in the kit's health target, and the record's front page tells the next project that its logs deserve one final read. +## P34 S93 (2026-09-08) — the flip: a calendar gate that opened early, and what a public tree carries + +- **Context and belief.** Phase 33 closed re-chartered because the flip waited on GitHub Support purging the old objects (the Activity + view served every pre-force-push tip). The seed planned a daily probe "until PASS, ~a week", with a delete-and-recreate fallback. The + probe passed on 2026-09-07, during Phase 33.5 — the purge took a day, not a week — so Phase 34 opened with its gate already open and the + fallback never needed. Gate 1 (plan mode, Max) ratified the twelve Phase-33.5 candidates as R84–R95 and added three things the seed did + not have: repository metadata and a `protect-main` ruleset (no force-push, no deletion, no bypass actors) set by Claude on the owner's + word, a GitHub Release for v2.0.0, and the finding that a Phase-1 relic clone of the OLD history still existed on the Windows + filesystem — deleted by Drew during planning, so C11's clone-reset step became "not applicable, with evidence". +- **What failed, once.** The decomp.me browser step failed on its first try: the doc told Drew to paste the regenerated target listing, + which is the project's WORD ORACLE (nothing on our side assembles it — bare register names that resolve only through `macro.inc`, + branch targets as absolute addresses). decomp.me's assembler refused it (`invalid operands 'li a2,2'`). The step had been written for a + private repo and never exercised (R14). The fix went into the tools, not the doc alone: `verbatim_target_s.py --gas` (the assemblable + form), the replica's step D (the paste itself through decomp.me's own `as` wrapper, 26/26 words) and step E (the bundle written from + the proven run); the retry matched 100% first time. Lesson, the same as P33's: a step that talks to a third party is proven through + that party's own toolchain before the owner sits down in the browser. +- **The outward day.** Public at 11:2x MDT; the after-flip probe 33/33 gone; both workflows green on the public repo; decomp.dev + registered (100.00% / 100.00%, hero image); the wiki pushed (32 pages; Claude ran the push on Drew's explicit one-off R6 waiver, the + P33 xsig precedent); the preset request (decompme/decomp.me#2106); the Archipelago note (AegeusEvander/…#1); xsig topics + homepage; + the tools post and Drew's own `#ai` reply in the decomp.me Discord; two Decompedia rows. frogress skipped on measurement: alive, 38 + projects, admin-created, and at 100% with generated badges and decomp.dev live it would add a list row only — pending by name. +- **Two owner decisions about the public tree (the pivot in this entry).** After the notes were sent, Drew took `docs/outreach/` out of + the tree ("just gitignore"), and then the document archive `docs/sunset/` ("remove sunset from the pushed repo … keep the old tools in + the sunset folder for the index, but not the other stuff"). The 33.5 design had anticipated exactly this: nothing ever linked into the + archive, the Archive index names each file as a path, so the removal broke no link — but the folder was still cited as PRESENT in four + wiki pages, and a trial "untrack both" pass measured that the tool census `--check` needs the retired files (a fresh clone would have + gone red), which is why the tools half stayed. Convention going forward (on the conventions page): a retired document gets its + Archive-index row and is deleted in the same commit; history keeps it. No rewrite for either — the drafts and the archive are in the + published history and contain nothing ROM-derived. +- **Scratch.** The untracked `.run/` campaign scratch that the frontier's emptying made worthless — per-function draft trees, permuter + work dirs, wave shards, resolver and rtu shadow trees, the P29/P32 crack scratch — was pruned after sampling each tree (≈9 GB; disk + 46 → 37 GB used); `.run/public_rewrite/` kept only the probe's two inputs (1.1 GB → 352 KB) so the probe stays runnable; every + tracked `.run` file (952) and the keep-set (`obj40`, the sigs, `decompme`, `wiki`, `verbatim_targets`, `ghidra_export`) untouched. +- **Hindsight — the better path.** (1) Exercise every third-party step through that party's own toolchain before the owner's browser + session, and let the tool write the paste (done now for decomp.me; the same rule would have caught it in P33). (2) Decide what a + public tree carries BEFORE the flip, not after: the outreach drafts and the archive were always going to leave; deciding at 33.5 would + have spared two untrack commits on a public history. (3) A "daily probe for a week" should start the day the ticket is filed and be + read the next morning — it passed in one day and the phase could have opened a day earlier. diff --git a/docs/story-timeline.md b/docs/story-timeline.md index a8d0b54a1..edb57199c 100644 --- a/docs/story-timeline.md +++ b/docs/story-timeline.md @@ -90,4 +90,4 @@ | 2026-09-06 | 36 | P32 (v1.31.0) | 218 | 100.0% | 100.0% | 100.0% | 100.0% | 0 | 789 / 2091 | | 2026-09-07 | 61 | P33 (v1.32.0) | 218 | 100.0% | 100.0% | 100.0% | 100.0% | 0 | — | -73 dated rows · phase ticks from the 33 PhaseEnds · the chart: `docs/story-timeline.svg`. +73 dated rows · phase ticks from the 34 PhaseEnds · the chart: `docs/story-timeline.svg`. diff --git a/docs/wiki/Where-the-project-goes-next.md b/docs/wiki/Where-the-project-goes-next.md index 5818ec44d..b4212ee56 100644 --- a/docs/wiki/Where-the-project-goes-next.md +++ b/docs/wiki/Where-the-project-goes-next.md @@ -4,22 +4,22 @@ The matching is finished: 218 binaries rebuild byte for byte and the frontier is The first is short and mostly administrative — the public flip and the close of the second generation. The second is the third generation: making code that *matches* into code a maintainer would call *finished*. -## Phase 34 — the flip and the Gen2 exit +## Phase 34 — the flip and the Gen2 exit (2026-09-08) -The repository's history was rewritten before publication to remove every game-derived byte and force-pushed in -place. The flip itself waits on one thing outside the project's control: GitHub Support purging the old objects, which -the host's Activity view still serves for every pre-force-push tip ([The ROM firewall](The-ROM-firewall.md)). A probe -of the old hashes runs daily and the flip is gated on it printing PASS (or, if the purge stalls, on recreating the -repository under the same name). **It printed PASS on 2026-09-07** — every sampled old hash gone, the live control still -resolving — so the gate is open and Phase 34 can proceed; the probe is run once more immediately before the flip. +The repository's history was rewritten before publication to remove every game-derived byte and force-pushed in place; +the flip waited on GitHub Support purging the old objects, because the host's Activity view still served every +pre-force-push tip ([The ROM firewall](The-ROM-firewall.md)). The probe of the old hashes printed PASS on 2026-09-07 and +again immediately before the flip, and **the repository went public on 2026-09-08**, with a ruleset that forbids +force-pushing or deleting `main` from then on. -After that, in order: the visibility change and the checks that follow it (the probe after the flip, the Actions tab -green, the wiki enabled — GitHub offers wikis only on public repositories on the free plan); the outward actions the -maintainer does in his own words — the decomp.me preset request, a note to the neighbouring Archipelago project whose -RAM map cited this one, the progress boards (decomp.dev, frogress), the wiki push, the tool announcement and the -topics on the released tool repositories; the aftercare (other clones reset to the rewritten history, the rewrite -scratch deleted); and the Phase-34 close at **v2.0.0**, which is the Gen2 exit. The seed for that phase, with every -task, actor and effort level, is [`docs/phase34-seed.md`](../phase34-seed.md). +The same day, in order: the after-flip probe and the Actions runs on the public repository; the progress card on +decomp.dev, read from the workflow's report artifact; this wiki, published from `docs/wiki/` and the how-to; the +decomp.me preset request with a scratch that matches at 100%; the note to the neighbouring Archipelago project; the +tool announcement and the Decompedia rows; and the maintainer's own decisions on what a public tree carries (the sent +outreach drafts and the document archive left it — the Archive index is the record). The phase closes at **v2.0.0**, +the Gen2 exit, with a PhaseEnd that lists by name what is still pending on third parties (the preset's creation, a +reply from Archipelago, frogress). Its seed, with every task, actor and effort level, is +[`docs/phase34-seed.md`](../phase34-seed.md). ## Gen3 — readability, on a byte-exact floor diff --git a/phase-ends/CURRENT_PHASE.md b/phase-ends/CURRENT_PHASE.md index 5ce74c8b4..cec0c723b 100644 --- a/phase-ends/CURRENT_PHASE.md +++ b/phase-ends/CURRENT_PHASE.md @@ -221,7 +221,26 @@ output) · `.run/P34/c11/` (the prune listing with sizes, `git worktree list`, t `audit_public` OK over 6,914 tracked paths · `kit_lint` OK · `make kit-corpus` regenerated (359 copies / 28 pointers). - The wiki pages changed (Reference-index, Archive-index, conventions, layout) → the C11 wiki re-sync (Drew's word). -## 🛑 SESSION CHECKPOINT — PHASE 34 OPEN (S93, 2026-09-08): tasks 0a, 0–6 ✓; task 7 part 1 ✓ (outreach + docs/sunset out of the tree); NEXT = task 7 part 2 (the .run prune, DIGEST/decision-log/SETUP/wiki updates, checks, the wiki re-sync), then 8 (G2 — Tier 1, Max) +### 2026-09-08 — Task 7 (part 2) — C11: the prune, the record, the README timeline (xHigh; S93) +- **Other clones:** none — the relic Windows clone deleted by Drew during planning (verified twice: `ls` → No such file); the C4 archive + mirror's remote re-read = `Druthulu/BFM-decomp-archive.git` (private, the surviving copy). `git worktree list` → one (R77). Runbook §12's + reset recipe: not applicable, with this evidence. +- **The prune (`.run/P34/c11/prune.txt`, `inventory_before.txt`):** the untracked campaign scratch, each tree sampled before deletion + (per-function draft dirs with `.c`/`.o`, permuter work dirs, wave shards, resolver/rtu shadow trees, the P29/P32 crack scratch; newest + 2026-09-05; all superseded by the banked source): `.run/match` 4.1G, `permuter` 592M, `wave4` 357M, 15 × `wave_e*/f*` ≈1.8G, + `rtu_shadow` 321M, `resolver` 222M, `crack3` 220M, `audit` 220M, `c954` 196M, `objdiff` 6.7M; `.run/public_rewrite/` 1.1G → 352K + (only `old-to-new.tsv` + `old_tag_tip.txt` kept, so the probe stays runnable). **Disk 46G → 37G used (33G free).** Keep-set intact: + `obj40`, `decompme`, `wiki`, `verbatim_targets`, `ghidra_export`, 223 sig files; **tracked `.run` files 952, missing 0.** +- **The record:** `phase-ends/DIGEST.md` §0 (PUBLIC 2026-09-08; Phase 34 in progress), §1 (the flip date on the H1 bullet), §4 (the + archive rows are the record); `docs/decision-log.md` "P34 S93 — the flip" (R31); `docs/accelerators.md` P34 S93 (three); `docs/SETUP.md` + posture section (the flip date, the probe, the ruleset id, the wiki, decomp.dev); `docs/wiki/Where-the-project-goes-next.md` §Phase 34 + in the past tense. **README (Drew's ask):** the generated timeline SVG now sits right under the progress block with its provenance line; + `tools/timeline.py` regenerated (its rows were stale against the digests since the 33.5 close) → `timeline --check` fresh. +- Checks: `make audit-digest` OK · `doc_links --strict` OK · `wiki_render --selftest` 12/12, 32 pages (this and part 1's outputs). +- **Open for the wiki:** five wiki pages changed in task 7 (Reference-index, Archive-index, conventions, layout, direction) → a re-sync + push needs Drew's word (R6; the task-5 waiver was one-off). `gh auth logout` stays Drew's last command after the close push. + +## 🛑 SESSION CHECKPOINT — PHASE 34 OPEN (S93, 2026-09-08): tasks 0a, 0–7 ✓ (task 7's wiki re-sync awaits Drew's word); NEXT = task 8 (G2 — Tier 1, Max: tools-health detached, the P7 walk, gate 2, the PhaseEnd v2.0.0) ### 0. How to use this block A fresh session reads CLAUDE.md's load order, replays THIS block verbatim, and resumes at the first unchecked task above. Everything diff --git a/phase-ends/DIGEST.md b/phase-ends/DIGEST.md index fdc61cf34..5a1e5d565 100644 --- a/phase-ends/DIGEST.md +++ b/phase-ends/DIGEST.md @@ -19,8 +19,9 @@ database regenerable from `config/ghidra/`). The whole history was rewritten wit no license asserted over `src/`, NOTICE, THIRD_PARTY, badges, ROM-free CI), the releases (gcc-2.7.2 map, xsig, the permuter driver — offered upstream and declined, the drafter write-up, the decomp.me preset proven through decomp.me's own toolchain), the outreach notes, story, retrospective, wiki (13 pages) + how-to (13 chapters), and the **Gen3 charter** (`docs/gen3-handoff.md`, `docs/gen3-standards.md`) -are written. **The repository is still PRIVATE:** GitHub Support must purge the old objects first (ticket #4736982; the Activity view -publishes every pre-force-push tip, so a clean tree is not enough). **Phase 33.5 CLOSED 2026-09-08 (v1.32.1; `PhaseEnd_Phase33.5.md`):** the docs sub-phase before the flip — the wiki is the single +are written. **The repository went PUBLIC on 2026-09-08 (Phase 34 task 1, Drew)** after the purge probe passed twice — 2026-09-07 and +again immediately before the flip (33 of 33 sampled old hashes gone; Support ticket #4736982 had done its work) — with the `protect-main` +ruleset (no force-push, no deletion) guarding the published history. **Phase 33.5 CLOSED 2026-09-08 (v1.32.1; `PhaseEnd_Phase33.5.md`):** the docs sub-phase before the flip — the wiki is the single source of truth (six new pages incl. the Reference index and the Archive index; 59 documents and 34 tools retired into indexed sunset folders; `doc_links` with six checks), the tracked `.run/` is flip-ready (1,086 → 868 + the phase's own evidence; the two ROM listings untracked under an audit-only rule + a content check), the memory store reconciled (80 == 80; an 18-file seed), and **the day-one decomp @@ -30,8 +31,9 @@ kit-corpus`, asserted equal in tools-health), `tools/kit_coverage.py` (every rul its first run found 26 + 21 uncited, three genuine gaps), and the worklog mining pass (777 candidates / 634 banked / 143 new → DK-69–80). R74–R83 ratified at its gate 1; candidates (i)–(xii) proposed for Phase 34 gate 1. **Phase 34's gate is OPEN: the purge probe PASSED 2026-09-07.** **Phase 34 = the flip + the outward actions + C11 + the v2.0.0 PhaseEnd = Gen2 EXIT** (`docs/phase34-seed.md`). -**Phase 34 OPENED 2026-09-08 (S93; gate 1 in plan mode at Max; R84–R95 ratified; the plan and the live state are in -`phase-ends/CURRENT_PHASE.md`).** **Gen3 opens at Phase 35** — its seed now includes the S91-b types doctrine (R95, the canonical +**Phase 34 IN PROGRESS (opened 2026-09-08, S93; gate 1 in plan mode at Max; R84–R95 ratified; the plan and the live state are in +`phase-ends/CURRENT_PHASE.md`): the flip done, decomp.dev live, the wiki live (32 pages), the decomp.me preset requested, the +Archipelago note sent, the tools announced; `docs/outreach/` and `docs/sunset/` left the tree on the owner's decision.** **Gen3 opens at Phase 35** — its seed now includes the S91-b types doctrine (R95, the canonical type layer). ## 1. Corrections and supersessions of PROJECT_CONTEXT.md recorded in PhaseEnds (P1: the constitution is never edited) @@ -42,7 +44,7 @@ type layer). backups → today: **one commit per completed task after CURRENT_PHASE.md is updated; a bank commits the moment it exists (R42)**. Claude commits; **Drew pushes** (R6); the PhaseEnd + archived log are left uncommitted for Drew's milestone-close commit; no `Co-Authored-By` (R5). -- **H1** was relaxed while private (R1, 2026-06-10 → 2026-09-06) and is **IN FORCE again since Phase 33 C3 (2026-09-06)**: the ROM-derived and proprietary paths left the index and were purged from the whole history before the public flip (`docs/public-flip-runbook.md`); R1 is historical. **R20's backup home** is now the text export `config/ghidra/` (+ `tools/ghidra_rebuild.sh --proof`), `dumps/CHECKSUMS.sha1`, `tools/psyq_CHECKSUMS.sha256`, and the private archive repo `Druthulu/BFM-decomp-archive` (the pre-rewrite history); **never `git clean -x`** (CLAUDE.md fail-safe). +- **H1** was relaxed while private (R1, 2026-06-10 → 2026-09-06) and is **IN FORCE again since Phase 33 C3 (2026-09-06)**: the ROM-derived and proprietary paths left the index and were purged from the whole history before the public flip (`docs/public-flip-runbook.md`); R1 is historical. **The flip itself happened on 2026-09-08 (Phase 34 task 1).** **R20's backup home** is now the text export `config/ghidra/` (+ `tools/ghidra_rebuild.sh --proof`), `dumps/CHECKSUMS.sha1`, `tools/psyq_CHECKSUMS.sha256`, and the private archive repo `Druthulu/BFM-decomp-archive` (the pre-rewrite history); **never `git clean -x`** (CLAUDE.md fail-safe). - **Environment:** all-in-WSL (R2); Ghidra runs **headless** (MCP server via `tools/ghidra_mcp_start.sh` / the SessionStart hook; symbols persist only via `tools/ghidra_apply_symbols.sh`, MCP renames do not); PCSX-Redux is Windows-native bridged over the web API (R11); no `/tmp`, scratch under `.run/` (R12). @@ -355,8 +357,8 @@ the binding text. R44–R63 one-liners are the P31 table, ratified at P32 gate 1 ## 4. Where things live (the doc map a session needs) **The wiki is the source of truth for documentation (Phase 33.5):** `docs/wiki/Reference-index.md` lists every live reference and generated file with how to read it — start there; `docs/wiki/Docs-and-scratch-conventions.md` says where each kind of knowledge goes; -`docs/wiki/The-ROM-firewall.md` is the no-ROM policy; `docs/wiki/Archive-index.md` records every document retired to `docs/sunset/` -(kept for the owner's review; nothing links into it). The files a session touches most: `docs/SETUP.md` (environment, every tool's +`docs/wiki/The-ROM-firewall.md` is the no-ROM policy; `docs/wiki/Archive-index.md` records every document retired at Phase 33.5 +(the archive folder itself left the tree at Phase 34, 2026-09-08 — the rows are the record; nothing ever linked into it). The files a session touches most: `docs/SETUP.md` (environment, every tool's row, commands) · `docs/matching-cookbook.md` §1–§500 (idioms; 3.5 MB — grep by §, never read whole) + `docs/cookbook-index.md` (symptom-keyed, derived, 566 KB — grep) · `docs/gcc-2.7.2-map/` (the compiler map) · `docs/wave-playbook.md` (THE wave procedure; the OpenRouter-era `automation-runbook.md` is archived) · `docs/effort-map.md` · `docs/phase34-seed.md` (the next phase's seed;