🐛 Fix Windows install by dropping tracked symlink and using source "./"#4
Merged
Merged
Conversation
Windows git checkout materializes tracked symlinks as text files unless core.symlinks=true. The former plugins/compact-plus -> .. symlink became a `..` text file on Windows, so source: "./plugins/compact-plus" resolved to a non-directory and `claude plugin install` reported success while writing an empty cache. - .claude-plugin/marketplace.json: source ./plugins/compact-plus -> ./, metadata.version and plugins[0].version 1.0.2 -> 1.0.3 - .claude-plugin/plugin.json: version 1.0.2 -> 1.0.3 - plugins/compact-plus: remove the tracked symlink - .github/workflows/test.yml: reject tracked symlinks (project policy) to prevent regression on Windows install Verified by reproducing the failure with git clone -c core.symlinks=false against main (validate/install fail with ENOTDIR, cache empty), then confirming the same clone of this branch validates, installs, and populates the cache with hooks/skills/prompts/.claude-plugin content. Regression check with a normal clone also passes.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
claude plugin marketplace addによるインストールが「成功表示なのに plugin cache が空」になる不具合を修正plugins/compact-plusを..への symlink として repo に含めていたため、Windows の git は既定で「..と書かれた通常テキストファイル」として checkout する。結果としてmarketplace.jsonのsource: "./plugins/compact-plus"が non-directory を指し、claude plugin installは success を返しつつ空 cache を書くmarketplace.jsonのsourceを"./"(marketplace root 自身) に変更し、追跡 symlink を削除。合わせて version 1.0.2 → 1.0.3 (3 slot) と、CI に "tracked symlink 禁止" guard を追加Reported and workaround confirmed on Windows by @hinata_reira: https://x.com/hinata_reira/status/1941826018472849523
Related upstream issues (context): anthropics/claude-code#54967, #53948, #52435 (Windows symlink handling).
Changes
.claude-plugin/marketplace.json:source ./plugins/compact-plus→./,metadata.versionとplugins[0].versionを 1.0.2 → 1.0.3.claude-plugin/plugin.json:version1.0.2 → 1.0.3plugins/compact-plus: 追跡 symlink を削除.github/workflows/test.yml:git ls-files -s | grep '^120000'で追跡 symlink を検出する step を追加 (project policy)Test plan
python3 -m json.toolで plugin.json / marketplace.json / hooks.json validate、bash -n hooks/*.sh、version 3 slot 一致、git ls-files -s | grep '^120000'emptygit ls-files -s | grep '^120000'が hit (guard は fail する)git clone -c core.symlinks=false --branch main→claude plugin validateがENOTDIR ... plugins/compact-plus/.claude-plugin/plugin.jsonで fail、隔離CLAUDE_CONFIG_DIRでinstallが exit 1、cache 空 (Windows 症状の間接再現成立)validatepass、installsuccess、cache に hooks/skills/prompts/.claude-plugin/plugin.json 実在core.symlinks=falseclone による間接再現 + 報告者の Windows 実機による workaround 確認で代替Notes
source: "./"により repo root 全体 (README / docs / .github 含む) が plugin cache へコピーされる。公式仕様通りで動作影響なし (許容事項)plugin.jsonの version 固定仕様により既存インストール済みユーザーへ更新が配信されないため 1.0.3 は必須🤖 Generated with Claude Code