Repository navigation
Conversation
There was a problem hiding this comment.
🔵 Needs a closer look
Correctness hinges on Windows/Git Bash ln -s copy-emulation behavior that cannot be verified in this environment and the author notes it is only validated by the pending Windows CI job.
No open issues 🎉
What changed in this PR
This PR fixes the Windows CI (windows-latest) plugin job. On Git Bash without symlink rights, ln -s silently copies the load-context skill directory instead of creating a symlink. Because install_skill_link already refuses to overwrite an existing skill directory, the leftover copy caused every subsequent install.sh --target pi run to abort with "refusing to replace an existing skill directory," breaking reruns. The fix detects the copy immediately, removes it, and fails fast with an actionable hint, and the test suite adapts to environments where symlinks are unavailable.
Changes:
install.sh: afterln -sfn, if the destination is not a symlink (i.e. it was copied),rm -rfit anddiewith guidance to enable Developer Mode or setMSYS=winsymlinks:nativestrict.scripts/test.sh: probe whether symlinks work; if not, assert that the installer refuses to copy the skill (and leaves noload-contextdir) instead of running the full link/uninstall scenario.
| File | Description |
|---|---|
install.sh |
Adds a post-ln guard that removes a copied skill directory and fails with a clear, actionable Windows hint. |
scripts/test.sh |
Adds a symlink-capability probe; branches to a "refuse copy" assertion when symlinks are unavailable, otherwise runs the existing full install/uninstall test. |
Review effort: Balanced
On windows-latest, Git Bash without symlink rights makes
ln -scopy the skill directory. Every laterinstall.sh --target pirun then stopped with "refusing to replace an existing skill directory", which broke the plugin job.MSYS=winsymlinks:nativestrict).scripts/test.shpasses locally on macOS. It has not been run on Windows: the Windows job will run on this PR.