Repository navigation
Session Handoff [windows]: #2508 Landed and Promoted, the #2488 local_review Cluster Next #2519
Copy link
Copy link
Closed
Labels
handoffA link in the session handoff chain, one open issue per trackA link in the session handoff chain, one open issue per track
Description
Next steps
Work this lane from the maintainer's Windows host. Take one issue per branch through drive-pr, and run each fix natively before claiming it fixed. Run the suite from Git Bash. From PowerShell the bash-driven modules now skip by design.
- Make the Test Suite Pass or Skip Cleanly on Windows #2488, the
test_local_reviewcluster, 15 failures. Done means the module passes or skips cleanly on Windows. The failures fall into four groups:- ReceiptCase. Two tests exit 120: Python's shutdown flush fails on a closed pipe on Windows. That is a
scripts/local_review.pydefect, which the WSL launcher had been masking. A barepython3inside thebash -cstring may also pick a different interpreter from the suite's. - BackendCase. Its
coderabbitstub is not found on Windows, so the cases fail with 2 != 0 or 2 != 1. - DanglingRemoteTrackingCase and its Reftable variant.
loose.unlink()raises WinError 5 on git's read-only object file. - ContentKeyCase.
test_staging_leaves_no_throwaway_paths_behindfinds alocal-review-objects.*directory left behind.
- ReceiptCase. Two tests exit 120: Python's shutdown flush fails on a closed pipe on Windows. That is a
- Make the Test Suite Pass or Skip Cleanly on Windows #2488, the rest, 8 failures across three modules.
test_spec_validate, 3.result.stdoutisNone(a TypeError), and the LoopMarker case fails.test_host_gate, 3. These come from Windows path forms in the remedy assertions.test_docker_lint, 1. It expectssrc=/tmp/...but gets\tmp\....test_release_guards, 1 test. It fails only under winget's jq 1.8.2, which rejects\S, so decide whether that is a skip or a tool floor.- Done means
python3 -m unittest discover -s testsexits 0 from Git Bash on this host, which closes Make the Test Suite Pass or Skip Cleanly on Windows #2488.
- Make the jq Carriage-Return Test Fail When Its Stub Is Not Reached #2513: give the
jqcarriage-return test a fixture status other thanarchived, so the test fails when its stub is not reached. It is small and needs no Windows host. - host-setup: menu.sh and menu.ps1 hub-cache locks do not coordinate across tools #1094:
menu.ps1openshub.lockwithFileShare.Noneand drops its named Mutex, the shape Lock a Bootstrap Run's Directory, and Remove an Empty Leftover at a Tree's Name #2503 proved. Mindmenu.sh's shared reader lock. Done means a cross-tool lock test. - Bootstrap registers its temporary tree as the live Claude Code skills source, then deletes it #1756 and Two concurrent bootstrap runs can remove each other's tree #1764, then the rest of the lane, oldest first. Canonicalize -Dir in bootstrap.ps1 Before Refusing a Drive or Share Root #2495 waits on Re-Triage the Open Hardening Backlog Against the Trust-Boundary and Design Rules #2517, below.
External blockers
- Re-Triage the Open Hardening Backlog Against the Trust-Boundary and Design Rules #2517 (
decision): the maintainer's re-triage of hardening issues names Canonicalize -Dir in bootstrap.ps1 Before Refusing a Drive or Share Root #2495, which hardens a directory argument the maintainer types. Do not start Canonicalize -Dir in bootstrap.ps1 Before Refusing a Drive or Share Root #2495 until Re-Triage the Open Hardening Backlog Against the Trust-Boundary and Design Rules #2517 settles it. - Every fix here is verified on the Windows host, so a session elsewhere can author a change but cannot close it.
- Roll out global ~/.claude/CLAUDE.md safety rules to all machines #365 is a per-machine installer rollout that rewrites the host's hooks,
settings.jsonandCLAUDE.md, so ask before running it. - This host has no WSL pwsh, so a cross-loader lock test runs only in Linux CI or a
mcr.microsoft.com/powershellcontainer.
Internal dependencies
- Steps 1 and 2 before Fleet Tooling Assumes a POSIX Host, So It Fails on the Windows Hosts the Fleet Supports #1143's decision, since Fleet Tooling Assumes a POSIX Host, So It Fails on the Windows Hosts the Fleet Supports #1143 asks whether CI gains a Windows job and Make the Test Suite Pass or Skip Cleanly on Windows #2488 supplies its cost.
tests/host_capability.pybefore any new Windows-sensitive test.requires_symlink,can_symlink,NO_SYMLINK,bash_pathandbash_or_skipare the shared helpers. Use them rather than a fresh try/except or a bare"bash".
State
mainis at the Promote develop to main: Skip or Run the Test Suite Cleanly on Windows #2515 promotion anddevelopis at Skip a Symlink Test Where Windows Withholds the Privilege, and Run bash From PATH #2508. 2.0.868 was released from the Promote develop to main: Guard a Promotion Merge with the Head the Go-Ahead Covers #2512 promotion by another session, so Recognize the Installer's Own Partial CLAUDE.md Rather Than Backing It Up as a Hand Edit #2493 and Lock a Bootstrap Run's Directory, and Remove an Empty Leftover at a Tree's Name #2503 are released. Skip a Symlink Test Where Windows Withholds the Privilege, and Run bash From PATH #2508 is promoted and unreleased, and it is test-only.- The base clone is clean on
developapart from an untrackeduv.lockthis lane did not create. No worktree of this lane remains. A detachedProjectTemplate-resync-readworktree belongs to another task. - No pull request of this lane is open.
- Open lane issues, "both" marking one the WSL host also needs:
- Bugs: Fleet Tooling Assumes a POSIX Host, So It Fails on the Windows Hosts the Fleet Supports #1143, Make the Test Suite Pass or Skip Cleanly on Windows #2488, Canonicalize -Dir in bootstrap.ps1 Before Refusing a Drive or Share Root #2495, Make the jq Carriage-Return Test Fail When Its Stub Is Not Reached #2513
- Others, oldest first: Roll out global ~/.claude/CLAUDE.md safety rules to all machines #365 (both), install-tools.ps1: dotnet status doesn't see pre-release SDKs Visual Studio installs outside winget #694, menu.ps1: hub-cache cleanup marker does not identify which session fetched it #1093, host-setup: menu.sh and menu.ps1 hub-cache locks do not coordinate across tools #1094 (both), Give the Windows python Tool a Family So an Off-Line Host Reads Correctly #1171, Validate the Interpreter the Agent-Safety Installer Writes Into settings.json #1172, checkout_provenance Passes an Absolute Path as a Git Pathspec, Unverified on Windows, Where a Failure Reports a Tracked Clean Copy as unknown #1419, A Parent Pinned to UTF-8 Spawning a Python Child Leaves the Child's Encoder on the Locale #1577, Requirement 8 reaches Linux and WSL only, with no measured answer for macOS or Windows #1625, skills_install.py runs a bare claude argv, which may miss a Windows .cmd shim #1754, Bootstrap registers its temporary tree as the live Claude Code skills source, then deletes it #1756 (both), Python devcontainer snippet: mount path join and mktemp -t portability #1763, Two concurrent bootstrap runs can remove each other's tree #1764 (both), install-skills.ps1 fails under a directory whose path contains a wildcard character #1765
- Still open from earlier rounds, outside the lane: Read Copilot's Emoji-Prefixed Review Effort Line in pr_review.py #2487 and Gate Prose on the Merge Commit's Own Base, Not the Event's base.sha #2490.
The parked decision queue
The queue holds 1 open decision issue: #2517, the hardening re-triage. It is presented to the maintainer in this session's closing.
What the last round did
- Landed #2508 for part of Make the Test Suite Pass or Skip Cleanly on Windows #2488 and promoted it through #2515 on the maintainer's go-ahead, merge only.
- It adds
tests/host_capability.pyandtests/test_host_capability.py. - On this host from Git Bash, failures went from 47 and errors from 26 to 15 and 10.
- It adds
- Filed Make the jq Carriage-Return Test Fail When Its Stub Is Not Reached #2513, a pre-existing vacuous stub test, and noted Copilot's singular "1 open finding" overview variant on Recognize Copilot's Collapsible "N Open Findings" Overview Block in pr_review.py #2480.
- The maintainer approved two steps past the usual gates: a third local edit round, which moved the link case last for failfast, and merging Skip a Symlink Test Where Windows Withholds the Privilege, and Run bash From PATH #2508 despite
pr_review.py's unrecognized overview shapes, already tracked in Recognize Copilot's Collapsible "N Open Findings" Overview Block in pr_review.py #2480 and Read Copilot's Emoji-Prefixed Review Effort Line in pr_review.py #2487.
What not to repeat
- Clearing a Windows PATH behavior from one drive. A probe run with its cwd and
%TEMP%both on C: showed an in-scriptPATH='C:\...':$PATHfinding its stub, and I reverted a correct fix on that basis. Bash had split the entry at the colon intoCand a rooted path, which resolves against the cwd's drive, so from D: the stub was missed. Probe from a second drive. - Joining a stub dir onto a Python-built env PATH with
:. It finds the stub, but Git Bash converts the inherited PATH by splitting on;, so the stub fuses with the first inherited entry and that entry is lost. Useos.pathsep. shutil.which("bash", path=dir)on Windows. It looks in the current directory beforedir, and PATHEXT admits abash.cmd.host_capabilityprobes<dir>\bash.exeitself for this reason.- A
skipTestinside asubTestloop before other cases. Under failfast it stops the loop, so take the skipped case last. git worktree removewhile the PowerShell tool's cwd sits inside the worktree. It fails with "Permission denied" after deregistering. Move that cwd out first, thenrmdirthe leftover directory.
New learnings
- On Windows,
subprocess.run(["bash", ...])resolves through CreateProcess, which searches System32 before PATH, and so runs the WSL launcher. That launcher re-parses the script. This is recorded inbash_path()'s docstring intests/host_capability.py. - Copilot's overview now arrives without a file table on later rounds, so
pr_review.pyreads coverage as unstated even when the review covers the head. This is tracked with the shape issues Recognize Copilot's Collapsible "N Open Findings" Overview Block in pr_review.py #2480 and Read Copilot's Emoji-Prefixed Review Effort Line in pr_review.py #2487.
Metadata
Metadata
Assignees
Labels
handoffA link in the session handoff chain, one open issue per trackA link in the session handoff chain, one open issue per track
Activity
ptr727 commentedon Oct 8, 2026
Parked decision queue at close: 1 open
decisionissue, #2517. It was presented, and the maintainer answered: run the hardening re-triage in an attended session of its own, then approve the whole list at once. #2495 stays parked until then. The answer is recorded on #2517.ptr727 commentedon Oct 8, 2026
Continued in #2531, round 6 on track
windows.