Twinned from https://github.com/cfsh/ninefold/issues/747 by tools/beads/import_github.py's reconcile pass.
Found while measuring design 005 piece 2 (#746). Filing rather than fixing: it is not only a parallelism problem, and the fix is a design choice about what a deadline should do.
There is no step timeout in shared/VisualProbe.cs. budget_ms looks like one and is not — it warns and never fails (VisualProbe.cs:301, added by #572 for the opposite purpose: telling a reader that a frame-counted wait took longer than expected under load). A step that never satisfies its condition waits for the next frame, forever.
8-way parallel run on nf-dev-sg, 2026-08-07. cold-start stalled after
``` [playtest] journal armed: build bea4101 -> …/probe_out/playtest ```
and was still stuck ~9 minutes later, when I killed it. The other seven finished in 32 s. The same probe passes serially 3/3 immediately afterwards, so the probe is fine — it was starved of the fresh-install user:// state that #746 is about.
The cause there is a race #746 will fix. The shape is not fixed by that, and it is worse than a failure:
probe_gate cannot report what never finishes — no FAIL, no FLAKY, no line in the table.merge_pr.py invokes the gate synchronously, so a stuck probe is a merge that never returns rather than one that goes red. CLAUDE.md already warns that merge_pr.py takes minutes and that a 2-minute tool timeout kills it after the merge landed (#728 is the same collision from the other side); an unbounded probe makes that hazard open-ended.This is a fifth thing that gets called "flakiness" and is not: #615 resolved three causes wanting opposite fixes, #668 added frame-counted waits, #691 added "assertions all passed but Godot crashed on shutdown". This one is "nothing was reported at all."
probe.py/probe_all.py — cheaper (kill the child, record FAIL), and it works for a probe wedged outside the step loop, e.g. in Godot startup, which is where this one actually stalled. Loses the "which step" detail.probe_gate.wipeout, braces in the tools).Related: #746 (the race that exposed it), #691, #615, #572, #620, #728.
Unclaimed.
None.
No comments.