Repository navigation
Session Handoff [windows]: #1792 and #1795 Landed and Promoted, #2488 and #2495 Next #2504
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, one issue per branch through drive-pr, and run each fix natively before claiming it fixed.
- Make the Test Suite Pass or Skip Cleanly on Windows #2488: make the test suite pass or skip cleanly on Windows. Start with the 16 symlink-privilege errors through one shared skip helper, then the 8
read -afailures. Done meanspython3 -m unittest discover -s testsexits 0 on this host. - Canonicalize -Dir in bootstrap.ps1 Before Refusing a Drive or Share Root #2495: canonicalize
-Dirinbootstrap.ps1before refusing a drive or share root, the shapehost-setup/menu.ps1already uses. Small, andTestPowerShellKeptTreeHandlingalready drivesResolve-Directory. - host-setup: menu.sh and menu.ps1 hub-cache locks do not coordinate across tools #1094:
menu.shlockshub.lockwithflock, whilemenu.ps1uses a named Mutex, and the two never coordinate. Lock a Bootstrap Run's Directory, and Remove an Empty Leftover at a Tree's Name #2503 proved the fix shape. Havemenu.ps1open the samehub.lockwithFileShare.Noneand drop the Mutex. Mindmenu.sh's shared reader lock, since a pwshFileShare.Readopen maps toLOCK_SHon Linux. Done means a cross-tool test liketest_a_lock_bootstrap_sh_holds_refuses_this_loader. - 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, now checkable through
TestPowerShellKeptTreeHandling. - The rest of the lane, oldest first, from the list under State.
External blockers
- 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. - No WSL pwsh exists on this host, so a cross-loader lock test runs only in Linux CI or a
mcr.microsoft.com/powershellcontainer.
Internal dependencies
- Make the Test Suite Pass or Skip Cleanly on Windows #2488's symlink helper before any new symlink test on Windows, so the class is settled once rather than per test.
- Fleet Tooling Assumes a POSIX Host, So It Fails on the Windows Hosts the Fleet Supports #1143 stays open until a Windows CI job exists. The maintainer chose to green the suite through Make the Test Suite Pass or Skip Cleanly on Windows #2488 first. Until then the Windows-only cases in
TestPowerShellKeptTreeHandling, including the held-file and ACL-denied ones, run only on a Windows host.
State
developandmainare both at the promotion of 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, through Promote develop to main: Recognize the Installer's Own Partial CLAUDE.md #2502. No release has been dispatched since 2.0.864, so both changes are promoted and unreleased.- 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.
- The
wsllane's Session Handoff [wsl]: WSL-Host Lane Opened With 12 Issues, #2257 and the Kept-Tree Bootstrap Bugs First #2478 named Lock the Bootstrap Directory for a Kept-Tree Run #1792 and Keep an Owned Tree Recognizable When Its Final Directory Removal Fails #1795 as shared. Both are closed by Lock a Bootstrap Run's Directory, and Remove an Empty Leftover at a Tree's Name #2503, which carries thebootstrap.shhalf too, so only a native WSL run ofbootstrap.shremains there. - 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
- 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 0 open decision issues.
What the last round did
- Settled one lock design for both loaders with the maintainer and recorded it on Lock the Bootstrap Directory for a Kept-Tree Run #1792 and Keep an Owned Tree Recognizable When Its Final Directory Removal Fails #1795. The lock is an OS lock on
<tree>.lock:flock -nin bash,FileShare.Nonein pwsh. An empty leftover at a managed name is removed, and both halves land in one pull request. - Landed #2503 for Lock the Bootstrap Directory for a Kept-Tree Run #1792 and Keep an Owned Tree Recognizable When Its Final Directory Removal Fails #1795. Each loader takes the lock before its cleanup is armed. A daemon started by a tool cannot inherit the lock. A directory that cannot be listed stays foreign.
- Appended Lock a Bootstrap Run's Directory, and Remove an Empty Leftover at a Tree's Name #2503 and its
Closeslines to thehost-instructionslane's promotion #2502 on the maintainer's choice, and left its review loop to that lane. It has since merged, closing Lock the Bootstrap Directory for a Kept-Tree Run #1792 and Keep an Owned Tree Recognizable When Its Final Directory Removal Fails #1795.
What not to repeat
- Running
drive-prstep 4's remote branch delete from the base clone after removing the worktree.gh-write-guarddenies agit pushagainst the primary checkout, so the whole command is refused. Verify and delete the remote branch from the task's own worktree first, then remove the worktree. The prescription itself is The Prescribed Post-Merge Remote-Branch Delete Cannot Run Where the Procedure Puts It #1682. - Rewriting a guard line while editing around it. A replacement that spanned the reparse-point check dropped it, and only the existing link tests caught it. Keep a replacement's old string to the lines that change.
- Taking a directory find cannot read for an empty one.
-z $(find ...)discards find's exit status, so an unreadable foreign directory read as empty and was moved aside. Check the status. On Linux pwsh even the marker'sTest-Paththrows there, so the whole check sits in onetry. - Naming a plain
IOExceptionas contention. .NET raises the same type for a read-only mount or a full disk, so the message names the reason first and calls another run only the usual cause.
New learnings
- .NET's
FileShare.Noneandflock(1)exclude each other on Linux in both directions. A pwsh/bash lock pair can therefore share one file with no second primitive. Verified in amcr.microsoft.com/powershellcontainer, and kept astest_a_lock_bootstrap_sh_holds_refuses_this_loaderintests/test_bootstrap.py. - Across WSL and Windows on
/mnt/c, a WindowsFileShare.Noneholder makes the WSL open itself fail with EACCES rather thanflockrefusing.bootstrap.sh's open-failure message names that case.
Reactions are currently unavailable
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
Continued in #2519, round 5 on track
windows.