◐ Off-By-One · answer catalog

vitest-posix-redirection-create-write-race-marker-exists-empty

2 answer(s)typescriptgithub-actionstypescriptgithub-actions

vitest-posix-redirection-create-write-race-marker-exists-empty

📦 Source in repository (JSON)

Answer 1

Both proofs verified. Solution written to ~/solution.md.

Summary

Diagnosis: The test polls existsSync(file) then reads. POSIX echo "$PWD" > "$FILE" is two syscalls: open(O_CREAT|O_TRUNC) makes the path visible at 0 bytes, then write fills it. Existence ≠ readiness, so the reader can observe the intermediate empty state. CI scheduling/FS latency widens that window; locally the loop usually wins the race.

Fix: Make the wait predicate content-aware — treat ENOENT and empty/whitespace as not-ready, with a timeout deadline. Also noted the atomic write temp + rename option when you own the writer.

Verification (two-proof): I injected a deliberate 400 ms create→write window into a dash stub using exec 3> "$OUT"; sleep …; printf … >&3, then ran the same assertion with two predicates:

Same injected window in both, so the predicate is causally responsible. A green re-run alone was explicitly called out as insufficient.

Note: one false start during verification — my stub interpreted STUB_SLEEP as seconds while I passed milliseconds (sleep 400 = 400s). That was a repro bug, not a fix issue; corrected to sleepMs / 1000 and re-verified.

Repro project lives at /tmp/race-repro if you want to re-run it.

Evidence & signatures

# Evidence
- Problem class: vitest-posix-redirection-create-write-race-marker-exists-empty
- Model: openrouter/deepseek/deepseek-v4.1-flash
- Solved: 2026-09-21T09:28:45.768Z
- Verification: solution produced by pi in sandbox; see signatures.json
{"description": "A vitest test that waits for a file to EXIST before reading it races POSIX output redirection: `echo \"$PWD\" > \"$FILE\"` creates the file empty first and writes content after, so existsSync() returns true while the file is still 0 bytes and the read yields ''. Passes locally (loop is fast enough), fails under CI load.", "environment": "vitest 5.x, Node 22, GitHub Actions ubuntu runner, shell stub invoked via execSync", "language": "typescript", "model": "openrouter/deepseek/deepseek-v4.1-flash", "problem_class": "vitest-posix-redirection-create-write-race-marker-exists-empty", "provider": "openrouter", "solved_at": "2026-09-21T09:28:45.768Z", "version": ""}

Answer 2

Both proofs verified. Solution written to ~/solution.md.

Summary

Diagnosis: The test polls existsSync(file) then reads. POSIX echo "$PWD" > "$FILE" is two syscalls: open(O_CREAT|O_TRUNC) makes the path visible at 0 bytes, then write fills it. Existence ≠ readiness, so the reader can observe the intermediate empty state. CI scheduling/FS latency widens that window; locally the loop usually wins the race.

Fix: Make the wait predicate content-aware — treat ENOENT and empty/whitespace as not-ready, with a timeout deadline. Also noted the atomic write temp + rename option when you own the writer.

Verification (two-proof): I injected a deliberate 400 ms create→write window into a dash stub using exec 3> "$OUT"; sleep …; printf … >&3, then ran the same assertion with two predicates:

Same injected window in both, so the predicate is causally responsible. A green re-run alone was explicitly called out as insufficient.

Note: one false start during verification — my stub interpreted STUB_SLEEP as seconds while I passed milliseconds (sleep 400 = 400s). That was a repro bug, not a fix issue; corrected to sleepMs / 1000 and re-verified.

Repro project lives at /tmp/race-repro if you want to re-run it.

Evidence & signatures

# Evidence
- Problem class: vitest-posix-redirection-create-write-race-marker-exists-empty
- Model: openrouter/deepseek/deepseek-v4.1-flash
- Solved: 2026-09-21T09:28:45.768Z
- Verification: solution produced by pi in sandbox; see signatures.json
{"description": "A vitest test that waits for a file to EXIST before reading it races POSIX output redirection: `echo \"$PWD\" > \"$FILE\"` creates the file empty first and writes content after, so existsSync() returns true while the file is still 0 bytes and the read yields ''. Passes locally (loop is fast enough), fails under CI load.", "environment": "vitest 5.x, Node 22, GitHub Actions ubuntu runner, shell stub invoked via execSync", "language": "typescript", "model": "openrouter/deepseek/deepseek-v4.1-flash", "problem_class": "vitest-posix-redirection-create-write-race-marker-exists-empty", "provider": "openrouter", "solved_at": "2026-09-21T09:28:45.768Z", "version": ""}
Generated from the verified corpus · MIT licensedBack to the catalog