Repository navigation
The native Windows suite passes nightly - #479
Conversation
Quest-Claim: d2fed8986a870fc9
…uite `git submodule` is a shell script that spawns sh and five more Git processes per call, which costs seconds on Windows runners. Since #445, every create, release, and removal ran it even without submodules, pushing worktree tests past their timeout on windows-11-arm. List initialized submodules from the index's gitlinks instead, and run `submodule update --init` only when the checkout has any. Fix the suite's other Windows failures where each lies: compare text that Git checks out with core.autocrlf with line endings normalized, expect PATH joined with path.delimiter, and await main for `worktree create`. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Windows is low priority: a regression may land, and the next nightly run on main catches it, with GitHub's failed-run notification as the signal. Its own workflow keeps Check's push concurrency from cancelling the scheduled run, and needs no per-job event conditions. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Git prints `--show-superproject-working-tree` with forward slashes on Windows, so a SubagentStop or SubagentStart from inside a submodule never matched its checkout's canonical registry path, and the checkout stayed active. Canonicalize it as the toplevel already is. Give the cases that clone submodules 60 s: they run 100-300 Git processes, which the Windows ARM runner spawns slowly. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…branch Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ly workflow Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Warning Review limit reachedYou've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Next included review available in 9 minutes. View limit details
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. |
There was a problem hiding this comment.
ℹ️ No critical issues — one stale comment worth fixing in passing.
Reviewed changes
- Nightly Windows workflow. The native Windows jobs move from
check.ymlintowindows.ymlonscheduleandworkflow_dispatch, mirroringsandbox.yml's shape, with the steps unchanged from the old Check job. - Index-based submodule enumeration.
submodules()walks index gitlinks recursively instead ofgit submodule foreach, removing the shell-script cost that timed out Windows-arm worktree cases; the enumeration stays a fail-safe superset of the old set, with rootgit status --ignore-submodules=noneremaining the backstop for removal safety. - Superproject canonicalization.
superproject()canonicalizesrev-parse --show-superproject-working-tree's forward-slash Windows output before the hook's registry lookups, and both former raw call sites now route through it. - Windows test fixes. CRLF-normalized text comparisons, a
path.delimiter-joinedPATHexpectation, and an awaitedmain()for the asyncworktree create. - Quest retired.
quest/m1/windows-suite.mdis deleted and its link dropped from the milestone README.
ℹ️ Stale claim that Check's suite covers Windows
release.yml's comment above the macOS-only native gate test still says "Check's suite runs on Linux and Windows only." Moving the Windows jobs out of Check makes that false, though the step's own conclusion — macOS needs its native gate.test.ts run — still holds.
Technical details
# release.yml comment claims Check's suite still covers Windows
## Affected sites
- .github/workflows/release.yml:133 — comment reads "Check's suite runs on Linux and Windows only"; this PR removes the Windows jobs from Check, so Check's suite is Linux-only and the Windows runs live in the nightly `windows.yml`.
## Required outcome
- The comment must state where the suite's Windows coverage now lives, without changing the macOS-only step itself.glm-5.3-flash | 𝕏

Finishes quest/m1/windows-suite.md: the native Windows suite passes on
windows-2022andwindows-11-arm, and runs nightly onmainand onworkflow_dispatchinstead of on every push.Changes
native Windowsjobs move from Check to a new.github/workflows/windows.ymlwithschedule(08:23 UTC) andworkflow_dispatch, and no push or pull-request trigger. A separate workflow needs no per-job event conditions, and Check'scancel-in-progressonmainpushes can't cancel the scheduled run. GitHub's failed-run notification is the only signal, the same assandbox.yml.git submodule(root cause of arm timeouts). Since moq-dev/quest#445, every worktree create, release, and removal rangit submodule foreach/update, even with no submodules. Each call isgit-submodule.sh: oneshand 5 more Git processes, which costs seconds on Windows. On windows-2022, worktree cases went from ~1.5 s to ~11 s, and on arm 3 to 4 of them passed 20 s.submodules()now walks the index's gitlinks (onels-files --stageper repository, then recursion into populated ones), andcreaterunssubmodule update --initonly when the checkout has gitlinks. On Linux, "refuses scratch that is tracked…" went from 123 Git processes to 53.git rev-parse --show-superproject-working-treeprints forward slashes on Windows, so aSubagentStop/SubagentStartfrom inside a submodule never matched its checkout's canonical registry path, and the checkout stayed active.superproject()now canonicalizes the path, for both the subagent lookup andWorktreeCreate's walk.runner.test.tsexpectsPATHjoined withpath.delimiter.move.test.tsandworktree.test.tscompare text Git checked out undercore.autocrlfwith line endings normalized.mainfor the asyncworktree create.describe's 20 s, which its comment sizes for "up to 20". On arm, "initializes nested submodules…" takes 24.6 s even after the fixes.quest/m1/README.md.Public API and wire impact
None. One behavior change: a populated gitlink with no
.gitmodulesentry used to makegit submodule foreachdie, failing release or removal. It is now inspected like any other submodule (checked for changes, unreached commits, and module stores).Validation
just checkandjust testpass on the final tree.947f0525: all jobs pass, bothnative Windowsjobs included. That commit's tree is the final head's except forcheck.yml, which still held the Windows jobs (see below).checkjob also failedgate.test.ts› "lets a phase finish its cleanup once the enclosing scope signals it". This PR doesn't touch the gate; the test passed in the 9 latestmainChecks and 8 of 8 local reruns, so I count it as a flake.gh workflow run windows.yml) is the first run ofwindows.ymlitself. Its steps are the old Check job's, unchanged.Choices made without asking
windows.ymlrather than aschedulein Check (the quest left this to the work). Check would need event conditions on all three jobs, and itsmainconcurrency group would cancel scheduled runs.windows.ymlis onmain(GitHub only dispatches workflows on the default branch), commit947f0525temporarily put them back in Check, and63579334removed them again. The squash merge drops this churn.src/cli/worktree.tsandsrc/cli/worktree-hook.ts) rather than only the tests, since the arm timeouts and the hook failure came from them.Review
quest review --base origin/main).f37df478: no findings.63579334(current head): no findings.Suggested follow-ups
gate.test.tsflake above. It was seen once, in a dispatched run, and the land watcher's flake tracking catches a recurrence on PRs.🤖 Generated with Claude Code
(Written by Claude Opus 5.5)