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
TypeScript: worker overlays symlink the build output, so worker builds write through to the real tree and parallel workers race — both false SURVIVED and false KILLED #31
Project shape: tests import a committed build-output directory (lib/), so the per-mutant test command is build && run tests. workers.py links everything under the root except src into each worker overlay — that includes lib/.
Consequences, observed on a TypeScript project (src/parse.ts, 126 sites):
Write-through: a worker's build writes through the lib/ symlink into the real tree, mutating files outside the overlay.
Cross-worker race: with N workers, N builds race on the same real lib/ files — a mutant's tests can execute against another worker's build.
Evidence (same mutant, both directions wrong):
turnAt (let turn = 0 → 1): the 8-worker parallel run reported SURVIVED; running that mutant in isolation fails 4 tests (should be KILLED).
Opposite direction also observed: mutants reported KILLED in parallel whose isolated rerun survives.
Full-run comparison: parallel fresh 75/51, serial fresh 73/53 — errors in both directions.
Related: #19 and #29 (linked directories make tests exercise the original — false SURVIVED). This adds the write-through and the parallel race, which is what produces false KILLED too, and it also means a parallel run corrupts the snapshot that #21's differential then inherits.
Suggested fix direction: exclude the build-output directory from linking (read outDir from tsconfig) and copy it into each worker instead — or give each worker a private outDir. Cloned main on 2026-11-06; happy to provide the full run logs.
Activity