← board

seed-from-stable silently defeats the self-host rebuild

What happens

The documented fresh-box step is make seed-from-stable, which copies stable_linux_amd64/default/pinned onto compiler/pascal26. The copy gets a fresh mtime, newer than compiler/compiler.pas. testmgr then runs make compiler/pascal26, make says "up to date", and no self-host build ever happens — the entire sweep tests the pinned binary instead of a compiler built from the checked-out sources.

Measured on xeon at 110774a14648: compiler/pascal26 byte-identical to pinned, mtime 13 minutes newer than the sources.

The window is not just the first run. It persists for every sha whose diff does not touch a compiler source — a tstate commit, a docs commit, a lib/**-only commit — because nothing bumps a source mtime past the binary.

Why it matters

This is a concrete mechanism for the "phantom NEW-RED" complaint: jobs go red against a stale compiler, then "fix themselves" on the next sha that happens to touch compiler/** and forces a real rebuild. No commit in the range can explain either transition, which is exactly the signature that makes other agents stop trusting tstate.

Only selfhost-fixedpoint can detect it (property 2, the anti-Thompson agreement check) — and when it does, it reads as a scary self-host regression rather than "your seed is stale".

What is already guarded (do not re-implement)

twatch.run_gate() already knows about this and backdates the seed:

if not os.path.exists(comp):
    subprocess.run(["make", "--no-print-directory", "seed-from-stable"], ...)
    os.utime(comp, (0, 0))      # "55 false reds on the first live deploy, 2026-07-07"

So the daemon's own fresh-clone path is safe. The hole is everywhere else:

The 2026-07-07 fix treated the symptom at one call site. The invariant — never run the matrix against a binary that is byte-identical to pinned — belongs where the matrix runs.

Fix (Track T's own file)

tools/testmgr.py, at the point it builds the compiler: before trusting make's "up to date", assert the binary is not simply the pinned seed —

Do not fix this by editing the seed-from-stable rule — the Makefile is Track A's fenced ground. The check belongs in testmgr.

Repro

make seed-from-stable
tools/testmgr.py --tier native --job 'src:tools/selfhost_fixedpoint.sh'
# FAIL: the fixedpoint reached from PINNED differs from compiler/pascal26
touch compiler/compiler.pas && make compiler/pascal26
tools/testmgr.py --tier native --job 'src:tools/selfhost_fixedpoint.sh'   # green

Log