mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-09-29 07:10:32 -04:00
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:
@@ -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
@@ -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 .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
|
||||
Reference in New Issue
Block a user