Commit Graph

2267 Commits

Author SHA1 Message Date
Drew T 55c263d591 feat(decomp): S70 main — +1 fn (func_8002B0B4) from the standalone-match sweep 2026-09-01 17:11:59 -06:00
Drew T 45cc5cbdf8 feat(decomp): parallel gate — 3 fns across 3 binaries (8 workers)
md_MAIN_025    func_800CB300
  ov_SC03_028    func_80181EBC
  ov_SC07_010    func_80180138
2026-09-01 16:47:10 -06:00
Drew T 4e35b8406c feat(decomp): S70-standalone gate — +3 fns x0 propagated (fleet 99.4%) 2026-09-01 16:30:37 -06:00
Drew T ac5aede5ac feat(decomp): S70-standalone gate — +15 fns x0 propagated (fleet 99.4%) 2026-09-01 16:23:11 -06:00
Drew T 7272fec47d feat(decomp): parallel gate — 2 fns across 2 binaries (2 workers)
ov_SC07_001    func_8017E4DC
  ov_SC02_017    func_8018347C
2026-09-01 15:41:25 -06:00
Drew T 4fd757dc44 fix(carve): commit 8 carve-created TU files that parallel_gate could not add
`parallel_gate` commits with `git add -u src/`, which updates TRACKED files and
cannot add NEW ones. A jtbl carve SPLITS a TU, creating `src/<bin>/<bin>_jr_<addr>.c`
— so every carve landed its yaml change (tracked) while leaving the new source
file UNTRACKED.

Why this mattered: `config/splat.<bin>.yaml` is committed and names the subseg
(`- [0x577f8, c, ov_SC02_000_jr_8017F950]`), and 31 sibling `_jr_` files in that
same binary are tracked — so these are source by convention, not build artifacts.
R22 passed locally only because they exist on disk. A fresh clone, or Drew's
push, would have the yaml without the file.

Found because parallel_gate REFUSED to run with an unclean tree (rc=1) and listed
them — the guard did its job; the earlier `REFUSED 8 (main tree moved under them)`
line in the carve gate was the same eight files.

TODO for the tool: parallel_gate's commit step must add NEW files under
src/<binary>/ that its own carve produced (narrowly, per-binary — never a blanket
`git add src/`, per the carve-state discipline).
2026-09-01 15:19:53 -06:00
Drew T d33596713f feat(decomp): parallel gate — 1 fns across 1 binaries (1 workers)
ov_SC03_028    func_80183264
2026-09-01 15:00:52 -06:00
Drew T 432b4445a4 feat(decomp): parallel gate — 1 fns across 1 binaries (1 workers)
ov_SC07_001    func_8017EDC0
2026-09-01 14:56:34 -06:00
Drew T 3111affb2e feat(decomp): parallel gate — 3 fns across 3 binaries (12 workers)
md_MAIN_013    func_800CB56C
  ov_SC04_003    func_80180FB8
  ov_SC04_005    func_80187548
2026-09-01 14:54:46 -06:00
Drew T 68eac2722c feat(decomp): parallel gate — 1 fns across 1 binaries (1 workers)
ov_SC03_028    func_80184C90
2026-09-01 14:45:07 -06:00
Drew T 2de045a8ad feat(decomp): parallel gate — 1 fns across 1 binaries (1 workers)
ov_SC03_111    func_80180A10
2026-09-01 14:42:18 -06:00
Drew T 0b67876247 feat(decomp): parallel gate — 5 fns across 5 binaries (5 workers)
ov_SC06_020    func_80183FD0
  ov_SC06_024    func_8018A3CC
  ov_SC06_033    func_801888E8
  ov_SC06_018    func_8017D4DC
  ov_SC06_032    func_80184C04
2026-09-01 14:38:29 -06:00
Drew T 85b90967e4 chore(integration): sync stale decls for the ov_SC06 reach-6 cluster (extract+build verified) 2026-09-01 14:36:43 -06:00
Drew T 975fab9e70 feat(decomp): parallel gate — 1 fns across 1 binaries (1 workers)
ov_SC02_005    func_8018074C
2026-09-01 14:29:03 -06:00
Drew T ac85f995f7 feat(decomp): parallel gate — 5 fns across 5 binaries (7 workers)
ov_SC06_022    func_80187EF4
  ov_SC03_102    func_8018139C
  ov_SC06_025    func_8017F424
  ov_SC05_018    func_80182CDC
  ov_SC02_005    func_80189B30
