#203 has been seen four times, always on Linux CI, never once on macOS across 1000+
runs in two independent experiments. The documented next step is a Linux + Node 24
reproduction, and there is currently no way to run one without reddening an unrelated
PR and waiting for chance.
workflow_dispatch only — it never runs on push or pull_request, so it costs nothing
until someone asks for it.
Inputs are the two suspected variables:
- `node` is a choice (24 / 22 / 26) rather than pinned, because 22-vs-24 is a
comparison worth running deliberately. A previous Linux VM attempt was invalidated
by Node 22's `node:sqlite` ExperimentalWarning landing on stderr, which the boot gate
read as "server did not start" — ~23 of 50 runs failed spuriously. The workflow says
so, so the next person interprets a 22 result against that confound instead of
rediscovering it.
- `concurrency` is the knob that actually reproduces, not round count: test() is
fire-and-forget for async bodies, so ONE suite run already spawns 15 concurrent
server.mjs children across 11 ltBoot tests. Several suites at once is what multiplies
cross-process contention.
Classification is anchored on the failure marker AND the test name, which is not
cosmetic. ltDiag samples the first 900B of child stdout (#204) — the boot banner — so a
log where only the GATE test failed still contains "Local tools: ON". Validated against
real logs rather than reasoned about: 3 clean runs + 1 gate-mutation run gave
unanchored 'Local tools' -> 1 hit, attributed to the WRONG category
anchored -> gate=1, announce=0 (correct)
totals -> total=4 clean=3 (correct)
My first draft had the unanchored form with a comment claiming the failure mode was
"matches every log". That was wrong — the real defect is cross-category attribution,
caused by the diagnostic quoting the child's own output. Found by running the logic on
real logs; the comment now states the measured reason.
The job does NOT fail on a reproduction: catching the flake is the goal, and a red X
would read as "the hunt is broken" rather than "the flake was caught". Results go to
the step summary; logs upload as an artifact.
server.mjs: unchanged (CI-only; ALIGNMENT.md requires no cli.js citation).
Verified: YAML parses, all three run blocks pass `bash -n`, classify logic exercised
against real suite output.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017gbqUZ8HfBZpjjbzQ85oH8