Files
BFM-decomp/tools
Drew T 6a48a490fc fix(recovery): validate the binary before staging; aprop_autodraft adopts the TU's spelling and refuses asm bodies
MY BUG, SAME DAY, SAME CLASS. recover_rejects staged by the binary field of
aprop_symfix's output slate — and aprop_symfix tags its REBASE VARIANTS into that
field (ov_MAIN_012-cn, -cn-cast, -cn-cast-rc, -s2in, -s2in-uni). Staged verbatim,
each variant became its own directory and sweep_parallel was handed 273 directories
naming binaries THAT DO NOT EXIST: 553 drafts that could never be gated against
anything, while the sweep reported 'over 331 binaries'. It now resolves the variant
tag back to a real binary, keeps ONE variant per target, and COUNTS what it cannot
resolve (R43). The 290 bogus staging dirs are cleaned; 118 real drafts remain.

aprop_autodraft, per Drew:
  * decl_for prefers the DESTINATION TU's own spelling and falls back to the seed's
    only when the destination is silent (wave law 2 — the destination is
    authoritative; 45 of 188 staged drafts declared a conflicting type).
  * it REFUSES a seed whose body is a verbatim __asm__ block. Those transcribe
    instructions rather than decompiling them, trivially 'MATCH' the local oracle
    because they ARE the target's bytes, and would count as matched functions in every
    progress number while nothing was decompiled. 26 of 188 were this shape. §265 is a
    deliberate human escape hatch for hand-written asm, not something an unattended
    lane propagates across a family.

Measured before changing the drafting prompt instead: model waves bw/bx/by/bz produced
ZERO whole-body asm across 530 drafts, so this is a tool behaviour, not a model one. A
blanket 'no asm' rule on every card would have cost us the sanctioned one-line levers
(§5a fences, §17 register pins) that appear in 32-47 drafts per wave.
2026-08-24 21:33:32 -06:00
..