#315 cold-vs-warm .fco witness (ADR-0017 byte-identity) is broken — pre-existing at cbb941f, invisible to test-fast-sharded
openFound while landing ADR-0032 Stage A (whose gates were designed against this witness). The funcl-warm.fco == funcl-warm-cold.fco byte-identity gate (ert: the count-diff-bytes==0 test at tests/bootstrap.el ~2957) FAILS on fresh builds, and bisection shows it fails at every commit tested back to and including cbb941f (2026-07-13, the fasl v3 header commit):
- cbb941f: DIVERGED
- eaa0c57: DIVERGED
- cb4275b (== cbfbec0 + docs): DIVERGED, 7,469 differing bytes
- ADR-0032 Stage A tree: 7,491 differing bytes (+22 vs its base — Stage A itself is witness-neutral thanks to its bundle-emit/hosted-eval gates)
Shape of the divergence: bundle sizes are EQUAL; all differing bytes are CO-header mmap-offset fields plus a population of cross-region rel32s. The first CO's recorded start offset differs by ~0x150-0x230 between producers — i.e. the two producers' PRELUDE EMISSION differs in size (~560B out of ~790KB), and every downstream offset/rel32 shifts with it. Both preludes compile the same embedded source, so the asymmetry has to come from pool-dependent emission decisions (ag-arena-baked-reuse-vaddr consults each binary's own static pool; funcl-cold's is a subset of stage2's) or another producer-divergent input that one of the pre-cbb941f fasl-campaign commits (ce0157b / 2aa2724 / cbb941f or earlier) introduced. Not bisected past cbb941f.
Why nobody noticed: the witness test is NOT in test-fast-sharded (the standard pre-push gate — 179 of 209 ert tests; zero bundle tests in the shard logs). Only a full serial test-bootstrap runs it, and that hasn't been run in a while.
Two work items:
- Bisect past cbb941f and fix the producer asymmetry (or make the serializer normalize the offset fields + remaining cross-region rel32s so the witness is layout-insensitive — the zero-rel32 approach that fixed the original 96-byte residue, extended).
- Get the witness into the fast gate: it needs funcl-cold + both fcos (~5 min incremental) — worth a dedicated make target (test-witness) documented in CLAUDE.md as part of the pre-push checklist for emission-touching changes.
Comments (0)
No comments yet.