mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-10-01 23:52:03 -04:00
checkpoint(phase-33): PR simonlindholm/decomp-permuter#213 opened and issue #214 filed by Drew (recorded in permuter-ils.md §2–§3 + SETUP); NEXT for the next session = step 6, the flip chain, Claude walking Drew through it (probe → flip → E1/E2 docs + Drew's outward actions → D3 outward → wiki push → C11 → G2); the E1/E2 documents may be drafted even before the probe passes
This commit is contained in:
+1
-1
@@ -766,7 +766,7 @@ Every script under `tools/` (plus the two report make-targets), grouped by purpo
|
||||
| | `tools/wiki_sync.sh [--push] [--wiki-url URL]` | **(P33 F3)** Render into `.run/wiki/render/` → clone or fast-forward `BFM-decomp.wiki.git` under `.run/wiki/` → REPLACE its pages with the rendered set (the repo is the source of truth; a page edited on GitHub is overwritten) → `git status --short`; **`--push` is Drew's (R6)**: commit + push. Before the wiki repo exists (after the flip AND the first page created in the GitHub UI) the dry run renders and lists (exit 0) and `--push` refuses (exit 2). |
|
||||
| | `tools/gccmap_cites.py [--dry-run \| --check \| --verify \| --controls \| --explain] [--retag]` | **(P33 E3)** Tag every `file.c:NNN` cite in `docs/gcc-2.7.2-map/*.md` with the source tree its line number belongs to — `[2.7.2]` (the vanilla subset), `[2.8.1 pm]` (gcc-papermario), `[repo]` — derived from the trees (quoted snippets, identifiers with function extents and nearest distance, the author's cues; a contradiction fails loudly; ties → `cite_overrides.tsv` → cue → 2.7.2); writes in place, idempotent, never silently changes an existing tag. `--check` is textual (every cite tagged, no stale override) and runs in `make tools-health` + CI; the others need both reference trees and refuse without them. |
|
||||
| | `tools/xsig/xsig.py sign-s \| sign-objdump \| cross \| verify \| selftest` | **(P33 E4; Phase-21 origin)** Relocation-masked per-function signatures for CROSS-PROJECT code identification: mask `j`/`jal` targets and HI16/LO16 immediates (from `%hi`/`%lo` operands or `objdump -dr` records), keep opcodes/registers/constants/branches; `cross` joins two JSONL sets on `sig` with a coverage line; `verify` prints the instruction-by-instruction diff (opcode/register/immediate/length). Self-contained (stdlib, MIT, own README + LICENSE + `tests/` from a game-free fixture compiled at two link addresses with `--emit-relocs`); `tests/test_xsig.py` (8) in `make tools-health` + CI. Published: `https://github.com/Druthulu/xsig` (public, pushed S88 at Drew's instruction). |
|
||||
| | `tools/permuter/upstream/0001-reloc-masked-scorer.patch` | **(P33 E5)** The upstream PR as a `git format-patch` (one commit against `simonlindholm/decomp-permuter` main `41bd0bfc`, 2026-09-05): `src/reloc_scorer.py` (`RelocMaskedScorer`, a `Scorer` subclass), `--score-mode {mnemonic,reloc-masked}` + the `score_mode` settings key, docs, `test/test_reloc_scorer.py` (10, no cross toolchain). Regenerate the branch: clone upstream, `git am` the patch (proven clean). Two commits (the scorer; a USAGE note on restarting from the best candidate), plain contributor style. Pushed S88 to the fork `Druthulu/decomp-permuter`, branch `reloc-masked-scorer`; **Drew opens the PR** (`docs/permuter-ils.md` §2). |
|
||||
| | `tools/permuter/upstream/0001-reloc-masked-scorer.patch` | **(P33 E5)** The upstream PR as a `git format-patch` (one commit against `simonlindholm/decomp-permuter` main `41bd0bfc`, 2026-09-05): `src/reloc_scorer.py` (`RelocMaskedScorer`, a `Scorer` subclass), `--score-mode {mnemonic,reloc-masked}` + the `score_mode` settings key, docs, `test/test_reloc_scorer.py` (10, no cross toolchain). Regenerate the branch: clone upstream, `git am` the patch (proven clean). Two commits (the scorer; a USAGE note on restarting from the best candidate), plain contributor style. Submitted 2026-09-07: PR simonlindholm/decomp-permuter#213 (from the fork's `reloc-masked-scorer`), issue #214 (the symbol-regex proposal; `docs/permuter-ils.md` §3). |
|
||||
| | `docs/matching-drafter-pipeline.md` | **(P33 E6)** The write-up of the fine-tuned local matching drafter (Phases 22–25): the pipeline (`export_pairs` → `format_finetune` → `train_lora` → `eval_lora` → `serve_local` → `api_draft` / `lora_grind` / `bulk_harvest` → the byte gate; `ab_score` + `workflows/ab_match.js`; `grinder`), every measurement in order (stock floor ~0 → v2 85% on 6–15 ins → v3 57.5% held-out and ~352 production banks → v4 negative → the GLM hard-band A/B and the def-side wall), the portable lessons, the hardware, a five-step recipe, and what is NOT published (the ROM-derived pair dataset `datasets/`, the adapter weights `models/` — both gitignored). |
|
||||
| | `docs/gen3-handoff.md` | **(P33 G1)** The Gen3 seed: where Gen2 ends, the owner's next intent (casts → structs, pins off, names), the starter census with the commands that re-derive it (143 raw address casts · 61,898 `D_` · 16,335 `func_` · 44,243 register pins · 1,083 symbol-file entries · 1,232 struct defs · 2,220 dedup groups · 5 verbatim bodies), the one invariant (every edit byte-gated; shared bodies change every member; types are comprehension not bytes), the inherited levers, shiftability honestly scoped (position-locked slots, LZSS not byte-stable, the Sony regions), the parked ideas, and the governance for a new generation. |
|
||||
| | `tools/objdiff_report.py [--in docs/progress.json] [--out report.json]` | **(P33 D3)** progress.json → objdiff's report format (report.proto v2, snake_case — validated with `objdiff-cli` 3.8.1 `report changes`): one unit per binary (code = instructions × 4, functions byte-identical / matchable, metadata complete), categories `game-code` and `linked-sony-objects` (functions only). `.github/workflows/progress.yml` runs it on every push (no rebuild — the committed JSON) and uploads the artifact **`SLUS_007.26_report`** for decomp.dev (Drew registers at decomp.dev/manage/new after the flip). |
|
||||
|
||||
@@ -62,11 +62,10 @@ reloc-masked base score 4 (the debug diff names the four operand differences) an
|
||||
40 s with `-j4`; the default scorer read the same base as **3,585** and sat at 3,420 twenty iterations later
|
||||
(`.run/P33/permuter-e2e/`, `settings.toml` `objdump_command = "mipsel-linux-gnu-objdump -drz -m mips:4300"`).
|
||||
|
||||
**What Drew does:** the fork exists and the branch is pushed (S88). Open the PR from
|
||||
`https://github.com/Druthulu/decomp-permuter/pull/new/reloc-masked-scorer` against `simonlindholm/decomp-permuter`
|
||||
`main`, title `Add --score-mode reloc-masked: relocation-masked scoring for MIPS`, body = the first commit's message.
|
||||
**Submitted (2026-09-07):** the PR is https://github.com/simonlindholm/decomp-permuter/pull/213 (from the fork's
|
||||
`reloc-masked-scorer` branch) and the symbol-regex issue below is https://github.com/simonlindholm/decomp-permuter/issues/214.
|
||||
|
||||
## 3. The issue for upstream (PR-2, or an issue first): a configurable symbol regex
|
||||
## 3. The issue for upstream (filed as #214): a configurable symbol regex
|
||||
|
||||
Title: *MIPS scorer: `field_matches_any_symbol` recognises a relocation only when the field contains "."*
|
||||
|
||||
|
||||
+19
-11
@@ -617,6 +617,11 @@ Mid-phase rules check after every 4 completed tasks (P6). Commit banked artifact
|
||||
kept identical to the standalone copy. `tools/permuter/upstream/0001-reloc-masked-scorer.patch` regenerated (2 commits;
|
||||
`git am` onto upstream `main` OK). **Drew: open the PR** from `https://github.com/Druthulu/decomp-permuter/pull/new/reloc-masked-scorer`
|
||||
(title = the first commit's subject, body = its message) and **file the issue** (`docs/permuter-ils.md` §3). Commit: see below.
|
||||
- **2026-09-07 (S88, last) — E5's outward actions DONE by Drew:** PR **simonlindholm/decomp-permuter#213** (the
|
||||
`reloc-masked-scorer` branch) and issue **#214** (the `symbol_regex` proposal; the issue text references #213 as the MIPS
|
||||
workaround). Recorded in `docs/permuter-ils.md` §2–§3 and the SETUP row. Every Block-E outward action except the two
|
||||
flip-gated ones (E1 the decomp.me preset, E2 the Archipelago note) is now done. **Drew's instruction for the next
|
||||
session: start with step 6, the flip chain.** Commit: see below.
|
||||
|
||||
## 🛑 SESSION CHECKPOINT — A1–A5 ✓, B1–B9/C3 ✓, C1–C9 ✓, D1–D5 ✓, F1–F3 ✓, E3–E6 ✓, G1 ✓ (34 of 41); C10 IN PROGRESS ON DREW'S SIDE; NEXT = THE PROBE-GATED CHAIN (Drew) then C11 then G2 (2026-09-07, written by session 4555f4e4 "S88", updated after the outward pushes; SUPERSEDES the earlier blocks)
|
||||
|
||||
@@ -624,17 +629,22 @@ Mid-phase rules check after every 4 completed tasks (P6). Commit banked artifact
|
||||
You are a FRESH SESSION that has read `PROJECT_CONTEXT.md`, `phase-ends/DIGEST.md`, `PhaseEnd_Phase30/31/32.md` and this file,
|
||||
and nothing else (R64). Replay this block verbatim, state phase / done / NEXT / effort, list the rules from the digest
|
||||
(R1–R73), then WAIT for Drew. **Everything Claude can do before the flip is DONE** (34 of 41; G1 was pulled ahead of the
|
||||
plan's C11 → G1 order because it depends on nothing gated — recorded as a sequencing deviation). **NEXT = the probe-gated
|
||||
chain on Drew's side**: `tools/public_rewrite/probe_github.sh` PASS → C10 the flip → E1 → E2 → D3 outward → the wiki push →
|
||||
then Claude's **C11** (aftercare) → **G2** (the PhaseEnd, Tier 1, WAIT for gate 2). If the probe still fails, there is
|
||||
nothing to draft: ask Drew about the Support ticket and stop. Rebuild the harness task list (40 items, R28) marking A1–A5,
|
||||
plan's C11 → G1 order because it depends on nothing gated — recorded as a sequencing deviation). **NEXT = step 6, the flip
|
||||
chain, with Claude walking Drew through it (his instruction at the S88 close).** Order: run `tools/public_rewrite/
|
||||
probe_github.sh` first (≈1 min; it must print PASS) → C10 the flip (Drew: Settings → General → Danger Zone → Change
|
||||
visibility → Public; then `gh api repos/Druthulu/BFM-decomp --jq .private` → false, `probe_github.sh --after-flip`, and the
|
||||
Actions tab green) → E1 (Claude WRITES `docs/decompme-preset.md`; Drew creates the preset in the browser and proves it on
|
||||
`func_80018F20`) → E2 (Claude WRITES `docs/outreach/archipelago.md`; Drew sends it) → D3 outward (Drew: decomp.dev
|
||||
`manage/new` with the `SLUS_007.26_report` artifact; frogress slug `bfm` + key; then `tools/frogress_upload.py --push`) →
|
||||
the wiki push (Drew: Wiki → "Create the first page", then `tools/wiki_sync.sh --push`) → Claude's **C11** (aftercare) →
|
||||
**G2** (the PhaseEnd, Tier 1, WAIT for gate 2). **If the probe still FAILS:** the two documents (E1's page, E2's note) can
|
||||
still be drafted and committed — only their outward actions wait; do that, then ask Drew about the Support ticket and stop. Rebuild the harness task list (40 items, R28) marking A1–A5,
|
||||
B1–B9/C3, C1–C9, D1–D5, F1–F3, E3–E6, G1 completed and C10 in progress. **Drew's to-do at the S88 close, in order:** (1) DONE — the nine S88 commits are pushed and both workflows ran GREEN on them
|
||||
(run 34148516143 `no-rom` 1 m 34 s incl. the new gccmap_cites + xsig steps; 34148515883 `progress`); push the last two
|
||||
(`git push origin main`); (2) DONE — the local gc ran: one pack, 80 MB; (3) confirm or file the GitHub Support ticket
|
||||
(runbook §11) and run `tools/public_rewrite/probe_github.sh` daily until PASS (the last S88 run: 31 of 33 ALIVE); (4) DONE by Claude at
|
||||
Drew's instruction: `Druthulu/xsig` is public (`c8d862c`); (5) the fork + branch are pushed (`Druthulu/decomp-permuter`
|
||||
`reloc-masked-scorer` @ `f276733`) — **Drew opens the PR** (`…/pull/new/reloc-masked-scorer`, title = the first commit's subject,
|
||||
body = its message) **and files the issue** (`docs/permuter-ils.md` §3); (6) after PASS: the flip chain (§3.3). **Every commit cites NEW
|
||||
Drew's instruction: `Druthulu/xsig` is public (`c8d862c`); (5) DONE — PR simonlindholm/decomp-permuter#213 opened and issue #214 filed by Drew; (6) after PASS: the flip chain (§3.3) —
|
||||
**the next session starts here (Drew's instruction).** **Every commit cites NEW
|
||||
hashes only** (the history was rewritten; `docs/commit-map.tsv` maps ordinals → new hashes; the scratch `.run/public_rewrite/`
|
||||
holds the old ones and stays until the probe passes). **Never `git clean -x`** (CLAUDE.md fail-safe).
|
||||
|
||||
@@ -719,10 +729,8 @@ Support ticket (text: `docs/public-flip-runbook.md` §11 — its filing was neve
|
||||
Druthulu/BFM-decomp --limit 4`) · `git count-objects -v` (packs: 1 after Drew's gc; 30 = not yet run) · `df -h ~` ·
|
||||
`.venv/bin/python tools/doc_links.py --strict` (PASS) · ask Drew: pushed? gc run? ticket filed? latest probe result?
|
||||
(`tools/public_rewrite/probe_github.sh` — ~1 min, gh-authenticated, safe to run from Claude since S88).
|
||||
2. **E3, E4 and E5 are DONE** (see the log; every one in full scope). E4's repo is live (`https://github.com/Druthulu/xsig`,
|
||||
public); E5's branch is on the fork (`Druthulu/decomp-permuter` `reloc-masked-scorer` @ `f276733`) — Drew opens the PR
|
||||
(`https://github.com/Druthulu/decomp-permuter/pull/new/reloc-masked-scorer`, base `simonlindholm/decomp-permuter` `main`, title
|
||||
= the first commit's subject, body = its message) and files the issue from `docs/permuter-ils.md` §3. **E6 and G1 are DONE too** (`docs/matching-drafter-pipeline.md`, `docs/gen3-handoff.md`). Nothing remains for Claude before
|
||||
2. **E3, E4 and E5 are DONE, outward actions included** (see the log): `https://github.com/Druthulu/xsig` (public);
|
||||
PR simonlindholm/decomp-permuter#213 + issue #214. **E6 and G1 are DONE too** (`docs/matching-drafter-pipeline.md`, `docs/gen3-handoff.md`). Nothing remains for Claude before
|
||||
the probe passes.
|
||||
3. **After the probe PASSES (Drew):** C10 the flip (Settings → Change visibility → Public, only with D/E/F landed) → E1
|
||||
(`docs/decompme-preset.md`; Drew creates the preset in the browser: platform ps1, `gcc2.7.2-psx`, flags `-O2 -G0 -mips1
|
||||
|
||||
Reference in New Issue
Block a user