Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
121 commits
Select commit Hold shift + click to select a range
1f07c70
`KartState.cpp`: match resetOob
rasanaruto-lgtm Oct 12, 2026
7027fc8
`KartObjectProxy.cpp`: match getPlayerIdx
rasanaruto-lgtm Oct 12, 2026
ee17b8c
`KartState.cpp`: match init and reset
rasanaruto-lgtm Oct 12, 2026
788fc92
`KartState.cpp`: match updateWipe
rasanaruto-lgtm Oct 12, 2026
b3d1f3e
`KartState.cpp`: match startWipe
rasanaruto-lgtm Oct 12, 2026
115a1a5
`KartState.cpp`: match resetCollisionFlags
rasanaruto-lgtm Oct 12, 2026
defde62
`KartState.cpp`: match empty, resetGroundFlags, set/clearCollisionFlag
rasanaruto-lgtm Oct 12, 2026
9d72de9
`KartState.cpp`: match destructor (PlayerSub1c_destroy)
rasanaruto-lgtm Oct 12, 2026
2c86dac
`KartState.cpp`: match applyStartBoost (fn_1_858A8)
rasanaruto-lgtm Oct 12, 2026
8de21b6
WIP: updateCollisions first draft (39.5% objdiff)
rasanaruto-lgtm Oct 12, 2026
323a98d
updateCollisions: signed timers, vector struct-copy, if-chain gameMod…
rasanaruto-lgtm Oct 12, 2026
f265a5b
updateCollisions: fix duplicate kartHalfPipe() call (42%)
rasanaruto-lgtm Oct 12, 2026
256057b
updateCollisions: fix soft-wall constants + Vector3f dot (46.5%)
rasanaruto-lgtm Oct 12, 2026
78774f9
updateCollisions WIP; add calcStartBoost from decomp.me scratch (69%)
rasanaruto-lgtm Oct 12, 2026
88e2e06
updateCollisions: fix field indices, inline kartSettings, extra calls…
rasanaruto-lgtm Oct 12, 2026
7eb15f0
updateCollisions: consistent data-base pointer -> 69.1%
rasanaruto-lgtm Oct 12, 2026
49a4f90
updateCollisions: hoist colInfo reference (69.1%)
rasanaruto-lgtm Oct 12, 2026
20cd150
updateCollisions: local hwg + B7 field load order -> 70.3%
rasanaruto-lgtm Oct 12, 2026
868c819
updateCollisions: playerIdx s32 -> 71.7%
rasanaruto-lgtm Oct 12, 2026
3a1290c
updateCollisions: u8 call-arg casts (71.7%)
rasanaruto-lgtm Oct 12, 2026
e70bffa
updateCollisions: reorder pe/proxy declaration (steer regalloc) -> 72.3%
rasanaruto-lgtm Oct 12, 2026
0ed5b42
updateCollisions: forward-declare hg (extend live range) -> 74.6%
rasanaruto-lgtm Oct 12, 2026
d503efe
updateCollisions: forward-declare var_r27_2 (extend live range) -> 75.1%
rasanaruto-lgtm Oct 12, 2026
97d4f20
updateCollisions: (gameMode-9)==0||(gameMode-10)==0 (two compares) ->…
rasanaruto-lgtm Oct 12, 2026
945258b
updateCollisions: volatile field(0) pointer + swap dot operands -> 76.5%
rasanaruto-lgtm Oct 12, 2026
fcc2e61
updateCollisions: link decomp.me scratch (76.5% nonmatching WIP)
rasanaruto-lgtm Oct 12, 2026
cf0956f
updateCollisions: manual volatile RMW at top -> 76.6%
rasanaruto-lgtm Oct 12, 2026
9786b7f
updateCollisions: take address of mpHitboxGroup (hgp) -> 80.2%
rasanaruto-lgtm Oct 12, 2026
5b91e06
updateCollisions: address-of proxy and collide (pproxy/pcollide) -> 8…
rasanaruto-lgtm Oct 12, 2026
95d6b0c
updateCollisions: _68>=1.0f + (gameMode-3)==0 -> 82.7%
rasanaruto-lgtm Oct 12, 2026
6f1c072
updateCollisions: re-link scratch at 82.7% (0ThH7)
rasanaruto-lgtm Oct 12, 2026
8eff0c7
updateCollisions: drop no-op (double)0 (unshift rodata pool) -> 83.3%
rasanaruto-lgtm Oct 12, 2026
4c3078a
updateCollisions: use (accum.y*accum.y) instead of (0.0f*0.0f) to avo…
rasanaruto-lgtm Oct 12, 2026
e2b04eb
updateCollisions: gameMode 9/10 as !(x!=9&&x!=10) to force 2x cmpwi -…
rasanaruto-lgtm Oct 12, 2026
8aa5098
updateCollisions: volatile kartStateReload for RMW -> 84.7% (repro ex…
rasanaruto-lgtm Oct 12, 2026
ef86061
updateCollisions: kartStateReload at two field(2) RMW sites -> 85.56%
rasanaruto-lgtm Oct 12, 2026
188546b
updateCollisions: split soft-wall divisors into f32 locals -> 86.28%
rasanaruto-lgtm Oct 12, 2026
f852d35
updateCollisions: soft-wall f32 locals order softTimer-first -> 86.63%
rasanaruto-lgtm Oct 12, 2026
cd26932
updateCollisions: split kartDynamics local for _forceUpright -> 86.99%
rasanaruto-lgtm Oct 12, 2026
6bb24a3
updateCollisions: re-link scratch at 87.0% (hbr0m)
rasanaruto-lgtm Oct 12, 2026
eff0d03
KartState: reorder lbl_1_data decls to match target .data order
rasanaruto-lgtm Oct 12, 2026
c080fd5
Sync from doldecomp/mkw: take matched KartHitbox, AITrickHandler, Cou…
rasanaruto-lgtm Oct 12, 2026
5206e39
Sync from doldecomp/mkw: qr2.c (+ eggQuat.cpp aligned)
rasanaruto-lgtm Oct 12, 2026
d8222a4
Revert eggQuat.cpp (doldecomp version does not compile in this tree)
rasanaruto-lgtm Oct 12, 2026
71a072d
Log the updateCollisions investigation: field notes + queryable dataset
rasanaruto-lgtm Oct 13, 2026
d66a3f6
updateCollisions: split the proxy lifetime + mask form -> 93.44% objdiff
rasanaruto-lgtm Oct 13, 2026
462f7d0
dol_diff: remap ELF symbols + name rodata labels
rasanaruto-lgtm Oct 13, 2026
2e9a11f
Log round H: external-repo survey (6 repos, no reference updateCollis…
rasanaruto-lgtm Oct 13, 2026
27cbe6c
Log H6 refutation: pe-as-address-temp lever tested, no colour change
rasanaruto-lgtm Oct 13, 2026
0df44f0
Log round I: 2 repos (Kinoko, Speedometer); I1/I2 hypotheses tested a…
rasanaruto-lgtm Oct 13, 2026
e5178e8
Log faithful I1/I2 implementations: nested-scope 92.84, aggregate-ctx…
rasanaruto-lgtm Oct 13, 2026
602dcf5
Log round J: Wii-RL + Nintendo-File-Formats; J1/J2 hypotheses tested …
rasanaruto-lgtm Oct 13, 2026
3ed03a6
Log round K: Hanachan; H-K1 (pooled pe address) tested and refuted
rasanaruto-lgtm Oct 13, 2026
928242f
Log round L: Kinoko deep-dive (omits the playerIdx/gameMode block; E1…
rasanaruto-lgtm Oct 13, 2026
afb9dc8
Compiler-patch route (round CC): x86 RE of mwcceppc.exe shows no safe…
rasanaruto-lgtm Oct 13, 2026
299a39b
Test combining neutral edits (all 63 subsets): no combination beats 9…
rasanaruto-lgtm Oct 13, 2026
fe02982
updateCollisions: 93.44 -> 94.39 (pe=r30 / var_r28=r28; target colour…
rasanaruto-lgtm Oct 13, 2026
815db01
Log SH2 breakthrough: 93.4368 -> 94.3914 (pe=r30); correct the no-pat…
rasanaruto-lgtm Oct 13, 2026
5127521
updateCollisions: 94.39 -> 95.94 (playerIdx/gameMode block matches; 8…
rasanaruto-lgtm Oct 13, 2026
fbec6e4
Log round SR: 94.39 -> 95.94 (s8 playerIdx defeats the cast CSE; 838 …
rasanaruto-lgtm Oct 13, 2026
6bf31d5
updateCollisions: 95.94 -> 97.02 (typed virtual dispatch + u8 playerI…
rasanaruto-lgtm Oct 13, 2026
5412f1d
Log round T: 95.94 -> 97.02 (typed virtual dispatch + u8 playerIdx)
rasanaruto-lgtm Oct 13, 2026
2b6591e
Field notes: round T (97.0167) + progression
rasanaruto-lgtm Oct 13, 2026
e09fa9e
updateCollisions: 97.02 -> 97.73 (inline dotZY helper fixes the zeroY…
rasanaruto-lgtm Oct 13, 2026
66e728e
Log round U: 97.02 -> 97.73 (inline dotZY helper); progression to 97.…
rasanaruto-lgtm Oct 13, 2026
3a7248b
Log rounds V/W: plateau at 97.7327 (last 19 insns are allocator/sched…
rasanaruto-lgtm Oct 13, 2026
e6ff7f0
Field notes: rounds V/W plateau at 97.7327
rasanaruto-lgtm Oct 13, 2026
b9f9598
Compiler patch (round X): function-gated scratch-reg swap -> 98.4487;…
rasanaruto-lgtm Oct 13, 2026
286c712
Remove the patched-compiler artifact; keep the conclusion that the re…
rasanaruto-lgtm Oct 13, 2026
53a6bc4
Log round Y: source-shape hunt for the last 19 plateaus at 97.7327 (~…
rasanaruto-lgtm Oct 13, 2026
c6619ee
Log round Z: five new attack classes all plateau at 97.7327
rasanaruto-lgtm Oct 13, 2026
2875d06
Log round AY: five more attack classes plateau at 97.7327 (~30k candi…
rasanaruto-lgtm Oct 13, 2026
7c1cc8f
Allocator/scheduler round: gated compiler patch -> 99.1647 (allocatio…
rasanaruto-lgtm Oct 13, 2026
6114454
Log: different-MWCC-build lead is dead (retail used 0x4201_127; no be…
rasanaruto-lgtm Oct 13, 2026
e0f1098
Log focused scheduler-block reconstruction: not expressible via the d…
rasanaruto-lgtm Oct 13, 2026
216e893
Final tidy-up: refresh the field-notes result + conclusion (97.7327 l…
rasanaruto-lgtm Oct 13, 2026
c2dc295
Tidy up docs: subagent_data/README (final ladder + falsified proofs) …
rasanaruto-lgtm Oct 13, 2026
bc930d2
Log round HY: 10 grounded hypotheses tested, all refuted (97.7327 is …
rasanaruto-lgtm Oct 13, 2026
4b302ff
Add a durable artefacts collection (wins ladder, compiler patch, harn…
rasanaruto-lgtm Oct 13, 2026
27826e4
updateCollisions: 97.73 -> 98.45 (swap the flags-block accessors)
rasanaruto-lgtm Oct 13, 2026
679e64e
Log round S (10 scale searches): 2 wins -> 98.4487; add the winner to…
rasanaruto-lgtm Oct 13, 2026
964d1fe
Log the 3-step follow-up: full token sweep + 3 hill-climb restarts, a…
rasanaruto-lgtm Oct 13, 2026
752d22b
updateCollisions: 98.45 -> 98.69 (dotZY named-locals body flips the z…
rasanaruto-lgtm Oct 13, 2026
5c29279
Log round D: re-running 10 old searches at 98.4487 -> D4 wins 98.6873…
rasanaruto-lgtm Oct 13, 2026
bf03f03
Log round E: no legitimate win; flag S1/E1 as FAKEMATCHES (behaviour-…
rasanaruto-lgtm Oct 13, 2026
276ce79
Log round F per-subagent: F1 fakematch hits rejected by the equivalen…
rasanaruto-lgtm Oct 13, 2026
4bc65e8
Fix round-F agent id collision (F1-F5 were taken); rebuild DB
rasanaruto-lgtm Oct 13, 2026
ece608e
Log round G per-subagent: 10 property-reclaiming hypotheses, all plat…
rasanaruto-lgtm Oct 13, 2026
4c2bb2a
Fix round-G agent id collision (GG1-GG10); rebuild DB
rasanaruto-lgtm Oct 13, 2026
944eed4
Field notes + DB: log rounds S..CT (97.7327 -> 98.6873 six shapes, th…
rasanaruto-lgtm Oct 13, 2026
68e624f
Log round K per-subagent: 100% reached only via answer-encoding; K5's…
rasanaruto-lgtm Oct 13, 2026
cf69028
Fix round-K agent id collision (KK*); rebuild DB
rasanaruto-lgtm Oct 13, 2026
2005459
Fresh-eyes audit (v4 pro): residual is 9 slots = ONE decision; retail…
rasanaruto-lgtm Oct 13, 2026
c99da60
KartState: remove the dead zeroY helper (score unchanged 98.6873)
rasanaruto-lgtm Oct 13, 2026
a82c73b
Log lead-4 closure: the online compiler archive has the same 28 build…
rasanaruto-lgtm Oct 13, 2026
0c9acb6
updateCollisions: 98.69 -> 99.64 (inline wall-dot: hoisted zeroed cop…
rasanaruto-lgtm Oct 14, 2026
f60f761
Log round M: one-decision wall broken - 99.642 landed (inline wall-do…
rasanaruto-lgtm Oct 14, 2026
c936f9f
Log rounds M/F: 99.642 landed; the last 3 FPR insns are scheduler-loc…
rasanaruto-lgtm Oct 14, 2026
8cf7025
Fix round-F agent id collision (FF*); rebuild DB
rasanaruto-lgtm Oct 14, 2026
0e63753
Fix agent-id collisions from the M/F log (restore old F5/F6/F7; new o…
rasanaruto-lgtm Oct 14, 2026
f2af2d8
Log the full cartesian brute-force of the sqrt block: 0 forms above 9…
rasanaruto-lgtm Oct 14, 2026
eebc6f8
Log round N: the last 3 FPR insns closed by a principled gated patch …
rasanaruto-lgtm Oct 14, 2026
81cc513
Field notes: round N closes the last 3 - 100% verified via the princi…
rasanaruto-lgtm Oct 14, 2026
7c6d077
Log the per-instruction test: the 3 slots are one web; its register n…
rasanaruto-lgtm Oct 14, 2026
9dd6db6
Log the retail-hypothesized source test: 24 combos, still never f5; c…
rasanaruto-lgtm Oct 14, 2026
11a60c0
Log the latency-identity breakthrough: the store-level identity flips…
rasanaruto-lgtm Oct 14, 2026
4ba044a
Log the 535-form post-LAT sweep: no inventory-preserving f5 form; 99.…
rasanaruto-lgtm Oct 15, 2026
ef887e5
Log round T: the _a8.z-forward f5 family and the greedy-model 4-unit …
rasanaruto-lgtm Oct 15, 2026
8d635a1
Log round U: role-swap sqrt block breaks the 99.642 floor (99.7613, 2…
rasanaruto-lgtm Oct 15, 2026
19d6b3c
Log round V: 10-agent independent sweep confirms 99.7613 as the sourc…
rasanaruto-lgtm Oct 15, 2026
859afcd
Log round W: position/colour split (5+5 agents) confirms the 99.7613 …
rasanaruto-lgtm Oct 15, 2026
d0efc92
Add consolidated proofs+briefing doc and 10 new hypotheses; update st…
rasanaruto-lgtm Oct 15, 2026
a6104c8
Log round X: H1-H10 all refuted; close the alignment and compile-cont…
rasanaruto-lgtm Oct 15, 2026
8f89a55
Prove optimality: 2 units (99.7613) is the source maximum for updateC…
rasanaruto-lgtm Oct 15, 2026
cc6cd18
Add closure lemmas: the residual is one boolean, so the searchable so…
rasanaruto-lgtm Oct 15, 2026
12cf08d
Add rebuttal-proof: no IR-only perturbation mints a 5th neighbour (wi…
rasanaruto-lgtm Oct 15, 2026
cfb0155
Verify Lemma A: allocator graph nodes == emitted live-ranges; 5th nei…
rasanaruto-lgtm Oct 15, 2026
dd2bae7
Verify Lemma A via independent emitted-code graph; proof complete mod…
rasanaruto-lgtm Oct 15, 2026
a943682
Add axiomatic proof of the 99.7613 ceiling (7 axioms, AX3/AX5/AX7 mea…
rasanaruto-lgtm Oct 15, 2026
02aef66
Close AX4 and AX6 by measurement: 153-node gap = 31 zero-degree optim…
rasanaruto-lgtm Oct 15, 2026
c054275
Generalize AX4/AX6 across the TU: 0 counterexamples (alloc-graph subs…
rasanaruto-lgtm Oct 15, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
223 changes: 223 additions & 0 deletions CONSOLIDATED_PROOFS_updateCollisions.md

Large diffs are not rendered by default.

138 changes: 138 additions & 0 deletions PROCESSES_AND_PROOFS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
# Processes & proofs — complete log (Mario Kart Wii `updateCollisions`)

> **STATUS (read first).** This log was written while the function sat at **93.4368%**. It was
> later taken to **97.7327%** (838/838 instructions) by four source *shapes*, which **falsified**
> the `no-path` / `UNSAT` / `measurement-invariance` proofs recorded below. The definitive, current
> account — including the compiler reverse-engineering and every later round — is
> `SUBAGENT_FIELD_NOTES_updateCollisions.md`. Treat the 93.4368-era numbers/proofs here as history.
>
> **Current state (2026-10-15): 99.7613% landed.** The authoritative consolidated proof set,
> exhausted-vector list, artifact index and 10 open hypotheses now live in
> **`CONSOLIDATED_PROOFS_updateCollisions.md`** — read that before any new search.

Every **process** this project ran and every **proof** it reached, logged whole and then
compared / contrasted. Machine-readable copies live in `subagent_data/subagents.db`
(tables `processes`, `comparisons`, `proofs`) + `processes.jsonl` / `comparisons.jsonl`.

Legend for a process line: **name** — purpose · steps · tools · result.

---

## 1. The processes (39)

### Matching-loop (6)
- **P-MATCH-LOOP** `edit → ninja build → objdiff-cli → repeat` — the base loop; produced 86.993 → 93.437. *(supersedes nothing; the spine of the work.)*
- **P-SCRATCH** decomp.me scratch iteration — GET/POST `/api/scratch`; scratch `hbr0m` re-posted as the score rose.
- **P-PERMUTER** decomp-permuter (patched scorer→objdiff, direct compile) — C-only; cannot parse the C++ TU → dead end here.
- **P-REGPARTS** regparts/regenum — instrument the vregs, enumerate 276 edits; proved registers are locked to structure.
- **P-ENGINE-TEXT** text-level mutation engine — broad candidate generation.
- **P-ENGINE-TS** tree-sitter AST engine — structural mutations (temp-intro / reorder / type).

### Harvest (8)
- **P-OBJDIFF** objdiff JSON (+ `-x`) — the score oracle; `-x` proved the rodata symbol name was score-irrelevant.
- **P-SYMBOLS** readelf/nm — symbol names/sizes/order.
- **P-SECTIONS** readelf `-S`/`-x` — section sizes + raw bytes (target/our `.rodata` byte-identical).
- **P-RELOC** readelf `-r` + reloc-symbol compare — identical references; located `r29=pool`, `r30=pe`.
- **P-CAPSTONE** instruction/register diff — residual is register-only + one CSE-locked block (later *corrected* by D3).
- **P-NOTE-SPLIT** `.note.split` — original TU order/data addresses match ours.
- **P-MAP** Metrowerks `.MAP` generation — produced the link map (mapdas input).
- **P-REGTUPLE** register-tuple extraction (objdump parse) — machine-comparable colour state per trial.

### Compiler-investigation (7)
- **P-CC-SWEEP** 28 MWCC builds — `0x4201_127` best; none reached 100%.
- **P-FLAG-SWEEP** ~70 flag combos — project flags optimal; colour invariant.
- **P-DBG-SETUP** mwcc-debugger setup + `Wii/0x4201_127` row derivation (CodeView blob; breakpoint fixes) — enabled everything vreg.
- **P-DBG-REGALLOC** regalloc graph dump — the vreg-index colouring rule + coalescing flags.
- **P-DBG-PCODE** PCode dump — found the coalescing `mr r385,r92`.
- **P-RENUMBER** renumbering analysis — turned the dump into R-VREG-BLOCKS.
- **P-DEGREE** degree/neighbour parsing — falsified the degree-priority model.

### External (6)
- **P-DTK** toolkit exploration (elf info/dwarf/sigs/disasm, dol diff/apply, map).
- **P-DOL-DIFF-REMAP** dol_diff + `tools/remap_elf_symbols.py` — made `ninja dol_diff` green.
- **P-SYNC-DOLDECOMP** file-level merge of doldecomp/mkw + contributions (took 5 files).
- **P-DECOMPME-API**, **P-GH-SEARCH**, **P-M2C** — publish, discover, decompile.

### Meta (4)
- **P-SWARM** multi-agent subagent swarm — ~35 agents; the proxyF win, then exhaustive confirmation.
- **P-DB** structured dataset construction (SQLite+8 tables+FTS).
- **P-TOOLS5** five tool paradigms (analytics / graph / retrieval / solver / ETL).
- **P-AUTOLOOP** automated hypothesise→test→log loop.

### Proof (4)
- **P-PROOF-NOPATH**, **P-PROOF-UNSAT**, **P-PROOF-UNSAT-EXT**, **P-PROOF-INVARIANCE** (see §2).

### Release (4)
- **P-KB** field notes / KB (PR #275); **P-PR13**; **P-PR14**; **P-PR275**.

---

## 2. The proofs (4)
1. **no-path** — state-graph BFS/Dijkstra: the target colour state `{r30,r28,r26,r29}` is
unreachable from the current one; target node has 0 in-edges.
2. **colour UNSAT** — z3 model of R-COLOR-ORDER / R-VREG-BLOCKS / R-SPLIT: the
source-realizable target colouring is unsatisfiable (`pe` can't out-rank the pool).
3. **extended / full UNSAT** — adding the structural constraints keeps it UNSAT and *closes*
the "make the pool a local" escape; the structural closure needs a −3-instruction
compensation no known lever provides.
4. **measurement-invariance** — 28 compilers × ~70 flags × 3000 decl perms × 58k permuter ×
5 tool paradigms: **nothing beats 93.4368**.

---

## 3. Comparisons (23) and what they mean
Subsumes (6) · Supersedes (2) · Complements (13) · Contrasts-with (2). The load-bearing ones:

| A | B | relation | meaning |
|---|---|---|---|
| P-MATCH-LOOP | P-PERMUTER | subsumes | the manual loop is general; the permuter automates it (but C-only → unusable here) |
| P-DEGREE | P-DBG-REGALLOC | contrasts-with | **naive degree-priority is falsified by the actual vreg-index priority** |
| P-DBG-REGALLOC | P-RENUMBER | supersedes | data → rule (R-VREG-BLOCKS) |
| P-OBJDIFF | P-CAPSTONE | complements | score alone hides *which* registers differ; capstone names them |
| P-PROOF-NOPATH | P-PROOF-UNSAT | complements | empirical vs deductive proofs of the same unreachability (independent, agreeing) |
| P-PROOF-UNSAT | P-PROOF-UNSAT-EXT | supersedes | the extended model removes an escape the basic one left open |
| P-SWARM | P-AUTOLOOP | contrasts-with | broad interpretable human-in-the-loop agents **vs** narrow reproducible automation |
| P-DB | P-TOOLS5 | complements | substrate vs consumers |
| P-PR14 | P-PR275 | complements | the function (doldecomp) vs the reusable technique (KB) |

---

## 4. Contrast analysis — which processes worked, which failed, and *why*

**Clusters that succeeded.**
- *Source-shape search* (P-MATCH-LOOP, P-ENGINE-TEXT/TS, P-SWARM, P-AUTOLOOP): the **only**
cluster that moved the score (86.993 → 93.437), and it needed breadth (thousands of
candidates) — the win was found by a permuter runner, then *explained* by the debugger.
- *Compiler-internals* (P-DBG-*) and *harvest* (P-OBJDIFF/RELOC/CAPSTONE): did not change the
score, but converted guesswork into **rules** (vreg-index colouring, R-SPLIT) and **proofs**.
This is the distinguishing property of the whole effort: tools that don't move the needle
still produced the decisive understanding.

**Clusters that failed, and the failure mode.**
- *Automated source search alone* (P-PERMUTER, P-REGPARTS, P-ENGINE-TS, P-AUTOLOOP): all
plateau at **93.4368**. Failure mode: the compiler's colouring is a deterministic function of
the *frontend vreg numbering*, which is not reachable by equivalent source edits.
- *Compiler/flag axes* (P-CC-SWEEP, P-FLAG-SWEEP): orthogonal to the problem; the optimum is
already at the project settings.
- *Structural-only* fixes (gameMode/playerIdx block) and *colour-only* fixes are
**decoupled** (E4): fixing the 838-instruction size does not move `pe` to r30 and vice-versa.

**The decisive contrast.**
- **Empirical search peaks at 93.4368** (P-SWARM/P-TOOLS5); **deductive proof shows the peak is
the ceiling** (P-PROOF-UNSAT/-EXT). The two are *independent* — searched empirically and
proven formally — and they **agree**: the residual is a frontend vreg-numbering artefact,
not a missing lever.
- **P-SWARM vs P-AUTOLOOP** is the methodological contrast: a parallel, interpretable swarm
found the win and the rules; a deterministic loop then reproduced them headlessly — the
swarm is for discovery, the loop for regression.
- **Isolation (round E) vs shared harness (round D)**: identical methods, different
infrastructure — round D poisoned its own measurements by sharing one source file; round E
(private copies) produced clean, reproducible numbers. *Process infrastructure changed the
validity of the results, not the methods.*

## 5. Through-line
Read end-to-end, the processes form a funnel: **harvest** (P-OBJDIFF/SYMBOLS/RELOC/CAPSTONE) →
**compiler internals** (P-DBG-*) → **rules** (R-COLOR-ORDER/VREG-BLOCKS/SPLIT) → **search**
(P-SWARM/TOOLS5/AUTOLOOP) → **proofs** (no-path/UNSAT). Each stage narrowed the residual until
only a frontend vreg artefact remained, which the proofs show cannot be produced by equivalent
source — the honest finish at **93.437%**.
Loading