Repository navigation
Fix the gate's Windows pruning race, Release's macOS queue, and Windows git-test limits - #233
Conversation
Quest-Claim: 9cf7cf4076519f9c
The race asserted exactly 4 admissions before a deadline, which slow native Windows runners missed. It now admits all 12 callers on a clock running 20 times faster, and checks each admission against the rule. ci(release): skip macOS checks on pull requests Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Callers that prune the same superseded version at once made Bun's rmSync throw EFAULT on Windows, crashing a caller after its admission was recorded. A ledger read of a version being pruned throws EPERM there. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Each test spawns git up to a dozen times, and a busy Windows runner has stretched them 3-20x past their usual 0.8-1.4 s. Like start.test.ts, they now allow 30 s, which still catches a hang. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Decided (user, 2026-10-26): give (Written by Claude Opus 5.5) |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
kixelated
left a comment
There was a problem hiding this comment.
Automated review by review (OpenAI)
Reviewed commit: e48273facfbab009ce1c22ea452acff85ffbe16f.
No actionable bugs found in the eight-file diff and surrounding gate, test, and workflow logic. Overall direction is sound: the small ledger helper preserves atomic publication, shared workflow steps avoid duplication, and the scoped timeouts follow the recorded decision without unrelated refactoring. No simpler structural change appears necessary.
Verification limits: GitHub-only static review; I did not run tests or reproduce the Windows races. Check and Release were still running when inspected, so this is not a test-pass or merge-readiness claim. The independent Codex summary also reports no findings.
(written by OpenAI)
Resolve quest/m0/README.md by taking main's Required list without the finished CI flakes quest. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Merged Because the conflict was resolved by hand, the new head needs a fresh review before landing. The automated reviewer has not re-reviewed after the push, so this is waiting on a maintainer decision. Today's native Windows failures on other PRs ( (written by Claude Opus 5.5) |
|
Merge summary: head cc47b73 merges main into the reviewed e48273f. The diff against main is byte-identical to the reviewed one, and the only conflict was in the quest README link list. Codex gave a 👍 after the push, required CI is green (12/12), and (written by Claude Opus 5.5) |
Works on quest/m0/ci-flakes.md. This PR fixes the gate headroom failure and Release's macOS queue, gives the native Windows git tests a file-level time limit, and deletes the finished quest.
Gate headroom: a real Windows bug, not a slow host
The Plan assumed that slow runners admitted only 2 or 3 of the 4 callers. They didn't. The old test's callers discarded any rejection, so I reran the race on the native runners with every outcome recorded. That was 60 rounds per runner on a throwaway
diag/ci-flakesbranch (run).EFAULT: bad address in system call argument, rm '…\ledger\1'. Every under-admitted round (18 of 60 onwindows-11-arm, 2 of 60 onwindows-2022) had a caller that published its admission and then crashed. No caller was ever too slow.rmSync(file, { force: true })the same file at once, Bun throwsEFAULT, where Node throwsEPERM. Callers pruning the same superseded ledger version hit this, andremove()only toleratesEPERM/EBUSY.EPERMon Windows in both runtimes.ledger()retried only onENOENT.On Windows,
quest gatecould fail a command whose slot it had just recorded.Fix (
src/cli/gate.ts):remove()also tolerates Bun'sEFAULT.ledger()retries a failed read only when a newer version now exists, whatever the error. A file pruned since the listing is always superseded, and a real read error on the newest version still throws.Test. As decided, "concurrent processes never admit past the headroom, and admit every caller" no longer expects exactly 4 admissions by a deadline:
SETTLE_MSafter the previous one.Validation.
windows-11-armand 0 of 40 onwindows-2022. The fixed gate failed 0 of 40 on both.Release's macOS queue
Release's macOS
checkjobs now run in their ownmacosjob, skipped on pull requests. They share the Linux job's steps through a YAML anchor. Tags, which publish the artifacts, and manual runs still check macOS, and Check'slifecycle (macos-14)still runs onmain.publishneeds the new job. Check's comment no longer says pull requests rely on Release for macOS. Release hasn't hit this in its last 100 runs; the change applies the decision from kixelated/quest#218 before it does.Native Windows git-test timeouts: findings
From full-suite and single-file runs on both runners, with every child process timed (run):
move.test.tsandlanded.test.tsspend about 95% of their time starting git: 8–13 processes per test, at 35–80 ms each, against about 2 ms on Linux.windows-2022and 1.4 s onwindows-11-arm, where Defender real-time scanning is on. Running files in parallel makes no difference:move.test.tstook 10.0–10.4 s alone and 8.6–10.4 s in the full suite on arm.bun run, andGIT_CONFIG_NOSYSTEM(run).maintenance.auto=falsesaves 15–25 ms per commit, and copying a prebuilt repository (about 35 ms) beatsinit+add+commit(140–185 ms).start.test.tstimeouts in the Plan came from kixelated/quest#167's branch on 2026-10-21. That PR merged with copied fixture repositories and a 30 s file timeout, and start hasn't timed out since.Native Windows git-test timeouts: time limit
Fewer git processes can't absorb a 20× host stall within vitest's 5 s. The user chose (2026-10-26) a file-level limit over cutting git processes:
move.test.tsandlanded.test.tsnow allow 30 s, asstart.test.tsdoes. That is about 20× their slowest test onwindows-11-arm, and still catches a hang. Cutting git processes (copied fixture repositories,maintenance.auto=false, batched lookups) would still makequest mvandquest startfaster on Windows, and is listed below as a follow-up.Choices made without asking
Validation
just checkandjust testpass locally, and so doesquest check --base origin/main.check,test,build, lifecycle) ran 3 times per runner, and all 6 passed (run).Suggested follow-ups
EFAULTfrom concurrentrmSync(file, { force: true })on Windows upstream (needs approval to post outside kixelated/moq-dev). Node reportsEPERM.maintenance.auto=falsein tests.quest mvrunsgit remote get-url origintwice plusgit config --get remote.origin.url, andquest startruns similar sets.The throwaway
diag/ci-flakesbranch is deleted.🤖 Generated with Claude Code
(Written by Claude Opus 5.5)