feat(phase 2.2 F1): Windows soak — both strategies pass, 0 torn reads #30
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feat/phase-2.2-f1-windows-soak"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Closes the Phase 2.2 F1 follow-up from PR #24. Re-ran the atomic-write soak on the Windows production OBS host (bridge) via Tailscale shell. Both strategies survive 30 minutes on NTFS with zero observable torn reads:
write(fs.writeFileSync)rename(fs.writeFileSync+fs.renameSync)Strategy A (rename) — already shipped via PR #24 — is confirmed safe on the real production target. Both strategies behaved identically on the soak: zero
empty, zeroenoent, zeromismatch, zeroread_erroracross ~116k total reads.Port: TS → MJS
Same algorithm in plain ESM so hosts without tsx (the Windows OBS host, etc) can run directly with
node:scripts/atomicWriteSoak.mjs— CLI entryscripts/atomicWriteSoak/strategies.mjsscripts/atomicWriteSoak/classifyRead.mjsscripts/atomicWriteSoak/runSoak.mjsscripts/atomicWriteSoak/reporter.mjspackage.json— addnpm run soak:atomic-write:mjsThe .mjs files are a 1:1 mirror of the existing .ts implementations. Comments on each .mjs file note: if the algorithm changes here, update the .ts side too.
Observations
setIntervalscheduling is more lossy on Windows, but the read count remains plenty to surface any tearing class that exists.Plan housekeeping (also in this PR)
.omc/plans/stream-a-thon-2026-06-13.mdgains a new Pre-release housekeeping section sequencing what happens between this PR's merge and the public GitHub release:Not June 13 event scope — pre-release housekeeping that runs after this PR lands and before the canonical name + identity are published.
Test plan