mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-09-26 21:36:06 -04:00
e936556ff0
seed_ref answers 'is there a byte-identical twin?'. This answers the weaker but far more common question: 'which matched function should I READ before drafting this?' S68 measured a ~20x swing on that variable. Every cheapest large match came from an agent finding a matched neighbour (func_800D1254 555 ins/72k; func_800D12D0 657 ins/122k FIRST COMPILE; func_8018AD9C 397 ins/87k; func_8017BEBC 753 ins/177k), while main functions with no neighbour ran 200-350k for ~80 instructions. THE FAILURE THAT MOTIVATED IT: func_8017BEBC's card asserted 'no banked twin' while a MATCHED 755-instruction near-twin sat 3,700 lines up IN ITS OWN FILE, its header comment documenting the four levers the target needed. seed_ref joins on signature hashes and the two bodies are not hash-identical, so it was structurally invisible. Three other S68 agents found their unlock the same way, unprompted. Ranks on what actually worked, not intuition: SAME TU first (solved against the same decl environment, and its header records the levers), then same binary, then shape (li-normalised skeleton / call-sequence hash / reloc-kind sequence / CFG counts / opcode-histogram cosine, all precomputed in .run/feat.*.jsonl), then instruction- count proximity, with a HARD PENALTY for opt-level mismatch (§116 — an -O2 example actively misleads an -O0 target). It surfaces the neighbour's HEADER COMMENT, which is the payload agents actually consumed. Explicitly NOT a remap claim: §168 law 1 measured cousins at 0/26. A neighbour is a worked example to READ; seed_ref remains the tool for the byte-identical case. Validated against ground truth: for main/func_80024054 (265k tokens, ended NEAR 32) the top three neighbours are func_8003A0E4, func_800242D0 and func_800241C0 -- all three MATCHED THIS SESSION, same TU, same call sequence, same reloc-kind sequence. src/800.c holds 657 matched functions and the card offered none of them. Bug fixed en route, and it is a repeat: the atlas writes addresses as hex STRINGS while corpus.Stub.addr is an int. T4's verifier already lost rows to exactly this string-vs-int mismatch (the R32 silent-no-op class). Normalised in _addr().