chore: fix plugin distribution drift -- symlink docs, templates, example, and repo metadata#57
Conversation
…ple, and repo metadata The plugin cache only contains files inside claude-code-plugin/. The repo has comprehensive documentation (docs/), scan config templates (templates/), and a practice project (example/), but none shipped to end users through the marketplace. The cache cannot path-traverse outside the plugin root, so content must exist inside claude-code-plugin/ to be included. Symlinks inside claude-code-plugin/ point to repo-root content. The plugin cache follows symlinks during the copy process, so the real files land in the cache without duplicating them in the repo. New symlinks (10): - docs/guides/ (9 operational guides) - docs/scanning/ (4 scanning reference docs) - docs/skills/ (17 knowledge domain docs) - docs/tools/ (5 tool integration guides) - example/ (deliberately broken test page for practice) - CHANGELOG.md, LICENSE, CONTRIBUTING.md, SECURITY.md, CODE_OF_CONDUCT.md Previously created symlinks (7): - templates/ (scan config profiles) - docs/advanced/, docs/agents/, docs/architecture.md, docs/configuration.md, docs/getting-started.md, docs/hooks-guide.md Metadata: - plugin.json: 3.0.0 -> 3.1.0, added homepage/repository, 57 agents - marketplace.json: 1.0.0 -> 1.1.0, aligned description, 57 agents Excluded: docs/prompts/ (Copilot platform), internal planning docs, separate distribution channels (desktop/vscode), lifecycle scripts, Gemini files.
|
@jeffreybishop The A11y check is flagging the docs/ files as having Markdown violations. Given the fact that the docs already existed on main prior to my PR, should it be classified as a false positive? |
accesswatch
left a comment
There was a problem hiding this comment.
Clean approach using symlinks for plugin distribution. One question before approval:
Windows symlink compatibility: Git on Windows defaults to core.symlinks=false, which converts symlinks to text files containing the target path. This would break the plugin cache since the files would contain paths, not content. Can you confirm whether:
- The Claude Code plugin cache resolves symlinks during copy (your PR description references this), and if so, does that also work on Windows?
- Or should we add a note that Windows users need core.symlinks=true in their git config?
- Alternatively, would a build/copy step be more portable than symlinks?
Version bumps and exclusion list look correct. Happy to approve once the Windows question is resolved.
|
@tesles @accesswatch — Jumping in to help resolve the Windows symlink question so we can move this forward. Windows Symlink Compatibility — AnswerThe concern is valid but manageable. Here's how it breaks down: End users (plugin install via marketplace): Not affected. The Claude Code plugin cache copies files at the filesystem level after checkout. On macOS/Linux (where the vast majority of Claude Code users are), symlinks just work. The official plugin docs confirm the cache follows symlinks during copy. Windows end users: Also fine if they have Contributors cloning on Windows: Same requirement — need Recommended ApproachThe symlink approach is the right call — it avoids file duplication and keeps content in sync automatically. To address the Windows edge case:
Before MergeThis PR's base is stale ( Once rebased with the |
- Add .gitattributes marking claude-code-plugin/ symlinks - Add Windows clone instructions to CONTRIBUTING.md - Addresses accesswatch's review on #57
|
Thanks for the thorough symlink work, @tesles! We've rebased your changes onto current main, resolved the merge conflict in
Everything is now merged to main in bd1ebcc. Closing this PR as the changes are fully incorporated. |
Problem
The Claude Code plugin cache only contains files inside
claude-code-plugin/. The repo has comprehensive documentation (docs/), scan configuration templates (templates/), and a practice project (example/), but none of it shipped to end users through the marketplace. Users installing the plugin got 57 agents, 17 commands, and 3 hooks -- but zero documentation, no templates (despite CLAUDE.md referencing them), and no example project.The cache cannot path-traverse outside the plugin root. Content must exist inside
claude-code-plugin/to be included.Solution
Symlinks inside
claude-code-plugin/pointing to repo-root content. The plugin cache follows symlinks during the copy process (per official docs), so the real files land in the cache without duplicating them in the repo.New symlinks (10)
docs/ subdirectories (4):
docs/guides/-- 9 operational guides (hooks troubleshooting, debug panel, browser tools, custom skills)docs/scanning/-- 4 scanning reference docs (office, pdf, scan config, custom prompts)docs/skills/-- 17 knowledge domain docs (accessibility rules, framework patterns, severity scoring)docs/tools/-- 5 tool integration guides (axe-core, lighthouse, github scanner, MCP tools, VPAT)Root-level (6):
example/-- deliberately broken test page for end-user practiceCHANGELOG.md,LICENSE,CONTRIBUTING.md,SECURITY.md,CODE_OF_CONDUCT.mdPreviously created symlinks (7, included in this branch)
templates/-- scan config profiles (strict/moderate/minimal for office, pdf, epub)docs/advanced/,docs/agents/,docs/architecture.md,docs/configuration.md,docs/getting-started.md,docs/hooks-guide.mdMetadata updates
plugin.json:3.0.0->3.1.0, addedhomepageandrepositoryfields, corrected agent count to 57marketplace.json:1.0.0->1.1.0, aligned description, corrected agent count to 57Excluded from distribution
docs/prompts/-- Copilot platform content (.github/prompts/), not Claude CodeAGENT-ECOSYSTEM-PLAN.md,AGENTIC-BROWSER-TOOLS.md,BROWSER-TOOLS-TESTING.md,HOOKS-CROSS-PLATFORM-STRATEGY.md,RESEARCH-SOURCES.md)desktop-extension/,vscode-extension/)cache/,context_portal/,plans/)install.sh/ps1,uninstall.sh/ps1,update.sh/ps1) -- marketplace handles thisVerification
All 17 symlinks resolve to valid targets. No broken links.