chore(phase-34): CLOSE — Gen2 EXIT: the repository public, protect-main, decomp.dev + the wiki live, the decomp.me preset requested at 100%, the outreach sent, the aftercare done (v2.0.0)

This commit is contained in:
Drew T
2026-09-08 14:28:32 -06:00
parent 577da268ea
commit 48170fd7fa
6 changed files with 524 additions and 8 deletions
+8
View File
@@ -0,0 +1,8 @@
wiki_render: 32 pages rendered into /home/musashi/bfm-decomp/.run/wiki/render (386 relative links rewritten)
wiki_sync: changes staged in /home/musashi/bfm-decomp/.run/wiki/BFM-decomp.wiki (32 pages rendered):
M Archive-index.md
M Docs-and-scratch-conventions.md
M Start-a-new-decomp-project.md
To https://github.com/Druthulu/BFM-decomp.wiki.git
be8a6cc..73ab268 master -> master
wiki_sync: pushed — wiki: sync from BFM-decomp 577da268e
@@ -31,9 +31,14 @@ 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 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
**Phase 34 CLOSED 2026-09-08 (v2.0.0 = GEN2 EXIT; `PhaseEnd_Phase34.md`):** one session (S93), 24 commits — the flip after the probe
passed before and after (33/33 gone); the `protect-main` ruleset, description/topics/homepage; decomp.dev (100.00% / 100.00%); the wiki
(32 pages, three syncs); the decomp.me preset request (decompme/decomp.me#2106) on a 100% scratch, after the pasted target's form was
fixed and proven through decomp.me's own `as` (`verbatim_target_s.py --gas`, replica steps D/E); the Archipelago note (#1); the xsig
topics; the tool announcement, Drew's `#ai` reply and two Decompedia rows; the aftercare (~9 GB of scratch pruned, the record updated,
`docs/outreach/` and `docs/sunset/` out of the tree on the owner's decision, `tools/sunset/` kept, the timeline in the README); three
instrument findings fixed (cdecl's scratch dir, two wiki citations, kit_coverage → DK-81 + twelve dispositions); tools-health OK on run 5.
**Pending by name:** the preset's creation by decomp.me's maintainers, a reply from Archipelago, frogress. Candidates (a)–(d) proposed. **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)
@@ -152,6 +157,20 @@ write-up, `decompme-preset.md` + `tools/decompme_replica.sh` (decomp.me = old-gc
story, `mine_hindsight.py` + retrospective, the wiki + how-to + `wiki_render`/`wiki_sync`. Block G: `gen3-handoff.md`, `gen3-standards.md`,
`phase34-seed.md`. Findings: GitHub's Activity view publishes every pre-force-push tip (the flip must wait for the purge); the probe was
a writer (R57). Rules: R65–R73 ratified at gate 1; candidates (a)–(j) proposed for P34 gate 1.
**P34 (2026-09-08, v2.0.0) THE FLIP — GEN2 EXIT.** One session (S93) / 24 commits. Gate 1 (plan mode, Max) ratified R84–R95 and added
metadata, a ruleset and a Release; the preflight found (and Drew deleted) a Phase-1 relic clone of the old history. The probe PASSed
before and after the flip; Drew made the repository public; Claude set description/7 topics/homepage and the `protect-main` ruleset
(no force-push, no deletion, no bypass). Outward, all the same day: decomp.dev registered and verified (100.00% / 100.00%, hero image);
the wiki pushed three times on one-off R6 waivers (32 pages); the decomp.me scratch at 100% + the preset request #2106 + the manual
search closing ledger row 14 — after the first paste FAILED (`invalid operands 'li a2,2'`: the doc named the word-oracle listing, never
assembled anywhere) and the tools were fixed: `verbatim_target_s.py --gas`, `decompme_replica.sh` steps D (the paste through decomp.me's
`as`, 26/26) and E (the bundle); the Archipelago issue #1; xsig topics + homepage; the tools post, Drew's `#ai` reply, two Decompedia
rows; frogress skipped on measurement. C11: no other clone; ~9 GB of untracked scratch pruned (46 → 37 GB); `.run/public_rewrite/` kept
to the probe's inputs; DIGEST/decision-log/accelerators/SETUP/wiki updated; the generated timeline in the README; `docs/outreach/` and
`docs/sunset/` untracked on Drew's decisions (the Archive index is the record; `tools/sunset/` kept for the index). The close chain went
red three times on the day's own edits — cdecl's probe dir under the pruned tree (a refusal misgraded as four defects), two wiki
citations of untracked paths, R84–R95 + the new accelerators entry uncited in the kit (→ DK-81 + twelve map rows) — and was OK on run 5;
one commit claimed "green" from a masked exit code and was named in the next. Rules: R84–R95 ratified; candidates (a)–(d) proposed.
**P33.5 (2026-09-08, v1.32.1) THE WIKI AS SOURCE OF TRUTH + THE DAY-ONE DECOMP KIT (sub-phase).** 3 sessions (S90–S92) / 26 commits.
Six wiki pages (conventions, the ROM firewall with the copyable `.gitignore` fence, the Reference index — the only wiki→`docs/` link site —,
the direction page, Start-a-new-decomp-project, the Archive index); six documents folded into the wiki/how-to; 59 docs + 34 tools sunset
@@ -353,6 +372,11 @@ the binding text. R44–R63 one-liners are the P31 table, ratified at P32 gate 1
proven by the bytes at bank time, no duplicate definition or raw address cast banked** (the S91-b doctrine; the binding Gen3 type
rule). Phase 17 measured the codegen half (0/10/2, identical bytes) and the project underweighted the other: 1,232 definitions,
143 raw casts, a reconcile ladder built to repair what the discipline prevents.
**Phase 34 proposed candidates (a)–(d) for Phase 35 gate 1** (the table in `PhaseEnd_Phase34.md` §Rules: a scratch prune is an
instrument change — re-run every tool that writes under it; "green" is read from a check's EXIT CODE with `pipefail` in every chain,
never from its last line; 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 proving tool writes the paste; what a public tree carries is decided before the flip, and a
retired document gets its Archive-index row and is deleted in the same commit).
## 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
@@ -0,0 +1,222 @@
# PhaseEnd — Phase 34: The flip and the Gen2 exit — the repository public, the boards and the wiki live, the outreach sent, the tree shaped for readers
**Date:** 2026-09-08 · **Project Version:** 2.0.0 · **Phase Status:** Complete (milestone confirmed by Drew, gate 2 — 2026-09-08, "milestone met, write the phaseend") · **Generation:** Gen2 **EXIT** (the 25th and last phase of the arc: 8→…→33→33.5→**34**)
> Chartered by `docs/phase34-seed.md` (the flip-gated remainder of Phase 33, re-chartered 2026-09-07). Ran **one session (S93,
> 2026-09-08)** and **24 commits** (`c9dffdcfd..577da268e`; baseline `eb342dc9f`, Drew's Phase-33.5 close). The granular trail —
> every check's literal output, the three instrument findings, every owner decision in its own words — is at
> **`phase-ends/logs/Phase34.md`** (R19, on demand). Owner decisions (Drew): gate 1 (plan mode, Max: R84–R95 ratified; metadata and the
> ruleset set by Claude on his word; a GitHub Release; "no other clone" — corrected by the preflight, see Deviations); the flip itself;
> the compiler choice on decomp.me; three one-off R6 waivers for the wiki repository ("sync it"); frogress skipped; `docs/outreach/`
> and `docs/sunset/` out of the tree, `tools/sunset/` kept; the timeline in the README; the `#ai` reply in his own words; the xsig v2
> direction recorded for Gen3; gate 2.
## Build Log
**The phase in one line:** the purge probe passed twice, Drew flipped the repository public, and in the same day the after-flip
checks, the metadata and the `protect-main` ruleset, the decomp.dev card, the wiki (32 pages), the decomp.me preset request with a
100% scratch, the Archipelago note, the tool announcement and two Decompedia rows, and the aftercare (9 GB of dead scratch pruned,
the record updated, two folders taken out of the public tree on the owner's decision) were done — with three instrument defects
found and fixed on the way, and the close health chain green on its fifth run.
**Files created/changed and complete — do not recreate** (category summaries; the per-commit list is `git log eb342dc9f..577da268e`
and the archived log):
- **Governance and record:** `phase-ends/CURRENT_PHASE.md` (→ `phase-ends/logs/Phase34.md`); `phase-ends/DIGEST.md` §0/§1/§3/§4 (R84–R95 in
full; the flip date; the archive rows as the record); `docs/decision-log.md` "P34 S93 — the flip" (R31); `docs/accelerators.md` P34 S93
(three); `docs/SETUP.md` (the posture section: flip date, probe, ruleset id 22564862, wiki, decomp.dev; §6.5 outcome; ledger row 14
CLOSED; the E2 SENT bullet; the D1–D3 outcome; two new/extended tool rows; the retired-tools heading); `docs/gen3-handoff.md` §7
(**xsig v2**: 1-to-1 first, then the sequence tier, the structural family and atlas cousins, returning the matched tier and the
difference); `.gitignore` (the `.run/P34/` evidence allowlist; `/docs/outreach/*`; `/docs/sunset/*` — contents form, R84).
- **The public surface:** `README.md` — the generated timeline SVG under the progress block with its provenance line; the wiki pages
`Archive-index.md`, `Docs-and-scratch-conventions.md`, `Reference-index.md`, `Repository-layout.md`, `Where-the-project-goes-next.md`
(the public tree's shape; the archive rule is now "an Archive-index row, then delete in the same commit"), `Start-a-new-decomp-project.md`
(DK-1…DK-81); `docs/history/README.md`; `docs/story-timeline.md/.svg` regenerated (73 rows). **Removed from the tree:** `docs/outreach/`
(2 files, sent) and `docs/sunset/` (60 files, the reviewed archive) — no rewrite; the history at v1.32.1 keeps them; `tools/sunset/`
(35 files) stays for the tool index.
- **Tools (each with its SETUP row, R21; the kit corpus regenerated, `tool_census --check` 0 gaps):** `tools/verbatim_target_s.py --gas`
(the ASSEMBLABLE target form: `$`-registers, `.L<addr>` labels, symbol names for external jumps, `.set noat`/`noreorder`, no `.include`);
`tools/decompme_replica.sh` steps **D** (the paste itself through decomp.me's own `as` wrapper — fed on STDIN — linked at the address,
26/26 words) and **E** (Drew's bundle written from the proven run); `tools/cdecl.py` (`--audit` creates its scratch dir and REFUSES,
never misgrades, when the gcc adjudication cannot run); `tools/doc_links.py` DEFAULT list; `config/tool_dictionary.tsv`;
`config/kit_coverage_map.tsv` (twelve dispositions for R84–R95, each naming the kernel or rule that carries it).
- **The kit:** `decomp-architect/corpus/decomp-kernels.md` **DK-81** (the flip day: a third-party step proven through the third party's
toolchain on the pasted file; the public tree decided before the flip; a calendar gate read the next morning; a scratch prune is an
instrument change); `decomp-architect/README.md`; the corpus copies (tools, record) regenerated by `make kit-corpus`.
- **Evidence (`.run/P34/`, allowlisted, text only):** `probe/pre_flip.log`, `probe/after_flip.log`; `flip/` (the repo JSON before/after,
the curl codes, the metadata and ruleset API outputs, the runs, the gate-2 re-check); `outward/` (the wiki dry-runs and pushes, the
scratch/issue checks, the decomp.dev page, the frogress checks, the xsig API output, the Decompedia verification, the replica run after
the fix); `c11/` (the inventory, the prune with sizes, the cdecl and kit_coverage proofs); `tools_health_close.log` (run 5, 5,917 lines).
- **GitHub, outside the tree:** `Druthulu/BFM-decomp` public (description, 7 topics, homepage = the wiki; `has_wiki`; the `protect-main`
ruleset id 22564862, no bypass actors); the wiki repository (`BFM-decomp.wiki`, three syncs, last `73ab268`); `Druthulu/xsig` (7 topics,
homepage); the decomp.dev project (hero image set by Drew); decompme/decomp.me#2106; AegeusEvander/Brave-Fencer-Musashi-AP-World#1;
the Decompedia PlayStation pages (a tools row and a projects row, edited in-site by Drew).
**Tools/packages installed:** none (no apt/pip; no new external tool). Agents: none — every step this phase was the owner's action or a
deterministic check.
**Verification results (literal, at close — S93, HEAD `577da268e`, tree clean, 4 commits ahead of `origin/main` for Drew's push):**
- **The gate-2 live re-check (20:18 UTC, `.run/P34/flip/gate2_recheck.txt`):** `gh api repos/Druthulu/BFM-decomp` → `"private":false,
"visibility":"public","has_wiki":true,topics 7,homepage ".../wiki"`; rulesets → `protect-main` id 22564862 `enforcement:active`; the
archive repo → `"private":true`; xsig → 7 topics + homepage; unauthenticated **200** for the repo page, the raw badge JSON, the wiki's
Reference index, the decomp.dev page, issue #2106 and issue #1 (the repo page, the badge and the wiki were **404** on the morning's
private controls); `gh run list` → `no-rom success` and `progress success` on `a13d1cd9a` (the public repo; every push this phase green).
- **The probe:** before the flip `probe: PASS — every sampled old hash is gone` (33 `gone` of 33, control OK, exit 0, no working-repo
warning); after the flip `--after-flip` PASS 33/33 including the unauthenticated 7-char commit pages (`.run/P34/probe/*.log`).
- **`make tools-health` (run 5, 480 s): `tools-health: OK — sigs fresh; corpus(+resident) + cdecl + binaries + report(lint+dedup) +
cookbook-index all green.`** audit-binaries 218/218 · corpus 0 PHANTOM + 0 TRUNCATED · cdecl ALL ORACLES GREEN (unparsed 4 → NOT-C 4,
DEFECTS 0; gcc 4,777 accepted / 0 rejected) · dedup 2,220 / 0 · audit-digest OK (13,492,113 / 13,492,113; 90,984 / 90,984) ·
progress + timeline fresh (73 rows) · `sdk-dual` OK (main `143dbb89f34491258bbc27810d0a12ec8b43a8dd` with and without the SDK) ·
doc_links 56 documents / 454 links / 0 pending / 0 broken / coverage 63 of 63 · gccmap_cites OK · ghidra_roster OK (6) · tool_census
OK (359 + 28, 0 gaps) · kit_lint OK · kit_coverage OK (rules R1..R95 0 uncovered; 60 accelerator entries 0 uncovered) ·
split_indicator 218 OK · xsig tests OK (8). **No build input changed in this phase; R22 was not owed** — the fleet's 218/218 from the
Phase-33 close stands and is asserted by the digest checks.
- **decomp.me:** the replica after the fix → A BYTE-IDENTICAL 26/26 · B (control) 26/26 · C1/C2 identical text · **D the pasted target
BYTE-IDENTICAL 26/26** · E bundle written → PASS; Drew's scratch <https://decomp.me/scratch/mIu4d> at **100% / score 0**; the manual
search closed ledger row 14 (no other BFM scratch exists).
- **The wiki:** three syncs (`fec3777..75c17d0`, `..be8a6cc`, `..73ab268`), 32 pages, the live pages verified unauthenticated (200; 0
relative `.md` links left; the last sync's page shows DK-81).
- **The prune:** disk 46 GB → 37 GB used (33 GB free); keep-set intact (`obj40`, `decompme`, `wiki`, `verbatim_targets`,
`ghidra_export`, 223 sig files); tracked `.run` files 952, missing 0; `.run/public_rewrite/` 1.1 GB → 352 KB (the probe's two inputs).
- The headless Ghidra MCP (never used this phase — no RE work) stopped via the sentinel at the close (R23; the archived log's last entry
quotes the stop); nothing under `ghidra/` is tracked.
**Milestone achieved (confirmed by Drew, gate 2 — 2026-09-08):** all three items of the seed's milestone, on their literal reading —
(1) public, the old hashes gone, CI green on the public repo, the wiki live, the archive repo private, the ruleset active, B3's proof
standing; (2) every outward action done with its URL or **pending by name** (P9): the decomp.me preset's creation by its maintainers,
a reply from the Archipelago world, frogress (skipped; the request + push recipe recorded); (3) C11 done, this PhaseEnd written with
the DIGEST append and the log archived, left for Drew's close commit, the `v2.0.0` tag and the Release. **Gen2 EXIT.**
**Next:** **Phase 35 — Gen3 opens** (readability on a byte-exact floor). Open a fresh session in **plan mode, Max** (Tier 1) from
`docs/gen3-handoff.md` + `docs/gen3-standards.md`: the order of work is pins off (44,243 `register … __asm__` pins, most of which
Phase 32 showed come off byte-identical once the source shape is right) → the 5,147 macro bodies into shared C → struct unification
(1,232 definitions → one per shape; the 143 raw casts; R95) → names with evidence → formatting — every step gated by the 218 hashes.
Gen3's opening phases also inherit: the kit's split into its own repository (with the installable health-chain snippet and the
ProjectArchitect findings recorded at 33.5), the xsig v2 direction (gen3-handoff §7), and the three pending outward items above.
## Roadmap delta (what Phase 34 changed about the road ahead)
- **Gen2 is closed at v2.0.0.** The constitution's Gen2 goals (overlays and engine at scale; go public under AGPL with CI and progress
tracking) are met literally: 218 binaries byte-identical, the repository public with a ROM-free CI, decomp.dev live. The gen2-roadmap's
two-repo mirror stayed superseded; the in-place flip with the full rewritten history is what shipped.
- **The public tree is smaller than the private one by design, and the rule is written:** a retired document gets its Archive-index row
and is deleted in the same commit (history keeps it); sent outreach drafts do not live in the tree; retired tools stay for the index.
- **Doctrine that outlives the phase:** 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 (DK-81); a scratch prune is an instrument change; "green" is read from an exit code,
never a last line; a calendar gate is read the morning after the ticket.
- **Scale, honestly (R41):** the seed priced this phase at 1–2 sessions; it took **one session and 24 commits**, because every outward
action was Drew's and each took minutes; the day's cost was the three instrument findings (≈2 h of the session) and one browser step
that failed on its first try.
## Deviations
| Item | Plan (gate-1 plan) | Actual | Reason |
|---|---|---|---|
| "No other clone of the old history" (decision 3) | none | the preflight found a Phase-1 relic clone at `/mnt/z/Storage/git/BFM-decomp` (11 commits, 2026-06-13, old lineage); Drew deleted it during planning; verified gone | the owner's memory vs. the filesystem — the plan recorded both |
| E1 (decomp.me) | six browser steps, the listing pasted | the first scratch FAILED to assemble (`invalid operands 'li a2,2'`); tools fixed and the paste proven through decomp.me's own `as` (26/26) before the retry, which matched 100% first time | the doc's step had never been exercisable while private (R14); the listing was the word oracle, never assembled anywhere |
| The seed's "regenerate the bundle with `decompme_replica.sh`" | true | was false — nothing wrote the bundle; the replica's step E now does | a claim written ahead of the tool |
| frogress (task 4) | slug + key + push | **skipped** on Drew's word after measurement (alive, 38 projects, admin-created; at 100% with decomp.dev live it adds a list row) — pending by name with the recipe | owner's decision |
| Task 6 fork deletion | `gh repo delete` | already gone (API 404, 0 forks) — recorded, not redone | done before the phase |
| The public tree (not in the plan) | — | `docs/outreach/` and `docs/sunset/` untracked and ignored; `tools/sunset/` kept; five wiki pages and the conventions rewritten; a trial "untrack both" measured that the census needs the retired files and was reverted for the tools half | Drew's two decisions after the flip (P5d, recorded) |
| The README (not in the plan) | — | the generated timeline SVG under the progress block; `timeline.py` regenerated (its rows had gone stale at the 33.5 close) | Drew's ask |
| `gh auth logout` | in C11 (Claude) | moved to Drew's last command after the tag/Release push | the Release and the tag verification need `gh` after C11 |
| The wiki pushes | Drew runs `--push` | Claude ran three pushes, each on Drew's explicit "sync it" — one-off R6 waivers for the wiki repository only | the P33 xsig/permuter precedent; R6 unchanged for `BFM-decomp` |
| The close health chain | one run | five runs: red at cdecl (the prune removed its scratch dir), red at doc_links (two citations of untracked paths), red at kit_coverage (R84–R95 and the new accelerators entry uncited), a fourth killed, the fifth green | each a real finding; the fixes are in the tools and the map |
| Commit hygiene | R66 | one commit (`81ec81945`) claims "kit_coverage green" while three rows were still refused (a `tail` masked the exit code); named and fixed in the next commit | recorded as candidate (b) |
## What we believed, what failed, and what we would do sooner (for the retrospective; detail in `docs/decision-log.md` P34 S93)
- **Believed:** the decomp.me step was ready — "paste the regenerated `.s` without its first line". **It failed on the first try:** the
file was the comparison oracle, not an assemblable target, and the replica had proven the compile, never the paste. **Sooner:** prove
every third-party step through the third party's own toolchain, on the exact file, and let the proving tool write the paste (done now).
- **Believed:** the flip would wait about a week on GitHub Support. **It passed in a day**, during the previous sub-phase. **Sooner:**
read a calendar gate the morning after the ticket.
- **Believed:** the tree that passed the flip audit was the tree to publish. **Within hours the owner took two folders out** — the sent
outreach drafts and the reviewed archive — and a trial removal of the tools archive measured a fresh clone going red. **Sooner:** decide
the public tree's contents at the consolidation sub-phase; the Archive-index rule (paths, never links) made the late removal harmless.
- **Believed:** pruning untracked scratch was housekeeping. **It was an instrument change:** one audit wrote its probe under the pruned
tree, and its bare `except` turned the refusal into four "parser defects"; two more red chains followed from citations and coverage
of the day's own edits. **Sooner:** after any prune, re-run every tool that writes under it; and read every check's exit code — one
commit here claims "green" from a masked pipeline (named in the log, fixed in the next commit).
- **Cost:** no agents, no model tokens beyond the coordinator; the phase's expense was the five health runs (≈40 min wall) and the browser
round-trips, and it bought a public repository whose every published number, page and card is generated or verified from the tree.
## Commit Message
```
(Phase 34 landed as 24 commits c9dffdcfd..577da268e, 2026-09-08 (S93). This close = the archived log + this PhaseEnd + the DIGEST
update + the kit's record copies, Drew's milestone-close commit, then the v2.0.0 tag and the Release.)
chore(phase-34): CLOSE — Gen2 EXIT: the repository public (probe 33/33 gone before and after), protect-main, decomp.dev + the wiki
live, the decomp.me preset requested at 100%, the Archipelago note and the tool announcement sent, the aftercare done (v2.0.0)
- PhaseEnd_Phase34.md written; CURRENT_PHASE.md archived to phase-ends/logs/Phase34.md (R19); DIGEST §0/§2/§3 appended (step 3b)
- one session (S93): tasks 0a–8; the flip + metadata + ruleset; E1 with the paste form fixed and proven (verbatim_target_s --gas,
replica steps D/E); E2; D3 (decomp.dev; frogress pending by name); the wiki ×3 syncs; xsig topics; the posts + Decompedia rows;
C11 (~9 GB pruned, the record updated, docs/outreach + docs/sunset out of the tree on the owner's decision); DK-81 + the coverage map
- close: tools-health OK (run 5, 5,917 lines); the gate-2 live re-check all 200/false/true/active; no build input changed (R22 not owed)
- rules: R84–R95 ratified at gate 1; candidates (a)–(d) proposed for Phase 35 gate 1
- v1.32.1 -> v2.0.0
```
## Rules Added This Phase
**Ratified at gate 1 (2026-09-08):** **R84–R95** (the PhaseEnd_Phase33.5 candidates (i)–(xii)); full text in `phase-ends/DIGEST.md` §3.
**Candidates recorded in the log, for Drew to accept, modify or reject at Phase 35 gate 1 (P10):**
| Rule | Reason |
|---|---|
| **(a) A scratch prune is an instrument change:** every tool that writes under a pruned tree is re-run before the prune is called done. | `cdecl --audit` wrote its probe under the pruned `.run/audit/`; the refusal read as four parser defects (run 1 of the close chain). |
| **(b) "Green" is read from a check's EXIT CODE, never from its last line; every chain sets `pipefail`.** | Commit `81ec81945` claims "kit_coverage green" while three rows were refused — `tail` masked the status. |
| **(c) 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 proving tool writes the paste.** | The decomp.me listing failed to assemble on the first try; the replica had proven the compile, not the paste (DK-81). |
| **(d) What a public tree carries is decided before the flip, and a retired document gets its Archive-index row and is deleted in the same commit — history keeps it.** | Two folders left the tree within hours of going public; the paths-never-links rule made it harmless, the timing cost two commits on a public history. |
*(Techniques stay in the tools and their SETUP rows; strategy in `docs/decision-log.md` (R31) and `docs/accelerators.md`; the
portable form in the kit's DK-81.)*
## PhaseEnd Changelog
**v1.32.1 → v2.0.0 — Phase 34 complete; Gen2 EXIT.** The purge probe passed before and after the flip, and on 2026-09-08 the owner
made the repository public with a ruleset that forbids rewriting the published history. In one session the outward half of Phase 33
was done: the decomp.dev progress card, the wiki published from the tree (32 pages), the decomp.me preset request backed by a scratch
that matches at 100% (after the pasted target's form was fixed and proven through decomp.me's own assembler), the note to the
Archipelago project, the tool announcement, the Decompedia rows, and the aftercare — 9 GB of dead scratch pruned, the record updated,
the outreach drafts and the reviewed document archive taken out of the public tree on the owner's decision, the generated timeline
placed in the README. Three instrument defects surfaced and were fixed in the tools and the coverage map; the close health chain is
green on all rungs. R84–R95 ratified; four candidates proposed. Gen3 opens at Phase 35 with the readability charter, the kit split, the
xsig v2 direction and three outward items pending on third parties.
## Plain-English Recap
Today the project went public. First the probe confirmed, twice, that GitHub had really purged the old copies of the game files from
its servers; then Drew flipped the switch, and a rule was set so nobody can rewrite the published history by accident. The rest of the
day was the public face: the progress card on decomp.dev, the wiki, a request to decomp.me for a compiler preset backed by a function
that matches perfectly on their site, a note to the fan project that had shared memory addresses with us, an announcement of the small
tool we released, and rows on the community's wiki. One step failed the first time: the file we told Drew to paste into decomp.me was
our own comparison listing, which nothing had ever tried to assemble, so we fixed the tool to produce a real assemblable file and to
prove it through decomp.me's own assembler before anyone pastes it again. Cleaning up afterwards, we removed nine gigabytes of old
scratch, and that broke one of our own checks, which had been quietly writing into the deleted folder; it and two smaller findings
were fixed and the full health check passed. Drew also decided what the public tree should not carry: the drafts of notes already sent
and the archive of retired documents, both still in the history. The repository is public, every number on it is generated from the
source, and the second generation of the project is finished at version 2.0.0. The third generation, making the matched code readable,
starts in the next session.
## 🛑 Stop Here
PhaseEnd written; `CURRENT_PHASE.md` archived → `phase-ends/logs/Phase34.md` (R19, via `git mv`); `phase-ends/DIGEST.md` §0/§2/§3
appended (step 3b); the kit's record corpus regenerated (`make kit-corpus`) so tools-health stays equal — **all left uncommitted for
Drew's milestone-close commit** (R6 gate-2 sign-off). The Phase-34 work is committed across the session (`c9dffdcfd..577da268e`; four
commits not yet pushed). The headless Ghidra MCP was stopped via the sentinel (R23); nothing under `ghidra/` is tracked. **Drew, in
order, from the repository root:**
```
git add phase-ends/PhaseEnd_Phase34.md phase-ends/logs/Phase34.md phase-ends/DIGEST.md decomp-architect/corpus/record
git commit -m "chore(phase-34): CLOSE — Gen2 EXIT: the repository public, protect-main, decomp.dev + the wiki live, the decomp.me preset requested at 100%, the outreach sent, the aftercare done (v2.0.0)"
git tag -a v2.0.0 -m "v2.0.0 — Gen2 exit: 218 binaries rebuild byte-identical from C; the repository public"
git push origin main --tags
gh release create v2.0.0 --title "v2.0.0" --notes "<your words>"
gh auth logout
```
Facts for the Release notes, in your words (R83): 218 binaries byte-identical from C (main + resident + 138 location overlays + 78
modules); 363,214 functions, 13,492,113 instructions, main game-code 45,150 / 45,150; 1,256 Sony PsyQ library objects linked and five
hand-written assembly routines kept verbatim, both stated; builds from your own disc (`make disc-extract`, `make bootstrap`); AGPL-3.0
for tools and docs, no license asserted over the game sources; the wiki, the how-to, the progress card at decomp.dev; the standards
page on names and on how the AI was used. Gen2 is closed — do **NOT** start Phase 35 here. Start a **fresh session** (effort **Max**,
**plan mode**) for **Phase 35 — Gen3 opens**, planning from `docs/gen3-handoff.md` and `docs/gen3-standards.md`. Keep this file forever.
+27 -3
View File
@@ -31,9 +31,14 @@ 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 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
**Phase 34 CLOSED 2026-09-08 (v2.0.0 = GEN2 EXIT; `PhaseEnd_Phase34.md`):** one session (S93), 24 commits — the flip after the probe
passed before and after (33/33 gone); the `protect-main` ruleset, description/topics/homepage; decomp.dev (100.00% / 100.00%); the wiki
(32 pages, three syncs); the decomp.me preset request (decompme/decomp.me#2106) on a 100% scratch, after the pasted target's form was
fixed and proven through decomp.me's own `as` (`verbatim_target_s.py --gas`, replica steps D/E); the Archipelago note (#1); the xsig
topics; the tool announcement, Drew's `#ai` reply and two Decompedia rows; the aftercare (~9 GB of scratch pruned, the record updated,
`docs/outreach/` and `docs/sunset/` out of the tree on the owner's decision, `tools/sunset/` kept, the timeline in the README); three
instrument findings fixed (cdecl's scratch dir, two wiki citations, kit_coverage → DK-81 + twelve dispositions); tools-health OK on run 5.
**Pending by name:** the preset's creation by decomp.me's maintainers, a reply from Archipelago, frogress. Candidates (a)–(d) proposed. **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)
@@ -152,6 +157,20 @@ write-up, `decompme-preset.md` + `tools/decompme_replica.sh` (decomp.me = old-gc
story, `mine_hindsight.py` + retrospective, the wiki + how-to + `wiki_render`/`wiki_sync`. Block G: `gen3-handoff.md`, `gen3-standards.md`,
`phase34-seed.md`. Findings: GitHub's Activity view publishes every pre-force-push tip (the flip must wait for the purge); the probe was
a writer (R57). Rules: R65–R73 ratified at gate 1; candidates (a)–(j) proposed for P34 gate 1.
**P34 (2026-09-08, v2.0.0) THE FLIP — GEN2 EXIT.** One session (S93) / 24 commits. Gate 1 (plan mode, Max) ratified R84–R95 and added
metadata, a ruleset and a Release; the preflight found (and Drew deleted) a Phase-1 relic clone of the old history. The probe PASSed
before and after the flip; Drew made the repository public; Claude set description/7 topics/homepage and the `protect-main` ruleset
(no force-push, no deletion, no bypass). Outward, all the same day: decomp.dev registered and verified (100.00% / 100.00%, hero image);
the wiki pushed three times on one-off R6 waivers (32 pages); the decomp.me scratch at 100% + the preset request #2106 + the manual
search closing ledger row 14 — after the first paste FAILED (`invalid operands 'li a2,2'`: the doc named the word-oracle listing, never
assembled anywhere) and the tools were fixed: `verbatim_target_s.py --gas`, `decompme_replica.sh` steps D (the paste through decomp.me's
`as`, 26/26) and E (the bundle); the Archipelago issue #1; xsig topics + homepage; the tools post, Drew's `#ai` reply, two Decompedia
rows; frogress skipped on measurement. C11: no other clone; ~9 GB of untracked scratch pruned (46 → 37 GB); `.run/public_rewrite/` kept
to the probe's inputs; DIGEST/decision-log/accelerators/SETUP/wiki updated; the generated timeline in the README; `docs/outreach/` and
`docs/sunset/` untracked on Drew's decisions (the Archive index is the record; `tools/sunset/` kept for the index). The close chain went
red three times on the day's own edits — cdecl's probe dir under the pruned tree (a refusal misgraded as four defects), two wiki
citations of untracked paths, R84–R95 + the new accelerators entry uncited in the kit (→ DK-81 + twelve map rows) — and was OK on run 5;
one commit claimed "green" from a masked exit code and was named in the next. Rules: R84–R95 ratified; candidates (a)–(d) proposed.
**P33.5 (2026-09-08, v1.32.1) THE WIKI AS SOURCE OF TRUTH + THE DAY-ONE DECOMP KIT (sub-phase).** 3 sessions (S90–S92) / 26 commits.
Six wiki pages (conventions, the ROM firewall with the copyable `.gitignore` fence, the Reference index — the only wiki→`docs/` link site —,
the direction page, Start-a-new-decomp-project, the Archive index); six documents folded into the wiki/how-to; 59 docs + 34 tools sunset
@@ -353,6 +372,11 @@ the binding text. R44–R63 one-liners are the P31 table, ratified at P32 gate 1
proven by the bytes at bank time, no duplicate definition or raw address cast banked** (the S91-b doctrine; the binding Gen3 type
rule). Phase 17 measured the codegen half (0/10/2, identical bytes) and the project underweighted the other: 1,232 definitions,
143 raw casts, a reconcile ladder built to repair what the discipline prevents.
**Phase 34 proposed candidates (a)–(d) for Phase 35 gate 1** (the table in `PhaseEnd_Phase34.md` §Rules: a scratch prune is an
instrument change — re-run every tool that writes under it; "green" is read from a check's EXIT CODE with `pipefail` in every chain,
never from its last line; 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 proving tool writes the paste; what a public tree carries is decided before the flip, and a
retired document gets its Archive-index row and is deleted in the same commit).
## 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
+222
View File
@@ -0,0 +1,222 @@
# PhaseEnd — Phase 34: The flip and the Gen2 exit — the repository public, the boards and the wiki live, the outreach sent, the tree shaped for readers
**Date:** 2026-09-08 · **Project Version:** 2.0.0 · **Phase Status:** Complete (milestone confirmed by Drew, gate 2 — 2026-09-08, "milestone met, write the phaseend") · **Generation:** Gen2 **EXIT** (the 25th and last phase of the arc: 8→…→33→33.5→**34**)
> Chartered by `docs/phase34-seed.md` (the flip-gated remainder of Phase 33, re-chartered 2026-09-07). Ran **one session (S93,
> 2026-09-08)** and **24 commits** (`c9dffdcfd..577da268e`; baseline `eb342dc9f`, Drew's Phase-33.5 close). The granular trail —
> every check's literal output, the three instrument findings, every owner decision in its own words — is at
> **`phase-ends/logs/Phase34.md`** (R19, on demand). Owner decisions (Drew): gate 1 (plan mode, Max: R84–R95 ratified; metadata and the
> ruleset set by Claude on his word; a GitHub Release; "no other clone" — corrected by the preflight, see Deviations); the flip itself;
> the compiler choice on decomp.me; three one-off R6 waivers for the wiki repository ("sync it"); frogress skipped; `docs/outreach/`
> and `docs/sunset/` out of the tree, `tools/sunset/` kept; the timeline in the README; the `#ai` reply in his own words; the xsig v2
> direction recorded for Gen3; gate 2.
## Build Log
**The phase in one line:** the purge probe passed twice, Drew flipped the repository public, and in the same day the after-flip
checks, the metadata and the `protect-main` ruleset, the decomp.dev card, the wiki (32 pages), the decomp.me preset request with a
100% scratch, the Archipelago note, the tool announcement and two Decompedia rows, and the aftercare (9 GB of dead scratch pruned,
the record updated, two folders taken out of the public tree on the owner's decision) were done — with three instrument defects
found and fixed on the way, and the close health chain green on its fifth run.
**Files created/changed and complete — do not recreate** (category summaries; the per-commit list is `git log eb342dc9f..577da268e`
and the archived log):
- **Governance and record:** `phase-ends/CURRENT_PHASE.md` (→ `phase-ends/logs/Phase34.md`); `phase-ends/DIGEST.md` §0/§1/§3/§4 (R84–R95 in
full; the flip date; the archive rows as the record); `docs/decision-log.md` "P34 S93 — the flip" (R31); `docs/accelerators.md` P34 S93
(three); `docs/SETUP.md` (the posture section: flip date, probe, ruleset id 22564862, wiki, decomp.dev; §6.5 outcome; ledger row 14
CLOSED; the E2 SENT bullet; the D1–D3 outcome; two new/extended tool rows; the retired-tools heading); `docs/gen3-handoff.md` §7
(**xsig v2**: 1-to-1 first, then the sequence tier, the structural family and atlas cousins, returning the matched tier and the
difference); `.gitignore` (the `.run/P34/` evidence allowlist; `/docs/outreach/*`; `/docs/sunset/*` — contents form, R84).
- **The public surface:** `README.md` — the generated timeline SVG under the progress block with its provenance line; the wiki pages
`Archive-index.md`, `Docs-and-scratch-conventions.md`, `Reference-index.md`, `Repository-layout.md`, `Where-the-project-goes-next.md`
(the public tree's shape; the archive rule is now "an Archive-index row, then delete in the same commit"), `Start-a-new-decomp-project.md`
(DK-1…DK-81); `docs/history/README.md`; `docs/story-timeline.md/.svg` regenerated (73 rows). **Removed from the tree:** `docs/outreach/`
(2 files, sent) and `docs/sunset/` (60 files, the reviewed archive) — no rewrite; the history at v1.32.1 keeps them; `tools/sunset/`
(35 files) stays for the tool index.
- **Tools (each with its SETUP row, R21; the kit corpus regenerated, `tool_census --check` 0 gaps):** `tools/verbatim_target_s.py --gas`
(the ASSEMBLABLE target form: `$`-registers, `.L<addr>` labels, symbol names for external jumps, `.set noat`/`noreorder`, no `.include`);
`tools/decompme_replica.sh` steps **D** (the paste itself through decomp.me's own `as` wrapper — fed on STDIN — linked at the address,
26/26 words) and **E** (Drew's bundle written from the proven run); `tools/cdecl.py` (`--audit` creates its scratch dir and REFUSES,
never misgrades, when the gcc adjudication cannot run); `tools/doc_links.py` DEFAULT list; `config/tool_dictionary.tsv`;
`config/kit_coverage_map.tsv` (twelve dispositions for R84–R95, each naming the kernel or rule that carries it).
- **The kit:** `decomp-architect/corpus/decomp-kernels.md` **DK-81** (the flip day: a third-party step proven through the third party's
toolchain on the pasted file; the public tree decided before the flip; a calendar gate read the next morning; a scratch prune is an
instrument change); `decomp-architect/README.md`; the corpus copies (tools, record) regenerated by `make kit-corpus`.
- **Evidence (`.run/P34/`, allowlisted, text only):** `probe/pre_flip.log`, `probe/after_flip.log`; `flip/` (the repo JSON before/after,
the curl codes, the metadata and ruleset API outputs, the runs, the gate-2 re-check); `outward/` (the wiki dry-runs and pushes, the
scratch/issue checks, the decomp.dev page, the frogress checks, the xsig API output, the Decompedia verification, the replica run after
the fix); `c11/` (the inventory, the prune with sizes, the cdecl and kit_coverage proofs); `tools_health_close.log` (run 5, 5,917 lines).
- **GitHub, outside the tree:** `Druthulu/BFM-decomp` public (description, 7 topics, homepage = the wiki; `has_wiki`; the `protect-main`
ruleset id 22564862, no bypass actors); the wiki repository (`BFM-decomp.wiki`, three syncs, last `73ab268`); `Druthulu/xsig` (7 topics,
homepage); the decomp.dev project (hero image set by Drew); decompme/decomp.me#2106; AegeusEvander/Brave-Fencer-Musashi-AP-World#1;
the Decompedia PlayStation pages (a tools row and a projects row, edited in-site by Drew).
**Tools/packages installed:** none (no apt/pip; no new external tool). Agents: none — every step this phase was the owner's action or a
deterministic check.
**Verification results (literal, at close — S93, HEAD `577da268e`, tree clean, 4 commits ahead of `origin/main` for Drew's push):**
- **The gate-2 live re-check (20:18 UTC, `.run/P34/flip/gate2_recheck.txt`):** `gh api repos/Druthulu/BFM-decomp` → `"private":false,
"visibility":"public","has_wiki":true,topics 7,homepage ".../wiki"`; rulesets → `protect-main` id 22564862 `enforcement:active`; the
archive repo → `"private":true`; xsig → 7 topics + homepage; unauthenticated **200** for the repo page, the raw badge JSON, the wiki's
Reference index, the decomp.dev page, issue #2106 and issue #1 (the repo page, the badge and the wiki were **404** on the morning's
private controls); `gh run list` → `no-rom success` and `progress success` on `a13d1cd9a` (the public repo; every push this phase green).
- **The probe:** before the flip `probe: PASS — every sampled old hash is gone` (33 `gone` of 33, control OK, exit 0, no working-repo
warning); after the flip `--after-flip` PASS 33/33 including the unauthenticated 7-char commit pages (`.run/P34/probe/*.log`).
- **`make tools-health` (run 5, 480 s): `tools-health: OK — sigs fresh; corpus(+resident) + cdecl + binaries + report(lint+dedup) +
cookbook-index all green.`** audit-binaries 218/218 · corpus 0 PHANTOM + 0 TRUNCATED · cdecl ALL ORACLES GREEN (unparsed 4 → NOT-C 4,
DEFECTS 0; gcc 4,777 accepted / 0 rejected) · dedup 2,220 / 0 · audit-digest OK (13,492,113 / 13,492,113; 90,984 / 90,984) ·
progress + timeline fresh (73 rows) · `sdk-dual` OK (main `143dbb89f34491258bbc27810d0a12ec8b43a8dd` with and without the SDK) ·
doc_links 56 documents / 454 links / 0 pending / 0 broken / coverage 63 of 63 · gccmap_cites OK · ghidra_roster OK (6) · tool_census
OK (359 + 28, 0 gaps) · kit_lint OK · kit_coverage OK (rules R1..R95 0 uncovered; 60 accelerator entries 0 uncovered) ·
split_indicator 218 OK · xsig tests OK (8). **No build input changed in this phase; R22 was not owed** — the fleet's 218/218 from the
Phase-33 close stands and is asserted by the digest checks.
- **decomp.me:** the replica after the fix → A BYTE-IDENTICAL 26/26 · B (control) 26/26 · C1/C2 identical text · **D the pasted target
BYTE-IDENTICAL 26/26** · E bundle written → PASS; Drew's scratch <https://decomp.me/scratch/mIu4d> at **100% / score 0**; the manual
search closed ledger row 14 (no other BFM scratch exists).
- **The wiki:** three syncs (`fec3777..75c17d0`, `..be8a6cc`, `..73ab268`), 32 pages, the live pages verified unauthenticated (200; 0
relative `.md` links left; the last sync's page shows DK-81).
- **The prune:** disk 46 GB → 37 GB used (33 GB free); keep-set intact (`obj40`, `decompme`, `wiki`, `verbatim_targets`,
`ghidra_export`, 223 sig files); tracked `.run` files 952, missing 0; `.run/public_rewrite/` 1.1 GB → 352 KB (the probe's two inputs).
- The headless Ghidra MCP (never used this phase — no RE work) stopped via the sentinel at the close (R23; the archived log's last entry
quotes the stop); nothing under `ghidra/` is tracked.
**Milestone achieved (confirmed by Drew, gate 2 — 2026-09-08):** all three items of the seed's milestone, on their literal reading —
(1) public, the old hashes gone, CI green on the public repo, the wiki live, the archive repo private, the ruleset active, B3's proof
standing; (2) every outward action done with its URL or **pending by name** (P9): the decomp.me preset's creation by its maintainers,
a reply from the Archipelago world, frogress (skipped; the request + push recipe recorded); (3) C11 done, this PhaseEnd written with
the DIGEST append and the log archived, left for Drew's close commit, the `v2.0.0` tag and the Release. **Gen2 EXIT.**
**Next:** **Phase 35 — Gen3 opens** (readability on a byte-exact floor). Open a fresh session in **plan mode, Max** (Tier 1) from
`docs/gen3-handoff.md` + `docs/gen3-standards.md`: the order of work is pins off (44,243 `register … __asm__` pins, most of which
Phase 32 showed come off byte-identical once the source shape is right) → the 5,147 macro bodies into shared C → struct unification
(1,232 definitions → one per shape; the 143 raw casts; R95) → names with evidence → formatting — every step gated by the 218 hashes.
Gen3's opening phases also inherit: the kit's split into its own repository (with the installable health-chain snippet and the
ProjectArchitect findings recorded at 33.5), the xsig v2 direction (gen3-handoff §7), and the three pending outward items above.
## Roadmap delta (what Phase 34 changed about the road ahead)
- **Gen2 is closed at v2.0.0.** The constitution's Gen2 goals (overlays and engine at scale; go public under AGPL with CI and progress
tracking) are met literally: 218 binaries byte-identical, the repository public with a ROM-free CI, decomp.dev live. The gen2-roadmap's
two-repo mirror stayed superseded; the in-place flip with the full rewritten history is what shipped.
- **The public tree is smaller than the private one by design, and the rule is written:** a retired document gets its Archive-index row
and is deleted in the same commit (history keeps it); sent outreach drafts do not live in the tree; retired tools stay for the index.
- **Doctrine that outlives the phase:** 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 (DK-81); a scratch prune is an instrument change; "green" is read from an exit code,
never a last line; a calendar gate is read the morning after the ticket.
- **Scale, honestly (R41):** the seed priced this phase at 1–2 sessions; it took **one session and 24 commits**, because every outward
action was Drew's and each took minutes; the day's cost was the three instrument findings (≈2 h of the session) and one browser step
that failed on its first try.
## Deviations
| Item | Plan (gate-1 plan) | Actual | Reason |
|---|---|---|---|
| "No other clone of the old history" (decision 3) | none | the preflight found a Phase-1 relic clone at `/mnt/z/Storage/git/BFM-decomp` (11 commits, 2026-06-13, old lineage); Drew deleted it during planning; verified gone | the owner's memory vs. the filesystem — the plan recorded both |
| E1 (decomp.me) | six browser steps, the listing pasted | the first scratch FAILED to assemble (`invalid operands 'li a2,2'`); tools fixed and the paste proven through decomp.me's own `as` (26/26) before the retry, which matched 100% first time | the doc's step had never been exercisable while private (R14); the listing was the word oracle, never assembled anywhere |
| The seed's "regenerate the bundle with `decompme_replica.sh`" | true | was false — nothing wrote the bundle; the replica's step E now does | a claim written ahead of the tool |
| frogress (task 4) | slug + key + push | **skipped** on Drew's word after measurement (alive, 38 projects, admin-created; at 100% with decomp.dev live it adds a list row) — pending by name with the recipe | owner's decision |
| Task 6 fork deletion | `gh repo delete` | already gone (API 404, 0 forks) — recorded, not redone | done before the phase |
| The public tree (not in the plan) | — | `docs/outreach/` and `docs/sunset/` untracked and ignored; `tools/sunset/` kept; five wiki pages and the conventions rewritten; a trial "untrack both" measured that the census needs the retired files and was reverted for the tools half | Drew's two decisions after the flip (P5d, recorded) |
| The README (not in the plan) | — | the generated timeline SVG under the progress block; `timeline.py` regenerated (its rows had gone stale at the 33.5 close) | Drew's ask |
| `gh auth logout` | in C11 (Claude) | moved to Drew's last command after the tag/Release push | the Release and the tag verification need `gh` after C11 |
| The wiki pushes | Drew runs `--push` | Claude ran three pushes, each on Drew's explicit "sync it" — one-off R6 waivers for the wiki repository only | the P33 xsig/permuter precedent; R6 unchanged for `BFM-decomp` |
| The close health chain | one run | five runs: red at cdecl (the prune removed its scratch dir), red at doc_links (two citations of untracked paths), red at kit_coverage (R84–R95 and the new accelerators entry uncited), a fourth killed, the fifth green | each a real finding; the fixes are in the tools and the map |
| Commit hygiene | R66 | one commit (`81ec81945`) claims "kit_coverage green" while three rows were still refused (a `tail` masked the exit code); named and fixed in the next commit | recorded as candidate (b) |
## What we believed, what failed, and what we would do sooner (for the retrospective; detail in `docs/decision-log.md` P34 S93)
- **Believed:** the decomp.me step was ready — "paste the regenerated `.s` without its first line". **It failed on the first try:** the
file was the comparison oracle, not an assemblable target, and the replica had proven the compile, never the paste. **Sooner:** prove
every third-party step through the third party's own toolchain, on the exact file, and let the proving tool write the paste (done now).
- **Believed:** the flip would wait about a week on GitHub Support. **It passed in a day**, during the previous sub-phase. **Sooner:**
read a calendar gate the morning after the ticket.
- **Believed:** the tree that passed the flip audit was the tree to publish. **Within hours the owner took two folders out** — the sent
outreach drafts and the reviewed archive — and a trial removal of the tools archive measured a fresh clone going red. **Sooner:** decide
the public tree's contents at the consolidation sub-phase; the Archive-index rule (paths, never links) made the late removal harmless.
- **Believed:** pruning untracked scratch was housekeeping. **It was an instrument change:** one audit wrote its probe under the pruned
tree, and its bare `except` turned the refusal into four "parser defects"; two more red chains followed from citations and coverage
of the day's own edits. **Sooner:** after any prune, re-run every tool that writes under it; and read every check's exit code — one
commit here claims "green" from a masked pipeline (named in the log, fixed in the next commit).
- **Cost:** no agents, no model tokens beyond the coordinator; the phase's expense was the five health runs (≈40 min wall) and the browser
round-trips, and it bought a public repository whose every published number, page and card is generated or verified from the tree.
## Commit Message
```
(Phase 34 landed as 24 commits c9dffdcfd..577da268e, 2026-09-08 (S93). This close = the archived log + this PhaseEnd + the DIGEST
update + the kit's record copies, Drew's milestone-close commit, then the v2.0.0 tag and the Release.)
chore(phase-34): CLOSE — Gen2 EXIT: the repository public (probe 33/33 gone before and after), protect-main, decomp.dev + the wiki
live, the decomp.me preset requested at 100%, the Archipelago note and the tool announcement sent, the aftercare done (v2.0.0)
- PhaseEnd_Phase34.md written; CURRENT_PHASE.md archived to phase-ends/logs/Phase34.md (R19); DIGEST §0/§2/§3 appended (step 3b)
- one session (S93): tasks 0a–8; the flip + metadata + ruleset; E1 with the paste form fixed and proven (verbatim_target_s --gas,
replica steps D/E); E2; D3 (decomp.dev; frogress pending by name); the wiki ×3 syncs; xsig topics; the posts + Decompedia rows;
C11 (~9 GB pruned, the record updated, docs/outreach + docs/sunset out of the tree on the owner's decision); DK-81 + the coverage map
- close: tools-health OK (run 5, 5,917 lines); the gate-2 live re-check all 200/false/true/active; no build input changed (R22 not owed)
- rules: R84–R95 ratified at gate 1; candidates (a)–(d) proposed for Phase 35 gate 1
- v1.32.1 -> v2.0.0
```
## Rules Added This Phase
**Ratified at gate 1 (2026-09-08):** **R84–R95** (the PhaseEnd_Phase33.5 candidates (i)–(xii)); full text in `phase-ends/DIGEST.md` §3.
**Candidates recorded in the log, for Drew to accept, modify or reject at Phase 35 gate 1 (P10):**
| Rule | Reason |
|---|---|
| **(a) A scratch prune is an instrument change:** every tool that writes under a pruned tree is re-run before the prune is called done. | `cdecl --audit` wrote its probe under the pruned `.run/audit/`; the refusal read as four parser defects (run 1 of the close chain). |
| **(b) "Green" is read from a check's EXIT CODE, never from its last line; every chain sets `pipefail`.** | Commit `81ec81945` claims "kit_coverage green" while three rows were refused — `tail` masked the status. |
| **(c) 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 proving tool writes the paste.** | The decomp.me listing failed to assemble on the first try; the replica had proven the compile, not the paste (DK-81). |
| **(d) What a public tree carries is decided before the flip, and a retired document gets its Archive-index row and is deleted in the same commit — history keeps it.** | Two folders left the tree within hours of going public; the paths-never-links rule made it harmless, the timing cost two commits on a public history. |
*(Techniques stay in the tools and their SETUP rows; strategy in `docs/decision-log.md` (R31) and `docs/accelerators.md`; the
portable form in the kit's DK-81.)*
## PhaseEnd Changelog
**v1.32.1 → v2.0.0 — Phase 34 complete; Gen2 EXIT.** The purge probe passed before and after the flip, and on 2026-09-08 the owner
made the repository public with a ruleset that forbids rewriting the published history. In one session the outward half of Phase 33
was done: the decomp.dev progress card, the wiki published from the tree (32 pages), the decomp.me preset request backed by a scratch
that matches at 100% (after the pasted target's form was fixed and proven through decomp.me's own assembler), the note to the
Archipelago project, the tool announcement, the Decompedia rows, and the aftercare — 9 GB of dead scratch pruned, the record updated,
the outreach drafts and the reviewed document archive taken out of the public tree on the owner's decision, the generated timeline
placed in the README. Three instrument defects surfaced and were fixed in the tools and the coverage map; the close health chain is
green on all rungs. R84–R95 ratified; four candidates proposed. Gen3 opens at Phase 35 with the readability charter, the kit split, the
xsig v2 direction and three outward items pending on third parties.
## Plain-English Recap
Today the project went public. First the probe confirmed, twice, that GitHub had really purged the old copies of the game files from
its servers; then Drew flipped the switch, and a rule was set so nobody can rewrite the published history by accident. The rest of the
day was the public face: the progress card on decomp.dev, the wiki, a request to decomp.me for a compiler preset backed by a function
that matches perfectly on their site, a note to the fan project that had shared memory addresses with us, an announcement of the small
tool we released, and rows on the community's wiki. One step failed the first time: the file we told Drew to paste into decomp.me was
our own comparison listing, which nothing had ever tried to assemble, so we fixed the tool to produce a real assemblable file and to
prove it through decomp.me's own assembler before anyone pastes it again. Cleaning up afterwards, we removed nine gigabytes of old
scratch, and that broke one of our own checks, which had been quietly writing into the deleted folder; it and two smaller findings
were fixed and the full health check passed. Drew also decided what the public tree should not carry: the drafts of notes already sent
and the archive of retired documents, both still in the history. The repository is public, every number on it is generated from the
source, and the second generation of the project is finished at version 2.0.0. The third generation, making the matched code readable,
starts in the next session.
## 🛑 Stop Here
PhaseEnd written; `CURRENT_PHASE.md` archived → `phase-ends/logs/Phase34.md` (R19, via `git mv`); `phase-ends/DIGEST.md` §0/§2/§3
appended (step 3b); the kit's record corpus regenerated (`make kit-corpus`) so tools-health stays equal — **all left uncommitted for
Drew's milestone-close commit** (R6 gate-2 sign-off). The Phase-34 work is committed across the session (`c9dffdcfd..577da268e`; four
commits not yet pushed). The headless Ghidra MCP was stopped via the sentinel (R23); nothing under `ghidra/` is tracked. **Drew, in
order, from the repository root:**
```
git add phase-ends/PhaseEnd_Phase34.md phase-ends/logs/Phase34.md phase-ends/DIGEST.md decomp-architect/corpus/record .run/P34/outward/wiki_push_close.log
git commit -m "chore(phase-34): CLOSE — Gen2 EXIT: the repository public, protect-main, decomp.dev + the wiki live, the decomp.me preset requested at 100%, the outreach sent, the aftercare done (v2.0.0)"
git tag -a v2.0.0 -m "v2.0.0 — Gen2 exit: 218 binaries rebuild byte-identical from C; the repository public"
git push origin main --tags
gh release create v2.0.0 --title "v2.0.0" --notes "<your words>"
gh auth logout
```
Facts for the Release notes, in your words (R83): 218 binaries byte-identical from C (main + resident + 138 location overlays + 78
modules); 363,214 functions, 13,492,113 instructions, main game-code 45,150 / 45,150; 1,256 Sony PsyQ library objects linked and five
hand-written assembly routines kept verbatim, both stated; builds from your own disc (`make disc-extract`, `make bootstrap`); AGPL-3.0
for tools and docs, no license asserted over the game sources; the wiki, the how-to, the progress card at decomp.dev; the standards
page on names and on how the AI was used. Gen2 is closed — do **NOT** start Phase 35 here. Start a **fresh session** (effort **Max**,
**plan mode**) for **Phase 35 — Gen3 opens**, planning from `docs/gen3-handoff.md` and `docs/gen3-standards.md`. Keep this file forever.
@@ -48,7 +48,7 @@ bundle and dictionary are deleted at C11) and a public fresh-clone re-proof (B3'
- [x] **5** F3 — the wiki: dry run (Claude), first page + `wiki_sync.sh --push` (Drew), pages verified — Low
- [x] **6** Tool discoverability: xsig topics + homepage (Claude on Drew's word); fork deletion already done; tools post (Drew) — Low
- [x] **7** C11 — aftercare: scratch prune (keep `old-to-new.tsv` + `old_tag_tip.txt`), docs, checks — xHigh (Claude)
- [ ] **8** G2 — tools-health, P7 walk, gate 2, `PhaseEnd_Phase34.md` v2.0.0 + DIGEST + log archive; Drew commits/tags/pushes/releases, then `gh auth logout` — **Max, Tier 1**
- [x] **8** G2 — tools-health, P7 walk, gate 2, `PhaseEnd_Phase34.md` v2.0.0 + DIGEST + log archive; Drew commits/tags/pushes/releases, then `gh auth logout` — **Max, Tier 1**
## Blockers
- None at open. The Support ticket (#4736982) did its work: the probe PASSED 2026-09-07. If task 0 or task 1's `--after-flip` probe
@@ -279,7 +279,23 @@ output) · `.run/P34/c11/` (the prune listing with sizes, `git worktree list`, t
tree); read a check's EXIT CODE, never its last line, before writing "green" (`set -o pipefail` in every chain); a third-party step
is proven through the third party's toolchain, on the pasted file, before the browser session.
## 🛑 SESSION CHECKPOINT — PHASE 34 OPEN (S93, 2026-09-08): tasks 0a, 0–7 ✓; task 8: tools-health OK (run 5); NEXT = the P7 walk presented, WAIT for gate 2 (Drew), then the PhaseEnd v2.0.0 + DIGEST + log archive, left uncommitted for Drew's close commit/tag/push/release/logout
### 2026-09-08 — Task 8 (part 3) — gate 2 and the close (Max; S93)
- The P7 walk presented with the gate-2 live re-check (`.run/P34/flip/gate2_recheck.txt`, 20:18 UTC): every milestone line quoted.
**Drew: "sync it, milestone met, write the phaseend."** The third wiki sync (one-off R6 waiver): `be8a6cc..73ab268`, the live kit page
shows DK-81. `docs/progress.fleet.md` as regenerated by the close chain committed (`577da268e`); tree clean; HEAD `577da268e`, four
commits ahead of `origin/main` (`a13d1cd9a`, both workflows green there).
- The headless Ghidra MCP stopped via `tools/ghidra_mcp_stop.sh` (R23): `REPORT: Save succeeded for processed file: /SLUS_007.26`; never
used this phase; nothing under `ghidra/` is tracked.
- `phase-ends/PhaseEnd_Phase34.md` written (all sections; Gen2 EXIT; candidates (a)–(d)); DIGEST §0/§2/§3 appended (step 3b); this file
archived → `phase-ends/logs/Phase34.md` (R19, `git mv`); `make kit-corpus` regenerated the record copies — **all left uncommitted for
Drew's close commit, the `v2.0.0` tag, the push, the Release and `gh auth logout`** (the commands are verbatim in the PhaseEnd's 🛑 block).
## 🛑 SESSION CHECKPOINT — PHASE 34 CLOSED (S93, 2026-09-08, v2.0.0 = GEN2 EXIT): tasks 0a, 0–8 ✓; the PhaseEnd is written; NEXT = Drew's close commit + tag + push + Release + logout, then a FRESH SESSION in plan mode at Max for Phase 35 (Gen3 opens from docs/gen3-handoff.md + docs/gen3-standards.md)
### How to use this block
This phase is closed. A session that finds this file under `phase-ends/logs/` reads it only on demand (R19). The seed for the next
phase is `docs/gen3-handoff.md` + `docs/gen3-standards.md`; the pending outward items (the decomp.me preset's creation, a reply from
Archipelago, frogress) are named in `PhaseEnd_Phase34.md`; the wiki is synced through `tools/wiki_sync.sh --push` (Drew's, R6).
### 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