Commit Graph

  • e1463d4300 docs(phase-33.5): S90 checkpoint — decision-log entry 'P33.5 S90' (the re-charter, the three audits + the adversarial review, the six owner decisions, what tasks 0–9 measured, the hindsight path); CURRENT_PHASE checkpoint refreshed for a fresh session (tasks 0–9 done, NEXT = task 10 at Max; the decision-log item of task 14 already banked) Drew T 2026-09-07 18:12:31 -06:00
  • caefe98728 docs(phase-33.5): task 9 — memory reconciliation + the kit's memory seed: decomp-architect/memory-seed/ (16 de-BFM'd seeds + MEMORY.md citing PA 2.0's own sixteen: the byte gate as the only claim, the matching flywheel, MCP reconnect, offline tooling first, a slow gate is a bug, breadth is isolated agents, route by measured difficulty, one runbook is the procedure, the accelerator ledger, checkpoint = already in a file, the PhaseEnd narrative axis, tool change ships with consumers + docs, no sleep-polling, long checks in the foreground, resume means resume the run, answer before grinding — five tagged upstream: PA); the project's own store outside git: the off-project memory parked, seven stale memories given dated update blocks, two index defects fixed (80 rows == 80 files); log + checkpoint Drew T 2026-09-07 18:10:00 -06:00
  • ae71efe56f chore(phase-33.5): task 8 — tracked .run/ pruned to flip-ready: 218 paths untracked (172 tracked-but-ignored inertia files, 39 uncited t3s3 session logs + 5 duplicate close logs, the two fable_cd4 disassembly listings) — all still on disk; .gitignore re-includes narrowed under dated comments; tools/public_rewrite/untracked_after_rewrite.txt (audit-only sibling of the purge set, which stays byte-unchanged so gate_scan stays PASS); audit_public check 4 CONTENT (longest contiguous run of disassembly-shaped lines, cap 64; controls: 398/179 fail, the 40-line fixtures pass; 0 offenders among 6,443 paths after); runbook §11 residue paragraph; four tool comments annotated; SETUP row; log + checkpoint; P6 rules check Drew T 2026-09-07 18:04:15 -06:00
  • 21c98ed5a5 tools(phase-33.5): task 7 — the checkers: doc_links.py six checks (links + pending; the archive refusal; the wiki-first allow-list derived from the Reference index + README; docs/ coverage 64/64; TRACKED/UNTRACKED citations by git with --disk and the '(not kept)' declaration; wiki-first warnings), wiki_render --selftest reachability (31 pages, 0 unlisted), timeline.py wired into report/audit-digest (was stale: 72 -> 73 rows), gitignore_template_check.py behind a loud skip in tools-health; the cookbook control 13 -> 0 dangling (5 archived-doc cites re-pointed to docs/sunset, 8 scratch cites declared not kept); SETUP rows; log + checkpoint Drew T 2026-09-07 17:55:59 -06:00
  • 6ec4786bda docs(phase-33.5): task 6 — 59 documents archived into docs/sunset/ with git mv (25 closed-phase plans/studies, distill 2, history 4, tool-designs 11, generated-snapshots 17); docs/wiki/Archive-index.md (every file: what it was, what came of it, where it lives now — paths, never links) + docs/sunset/README.md (the owner's review checklist); DIGEST §4 rewritten around the wiki, §1 gen2-roadmap marked archived; history README + SETUP row refreshed; family-hseq.md stays (regenerated by the contract run) and joins the Reference index; pending list empty; checks: 59 rows == 59 files, archive coverage 0 missing, docs coverage 0 uncovered, doc_links 56 docs / 429 links / 0 broken; log + checkpoint Drew T 2026-09-07 17:48:52 -06:00
  • a0d4ae8368 docs(phase-33.5): task 5 — the six INTEGRATE documents folded into the wiki and how-to (three agent diffs): 'Matching by hand' in The-matching-workflow (two decompiles + the asm as arbiter, the loop, THE FIVE SIGNATURE MOVES, choosing targets, running it as a wave); ch.07 'Levers from the hand-matching era'; ch.02 conflicts-before-the-gate + the red-gate diagnosis + propagation as a gate; ch.09 'A wave, priced' / 'Instruction weight, not head count' / 'The gate's cost is paid in wall-clock' + yield rows with denominators; ch.05 the banked twin, face vs delivered mass, pipeline vs batch, gate the directory, step 6b Reconcile, the harvest yield series; the S37 execution block into wave-playbook §5; ch.03 the permuter-failures paragraph + the band attribution; ch.04 cites tooling-audit; 11 referrers re-pointed (0 links to the four leavers remain); 12 stale classes and 2 superseded figures deliberately not folded; log + checkpoint Drew T 2026-09-07 17:43:56 -06:00
  • 9970f1e628 docs(phase-33.5): task 4 — wiki: Reference-index (48 rows + 4 directory rows; the only sanctioned wiki→docs link site), Where-the-project-goes-next (Phase 34, then Gen3: the floor, the bar, the census with one pin count, the invariant, the order, the levers, conduct, shiftability, parked ideas), Contributing 'AI use — conduct', Home rewritten with the source-of-truth statement, sidebar sections Reference / Where next / History; gen3-handoff §8 R1–R83 + 43,925; Reference-index pending entry cleared; coverage check: uncovered == the task-6 leavers; log + checkpoint; P6 rules check Drew T 2026-09-07 17:32:09 -06:00
  • 5d10a0d126 docs(phase-33.5): task 3 — wiki 'Working conventions': Docs-and-scratch-conventions (where each kind of knowledge goes, authored vs generated, the link policy, the archive, .run/ ignored-by-contents with dated exceptions, the per-session layout) and The-ROM-firewall (the rule with no private exemption, the nine classes with their tracked forms, the copyable .gitignore template, the three enforcement layers + the one-list rule, the rewrite lessons as R76–R82, the one recorded residue); sidebar section; Repository-layout/Contributing/how-to ch.11 cross-links; two forward links registered PENDING (Reference-index task 4, Archive-index task 6); log + checkpoint Drew T 2026-09-07 17:25:30 -06:00
  • d06923a06c docs(phase-33.5): task 2 — unblock, doc side: six status banners corrected in place (concurrency-design implemented; gen2-mips model built; psyq-worklist COMPLETE; distill ledgers LANDED as §265–§269; hindsight-study HISTORICAL + supersession table); SETUP §1a rewritten (.run/ ignored by contents, allowlisted by dated exception); the pin count = 43,925 from one command in both Gen3 docs (44,243 counted comment lines, 43,857 missed the bare-name form); log + checkpoint Drew T 2026-09-07 17:19:09 -06:00
  • a0cf302e5b docs(phase-33.5): task 1 — unblock, code side: seven tool docstring/comment cites re-pointed off docs/tool-designs and docs/hindsight-study (decision-log S61 entry, cookbook §260, how-to ch.03 Phase 2b); CLAUDE.md R1–R83, the H1 fail-safe dated to Phase 33 C3, the effort default = the DIGEST §1 doctrine; log + checkpoint Drew T 2026-09-07 17:16:17 -06:00
  • 39d5249917 chore(phase-33.5): OPEN — gate 1 (Drew, 2026-09-07, plan mode, Max): docs consolidation + the wiki as source of truth + the tracked-.run/ prune + the day-one decomp kit (v1.32.0 -> v1.32.1) Drew T 2026-09-07 17:06:45 -06:00
  • 80d45b29bb chore(phase-33): CLOSE (re-chartered) — verified, rewritten, published-ready: the contract run, the in-place history rewrite, LICENSE/NOTICE/README, the releases, story/retrospective/wiki/how-to, the Gen3 charter; the flip is Phase 34 (v1.32.0) Drew T 2026-09-07 15:33:55 -06:00
  • b46358f279 docs(phase-33): the Gen3 charter docs/gen3-standards.md (accuracy met + stricter than the field; sotn STYLE.md adopted + four rules of ours; the use-of-AI conduct; the measured gap; a definition of done), README 'Standards, and how the AI was used', docs/phase34-seed.md (RE-CHARTER, Drew 2026-09-07: P33 closes now at v1.32.0; the flip-gated remainder = Phase 34 = the flip + Gen2 exit at v2.0.0; Gen3 = Phase 35+); doc_links + SETUP rows; checkpoint §0a + header; log Drew T 2026-09-07 14:46:53 -06:00
  • aa73085a6b docs(phase-33): gen3-handoff §2.2 — the standard to meet (sotn STYLE.md + CONTRIBUTING AI clause, decomp.me FAQ, rood-reverse), the community's gripe decomposed, the tree's readability gap measured (1,094 named vs 16,335 func_; 43,857 pins; 5,147 macro bodies in one 8.4 MB header; 3,558 carve-split files), and the Gen3 sequencing against P33; log Drew T 2026-09-07 14:36:55 -06:00
  • fae69a9175 fix(phase-33): the wiki waits for the flip after all — free-plan GitHub offers wikis only on public repos (settings page text recorded); wiki_sync message + checklist item 5 corrected Drew T 2026-09-07 14:23:14 -06:00
  • c05c6081bd docs(phase-33): README 'Tools from this project' section + wiki page (sidebar, Home row): xsig, the permuter driver (upstream pinned unmodified + our class swap; the only copy lives here), the codegen map, the decomp.me replica, the drafter write-up, the how-to; docs/outreach/tools-announcement.md stored for post-flip (developer's voice); checklist 5/5b (the wiki can be pushed NOW while private; xsig topics, fork deletion, the post); wiki_sync message corrected; SETUP rows; doc_links default Drew T 2026-09-07 14:20:05 -06:00
  • 7696b856e5 docs(phase-33): rule candidate (j) + decision-log pivot reworded to Drew's decision (developer's voice, no AI disclosure) Drew T 2026-09-07 14:08:42 -06:00
  • 642107493d docs(phase-33): Drew's decision on outward text — no AI acknowledgement; write the way a developer writes (rewritten from the facts, not de-telled model prose; the dense code-span formatting was the likely giveaway): E1 preset request + E2 Archipelago message rewritten in a developer's voice; rule candidate (j), decision log P33 S89, failure museum row 37, how-to §11 and the checklist reworded Drew T 2026-09-07 14:08:15 -06:00
  • a5943af98c docs(phase-33): E5 outcome — permuter PR #213 + issue #214 closed unmerged by the maintainer (wildcard rule intentional; rename symbols in the asm; nonzero floors fine interactively; the model-drafted text read as LLM-written) — recorded in permuter-ils §2/§3, SETUP row, decision log P33 S89, failure museum, how-to §11; binding lesson + rule candidate (j): outward text in Drew's own words or disclosed — the pending E1/E2 texts and the checklist re-labelled Drew T 2026-09-07 14:01:47 -06:00
  • 8fefb5f4c5 docs(phase-33): gen3-handoff §2.1 — external labels vs derived structure (owner Q&A at E2): the AP world labels ~342 globals and carries no structs; structure comes from our own source under the byte gate; names from observation, cited; Gen3 ordering caution (unify duplicate structs before naming; pins mechanical; naming = judgment + evidence) Drew T 2026-09-07 13:39:13 -06:00
  • bb290a5d3d checkpoint(phase-33): Drew's consolidated post-flip checklist (probe → flip → E1 → E2 → D3 outward → wiki → C11/G2) as checkpoint §0b + runbook §11 Drew T 2026-09-07 13:36:46 -06:00
  • a30b80b600 docs(phase-33): E2 — docs/outreach/archipelago.md: the Archipelago note with the decomp's answers to the BFM AP world's data (dow byte 0x80078EBA CONFIRMED via func_8014B084 — our dayCounter row corrected u8->u16 and 'dow not yet separable' resolved; their patch sites + Time-Sanity hook resolved to shared engine functions by a 141-image sig scan; the town-ID patch retired as historic; memory-map Q#13 ANSWERED: BASLUS-00726MUSASHI at 0x80072DFC in EXE .data, the client's 0x072e02 fallback is +4 off); GitHub-issue text + Discord short form, plain style, SEND AFTER THE FLIP; SETUP row + E2 section; doc_links default; log + checkpoint (36 of 41: nothing left for Claude before the flip) Drew T 2026-09-07 13:29:48 -06:00
  • 630c05bafc checkpoint(phase-33): Drew's six post-flip E1 steps recorded in the checkpoint §3 flip chain + runbook §11 (bundle .run/decompme/drew_bundle/, regenerable) Drew T 2026-09-07 13:19:38 -06:00
  • 95c142d2ae docs+tools(phase-33): E1 — docs/decompme-preset.md + tools/decompme_replica.sh: the decomp.me preset proven through decomp.me's OWN toolchain locally (old-gcc 0.13 + maspsx 86ccd7d8 rebuilt from decompme/compilers' Dockerfile; func_80018F20 26/26 words BYTE-IDENTICAL, control identical, cc1/maspsx deltas text-identical; -O1 and empty-TU negative controls; --upstream drift check); SETUP's stale 'decomp.me uses our maspsx pin' corrected (3 rows), §6.5 rewritten, E1 section + rows, ledger 14; presets are created by decomp.me's maintainers from an issue template (no UI create, no owner delete) — Drew's post-flip step = prove the scratch, file the request, the manual search; doc_links default; .run/P33/e1 log allowlisted; log + checkpoint (35 of 41) Drew T 2026-09-07 13:12:08 -06:00
  • 47d11e29b8 checkpoint(phase-33): C10 — GitHub Support ticket #4736982 filed by Drew via the Virtual Agent 'Clear cached views' flow (the route recorded in runbook §11 with the 'Deletes' trap); checkpoint §1/§2/to-do updated; daily probe until PASS Drew T 2026-09-07 12:50:48 -06:00
  • 87169e184c docs(phase-33): C10 preflight — the Activity-view leak measured (157 activity rows expose both pre-force-push tips; the old tip still serves the EXE, dumps and archive; probe 31/33 ALIVE, S76 lineage 4 days un-GC'd); runbook §11 ticket text names both tips + filing route, delete+recreate promoted to the deterministic alternative, enable Wikis before the push; rule candidate (i); log Drew T 2026-09-07 12:27:34 -06:00
  • 78857d7ca6 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 Drew T 2026-09-07 12:11:21 -06:00
  • ec6db382db checkpoint(phase-33): S88 update after the outward pushes — the nine commits are pushed and both workflows ran green on them (incl. the new gccmap_cites + xsig audit steps); the gc ran (one 80 MB pack); probe_github's positive control now checks origin/main, not the local main (an unpushed commit failed it); the block's to-do, repo state and file inventory reconciled Drew T 2026-09-07 11:54:25 -06:00
  • a00907040d chore(phase-33): the outward pushes — Druthulu/xsig created public and pushed (c8d862c); decomp-permuter forked and reloc-masked-scorer pushed (f276733: the scorer + a USAGE note sharing the restart recipe); a plain contributor-style pass on the PR content (docstring/comments/help/docs/commit message, 0 AI or em-dash tells) and on tools/xsig/README.md + docs/permuter-ils.md; the tracked patch regenerated (2 commits, git am OK); SETUP rows; log + to-do (Drew: open the PR, file the issue) Drew T 2026-09-07 11:51:12 -06:00
  • f215ba0b3c checkpoint(phase-33): S88 close — the 🛑 block reconciled for a fresh session (34 of 41 done: F3, E3–E6, G1 this session; Drew's ordered to-do — push, gc, ticket + daily probe, the xsig repo, the permuter fork/PR/issue, then the flip chain; NEXT for Claude = C11 after the probe passes, then G2) Drew T 2026-09-07 11:37:19 -06:00
  • 583ec85d6e docs(phase-33): G1 — docs/gen3-handoff.md: where Gen2 ends, the owner's next intent (casts -> structs, pins off, names), the starter census DERIVED from the tree with its commands (143 raw address casts, 61,898 D_ symbols, 16,335 func_ names — the plan's numbers reproduced — plus 44,243 register pins, 1,258 Sony tiles, 1,083 symbol-file entries, 1,232 struct defs, 2,220 dedup groups), the one invariant (every edit byte-gated; shared bodies change every member; types are comprehension not bytes), the inherited levers, shiftability honestly scoped, the parked Gen3 ideas, governance for a new generation; SETUP row + P33 G1 section; doc_links default; log + checkpoint (34 of 41: everything Claude can do before the flip is done — NEXT = the probe-gated chain on Drew's side, then C11, then G2); G1 pulled ahead of the plan's C11 -> G1 order (recorded) Drew T 2026-09-07 11:35:50 -06:00
  • 98e5846662 docs(phase-33): E6 — docs/matching-drafter-pipeline.md: the fine-tuned local matching drafter written up from the Phase 22–25 records (the toolchain-agnostic pipeline export_pairs → format_finetune → train_lora → eval_lora → serve_local → api_draft/lora_grind/bulk_harvest → the byte gate; the measured arc as one table — stock floor ~0, corpus-v2 85% on 6–15 ins, the 0/222 harness bugs, corpus-v3 57.5% held-out + ~352 production banks at $0, bulk_harvest 65% at 0.4 s/fn, GLM5.2 10/18 bodies but 3/18 banks = the def-side wall, v4 discarded; the portable lessons; hardware; a five-step recipe; what is NOT published — the ROM-derived pair dataset and the adapter weights, both gitignored); SETUP row + P33 E6 section; doc_links default; log + checkpoint (Block E complete; NEXT = G1, pulled ahead of the probe-gated items) Drew T 2026-09-07 11:32:42 -06:00
  • bf002f84d2 tools(phase-33): E5 — the permuter upstream PR branch (reloc-masked-scorer: src/reloc_scorer.py RelocMaskedScorer as a Scorer subclass, --score-mode {mnemonic,reloc-masked} + score_mode setting, -J refusal, docs, test/test_reloc_scorer.py 10/10 on an embedded gcc-2.7.2 listing; black clean, mypy at upstream's baseline; the real permuter: a swapped-operand base 4 -> 0 in 256 iterations where the default scorer read 3,585) tracked as tools/permuter/upstream/0001-reloc-masked-scorer.patch (git am clean onto upstream main 41bd0bfc); docs/permuter-ils.md (why the stock scorer floats, the scorer + PR, the symbol_regex issue text for PR-2, the ILS warm-restart recipe and its five guards); SETUP row + P33 E5 section; doc_links default; log + checkpoint (NEXT = E6); Drew pushes the branch to his fork and opens the PR + issue Drew T 2026-09-07 11:29:35 -06:00
  • 9c4d32d651 tools(phase-33): E4 — xsig packaged: tools/xsig/ (xsig.py library + CLI sign-s | sign-objdump | cross | verify | selftest, from the Phase-21 .run/xdedup probe; README with the recorded worked example — BFM × Xenogears + Vagrant Story 103 hits all PsyQ library/BIOS, BFM × Tomba 126 hits 124 library: the decision log's clean negative; MIT LICENSE; tests/ from a game-free fixture compiled with the pinned triple and linked at two addresses with --emit-relocs, relocation records merged into the listings, 8/8) in tools-health + CI + doc_links; SETUP row + P33 E4 section; the standalone copy at .run/P33/xsig-repo/ (one commit, noreply identity, system-python tests OK) for Drew to push as Druthulu/xsig; log + checkpoint (NEXT = E5, a cut candidate for Drew) Drew T 2026-09-07 02:51:02 -06:00
  • 50c1b69e4d docs(phase-33): E3 — docs/gcc-2.7.2-map/README.md (the five files by pass group, the condensed §31 triage table, the byte-proof method, the provenance legend: vanilla 2.7.2 subset from the GNU tarball sha256 7cd8bce5… vs pmret/gcc-papermario = gcc 2.8.1, the +611-line drift caveat, the S23 audit 119/40/7/4) + tools/gccmap_cites.py: every file.c:NNN cite in the map tagged [2.7.2]/[2.8.1 pm]/[repo] from the trees (quoted snippets → function extents → nearest occurrence → the author's cues → cite_overrides.tsv, 20 rows with reasons → a tie is a valid 2.7.2 line; a contradiction leaves [?]); 135 cites: 79/55/1, --verify 0 disagreements, --controls 6/6, idempotent; three tagger defects caught by its own controls before any tag landed (window span pairing, code fences, self-read cues); --check (textual) in tools-health + CI audits; doc_links default; SETUP row + P33 E3 section; log + checkpoint (NEXT = E4); 8 orphaned 49h permuter workers stopped Drew T 2026-09-07 02:32:57 -06:00
  • 0cf971d1f4 docs(phase-33): F3 CLOSE — the wiring: wiki_render --selftest in make tools-health (run: OK, 12/12 inside it), SETUP rows + the P33 F3 section (25 pages / 264 links / 1,896 lines; sources named), runbook §11 gains the post-flip wiki step (first page in the UI, then tools/wiki_sync.sh --push — Drew); CURRENT_PHASE: F3 ticked, the S88 F3 log entry, the checkpoint rewritten for the successor (NEXT = E3; Drew's pending gc + ticket status; rule candidate (h): a probe never writes into the repository it guards) Drew T 2026-09-07 02:05:45 -06:00
  • 954362c81e docs(phase-33): F3 the wiki + how-to-AI-decomp, authored in-repo — docs/wiki/ (Home, Build from your own disc, Toolchain setup, Repository layout, The matching workflow, The dedup engine, Overlays and modules, Ghidra rebuild from text, Verification and progress, Contributing and the no-ROM policy, How-to-AI-decomp index, _Sidebar) + docs/how-to-ai-decomp/ chapters 00–12 (governance, byte gate, bootstrap order, oracles and instruments, cards/lanes/waves, knowledge base, compiler source, models and budgets, economics, integration and propagation, publishing, failure museum); tools/wiki_render.py (link rewrite to GitHub-wiki page names, dead link = error, 12-case selftest) + tools/wiki_sync.sh (render → clone → replace → diff; --push is Drew's, R6; dry-run works before the wiki repo exists); doc_links checks both directories by default (DEFAULT_GLOBS); pending list EMPTY, --strict PASS: 40 documents / 290 links / 0 broken; 25 pages rendered, 264 links rewritten Drew T 2026-09-07 01:57:24 -06:00
  • 214d0dd15b fix(phase-33): probe_github.sh fetches into a throwaway scratch repo (R57) — the S87 baseline + first S88 probe runs had imported 5.97 GiB / 30 packs of the purged history into ~/bfm-decomp as unreachable objects (a successful git fetch of an old sha pulls its whole closure); now --filter=blob:none --depth=1 into .run/public_rewrite/probe_scratch.git (deleted on exit) + a self-check naming any sampled old commit the working repo still holds + the gc recipe (control: count-objects identical before/after, verdict unchanged 31/33 ALIVE); runbook §11 + SETUP row; S88 preflight logged (Drew pushed; no-rom + progress workflows GREEN on first run; F3 = FULL) Drew T 2026-09-07 01:41:08 -06:00
  • 5e57e88de2 docs(phase-33): F2 the retrospective — tools/mine_hindsight.py (19 hindsight items over 79 decision-log entries, 2 believed-sections, 237 deviation rows, file:line anchored) -> docs/retrospective.md (belief-vs-truth table, eight failures and why they looked right, costs with denominators, ten 'sooner' items, what stayed hard); doc_links pending list EMPTY (--strict PASS); SETUP row; S87 closes at 87% context — checkpoint rewritten for the successor: NEXT = F3 (scope = Drew's call) Drew T 2026-09-07 01:16:08 -06:00
  • c8c4e37f5a fix(phase-33): doc_links — a missing default document that is on the pending list counts as PENDING, not BROKEN (docs/retrospective.md until F2) Drew T 2026-09-07 01:11:04 -06:00
  • 5b03ae1d5a docs(phase-33): F1 the timeline + the story — tools/timeline.py (72 dated rows from the committed digests' history, keyed by date, PhaseEnd ticks, self-check == progress.json; the 07-22 denominator note computed from the rows, not asserted) -> docs/story-timeline.md + .svg; docs/story.md (the narrative from the first commit to the flip, every section citing its PhaseEnd / decision-log / timeline sources); pending list -> 1; SETUP row; checkpoint -> NEXT = F2 Drew T 2026-09-07 01:10:48 -06:00
  • 2cbedf5878 docs(phase-33): D5 governing-docs consistency — CLAUDE.md fail-safe names every purged path (H1 in force), DIGEST §1 H1/R1/R20 + the Phase-14→P33 in-place flip, roadmap-to-100 'Status at Phase 33' block, gen2-roadmap Phase-14 SUPERSEDED banner; tools/doc_links.py (relative-link checker with a tracked pending list that gate 2 refuses; negative control rc 1) in tools-health; SETUP row; checkpoint -> NEXT = F1 (Block D done) Drew T 2026-09-07 01:05:53 -06:00
  • f679d4deeb docs(phase-33): D4 the SETUP.md public-clean pass — public-from-P33 header refresh, the remote (origin + the private archive), generic dump path, §4.7 tarballs tracked, §6.5 the decomp.me preset line, the backup section rewritten as the PUBLIC posture with the private era as a dated note (two-repo mirror plan superseded), ledger row 11 closed / 14 → E1, the one missing R21 row (verify_contract.sh); checkpoint -> NEXT = D5 Drew T 2026-09-07 01:03:41 -06:00
  • ecf67e6ff3 feat(phase-33): D3 progress publishing — per-binary instruction totals in docs/progress.json, docs/badges/*.json (shields endpoint), --check covers JSON + README block + badges (in make audit-digest), tools/objdiff_report.py (report.proto v2; validated with objdiff-cli 3.8.1 incl. a mutated-unit control), tools/frogress_upload.py (dry-run default), .github/workflows/progress.yml (artifact SLUS_007.26_report, no rebuild); SETUP rows + P33 D1–D3 section; checkpoint -> NEXT = D4 Drew T 2026-09-07 01:01:28 -06:00
  • af482a02d4 docs(phase-33): D2 — LICENSE (AGPL-3.0 verbatim from gnu.org), src/NOTICE.md (reimplementation for study/preservation, © 1998 Square acknowledged, no license asserted, no 'clean-room'), THIRD_PARTY.md (17 rows, every license read from the upstream LICENSE file or the GitHub API; old-gcc and ghidra_psx_ldr publish none — download-only; the SDK never distributed), tools/README.md (the one AGPL statement); checkpoint -> NEXT = D3 Drew T 2026-09-07 00:53:58 -06:00
  • 848f294fc8 docs(phase-33): D1 the README rewrite — the claim and the contract, a GENERATED numbers block (tools/progress.py --json -> docs/progress.json, --readme rewrites the marked block, --check asserts freshness; wired into make report), what is not our C, build-from-your-own-disc, layout, how it was made (ProjectArchitect), about the history (tokens + commit-map), license split, no-ROM policy, special thanks; forward references to D2/D3/F1/F2 files recorded in the checkpoint Drew T 2026-09-07 00:51:24 -06:00
  • 16ecca474d chore(phase-33): C9 — the rewritten history is on origin (force-pushed by Drew, 176,052 objects); local gc: archive remote removed, 12 stale campaign worktrees removed (they pinned 3,729 old commits: a linked worktree's HEAD is reachable), reflog expired, repacked to one 80 MB pack (.git 1.5 GB -> 93 MB), fresh commit-graph, fsck clean; absent_scan + gate_scan --all --worktree PASS; probe baseline 31 of 33 old hashes still alive on GitHub (422 now counts as gone); runbook §10/§12 measured; checkpoint -> C10 (Drew) in parallel with D1 Drew T 2026-09-07 00:44:27 -06:00
  • e821833986 verify(phase-33): C8 — the recorded contract run on the REWRITTEN tree: check-all 218/218 from a clean fleet (176 s), sdk-dual OK both legs, tools-health OK (0 PHANTOM/TRUNCATED/PAD-TAIL), audit-disc UNCLAIMED 0, report 363214/363214 · 13492113/13492113 · 5820205/5820205 · main 45150/45150, stubs 0; a content-preserving rewrite changed no tracked-content byte — proven; SUMMARY into docs/verification.md §2; checkpoint -> NEXT = C9 (Drew's force-push) Drew T 2026-09-06 23:45:48 -06:00
  • 5bc4a5c0ab fix(phase-33): verify_contract step 00 ignores its own output directory — the per-step logs are tracked evidence since A5 and run_step writes 00_tree.log before the porcelain check (C8 failed on its own log twice) Drew T 2026-09-06 23:30:13 -06:00
  • 4f7c3b64a3 docs(phase-33): commit-map + citations resolved to the rewritten history (C4–C7 — the tip commit) Drew T 2026-09-06 23:28:39 -06:00
  • 494fbd3c82 chore(phase-33): C2 the recorded controls on the final pre-rewrite tree — hash_dict 4,421 objects / 0 ambiguous / 0 collisions; scrub sample 732 tokens == git's own lookup; gate_scan --expect-fail PASS over 16.79 GB (every rule named, 0 strays, 268 ids, the shared empty blob excluded); audit_public OK; run_filter now refuses a stale dictionary (R43); checkpoint -> NEXT = C4 (waiting on Drew's archive mirror push) Drew T 2026-09-06 22:42:09 -06:00
  • fca3839049 feat(phase-33): C1 the history-rewrite tooling — tools/public_rewrite/ (git-filter-repo 2.47.0), PROVEN by two trial rewrites on a scratch bare clone Drew T 2026-09-06 22:37:10 -06:00
  • 2b45081b5f chore(phase-33): C3 the preparatory commit — the purge set leaves the INDEX (251 entries, files stay on disk, all ignored): the retail EXE, 28 RAM dumps, ghidra/ (27), tools/psyq/ (189), session archive/ (3), the 2 extension zips, brave.exe Drew T 2026-09-06 21:22:25 -06:00
  • 19832e1693 verify(phase-33): A5 THE RECORDED RUN — PASS on commit:4028: check-all 218/218 from a clean fleet (157 s), sdk-dual OK both legs, tools-health OK (0 PHANTOM/TRUNCATED/PAD-TAIL, 0 warns), audit-frontier 1,258 stubs all in main's LINKED regions / 0 game-code, audit-disc UNCLAIMED 0, report 363214/363214 · 13492113/13492113 · 5820205/5820205 · main 45150/45150, stubs 0, backlog 0; every step EXIT=0 with its contract line; logs + maps + SUMMARY tracked under .run/P33/verify/, SUMMARY pasted into docs/verification.md §2; checkpoint -> NEXT = B9/C3 Drew T 2026-09-06 21:13:09 -06:00
  • 3e0ecfaccf fix(phase-33): audit_frontier's LINKED-stub count reads the Stub records (the reference view holds addresses) — control: 1,258 total, 1,258 inside LINKED, 0 game-code; docs/family-hseq.md regenerated by the aborted run's step 02 Drew T 2026-09-06 20:58:29 -06:00
  • 8845fdd994 fix(phase-33): audit_frontier keys main as SLUS_007.26 in the reference view (the derived LINKED-stub line read 0 — now 1,258 inside LINKED, 0 game-code); verify_contract step 00 checks tracked files only (-uno) so the run's own untracked logs cannot fail it Drew T 2026-09-06 20:56:40 -06:00
  • 1e3ce6c1c8 chore(phase-33): A5 prep — tools/verify_contract.sh (the recorded contract run: per-step logs ending EXIT=rc, abort on first red, contract-line asserts, SUMMARY.md), .run/P33/verify/ allowlisted, audit_frontier's denominator lines DERIVED (1,258 stubs = main's LINKED regions, 0 game-code; disc UNCLAIMED from the ledger; the typed '39 modules / missing oracle' caveat was stale since P30/P31) Drew T 2026-09-06 20:56:04 -06:00
  • b2fb392ada docs(phase-33): B8 — docs/verification.md (the public verify-it-yourself page: redump SHA1s, the R22 recipe with every expected last line, what is not our C, the recorded-run table pending A5, what CI proves) + SETUP as-built pointers (§4.4 disc-extract, §4.6 bootstrap, §4.8 fetch_psyq, §6.3 make help + the R22 line) + the backup-posture P33 update (R20's new home: config/ghidra + --proof; never git clean -x); checkpoint -> NEXT = P6 check, A5 Drew T 2026-09-06 20:52:07 -06:00
  • 6732771fe0 feat(phase-33): B7 the ROM-free CI — no-rom.yml (audits + compile-only), tools/audit_public.py (the first-push gate), tools/compile_only.py, tools/public_rewrite/purge_set.txt Drew T 2026-09-06 20:50:11 -06:00
  • d379537322 docs(phase-33): B6 dumps — dumps/CHECKSUMS.sha1 (28 rows, --check 28/28) committed before the .bin leave git; INDEX.md status rewritten (LOCAL-ONLY from the flip, archive repo holds the copy, a re-capture is a new snapshot never byte-identical); memory-map Source-index row for the corpus; checkpoint -> NEXT = B7 Drew T 2026-09-06 20:33:29 -06:00
  • 936d7d741c feat(phase-33): B5 Ghidra regenerability PROVEN — the RE work as text (config/ghidra/*.jsonl + ROSTER.md), six programs rebuilt from disc + symbol files + that file with PROOF PASS Drew T 2026-09-06 20:32:35 -06:00
  • bc37b257ee docs(phase-33): decision-log — the in-place flip pivot (why not the two-repo mirror; the fixed-point rule for hashes) and the build-derived main denominator (R31) Drew T 2026-09-06 19:32:10 -06:00
  • cabab00c0e wip(phase-33): B5 Ghidra regenerability — ExportAnnotations.java + ghidra_export_annotations.sh PROVEN (all 129 programs exported to byte-stable JSONL in 18.5 s), ghidra_annotations_delta.py (live − baseline), ImportAnnotations.java + ghidra_rebuild.sh WRITTEN but unproven (the resident rebuild hit an OSGi script-bundle load error — a compile error in the new importer breaks every script in the dir; the known bad LocalVariableImpl ctor is named in CURRENT_PHASE); Makefile print-% + GHIDRA_PROJ repo-relative; the six ghidra_*.sh repo-relative (BFM_GHIDRA_PROJ); DefineFunctions arg path; ImportPsyqGdt install-dir default; ExportSymbols R15 fix; scratch project under build/ (Ghidra refuses '.'-prefixed path components); SETUP P33 B5 section; checkpoint refreshed for the next session (S86 paused at 87% context) Drew T 2026-09-06 19:31:34 -06:00
  • 707ec491e4 feat(phase-33): B4 tools/fetch_psyq.sh — the OPTIONAL PsyQ SDK objects, user-supplied and sha256-verified (parser tarball + binary, RTL 4.2 archive -> lib421, the 20 PsyQ 4.0 LIBs off the DTL-S2002 redump disc via tools/psyq_libs_from_disc.py or --from), then the existing builders + make sdk-dual; tools/psyq/CHECKSUMS.sha256 -> tools/psyq_CHECKSUMS.sha256 with 22 new rows; controls: refuse without a 4.0 source, die on a corrupted LIB; the disc-path run rebuilt every SDK dir and proved sdk-dual in 37 s; SETUP P33 B4 (R21) Drew T 2026-09-06 19:19:06 -06:00
  • 89e087f52a feat(phase-33): B3 tools/bootstrap.sh + make bootstrap (apt presence printed, venv from requirements, submodules, cc1 tarballs sha256-checked + extracted, check-env) + check-env gains submodule/preset-header/payload-census lines; PROVEN on a fresh clone: bootstrap from nothing -> check-env OK -> disc-extract OK -> extract-all 217/217 -> check-all 218/218 in 4m18s with no SDK objects (the public user's path); SETUP P33 B3 (R21) Drew T 2026-09-06 19:14:11 -06:00
  • 9be6364a5b feat(phase-33): B2 portable includes — 34 absolute #include lines in 19 overlay sources (15 binaries) respelled to ../shared/ (30 engine_core.h + 4 engine_types.h); audit_text_sources.py gains the portable-include class (absolute / angle-bracket / unresolvable / outside-repo), controls 34 offenders before -> 0 after over 4,299 sources; the 15 binaries re-gated byte-identical (15/15 OK, 29 s wall); SETUP P33 B2 (R21) Drew T 2026-09-06 19:06:03 -06:00
  • 0265712916 feat(phase-33): B1 make disc-extract — the rom->decoder step in the build: extract.py --expect-manifest (compare against the committed oracle, never write it; mismatch -> .run/extract/ + diffs, exit 1) + --allow-missing-audio (explicit PARTIAL for Track-1-only dumps); disc-extract = probe (0.7 s no-op) -> disc presence -> redump SHA1/CRC32 -> extract+compare -> verify (15.7 s full); extract/extract-all call it; check-env WARN-on-absent EXE + oracle self-consistency; help rewritten; the 4 splat preset headers TRACKED (clean keeps them); .gitignore re-tightened to H1 (dumps/*.bin, ghidra/, tools/psyq/, session archive/, ghidra-ext zips, brave.exe; EXE re-include dropped); controls: no-disc exit 2, truncated disc FAILs with the oracle untouched, regenerated tree byte-identical to the previous (1,801 files) Drew T 2026-09-06 19:02:34 -06:00
  • 62854caca0 fix(phase-33): A4 family map carries its own coverage — family_hseq.json records the 217 scanned binaries + open_instances (0), audit_binaries CHECK 4 reads that denominator instead of inferring it from (now empty) families; regenerating the map had turned the P32-close 6-binary warn into 217 'missing' from a COMPLETE map (R35); controls: 0 [warn] now, the old format warns 'predates the coverage field'; docs/family-hseq.md regenerated (0 families); SETUP P33 A4 (R21) Drew T 2026-09-06 18:55:21 -06:00
  • 4bb29544a2 feat(phase-33): A3 the with/without-SDK dual — NO_SDK=1 knob (skips the eleven psyq_integrate rewrites AND the -T externals fragments), make sdk-dual (refuses without all 11 SDK object dirs; WITH → extract → rm build/psyq → NO_SDK=1 → extract → WITH restore; map assertions; both legs == config/check.us.sha), wired into tools-health with a [skip] when the SDK is absent; proven: main 143dbb89… byte-identical WITH (1,288 psyq objects) and WITHOUT (12 libcd1 stub tiles), 28 s wall; SETUP P33 A3 (R21) Drew T 2026-09-06 18:51:19 -06:00
  • b23300fc21 feat(phase-33): A2 reporting instruments — make sig-main rewritten (tools/main_seed_ends.py: main's game-code boundaries DERIVED from the link map + objects, tiling asserted; 809 fns / 45,150 ins), progress.py weighs main by the build-derived sig and EXITS with no sig (R32), the digest's oracle clause derived live (0 phantom / 0 truncated / 0 pad-tail), backlog.linked_closed retires the LINKED-range legacy row (0 open), dup_report on the derived sig; CORRECTED main denominator 45,150 (Ghidra's flow boundaries left 3,628 words of game code unowned) — fleet instr 13,492,113 / distinct 5,820,205, all 100%; make report BINARY=main EXIT=0, audit-digest OK; SETUP §6.8 + P33 A2 rows (R21) Drew T 2026-09-06 18:46:52 -06:00
  • 73068f39f0 docs(phase-33): A1 governance — R65–R73 ratified at gate 1 (DIGEST §3), CURRENT_PHASE.md opened with the approved plan (verbatim) + the first 🛑 checkpoint; harness task list built (41 items, R28) Drew T 2026-09-06 18:30:30 -06:00
  • b5b79b3ac1 chore(phase-32): CLOSE — the frontier is empty: 0 stubs across 218 binaries, fleet 100.00 / 100.0 / 100.0, main 2,091/2,091 (v1.31.0) Drew T 2026-09-06 16:29:00 -06:00
  • ea27bceb1e docs(phase-32): T4c CLOSE — fleet R22 after the last banks 218 passed / 0 failed (exits 0/0/0, 16:13:17 MDT); make report: 100.00% / 100.0% / 100.0%, INCLUDE_ASM 0, main 2,091/2,091 (143dbb89); gate 2 confirmed by Drew Drew T 2026-09-06 16:20:59 -06:00
  • 6e37e8ec62 docs(phase-32): T4c harvest + checkpoint — the frontier is EMPTY (census 0 stubs / 0 ins); cookbook §501-Q (the combine self-update ghost slot) + §501-R (a hoisted invariant read three times: inline temps merged by combine_movables, u16 as a cse firewall, the allocation order IS the callee-saved bank; every pin came off), accelerators (15)(16), decision-log P32 S85 T4c, tools/cc1_dumps_tu.sh + tools/alloc_table.py promoted (+ SETUP rows, cc1_dumps.sh -dL), wave_exclude 0 entries, backlog 1 legacy row, .run/P32/t4e (56 variants, 18+8 reproducers, NOTES, banks, slates); 🛑 checkpoint refreshed as the T5 seed (the fleet R22 + report chain runs in the background — its logs are recorded by the next session) Drew T 2026-09-06 16:13:19 -06:00
  • ffb1949a1b feat(phase-32): T4c hand pass — main:func_80039308 (518 ins) BANKED byte-identical with ZERO pins: the phantom frame slot is a combine ghost (a self-update chain on the s0[1] load), the hoisted volume base is three inline (b2 * 0x100) temps merged by loop.c's combine_movables with a u16 vol accumulator so cse leaves the arms on the hoisted register, and the else head reuses the note-on arm's s17/s18 (S85) — main has NO INCLUDE_ASM stubs left Drew T 2026-09-06 16:02:03 -06:00
  • f9a90affbd feat(phase-32): T4c hand pass — main:func_80032A74 (422 ins) BANKED byte-identical: the "PROVED" 8-byte orphan slot was a missed producer — a combine ghost minted by a self-update whose deleted insn re-mentions its own dest (combine.c:2306 skips the ref decrement); a three-statement chain on the dd->unk07 compare buys the slot at zero instruction cost (S85) Drew T 2026-09-06 15:03:24 -06:00
  • fe2f34b9f4 docs(phase-32): T4b CLOSE — hand pass complete (13/15 banked + 2 final verdicts); fleet R22 after the last bank 218 passed / 0 failed (exits 0/0/0, 13:21:49 MDT); make report: instr 13,487,557/13,488,497 = 100.0% · distinct 100.0% · fn-count 100.00% · INCLUDE_ASM 2; main 2,089/2,091 = 99.90% (143dbb89); tools-health OK; audit-disc UNCLAIMED 0; 🛑 checkpoint refreshed as the T5 seed Drew T 2026-09-06 13:38:01 -06:00
  • 0ab474ed5d docs(phase-32): T4b hand pass — row (d) harvest: cookbook §501-P (the atlas's 0.55 "weak cousin" was the same-shape sibling; its natural spelling ported with ZERO pins/fences; the 12-variant element census), accelerators (14), decision-log P32 S85, NOTES + 12 measured variants + rtu logs; backlog 3 open; census 2 stubs / 940 ins; T4b hand pass COMPLETE (13/15 banked + 2 verdicts) Drew T 2026-09-06 13:21:29 -06:00
  • cdd9a2cb8e feat(phase-32): T4b hand pass — ov_SC03_105:func_80185810 (489 ins) BANKED byte-identical: the banked cousin ov_SC02_027:func_80180B3C's packet-window spelling ported (cookbook §501-P); zero pins, zero fences, zero asm dials (S85) Drew T 2026-09-06 13:12:18 -06:00
  • e7679b51ff docs(phase-32): T4b hand pass — row (c) func_80039308 PLATEAU at 4 (§501-O phantom-slot census for a leaf; ledger row); 🛑 CHECKPOINT refreshed for the pause: (a) PROVED · (b) BANKED commit:4001 · (c) PLATEAU 4 · (d) NEXT (sibling search first), then T4b close and T5 Drew T 2026-09-06 12:31:08 -06:00
  • 3e90db193f docs(phase-32): T4b hand pass — row (b) harvest: cookbook §501-N (port the banked sibling's spelling; the asm-label u32 array alias unlocks cse's OT base binding), accelerators (13), NOTES + 7 measured variants; ledger 4 open; bank.sh session trailer from $CLAUDE_SESSION Drew T 2026-09-06 12:08:11 -06:00
  • 8fa12bc226 feat(phase-32): T4b hand pass — md_MAIN_007:func_800CF408 (178 ins) BANKED byte-identical: the banked sibling func_800CD92C's spelling ported (libgpu P_TAG shape, u32 array view of the OT symbol via the fleet's asm-label alias); zero pins, zero asm bodies (S84) Drew T 2026-09-06 12:06:00 -06:00
  • b6fd3fff28 docs(phase-32): T4b hand pass — func_80032A74 PROVED at 1 by producer census (§501-M); ghost_census.py + cc1_dumps.sh repair; backlog tie-break repair Drew T 2026-09-06 11:44:40 -06:00
  • bfeef0c3a1 docs(phase-32): backlog ledger rows from the T4b close (render-time pruning of the banked rows) Drew T 2026-09-05 23:56:32 -06:00
  • f1f3346cdf docs(phase-32): T4b close — make tools-health OK quoted in the 🛑 checkpoint; log kept Drew T 2026-09-05 23:56:17 -06:00
  • efdb4c12a2 docs(phase-32): 🛑 CHECKPOINT — T4b first pass complete (11 of 15 banked, 4 carried with hand-crack briefs; Drew: hand-crack next session, no agents); fleet R22 218/218 at 23:36; make report instr 100.0% / distinct 100.0% (90,982/90,984) / fn 100.00% / 4 stubs; census 4 / 1,607 ins Drew T 2026-09-05 23:52:36 -06:00
  • fcec654163 docs(phase-32): cookbook §501-L — when two dials share a slot they couple (func_800CF408's floater cure vs the qty_compare contest; the decoupling lever) Drew T 2026-09-05 23:34:08 -06:00
  • 77b63f0bb5 docs(phase-32): T4b — func_800CF408 49 -> 3 NEAR, zero pins (Fable, 499k tokens): §501-H closers; residual = §501-H's floater mechanism coupled to the $t2/$t3 qty_compare contest; backlog row with the decoupling lever; all 15 first-pass rows complete (11 MATCH / 4 NEAR) Drew T 2026-09-05 23:33:33 -06:00
  • 90b2425ee0 docs(phase-32): cookbook §501-J (a proved tree wall is not an RTL wall — §474's floor built at RTL level via EXPAND_SUM, func_80011380) + §501-K (sched2's /s-store exemption and a pseudo's own slot vs a hand pad, func_800CF6D0); checkpoint §1b: 11 banked, 1 in flight, 1 pin left Drew T 2026-09-05 23:23:31 -06:00
  • 6f2731f0db docs(phase-32): T4b (11) ledger — func_800CF6D0 banked, backlog re-rendered, the Fable draft + report + verdict kept Drew T 2026-09-05 23:22:56 -06:00
  • 228928dbec feat(phase-32): T4b (11) — md_MAIN_007: func_800CF6D0 (249 ins) BANKED byte-identical 2ff702b6 — the 137-row plateau falls with zero pins: the QI/HI store split was sched2's true_dependence exemption for /s varying stores (cast field stores restore it), ob assigned before block 1 wins the $t2/$t3 flow ref-count tie, and the folded-sum pseudo's own 4-byte slot IS the 0x18 frame (Fable agent) Drew T 2026-09-05 23:22:46 -06:00
  • 444e8ab4b5 docs(phase-32): T4b (10) ledger — func_80011380 unpinned (1 wall remains: func_80032A74), backlog re-rendered, the Fable draft + report + verdict kept Drew T 2026-09-05 23:22:09 -06:00
  • 35fa116741 feat(phase-32): T4b (10) — main: func_80011380 (192 ins, boot -O0) BANKED byte-identical 143dbb89 via gate_main — the §474 "PROVED C-level floor" falls: a proved TREE wall is not an RTL wall — (D_80074784 * 2 + 1) * 2 - 2 keeps MULT(PLUS(MULT(i,2),1),2) past fold and the expander's distributive law rebuilds the nested multiply (Fable agent) Drew T 2026-09-05 23:21:54 -06:00
  • 395333f233 docs(phase-32): decision-log P32 S83 T4b (R31) — the final-15 directive: hand pass 0 banks, Fable agents 9 of 12 (six former walls), costs and outages; accelerators (10) Fable on the compiler-internals class, (11) attribute the residual to a pass before sweeping Drew T 2026-09-05 23:16:50 -06:00
  • d7d484abab docs(phase-32): T4b — Drew: no second round this session; close order after the three in-flight rows (R22, report, census, decision-log, accelerators, checkpoint) Drew T 2026-09-05 23:14:51 -06:00
  • 5e8e22a93c docs(phase-32): 🛑 checkpoint §1b — T4b state: 9 banked (commits listed), 3 NEAR improved with next levers, 3 agents in flight, queue empty; fleet R22 pending before any close Drew T 2026-09-05 19:26:57 -06:00
  • 9189a7caed docs(phase-32): T4b — func_80039308 17 -> 4 NEAR (Fable, 655k tokens): the alias block + rows 390/391 closed; residual = a phantom 8-byte spill slot at sp+8 (reload's $s7 spill register) + the hoisted constant's preheader order; corrected law: equal-priority load/store ties go to the store via potential_hazard; backlog row + draft + report kept Drew T 2026-09-05 19:26:19 -06:00
  • da90d3fc28 docs(phase-32): cookbook §501-I — manufacturing §172 producer-2 orphans (an s16 read from memory at each use), the shared-scratch store dependence, the laundered first-statement address (func_8017DC80); T4b row (9 banked) Drew T 2026-09-05 19:19:42 -06:00
  • d753c44172 docs(phase-32): T4b (9) ledger — func_8017DC80 banked (ov_SC07_002), backlog re-rendered, the Fable draft + report + verdict kept; queue updated Drew T 2026-09-05 19:19:06 -06:00
  • 825da37bc0 feat(phase-32): T4b (9) — ov_SC07_002: func_8017DC80 (346 ins) BANKED byte-identical — the historic -33 LENGTH wall's last 46 rows: two combine USE-orphans from reading the s16 mode from memory at each use (§172 producer 2), ONE scratch variable carrying the len byte and the tpage word (the sb's anti-dependence), and a laundered first-statement arg = &D_800AF648 (Fable agent) Drew T 2026-09-05 19:18:45 -06:00