2026-09-01 14:27:58 -06:00
Drew T 9149167c93 chore(integration): sync 23 stale func_80187EF4 decls (extract+build verified byte-neutral) 2026-09-01 14:26:29 -06:00
Drew T f164135fd9 feat(decomp): parallel gate — 13 fns across 13 binaries (12 workers)
md_SC03_135    func_801E38B4
  md_SC05_026    func_801EE0D4
  ov_SC03_107    func_8016AB6C
  ov_SC02_000    func_8017F950
  ov_SC02_003    func_8017F950
  ov_SC03_112    func_80181E88
  ov_SC07_007    func_8016AB6C
  ov_SC07_010    func_8016AB6C
  ov_SC07_006    func_8016AB6C
  ov_SC06_011    func_8017EEEC
  ov_SC07_011    func_8016AB6C
  ov_SC06_024    func_801831A8
  ov_SC06_022    func_8017F85C
2026-09-01 14:18:57 -06:00
Drew T fb328d96f0 feat(decomp): parallel gate — 1 fns across 1 binaries (1 workers)
ov_SC04_011    func_8017E558
2026-09-01 14:09:14 -06:00
Drew T f45167ff86 feat(decomp): parallel gate — 1 fns across 1 binaries (1 workers)
ov_SC04_002    func_8018691C
2026-09-01 14:03:02 -06:00
Drew T f12a851a09 chore(integration): sync func_8018691C decls (byte-neutral verified) 2026-09-01 14:02:04 -06:00
Drew T 5f825863a6 feat(decomp): parallel gate — 1 fns across 1 binaries (1 workers)
ov_SC06_018    func_80189E60
2026-09-01 13:56:57 -06:00
Drew T 19f3eba9e4 chore(integration): sync 28 stale func_80189E60 decls (verified byte-neutral before gating) 2026-09-01 13:56:08 -06:00
Drew T 2661f63a47 feat(decomp): parallel gate — 1 fns across 1 binaries (1 workers)
ov_SC03_105    func_8017D994
2026-09-01 13:44:04 -06:00
Drew T 06f8d5e2f5 feat(decomp): parallel gate — 1 fns across 1 binaries (1 workers)
ov_SC04_018    func_8017F35C
2026-09-01 13:33:17 -06:00
Drew T bfff202b14 chore(integration): sync func_8017F35C's return-type decl (void -> s32) before gating 2026-09-01 13:32:29 -06:00
Drew T 85f064333b feat(decomp): parallel gate — 1 fns across 1 binaries (1 workers)
ov_SC07_000    func_8017E1BC
2026-09-01 13:30:25 -06:00
Drew T 75e4b305cd feat(decomp): parallel gate — 1 fns across 1 binaries (2 workers)
ov_SC04_002    func_80183A88
2026-09-01 13:22:00 -06:00
Drew T eb6c2305c9 feat(decomp): parallel gate — 1 fns across 1 binaries (1 workers)
ov_SC01_077    func_80184D50
2026-09-01 12:50:55 -06:00
Drew T 56289ea18c feat(decomp): parallel gate — 8 fns across 8 binaries (10 workers)
ov_SC05_002    func_8017F348
  ov_SC06_018    func_801874E4
  ov_SC03_108    func_8017D110
  ov_SC06_020    func_80181654
  ov_SC03_124    func_8018A788
  ov_SC06_032    func_80182288
  ov_SC06_022    func_80185578
  ov_SC06_024    func_80187A50
2026-09-01 12:11:50 -06:00
Drew T 70134d06bf feat(decomp): parallel gate — 13 fns across 13 binaries (12 workers)
ov_SC03_094    func_8017E254
  ov_SC03_031    func_8017F728
  ov_SC03_028    func_8018568C
  md_SC07_004    func_801A3D60
  ov_SC02_031    func_801831B4
  ov_SC02_017    func_8017FCFC
  ov_SC01_080    func_801815D4
  ov_SC03_030    func_8017FB04
  ov_SC04_004    func_80182014
  ov_SC04_015    func_8017ED28
  ov_SC03_102    func_801815D4
  ov_SC05_005    func_80181828
  ov_SC03_119    func_801832E0
