From 48170fd7fad39b65cf841f8261f18fd62c15efe3 Mon Sep 17 00:00:00 2001 From: Drew T <50529377+Druthulu@users.noreply.github.com> Date: Tue, 8 Sep 2026 14:28:32 -0600 Subject: [PATCH] =?UTF-8?q?chore(phase-34):=20CLOSE=20=E2=80=94=20Gen2=20E?= =?UTF-8?q?XIT:=20the=20repository=20public,=20protect-main,=20decomp.dev?= =?UTF-8?q?=20+=20the=20wiki=20live,=20the=20decomp.me=20preset=20requeste?= =?UTF-8?q?d=20at=20100%,=20the=20outreach=20sent,=20the=20aftercare=20don?= =?UTF-8?q?e=20(v2.0.0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .run/P34/outward/wiki_push_close.log | 8 + .../corpus/record/phase-ends/DIGEST.md | 30 ++- .../record/phase-ends/PhaseEnd_Phase34.md | 222 ++++++++++++++++++ phase-ends/DIGEST.md | 30 ++- phase-ends/PhaseEnd_Phase34.md | 222 ++++++++++++++++++ .../{CURRENT_PHASE.md => logs/Phase34.md} | 20 +- 6 files changed, 524 insertions(+), 8 deletions(-) create mode 100644 .run/P34/outward/wiki_push_close.log create mode 100644 decomp-architect/corpus/record/phase-ends/PhaseEnd_Phase34.md create mode 100644 phase-ends/PhaseEnd_Phase34.md rename phase-ends/{CURRENT_PHASE.md => logs/Phase34.md} (96%) diff --git a/.run/P34/outward/wiki_push_close.log b/.run/P34/outward/wiki_push_close.log new file mode 100644 index 000000000..2510678d3 --- /dev/null +++ b/.run/P34/outward/wiki_push_close.log @@ -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 diff --git a/decomp-architect/corpus/record/phase-ends/DIGEST.md b/decomp-architect/corpus/record/phase-ends/DIGEST.md index 193b5c02f..0a4994e41 100644 --- a/decomp-architect/corpus/record/phase-ends/DIGEST.md +++ b/decomp-architect/corpus/record/phase-ends/DIGEST.md @@ -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 diff --git a/decomp-architect/corpus/record/phase-ends/PhaseEnd_Phase34.md b/decomp-architect/corpus/record/phase-ends/PhaseEnd_Phase34.md new file mode 100644 index 000000000..31895e315 --- /dev/null +++ b/decomp-architect/corpus/record/phase-ends/PhaseEnd_Phase34.md @@ -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` 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 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 "" +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. diff --git a/phase-ends/DIGEST.md b/phase-ends/DIGEST.md index 193b5c02f..0a4994e41 100644 --- a/phase-ends/DIGEST.md +++ b/phase-ends/DIGEST.md @@ -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 diff --git a/phase-ends/PhaseEnd_Phase34.md b/phase-ends/PhaseEnd_Phase34.md new file mode 100644 index 000000000..85500240a --- /dev/null +++ b/phase-ends/PhaseEnd_Phase34.md @@ -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` 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 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 "" +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. diff --git a/phase-ends/CURRENT_PHASE.md b/phase-ends/logs/Phase34.md similarity index 96% rename from phase-ends/CURRENT_PHASE.md rename to phase-ends/logs/Phase34.md index ad812a9da..d14dd7922 100644 --- a/phase-ends/CURRENT_PHASE.md +++ b/phase-ends/logs/Phase34.md @@ -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