From 3262cbca3996b30e286e531c178fc093190f0b38 Mon Sep 17 00:00:00 2001 From: Drew T <50529377+Druthulu@users.noreply.github.com> Date: Tue, 16 Jun 2026 15:51:44 -0600 Subject: [PATCH] =?UTF-8?q?docs(phase-13):=20T1c=20done=20=E2=80=94=20C=20?= =?UTF-8?q?record=20+=20Ghidra=20import=20(2661=20fns,=200=20failed);=20ha?= =?UTF-8?q?rvest=20next?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phase-ends/CURRENT_PHASE.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/phase-ends/CURRENT_PHASE.md b/phase-ends/CURRENT_PHASE.md index 92a60f60a0..5d0c73cf47 100644 --- a/phase-ends/CURRENT_PHASE.md +++ b/phase-ends/CURRENT_PHASE.md @@ -25,6 +25,9 @@ All load @ vram 0x80128158. SC01/077 starts with CODE at offset 0x0 (no leading - [x] **T0** — Overlay splat template (`config/splat.us.overlay.template.yaml`) + Makefile `-include config/overlays.mk` indirection. ✅ GATE: clean rebuild main `143dbb89…` + resident `8e17e02f…` BYTE-IDENTICAL (indirection proven a no-op; `overlays.mk` absent → silent `-include` → `BINARIES` unchanged). - [~] **T1** — SC01/077 end-to-end. ✅ T1a scaffold (overlays.mk + splat.ov_SC01_077.yaml + check.sha + symbols + 4 Python dicts w/ sentinel) · ✅ T1b all-asm byte-match `d19c9580…` BYTE-IDENTICAL (milestone; main+resident unregressed) · ☐ T1c seed boundaries + Ghidra import · ☐ T1d dedup-credit · ☐ T1e unique-remainder harvest (Ultracode §12 — prompt R26). - **Reusable finding (→ cookbook §13 + PhaseEnd):** non-word-aligned overlays (≈75% of fleet) need 3 template/Makefile additions: (1) a `[, bin, trailing]` carve for the final 1-3 bytes spimdisasm's data path drops; (2) a `build/assets/%.o` incbin rule (+ `--set-section-alignment .data=1`) wiring splat `bin` assets (scoped `asset_path: assets/`); (3) an objcopy end-align **trim** (shrink-only, ≤3 B) removing the splat `.ld`'s `. = ALIGN(., 4)` segment-end pad. EXE/resident are 4-aligned so untouched. + - ✅ **T1c done:** carve is clean (splat 2504 fns; key shared `func_80144B9C`=770 ins carved right) → match `func_*` directly (resident precedent), no boundary reseed. C record committed (`commit:0086`). Ghidra: raw-import @0x80128158 + DefineFunctions (created 1424/existed 1080/**failed 0** → 2661 fns), Save succeeded (PsyQ 470 detected = same coincidental DsMix sig as resident; real triple = EXE's gcc-2.7.2 per R24, byte-matches will confirm). Overlay Ghidra DB is **script-reproducible** (ghidra_import_raw.sh + DefineFunctions over the committed boundary list) → DB commit deferred as regenerable (no manual RE yet; avoids ~14 MB bloat). + - **MCP note:** server restarted serving ov_SC01_077 (port 8080 STARTED); client SSE went stale across the restart (timeouts — the known `/mcp` re-attach churn). Harvest can draft from on-disk `asm/ov_SC01_077/nonmatchings/` if MCP stays flaky; a `/mcp` reconnect restores get_code assist. + - ☐ **T1d/T1e = the harvest** (breadth → R26 Ultracode prompt): match SC01/077's functions, prioritizing the high-leverage cross-report shared engine fns (register matched shared bodies in dedup.us.yaml with onboarded-members-only), then the unique remainder. `harvest_verify.py` byte-gate + `match_one.py` iterate. - [ ] **T2** — Dup-pair collapse SC01/005≡006 (both `56760dbe…` from one shared source). - [ ] **T3** — Free-roam SC03/001 (`f8fd92f5…`); recipe scales to a large overlay. - [ ] **T4** — `tools/new_overlay.sh` one-command onboarding (gen `overlays.mk`; sentinel-insert 4 dicts; idempotent). GATE: onboard a fresh overlay in one command.