2026-09-01 11:19:01 -06:00
Drew T ebb0d3a2e3 feat(decomp): main in-tree gate — 3 fn(s)
main  func_80020598
  main  func_80030F80
  main  func_80038A58
2026-09-01 11:10:12 -06:00
Drew T 5450f18181 revert(revert): restore ov_SC04_011/func_80182DCC — it was NEVER a false bank
Reverts commit:3475. The bank is byte-identical; MY VERIFICATION WAS BROKEN.

A jtbl bank changes CARVE CONFIG (JTBL_PADS in config/overlays.mk + the splat
yaml). Those are splat INPUTS: asm/ and the linker script are regenerated FROM
them. I checked the binary with `make build` alone, so the build linked
newly-carved C against STALE extracted state and produced a mismatched SHA. That
is the R22 corollary ("a reverted config needs a make extract, not just a make
check") pointed the other way — a LANDED config change needs one too.

Proof, run on both binaries:
    make extract BINARY=ov_SC06_025 && make build  -> BYTE-IDENTICAL
    make extract BINARY=ov_SC04_011 && make build  -> BYTE-IDENTICAL

So: R40 against myself. I attributed the failure to the subject (the bank) when
the instrument (a build over stale extract state) was at fault — after writing
"it may not even be false" into the checkpoint and reverting without testing it.
The first revert also cost real work: it discarded a legitimate 96-line match.

STANDING FIX: a per-binary verify after any gate that touched config/ MUST be
`make extract BINARY=<b> && make build BINARY=<b>`. Build-only is a valid check
ONLY when the gate changed nothing under config/.
2026-09-01 11:08:55 -06:00
Drew T d349bc053a feat(decomp): parallel gate — 9 fns across 8 binaries (12 workers)
ov_SC03_089    func_80181F9C
  ov_SC05_001    func_801809B8
  ov_SC05_008    func_80180E84
  ov_SC03_094    func_801814F4
  ov_SC03_118    func_801832E0
  ov_SC06_025    func_80182170
  ov_SC03_105    func_8017FAE8 func_80185680
  ov_SC07_002    func_80185FB0
2026-09-01 10:47:13 -06:00
Drew T c076f9016d feat(decomp): parallel gate — 10 fns across 8 binaries (12 workers)
md_MAIN_045    func_800CCB28
  md_MAIN_033    func_800CB4EC
  ov_SC05_000    func_8017E1E8
  ov_SC03_099    func_8017D2AC
  ov_SC02_005    func_8017ECAC
  ov_SC02_011    func_80182564 func_80182FF0
  md_MAIN_003    func_800D0100 func_800D0A7C
  ov_SC06_025    func_8017E48C
2026-09-01 10:39:02 -06:00
Drew T 4949acdf31 revert(integration): drop the §378 casts for the 25 chain candidates that did not bank
cast_self_callers casts a function's call sites in PREPARATION for banking it.
When the draft then fails, the cast must come back out — the tool journals every
edit for exactly that, and I did not run the undo.

The cost was concrete: the leftover cast on func_8017F8B8 made ov_SC07_000 fail
to COMPILE at HEAD, so every subsequent gate verdict on that binary was measuring
a broken baseline rather than the draft. Two drafting agents reported it as
BASELINE-RED before I noticed.

24 casts reverted across 11 files in 7 binaries; all 7 rebuild green. This is the
discipline recover_integration already documents ('REVERTS the caller edits for
anything that doesn't bank') applied to the new tool.
2026-09-01 10:35:29 -06:00
Drew T d8d4f8ac6f revert(decomp): ov_SC04_011/func_80182DCC — a FALSE BANK committed under --no-r22
Reverts commit:3472. The binary was RED at HEAD: sha1 9c94d36a vs expected
8bc09c42. The gate that banked it ran with --r22 disabled because 24 drafting
agents were live (R22 does make clean, which deletes asm/ under them), so the
one check that would have caught it was the one I had turned off.

The revert must carry the CARVE STATE, not just the C: the bank moved
JTBL_PADS 0,0,4,4 -> 0,0,4,4,4 plus the splat yaml, and a src-only revert left
4 tables against 5 pad specs ('table-count drift vs the carve'). Reverting the
whole commit restores BYTE-IDENTICAL.

Found only because two drafting agents independently reported their target's
binary as BASELINE-RED and I checked their claim against the bytes.
2026-09-01 10:35:11 -06:00
Drew T 6a96a62f27 feat(decomp): main in-tree gate — 2 fn(s)
main  func_8001DA34
  main  func_80021D38
2026-09-01 04:53:15 -06:00
Drew T c794091725 feat(decomp): main in-tree gate — 8 fn(s)
main  func_80020A28
  main  func_80021284
  main  func_800221A8
  main  func_8002374C
  main  func_80026514
  main  func_8002D904
  main  func_800377D8
  main  func_8003DC90
2026-09-01 04:51:47 -06:00
Drew T 02d0461d46 feat(decomp): parallel gate — 1 fns across 1 binaries (12 workers)
ov_SC04_011    func_80182DCC
2026-09-01 04:02:41 -06:00
Drew T cb7a28551c chore(integration): §378 chain applied to 25 fresh closeness-0 candidates (pre-gate) 2026-09-01 03:57:19 -06:00
Drew T b2d73108e2 feat(decomp): parallel gate — 1 fns across 1 binaries (16 workers)
ov_SC03_029    func_801847FC
2026-09-01 00:01:54 -06:00
Drew T ef504ffc32 chore(integration): decl-sync for the 21 remaining §376 candidates (pre-gate) 2026-08-31 23:54:17 -06:00
Drew T c6f6f668ba feat(decomp): main/func_80036D58 — the narrow-param decl-sync completes the §378 chain
A no-proto decl is ILLEGAL against a definition whose parameter is affected by
the default argument promotions (s16 here): C89 requires the parameter types be
promotion-stable when one declaration has no prototype. So fix_arity_callers'
--any-proto cannot reach this case (it skips it as 'narrow-param').

With the call sites already cast (§378) the decls emit no code, so syncing them
to the draft's exact signature is byte-neutral: 3 decls in src/800.c rewritten to
extern void func_80036D58(s16). Byte-identical, main.
2026-08-31 23:51:19 -06:00
Drew T 779f3e2a19 feat(decomp): parallel gate — 5 fns across 5 binaries (16 workers)
ov_SC04_019    func_8017E7CC
  ov_SC01_080    func_8017D72C
  ov_SC01_077    func_80185E68
  ov_SC05_011    func_8017D818
  ov_SC07_000    func_8017F098
2026-08-31 23:49:37 -06:00
Drew T 72d3f61dcd chore(integration): self-caller casts for the 27 remaining §376 candidates (pre-gate) 2026-08-31 23:36:59 -06:00
Drew T 53fad0d031 feat(decomp): ov_SC04_010/func_8017D6CC — the self-caller cast lever, byte-verified
The §376 class's real blocker: after fix_arity_callers no-protos the conflicting
forward decl, the draft's definition becomes the prototype in scope and the TU's
own call site fails with 'too few arguments'. Casting THAT call site to a 0-arg
function pointer is byte-neutral (gcc-2.7.2 folds a cast of a known symbol back
to a direct jal, §20) and banks the function.
2026-08-31 23:18:43 -06:00
Drew T 6cca1e3ea0 feat(decomp): main in-tree gate — 0 fn(s) 2026-08-31 23:00:25 -06:00
Drew T 2daacec346 feat(decomp): ov_SC03_121 in-tree retry after a blind worktree gate 2026-08-31 22:22:45 -06:00
Drew T e32fdd47dd feat(decomp): parallel gate — 2 fns across 2 binaries (4 workers)
md_MAIN_011    func_800D1254
  ov_SC05_017    func_80189240
2026-08-31 22:22:43 -06:00
Drew T da32350873 feat(decomp): main in-tree gate — 1 fn(s)
main  func_80013B64
2026-08-31 22:18:35 -06:00