Drew T
e4b25e5f70
tools(phase-35): T5 — share_body_cycle.sh, the unattended batch cycle for bucket new (batch → exit code + gated N/N → phase-log entry → commit → clean fleet run every N batches, stops on the first red); share_body --label; dictionary row + SETUP; kit corpus
2026-09-08 19:53:09 -06:00
Drew T
a60340c6d4
src(phase-35): T5 — E_func_80168B70 re-exemplared from the majority text (share_body.py --reexemplar: header ← ov_SC01_000's copy, 7/7 includers green first, then 134 private copies → the include in 129 TUs, 141/141 binaries green, 0 rejected; the minority-header ledger row dropped); bucket 0 closed: 183 classes → 135 fully shared, 48 ledgered TU-CONFLICT (late-overlay declaration conflicts, for the types phase); SETUP paragraph (--batches, snapshot restore, the cause rule, --repair-registry, --reexemplar); kit corpus
2026-09-08 19:41:40 -06:00
Drew T
5325fd506b
src(phase-35): T5 bucket 0 run 3 — 78 private copies in 24 TUs replaced by the shared include, 87 members extended (141/141 binaries green per binary); share_body: a twin's instance queued the same (tu, line) edit twice and the second replacement swallowed the next function (7 classes rejected in the five twin primaries on that artifact; now deduped), chained file:line: warning lines never a cause; the ledger re-judged by the fixed tool: 49 rows with real diagnostics (conflicting types / too few arguments in the late overlays), E_func_80168B70 kept with its cause pending the exemplar decision; kit corpus
2026-09-08 19:31:19 -06:00
Drew T
090f8fb428
config(phase-35): T5 — the registry repaired: 378 listed-but-private members removed from 79 groups (share_body.py --repair-registry, derived from the census on (binary, vram); the 317 ledgered rejected pairs + 61 sites the S94 bisects wiped); dedup-check 2221/0, C1 256,120/256,120; census A 1,812 · B 183, same-vram backlog 1,099 -> 999 classes; the first cut's name-only match (9,269 removed, 14 groups emptied) caught by dedup-check + a known-true control and reverted before commit
2026-09-08 19:20:48 -06:00
Drew T
f4163518a2
tools(phase-35): T5 — share_body.py: the failure cause is the first non-warning file:line diagnostic (gcc 2.7.2 errors carry no 'error' token — 254 of 303 rejections had read 'Error 33'), reason codes SYMBOL-NAME / GATE-REJECT / PARSE-ERROR / TU-CONFLICT derived from it and recorded with the cause in every ledger note, the bisect restores from an in-memory pre-edit snapshot (never git checkout — it wiped the previous batch's uncommitted shares), one batch per invocation by default; controls on the real red cc1.err + six synthetic logs; ledger header + kit corpus
2026-09-08 19:14:45 -06:00
Drew T
571374b979
src(phase-35): T5 bucket 0 (first pass) — 788 members extended into their registry groups, private copies replaced by the include where the per-binary gate held (141/141 and 146/146 binaries green after bisect); share_body: the bisect now re-applies the kept classes in one bottom-up pass per TU (its per-class sequential re-application had shifted later classes' lines and rejected 125 of 183 classes on its own artifacts), the failure detail from error lines only, rejected extend classes ledgered, groups extended only with members that passed
2026-09-08 18:30:29 -06:00
Drew T
0bccef9016
tools(phase-35): T5 — share_body.py, the permanent share tool for the include-at-site form (exemplar by majority text, header written once, private copies → include at their position, per-binary gate with object comparison and bisect, registry appended by text, exception ledger); the R37 probe: func_801681FC shared by ov_SC04_008 + ov_SC05_009 (2/2 binaries green, group S_func_801681FC); the census exports per-instance line ranges; bind_alias_header factored out of macro_to_header; SETUP + dictionary rows; kit corpus
2026-09-08 18:12:41 -06:00
Drew T
a8457663fc
src(phase-35): T4 finalize — engine_core.h, ov_setters.h and clearTbl40.h deleted; the legacy sites converted (clearTbl40 as the SHARED_FN parameterized control in src/800_c.c; the three SC01_005 accessors as headers), the whale header moved under ov/ with every -O0 includer rewritten, 7 alias-form bodies given their own __asm__ binding, the registry's source/func lines text-edited by id, three non-shared headers rewritten; --verify OK (0 macro sites, no macro header); R22 clean fleet check-all: 218 passed, 0 failed of 218 in 145 s; dedup-check 2220/0; audit-binaries OK; the census 362,389/362,389 with 0 macro sites; SETUP + dictionary rows; kit corpus
2026-09-08 18:06:04 -06:00
Drew T
c53a9e1a91
src(phase-35): T4 — every DEFINE_func_X() macro body becomes a plain-C header under src/shared/<space>/ included at its site (sotn's shape): 2,215 headers (ov/ 2,204, three module slots 12; 86 with the stable h_exact suffix), 246,347 sites in 3,818 TUs, the engine_prelude.h include in place of engine_core.h, 1,300 dead macros dropped; L0/L1: 213 binaries BYTE-IDENTICAL, 4,121/4,121 objects byte-identical before and after (tools/macro_to_header.py --apply, .run/P35/convert/ledger.txt); engine_core.h and the legacy headers still present until --finalize
2026-09-08 17:51:39 -06:00
Drew T
2648aa5a92
build(phase-35): T3 — ov_SC04_019 TWIN_OF ov_SC04_018 with the primary's carve: yaml, JTBL_INTERLEAVE and the per-object JTBL_PADS lines regenerated from ov_SC04_018 by alias substitution (the twin's retired jump-table splits with them), create_c_files: False, src/ov_SC04_019/ deleted; twin + primary BYTE-IDENTICAL; interleave_check ALIGNED + pads_audit on the twin (R60; pads_audit now reads a twin's source through the oracle); dedup-check 0 failed; audit-binaries OK
2026-09-08 17:21:44 -06:00
Drew T
9b0816e74a
build(phase-35): T3 probe — ov_SC01_006 is a TWIN of ov_SC01_005: one source directory per payload. Makefile twin rules (build/src/<twin>/<twin>%.o <- src/<primary>/<primary>%.c, same recipe, -O0 objects kept), overlays.mk TWIN_OF + SRC_DIR, the twin's yaml create_c_files: False, src/ov_SC01_006/ (30 files) deleted; twin + primary BYTE-IDENTICAL (56760dbe), the concurrent race test green, every consumer sees the twin through the oracle; share_census: copies = distinct sites, TWIN-COVERED reported (575 classes for the pair)
2026-09-08 17:10:00 -06:00
Drew T
6cb056c932
tools(phase-35): T2 — the health chain learns the include-at-site and twin forms while the macro form still builds: one source-dir oracle (corpus.src_dirs/src_dir/twin_of from the Makefile), share_census.header_defs as the one reader of the include form, progress.classify counts include sites (fold keeps 255,632), overlay_src_split's include item kind + loud macro-table refusal, dedup_integrate C2a' (a header must DEFINE func), audit_binaries prelude + twin citizenship (CHECK 3b), cdecl differential not-applicable when the macro header is gone, recursive shared-header globs; the count correction 363,214 -> 363,221 (7 whale include sites never registered; ov_MAIN_012 2,401 -> 2,402) regenerated into progress.json + README
2026-09-08 16:46:55 -06:00
Drew T
1dbffee87d
tools(phase-35): T1 — share_census.py, the fleet census of byte-identical function classes + the S1 'one source per unique function' checker with its exception ledger; 362,389/362,389 sig instances covered, 10,180 classes (A 1,712 · B 282 · C 6,107 · D 1,861 · M 218), self-test 7/7, four controls as measured; SETUP + dictionary rows, kit corpus regenerated
2026-09-08 16:24:08 -06:00
Drew T
cd768d717a
tools(phase-34): cdecl --audit — create its scratch dir and refuse (never misgrade) when the gcc adjudication cannot run; the prune had removed .run/audit and every unparsed draft line read as a DEFECT
2026-09-08 13:46:38 -06:00
Drew T
fe45f7f016
docs(phase-34): task 6 addendum — Drew's #ai reply posted; docs/outreach/ untracked and ignored on his decision (sent notes stay local); doc_links DEFAULT, Reference-index row, SETUP rows updated; corpus regenerated
2026-09-08 13:23:18 -06:00
Drew T
c9a3d7b891
tools+docs(phase-34): task 2 part 1 — the decomp.me paste form: verbatim_target_s.py --gas (assemblable target), decompme_replica.sh steps D (the paste through decomp.me's as, 26/26) + E (the bundle), doc §5 step 2, SETUP rows, dictionary, kit corpus regenerated
2026-09-08 11:54:22 -06:00
Drew T
845fd8848b
kit+docs(phase-33.5): task 15 prep — the health chain into the record corpus (14.5 addendum), the regenerated timeline, the task-15 log + the closed checkpoint
...
- Drew's question "is make tools-health set up for the decomp-architect to use as well?" — it was not: the chain's checks ship as
tools and its lessons as kernels, but the Makefile recipe (a comment per rung naming the incident that earned it) lived outside
tools/. tool_census --corpus now extracts `tools-health:` + `audit-digest:` VERBATIM into decomp-architect/corpus/record/build/
tools-health.mk (derived text; --check regenerates and compares; 92 lines); the record front page's row; the intake's Phase-5
tools column and the methodology's instruments section point at it. No installer step changed → no sixth dry-run owed; the
installable snippet (a TODO(phase-N) per rung, Step 8) is recorded for the split phase.
- docs/story-timeline.md regenerated by tools-health's report step (R75)
- CURRENT_PHASE.md: the task-15 entry — real render 32 pages rc 0; tools-health OK (5,917 lines, kit_coverage's first run in the
chain); doc_links --strict OK; audit_public OK over 6,945 paths; gate_scan PASS; the P7 walk of the six milestone items, each MET
with literal output; Ghidra stopped (R23) — and the CLOSED checkpoint (NEXT = Drew's close commit, then Phase 34 in a fresh session)
- verify: tool_census --check OK; kit_lint OK; kit_coverage OK; doc_links --strict OK; audit_public OK on the new file
2026-09-08 00:09:39 -06:00
Drew T
8a698e1b79
kit+docs(phase-33.5): task 14.5 part 2 — the phase-log mining pass banked: DK-69–DK-80 from 143 worklog lessons; the S92 accelerators + decision-log entries
...
- 21 read-only Opus slices over the 26 worklogs (30,540 lines read; the three giants by line range), briefed by
.run/P33.5/log-mining/BRIEF.md with the "already banked?" grep protocol: 777 candidates, 634 already banked, 143 NEW;
every cited log line verified to exist by harvest.py and read; 142 banked + 1 dropped (the miner's own low-value verdict)
- decomp-kernels.md: twelve kernels DK-69–DK-80 (instrument blind spots; verdict staleness + the health suite; what earns
belief; denominators/units/labels; leverage vs tractability + campaign scoping; models and prompts; the unattended run;
agents and the tree; edits that keep proofs; the search harness + the compiler as evidence; maintaining the knowledge base;
hosts and services), each provenance line generated from the slices' cited worklog lines (bank.py); section 8 retitled;
Coverage "In all: DK-1 … DK-80"; every count mention → 80 (kit README, methodology, SETUP row, wiki page)
- docs/accelerators.md "P33.5 S92" (two accelerators: a distillation ships with a coverage check; the end-of-project worklog
pass recovers the fixed-but-never-generalised lessons — 1 in 5 here) → cited by the twelve kernels (kit_coverage: 59 entries,
42 cited + 15 dispositioned, 0 UNCOVERED; the matcher now requires an un-numbered entry's FULL group text);
docs/decision-log.md "P33.5 S92" (R31: the question, the measurement, the pivot, the 82%/18% why, the hindsight path)
- evidence tracked under .run/P33.5/log-mining/ (BRIEF, 21 slice reports, HARVEST.md, HARVEST_TABLE.md, harvest.py, bank.py;
a dated .gitignore block); expected-manifest +1 (docs/inherited-record.md); make kit-corpus regenerated the record copies
- verify: tool_census --check OK (358 copies); kit_coverage OK; kit_lint OK (0 leaks over 436 files); doc_links --strict OK;
wiki_render --selftest 32/0; audit_public OK on the new files; 80 DK ids cited, 0 dangling
2026-09-07 23:24:14 -06:00
Drew T
0c29c9e16b
tools+kit(phase-33.5): task 14.5 part 1 — the record as the third dictionary + kit_coverage (every rule and every accelerator entry cited or dispositioned)
...
- decomp-architect/corpus/record/: the how-to (13), decision-log, accelerators, retrospective, story, wave-playbook, effort-map,
gen3-standards, gen3-handoff, DIGEST and every PhaseEnd (34) verbatim behind an authored front page (what each is, how to
read it, what is NOT there — the phase logs, R19 — and that the mining pass is their distillation); tool_census: RECORD_SOURCES
+ record_dest + the third corpus in plan/write/check (358 copies + 28 pointers, --check OK); kit_lint exempts corpus/record;
SETUP Step 6 gains 2c docs/inherited-record.md (+ the verify line; expected-manifest +1); ops-setup/README/tree/methodology/
wiki page/Home/Tools page/README bullet/SETUP row: "two dictionaries" → three
- tools/kit_coverage.py (+ config/kit_coverage_map.tsv): derives R1..R83 from DIGEST §3 (asserted contiguous) and the 58
accelerator entries (headings + numbered items), asserts each is cited by a provenance line of the registry seed / the
kernels or dispositioned (G / DK / FOLDED:G / ENV / PA / SEED: / KIT: / RECORD / COOKBOOK / NOT-PORTABLE; unknown ids
refused); first run: 26 uncited rules + 21 uncited entries → DK-66 (a ledger's tie-break, a checker's widening and a blanket
commit are part of the instrument — R70/R80/R52), DK-67 (the ignore file's directory-form wall — S91 (1)), DK-68 (a
summarised signal is a claim, not ground truth — R14/R66) in a new kernels section 8 (the museum is 9; "In all" 68) + 41
dispositions (15 PA, 3 ENV, folds into G6/G18/G38/G66/DK-12/19/20/22/25/26/31/35/44/45/46/57/61, 1 KIT template, 1 COOKBOOK);
now 0 UNCOVERED on both populations; wired into tools-health after tool_census --check; SETUP row + dictionary row
- verify: tool_census --check OK; kit_coverage OK (rules 57 cited + 26 dispositioned / 83; accelerators 41 + 15 / 58);
kit_lint OK; doc_links --strict OK; wiki_render --selftest 32 pages / 0 unlisted
2026-09-07 23:03:34 -06:00
Drew T
827295e241
tools+docs(phase-33.5): task 13.5 — the tools audit + the two dictionaries: tools/tool_census.py (two agreeing enumerations of 327 tool files; docstring/SETUP row/consumers/class derived from the tree; the authored half in config/tool_dictionary.tsv — phase · portability · the NEED each tool answers · what · adapts · verdict — with coverage asserted both ways) → docs/tool-index.md (need-keyed, KEEP-GEN, Reference-index row, wiki + how-to pointers), the kit's tools/MANIFEST.md regenerated (header states live 293 + superseded 28 = 321 rows), and the two verbatim corpora in-tree (Drew, confirmed S91): decomp-architect/corpus/tools/<phase>/ (302 copies + 28 superseded pointers + INDEX) and corpus/cookbook/ (the cookbook, its symptom index, the codegen map, a front page stating what transfers per compiler) — sha1-equal to their sources by tool_census --check in tools-health, regenerated by make kit-corpus; kit_lint exempts the corpus dirs (verbatim evidence) but syntax-checks them; G66 (consult the tool dictionary first) + G67 (translate an inherited idiom through its pass) + two memory seeds (34 at install); SETUP Step 6 installs docs/knowledge-corpus.md and checks the manifest against its own stated total; the ops-setup dictionary rows; the intake's Phase 7 cites G66/G67 and Phase 10 + Part C name the raw-cast → declared-symbol step; templates/layout-contract.md (the five-tool probe, a draft for the split). The review under Drew's criterion: 93 no-consumer tools (one Opus agent's draft, verified: 0 defects, every successor live, 0 live consumers, 0 collisions; four one-off verdicts overturned to STILL-NEEDED) → 34 retired by git mv to tools/sunset/ (28 superseded, 6 one-offs; README review table; SETUP rows moved; Archive-index group). Run 4 (fresh throwaway, the final kit): stopped on my Step-6 check (321 vs the live 293) → both sides derived → resumed → PASS 10/10, manifest 56 == 56, 4 commits, guardrails held (the one foreign path was the timeline regenerated by the detached tools-health). tools-health OK; doc_links --strict rc 0; audit_public OK over 6,842 paths; the purge probe PASSED (Phase 34's gate open). decision-log "P33.5 S91" + accelerators "P33.5 S91" banked; log + checkpoint (NEXT = task 14, xHigh, fresh session)
2026-09-07 22:09:15 -06:00
Drew T
9235800fb7
tools+docs(phase-33.5): task 11 — kit part 2: the firewall pack (templates/gitignore.decomp extracted byte-for-byte from the wiki fence — gitignore_template_check now runs in tools-health; firewall.txt with purge:/glob:/required:/pending:/fixture: rules; audit_public.template.py generalised from the repo's audit with its sources in the config, refusing zero sources; firewall-fixture/ = 16 synthetic bytes + sha1, the planted negative control), no-rom.template.yml, the docs/.run READMEs, ops-setup.decomp.md, bootstrap.template.sh (skeleton), CLAUDE.decomp-overlay.md (the four fail-safes + session-start extras), pa-overlays.md (7 fenced blocks: DIGEST, the 🛑 checkpoint block, the PhaseEnd narrative axis, effort rows, cookbook entry shape + triage table, wave-playbook skeleton, settings/mcp), the LICENSE/NOTICE/README/CONTRIBUTING skeletons, .clang-format + make-format.snippet.mk; tools/MANIFEST.md (325 tool files by ladder phase from one read-only survey, coverage 325/325, as Phase-N tasks); tools/kit_lint.py (fence-aware leak grep, the PLACEHOLDERS set-diff, in-memory compile / bash -n / JSON+YAML, the gitignore diff, TODO counts, coverage; --selftest = the R39 control) wired into tools-health; decomp-architect/README.md in doc_links DEFAULT; SETUP row; PLACEHOLDERS Used-in cells reconciled; make tools-health OK on this tree (detached run, .run/P33.5/tools_health_t11.log); story-timeline regenerated by the report step; log + checkpoint (NEXT = task 12, Max)
2026-09-07 19:22:51 -06:00
Drew T
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
2026-09-07 18:04:15 -06:00
Drew T
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
2026-09-07 17:55:59 -06:00
Drew T
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
2026-09-07 17:16:17 -06:00
Drew T
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
2026-09-07 14:46:53 -06:00
Drew T
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
2026-09-07 14:23:14 -06:00
Drew T
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
2026-09-07 14:20:05 -06:00
Drew T
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)
2026-09-07 13:29:48 -06:00
Drew T
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)
2026-09-07 13:12:08 -06:00
Drew T
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
2026-09-07 11:54:25 -06:00
Drew T
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)
2026-09-07 11:51:12 -06:00
Drew T
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)
2026-09-07 11:35:50 -06:00
Drew T
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)
2026-09-07 11:32:42 -06:00
Drew T
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
2026-09-07 11:29:35 -06:00
Drew T
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)
2026-09-07 02:51:02 -06:00
Drew T
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
2026-09-07 02:32:57 -06:00
Drew T
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
2026-09-07 01:57:24 -06:00
Drew T
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)
2026-09-07 01:41:08 -06:00
Drew T
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)
2026-09-07 01:16:08 -06:00
Drew T
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)
2026-09-07 01:11:04 -06:00
Drew T
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
2026-09-07 01:10:48 -06:00
Drew T
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)
2026-09-07 01:05:53 -06:00
Drew T
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
2026-09-07 01:01:28 -06:00
Drew T
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
2026-09-07 00:53:58 -06:00
Drew T
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
2026-09-07 00:51:24 -06:00
Drew T
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
2026-09-07 00:44:27 -06:00
Drew T
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)
2026-09-06 23:30:13 -06:00
Drew T
4f7c3b64a3
docs(phase-33): commit-map + citations resolved to the rewritten history (C4–C7 — the tip commit)
...
- docs/commit-map.tsv: 4,032 rows (ordinal of the ORIGINAL main -> rewritten hash, author/committer dates, subject);
1 pruned row of zeros (ordinal 1712, "session archive update"); 0 old hashes asserted; ordinal 1 unchanged by the
rewrite (byte-identical)
- resolve_tokens: 1,238 commit:NNNN tokens -> shortest-unique new hashes in 98 files (docs, phase-ends, logs, tool
docstrings, 2 C comments, the A5 evidence logs); residue left as tokens: commit:1712 x4 (the pruned commit),
commit:orphan-24 x2, commit:orphan-26, commit:orphan-35 (cited commits that exist in no lineage)
- the rewrite (C4): filter-repo 2.47.0 on a bare clone of the C2 tip, 311 s, exactly 1 pruned, main 4,032 -> 4,031;
the pre-rewrite history is mirrored in the private archive repo and in the local bundle
- the proof (C5): verify_rewrite 4,031 pairs / 0 failures; absent_scan 0 offenders; gate_scan 0 offenders on the clone
- adoption (C6): 100 text files differ at the tip, 0 purge paths, 0 added/deleted; leftover refs dropped; no gc yet
- resolver skips tools/public_rewrite/ (its self-test fixtures are the token grammar, not citations); repo-local
identity is the GitHub noreply address from here on; CURRENT_PHASE: C4–C7 logged, checkpoint -> NEXT = C8
2026-09-06 23:28:39 -06:00
Drew T
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)
2026-09-06 22:42:09 -06:00
Drew T
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
...
- hash_dict (4,420 commit objects -> commit:NNNN / twin / orphan; 150,280 prefixes; 0 ambiguous; 0 collisions with 1,480
cited content hashes; scratch mailmap), scrub (12/12 self-test; HEAD sample 731 distinct tokens == git's own lookup),
gate_scan (+ expected_offenders.txt fixture: the R39 negative control, PASS over 16.8 GB in 2 m 25 s; rom_blob_ids =
content/signature hits U purge-path blobs not shared with any other path), run_filter (module API; --force only for the
deleted tag), verify_rewrite (pairwise proof + no purge path survives + pruned set == derived purge-only set),
build_commit_map (0 old hashes asserted; unchanged commits exempted), resolve_tokens, absent_scan (positive control on the
current repo: FAIL 82,362), probe_github.sh (skips unchanged commits)
- trial #1 found two defects the plan had not foreseen: the EMPTY blob in the strip list (--strip-blobs-with-ids then
undid every "file emptied" change in history and pruned a restore commit) and the byte-identical Initial commit keeping
its hash; both fixed with controls
- trial #2 : filter 269 s, exactly 1 pruned, verify 4,029 pairs / 0 failures, map 4,030 rows, absent_scan + gate PASS on
the clone, 1,231 tokens resolved at a trial tip (residue 7: the pruned commit x3, orphans x4), aggressive repack 500 -> 80 MB
- SETUP P33 C1 section + rows (R21); runbook §3/§5/§6/§10 measured; requirements-python.txt; CURRENT_PHASE -> NEXT = C2
2026-09-06 22:37:10 -06:00