Skip to content

[ci-flake] TestReferenceSolutions_JS/fizzbuzz hits its 60s node-startup timeout on Windows — red-lit dev on two unrelated commits in one window #587

Description

@sunholo-voight-kampff

Found by the V1 mission loop, iteration 139, while confirming Gate 3b on the #498 Lane B M1 merge. Not caused by either commit that it red-lit.

What happened

Build and ReleaseBuild windows-latest failed on dev at f5ebcc0b5 with:

--- FAIL: TestReferenceSolutions_JS (92.30s)
    --- FAIL: TestReferenceSolutions_JS/fizzbuzz (60.59s)
    --- PASS: TestReferenceSolutions_JS/recursion_fibonacci (31.07s)
    --- PASS: TestReferenceSolutions_JS/graph_bfs (0.06s)
    --- PASS: TestReferenceSolutions_JS/binary_tree_sum (0.06s)
    ... every remaining subtest 0.06-0.07s
FAIL	github.com/sunholo-data/ailang/internal/eval_harness	147.808s

(Isolated with a --- FAIL grep against a 13,067-line --- PASS control, so the 2 FAIL lines are a measurement, not a scan artifact.)

internal/eval_harness/reference_solutions_test.go:89 sets timeout := 60 * time.Second. fizzbuzz failed at 60.59s — it hit that bound exactly.

Why it is not the commits

Two independent lines of evidence:

  1. A descendant commit with the identical code passed. 434e3e53a is a docs-only child of f5ebcc0b5 (git merge-base --is-ancestor → true; git ls-tree 434e3e53a serveapi/ confirms the new package is present). Its Build windows-latest is success. Same Go code, green.
  2. An unrelated concurrent commit failed the same way. f574c4b58 ("chore(eval): v0.32.0 curation cycle") changes benchmark YAML and a skill markdown file — zero Go — and its Build windows-latest also failed, in the same ~30-minute window.

Recent Build windows-latest on dev: f574c4b58 failure · 434e3e53a success · f5ebcc0b5 failure · 8567cd57e success · d1b851026 success · 6e82d2a1b success. Interleaved red/green across commits that cannot have caused it.

Root cause shape

The timing profile is the tell: fizzbuzz 60.59s and recursion_fibonacci 31.07s, while all eight other subtests are 0.06-0.07s. That is node cold-start stalling, not program work — these are tiny reference programs.

The test's own comment already anticipates this:

Reference solutions are tiny programs; wall-clock is dominated by interpreter startup (~slow on Windows CI runners — node alone can take >20s cold). recursion_fibonacci was getting the only 60s slot, but fizzbuzz hits the same 30s cliff on Windows. Give every benchmark the same generous slot...

So 60s was already a raise from a lower bound after the same class of failure. The Windows runner has now exceeded it too. Raising it again buys time but does not change the shape — the first JS subtest to run pays the cold-start cost, and the budget is per-subtest wall-clock that includes it.

Fix shapes worth considering (not prescribing): warm the interpreter once before the subtest loop and exclude startup from the per-case budget; or measure startup separately and make the per-case budget cover execution only; or gate the JS lane behind an explicit opt-in on Windows the way TestNetHttpPost (#561) gates on CI.

Class

Third in a recognised family: #583 (live GitHub clone), #494 (unbounded Windows subprocess), #509 (macOS cold-start guardrail). Each is a check whose verdict depends on runner or third-party conditions rather than on the code under test, and each has red-lit dev on a commit that could not have caused it. #561 is the same shape locally.

Filed by the V1 mission loop, iteration 139.

🤖 Generated with Claude Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions