diff --git a/docs/agents/CONSOLIDATION.md b/docs/agents/CONSOLIDATION.md index 83833cac..cb9f02af 100644 --- a/docs/agents/CONSOLIDATION.md +++ b/docs/agents/CONSOLIDATION.md @@ -73,7 +73,7 @@ Nothing here is inference. Each row is a command that was run on 2026-09-13. --- -## Phase 0 — Secure the single-copy work +## Phase 0 — Secure the single-copy work ✅ **DONE** **Before touching anything else.** One `git checkout` in `xenia-canary` ends the reproducibility of a measurement that is already live in the port. @@ -105,7 +105,7 @@ done ✅ **PASSED 2026-09-13** — `8e63a9542` commits the instrument; `sylpheed-re` and `audit-handle-lifecycle-probes` pushed; all **14** local branches reachable. -## Phase 1 — Make the archive honest +## Phase 1 — Make the archive honest ✅ **DONE** Push xenia-rs `iterate-4B/ui-perf`, `4C/jit`, `4D/parallel`, `4E/native-threads`. @@ -121,7 +121,7 @@ ancestry and redundant by *patch-id* — the ledger's reason, and Phase 7's disposal. The gate is right to flag them; they are the one case where the answer lives outside it. -## Phase 2 — Harvest xex2tractor, then retire it +## Phase 2 — Harvest xex2tractor, then retire it ✅ **DONE (PR #30)** Four things exist only there. @@ -169,7 +169,7 @@ variable warning), so Phase 3's source is not bit-rotted — and it needs `libavutil-dev` and friends via `ffmpeg-sys-next`, dragged in by the emulator's XMA audio. The standalone tool sheds a C library the CI image did not have. -## Phase 3 — Lift the DB tool out of the emulator +## Phase 3 — Lift the DB tool out of the emulator ✅ **DONE (PR #32)** From `origin/iterate-4A/apu-xma-stage1`, **never** from `master`. @@ -204,11 +204,15 @@ Travelling with it: `zq.py`, `tests/db_schema_golden.rs`, the emulator.** Replace it with Canary's dump or a direct read of the `.pe` at `VA − 0x82000000`, and say which, in the file. -**Gate:** regenerate `sylpheed.db` from the ISO; diff schema and row counts -against the existing 586 MB database. `db_schema_golden` and `disasm_goldens` -green. +**Gate — ✅ PASSED 2026-09-13.** Schema a **superset** (22 new tables, none +lost). `instructions` 1,865,751, `pdata_entries`, `imports`, `sections` and all +three `eh_*` identical to the row; most others slightly higher. Two tables drop +~1.8 M and it is not a loss — the xref delta is **entirely `ind_call`** +(everything else nets **+1,512**), and the new schema records why: **6,556 sites +`truncated=true` carrying 1,801,075 candidates** against 427 untruncated +producing 4,199 rows. The old database materialised a cross product. -## Phase 4 — Prune the captures, and give `docs/re/` the check `docs/port/` has +## Phase 4 — Prune the captures, and give `docs/re/` the check `docs/port/` has ✅ **DONE (PR #33)** **`docs/re/captures/` is 257 files / 117.6 MB, and it is not junk.** Measured: @@ -228,15 +232,19 @@ Sixteen more tools under `tools/port/` and `tools/re-capture/` read from there. **Do:** -1. **Build `tools/re/check-capture-citations`**, the mirror of +1. ✅ **DONE — `tools/re/check-capture-citations`**, the mirror of `tools/port/check-citations`, which has only ever checked `docs/port/*.md`. It reports two classes — a capture nothing cites, and a page citing a capture that was never committed. It needs a `--selftest` that plants one of each, or it is not a check. -2. **Fix the dangling citations first.** There are already **10**, including - whole directories (`focus-ring/`, `hud-runtime/`, `title-builds/`). The - corpus is already lossy in that direction and nothing was watching. -3. **Then drop the 64 orphans.** +2. ✅ **DONE — and there was ~~**10**~~ ONE.** Eight of the ten were *directory* + references that resolve; one was sentence punctuation in the regex. The real + one, `live-submenu-unidentified.png`, had been **committed and then deleted** + on 2026-08-30 while the page kept citing it and kept making the claim it + backs. Restored, not de-linked. +3. ✅ **DONE — 46, not 64.** Two are opened by *filename* from + `screen_match.py`, and sixteen sit inside directories that pages cite as + directories. 30.7 MB out of the checkout. ⚠️ **An orphan is not automatically waste.** It may be evidence a page *should* have cited, and the page is the thing that is wrong. Fix the citations before @@ -251,7 +259,7 @@ deleting, or step 3 silently ratifies every omission in step 2. The two `.jsonl` mission-state dumps alone are 4.3 MB, and one is an orphan. -## Phase 5 — Verify the invariant, then archive +## Phase 5 — Verify the invariant, then archive ⬜ **NOT STARTED** For each of `Syplheed-Reborn`, `Sylpheed-Godot`, `xenia-rs`, `xex2tractor`: re-run the containment check **at that moment** — not from this page's ledger, @@ -285,7 +293,7 @@ merge, both agents' clones, and needs a force-push through branch protection. This is a decision, not a default. Whichever is chosen, record it here. -## Phase 6 — Adopt the orphan assets +## Phase 6 — Adopt the orphan assets ✅ **DONE (PR #34)** Tracked by nobody today, and tools or references by the two-repo rule: @@ -299,7 +307,7 @@ Tracked by nobody today, and tools or references by the two-repo rule: | `scratch/xbg7/extract.py` — clean-room XBG7 scanner | superseded by `sylpheed_formats::mesh`; keep as history or drop | | `Sylpheed-try/…/examples/_voice_span.rs` — 46-line untracked probe | keep or drop | -## Phase 7 — Intended drops +## Phase 7 — Intended drops ⬜ **NOT STARTED** Stated so that nothing is dropped by omission. @@ -315,6 +323,133 @@ Stated so that nothing is dropped by omission. | `texcompare/` (14 MB), `ship_render/` (64 KB) | — | tool output — **confirm no `docs/re/` page cites them first** | | **the xenia-rs emulator** | ~54k LOC | the human's decision: superseded by Canary | +--- + +# ▶️ STATUS 2026-09-13 — paused here, for the other machine to finish + +**Six of eight phases are done and pushed.** Everything below is committed; +nothing is left in a working tree. Five pull requests are open and **none has +been merged** — merging is the human's, and #32 contains #30 and #31. + +| phase | state | where | +|---|---|---| +| **0** secure single-copy work | ✅ done | Canary `8e63a9542`, `sylpheed-re` + `audit-handle-lifecycle-probes` pushed | +| **1** make the archive honest | ✅ done | xenia-rs `iterate-4B/4C/4D/4E` pushed (32/52/56/59 commits) | +| **2** harvest xex2tractor | ✅ done | **PR #30** `harvest/xex2tractor-assets` | +| **3** lift the DB tool | ✅ done | **PR #32** `feat/xexdb-tool` | +| **4** captures + the missing check | ✅ done | **PR #33** `fix/capture-citations` | +| **6** adopt the orphan assets | ✅ done | **PR #34** `chore/adopt-orphan-assets`, + Canary `99cc72662` | +| — containers and agents | ✅ done | **PR #31** `docs/containers-setup` | +| **5** archive the four repos | ⬜ **open — needs the human** | | +| **7** intended drops | ⬜ **open — partly needs the human** | | + +## 🔴 Four claims on this page were wrong. Read these before trusting the rest. + +1. **"10 dangling citations" was ONE.** Eight were *directory* references, which + resolve and are simply absent from `git ls-tree`; one was a path at the end of + a sentence with the full stop pulled into the match. The figure is corrected + in Phase 4 below and in PR #33. +2. **`extract -r` is not how the `.pe` was made**, and nothing depends on it — + Phase 2's gate, run. +3. **The Phase 0 gate compared branches by SHA** and called seven safe branches + unpushed. It tests reachability now. +4. **There is no DXC submodule drift.** The ` m` is *nested* submodule dirt. + +## What the other machine should do next + +### Before anything: merge or decide on the open PRs + +``` +#30 harvest/xex2tractor-assets reference files + LICENSE +#31 docs/containers-setup container and agent setup +#32 feat/xexdb-tool the DuckDB tool ⚠️ CONTAINS #30 and #31 +#33 fix/capture-citations the docs/re check + prune +#34 chore/adopt-orphan-assets PPC manual + canary launcher +``` + +⚠️ **#32 is stacked.** Merge #30 and #31 first, or merge #32 and close them — +its `build.rs` needs #30's export table, so they cannot be independent. + +⏳ **One result outstanding:** the workspace `cargo test` count for #32. `check`, +`clippy`, `fmt` and `wasm` are all 0; the test leg was interrupted twice by +branch switches and never reported cleanly. Run it and post the number: + +```bash +docker/ci/run cargo test --workspace +``` + +### Phase 5 — archive, and the history fork + +**Do not trust this page's ledger when you get there.** Re-run the containment +check *at that moment* — days will have passed and branches may have moved: + +```bash +for repo in Syplheed-Reborn Sylpheed-Godot xenia-rs xex2tractor; do + # every ref of $repo must be an ancestor of a Sylpheed ref +done +``` + +Then **archive read-only on Gitea**. 🔴 **Do not delete any repository.** Archiving +is reversible; deletion is not, and it is the human's call, separately, later. +Nothing outside git needs migrating — issues, PRs, releases and wikis are **zero** +in all four (verified). + +The **history-rewrite fork** is still open and still recommended AGAINST: the +118 MB is in history, and `crates/sylpheed-export/Cargo.toml` depends on this +repo **by tag** (`formats-pin-2026-09-01`, pinned in `Cargo.lock`). A rewrite +invalidates all 8 tags, every SHA, PR #23's merge and both agents' clones. + +### Phase 7 — the drops + +All verified, none done — they are deletions on the human's disk: + +``` +agent-backups/ 687 MB 23 refs verified present in Sylpheed +Sylpheed/target/ 32 GB build output; the host is at 83 % +stock-oracle/ 34 MB two Canary binaries, rebuildable +root canary_*.log 15 MB run output +xenia-rs audit-runs/ 57 MB already .gitignore'd; iterate-4A deleted 40 of 41 +pi/clippy, pi/clippy-clean, pi/reauth3 all 4 patches on main, by patch-id +texcompare/ (14 MB), ship_render/ confirm no docs/re/ page cites them first +``` + +### Still the human's, untouched + +`ai-agent-*.md` ×4 (56 KB), `scratch/xbg7/extract.py`, `_voice_span.rs`, and the +**retention question**: all six repos are `private=False`, and `docs/re/captures/` +is ~87 MB of game screenshots in a public repository. + +## What each finished phase actually produced + +* **Phase 2** — `docs/reference/{xex2-format.md, xbox360-exports.*, ppc-instructions.*}` + and an MIT `LICENSE`; this repo had none. The first two are byte-identical to + xex2tractor's, verified with `cmp`. +* **Phase 3** — `sylpheed-xex` + `sylpheed-ppc` + `sylpheed-xexdb`, ≈17,200 lines + of ~71,000, coupled to the emulator by **three symbols**. The gate: a + regenerated database whose schema is a superset, with `instructions`, + `pdata_entries`, `imports`, `sections` and `eh_*` identical to the row. The two + −1.8 M deltas are the `max_indirect_candidates` ceiling, recorded by the tool + as **6,556 truncated sites standing for 1,801,075 candidates** — checked, not + assumed: the xref delta is entirely `ind_call`. `build.rs` no longer reads a + sibling checkout, and a missing export table now **fails** instead of silently + producing a database with no import names. +* **Phase 4** — `tools/re/check-capture-citations`, 212 captures all cited, 46 + orphans dropped. It caught its own damage twice: two "orphans" are opened by + *filename* from `screen_match.py`, and the first prune emptied two directories + that pages cite *as directories*. +* **Phase 6** — `tools/ppc-manual/` (393 files) and a rewritten + `tools/run-canary.sh`; the old one pointed at a **symlink** Wine cannot resolve + and hardcoded one machine's paths. The full `CROSS_BUILD_SETUP.md` went to + Canary, where the tracked copy was a 6.8 KB stub of a 59 KB guide. + +## The method, if you only read one thing + +Every claim on this page that was *reasoned* turned out wrong, and every one that +was *run* held. The gates are the point: Phase 2's gate refuted its own premise, +Phase 3's proved the two alarming row deltas were an improvement, and Phase 4's +check caught a deletion I had just made. **Run them again rather than trusting +the results recorded here.** + ## Still open, for the human * **Retention.** The `.iso` (7.6 GB), `.pe`, `.xex.json` and `sylph_extract/`