You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
oracle-gaps batch 3: default-out stop and daemon results missing beside the stream log (intermittent) #76
Observed once, on PR #57 (feat/gap-cli-stream-log) at 10:50 on 2026-11-13, in a local batch (log batch3-r1.log, not in the repo).
Failing units and messages:
fixed seed 20261105: a stop with the default output directory: "the run completed, but its results.json is not beside its stream log"
fixed seed 20261105: a daemon check with the default output directory: the same message
fixed seed 20261105: two runs on one output directory: "the second run on a live output directory exited 0, not refusing it"
Not reproduced in four later runs of the same code, two of them with two copies running at once.
Likely cause: a leaked mutant. Both failure signatures match the hostile mutants F2 (the supervisor does not pass --out to the child or daemon) and F4 (no live-run refusal). A bisect file swap that was in place at the time was ruled out by timestamps, but a mutant left in the file would produce exactly these messages.
Next step: make the results-beside-log message name the directory and whether results.json is missing or unparseable, so the next occurrence says which it was. Then find a check that asserts the file is restored after each mutant run.
Reproduced, and fixed by #57 (feat/gap-cli-stream-log, head 7db86c5).
Mechanism: the overlap witness kept the first run alive with a wall-clock hold (HOLD_EXIT_MS), so under load the second run could start after the first had exited. The CLI then correctly found a dead claim and took it over, and the witness's expected refusal was wrong for that schedule. That is a nondeterministic witness, not a CLI defect.
RED (parent 5fa74e0, unchanged CLI; second spawn delayed until the first process has exited, the extreme-load schedule):
cd <scratch worktree at 5fa74e0>/packages/oracles
npx vitest --run --config oracle-gaps/vitest.config.mjs gap-report-oracle -t 'fixed seed 20261105: two runs on one output directory$'
-> Difference: the second run on a live output directory exited 0, not refusing it
GREEN (7db86c5; the first run holds its exit and claim at a named point until the driver releases it after the second run is refused; same delayed second spawn, with an injected 3 s delay before it):
-> Tests 1 passed
Fix in #57: the overlap is deterministic by construction (ORACLE_GAPS_TEST_HOLD_UNTIL replaces the wall-clock HOLD_EXIT_MS). Status: fixed on #57; this issue closes when #57 merges.
Activity
fix(oracle-gaps): take over a stale claim under a mutex, and name res…
KyleAMathews commentedon Nov 14, 2026
Reproduced, and fixed by #57 (feat/gap-cli-stream-log, head 7db86c5).
Mechanism: the overlap witness kept the first run alive with a wall-clock hold (HOLD_EXIT_MS), so under load the second run could start after the first had exited. The CLI then correctly found a dead claim and took it over, and the witness's expected refusal was wrong for that schedule. That is a nondeterministic witness, not a CLI defect.
RED (parent 5fa74e0, unchanged CLI; second spawn delayed until the first process has exited, the extreme-load schedule):
cd <scratch worktree at 5fa74e0>/packages/oracles
npx vitest --run --config oracle-gaps/vitest.config.mjs gap-report-oracle -t 'fixed seed 20261105: two runs on one output directory$'
-> Difference: the second run on a live output directory exited 0, not refusing it
GREEN (7db86c5; the first run holds its exit and claim at a named point until the driver releases it after the second run is refused; same delayed second spawn, with an injected 3 s delay before it):
-> Tests 1 passed
Fix in #57: the overlap is deterministic by construction (ORACLE_GAPS_TEST_HOLD_UNTIL replaces the wall-clock HOLD_EXIT_MS). Status: fixed on #57; this issue closes when #57 merges.