[BUG] Plugin skill resolution loads stale cached version after update (1.0.0 instead of 1.0.1)
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
When a plugin is updated via /plugin, the skill instructions loaded into the conversation still reference the old version's directory path. Updated templates and skill logic are silently ignored.
Impact
- Plugin authors ship fixes and improvements that users never receive
- Debugging is difficult because
/pluginreports the correct version while the runtime silently uses the old one - Template drift can cause subtle scaffold bugs that are hard to trace
What Should Happen?
- Skill resolution should always use the latest installed version. When
/e2e-test:test-initis invoked, theBase directorypath should resolve to1.0.1(the highest semver in the cache), not1.0.0. - Old versions should be cleaned up or deprioritized. After a successful update to
1.0.1, the1.0.0directory should either be removed automatically or never selected as the active version. - If both versions must coexist, there should be a manifest or symlink (e.g.,
latest -> 1.0.1) that the skill loader reads.
Error Messages/Logs
Steps to Reproduce
- Install a plugin (e.g.,
e2e-testversion1.0.0) - Plugin updates to
1.0.1—/pluginconfirms:e2e-test is already at the latest version (1.0.1) - Invoke a skill from that plugin (e.g.,
/e2e-test:test-init) - Observe the loaded skill instructions contain:
````
Base directory for this skill: ~/.claude/plugins/cache/plugin-marketplace/e2e-test/1.0.0/skills/test-init
- Both versions exist on disk:
````
~/.claude/plugins/cache/plugin-marketplace/e2e-test/
├── 1.0.0/
└── 1.0.1/
Claude Model
Opus
Is this a regression?
I don't know
Last Working Version
_No response_
Claude Code Version
2.1.80
Platform
Anthropic API
Operating System
macOS
Terminal/Shell
Terminal.app (macOS)
Additional Information
Not a duplicate of #36380 (stale marketplace clone). That issue is about the fetch/detection stage; this is about the resolution/loading stage after a successful update.
Evidence from ~/.claude/plugins/
Both versions exist in cache:
- ~/.claude/plugins/cache/plugin-marketplace/e2e-test/1.0.0/ — has a .orphaned_at file with timestamp 1773998508338 (Mar 20, 2026 16:21:48 — same time 1.0.1 was installed)
- ~/.claude/plugins/cache/plugin-marketplace/e2e-test/1.0.1/ — no .orphaned_at file
installed_plugins.json is correct — it points to 1.0.1:
"installPath": "~/.claude/plugins/cache/plugin-marketplace/e2e-test/1.0.1",
"version": "1.0.1"
Actual content difference between versions (proves it's not a no-op update):
- skills/test-create/SKILL.md — minor wording change for --headed flag
- skills/test-init/SKILL.md — significant change: batches AskUserQuestion prompts (3 batches instead of individual
questions)
The bug: Despite installed_plugins.json correctly pointing to 1.0.1, the skill resolution at runtime still loads
SKILL.md files from the 1.0.0 directory. The .orphaned_at marker exists on 1.0.0 but doesn't prevent it from being read.
You can verify this by checking which test-init behavior you see — if it asks questions one-at-a-time (1.0.0) instead
of in batches (1.0.1), the stale version is being loaded.
No runtime logs found — ~/.claude/logs/ doesn't exist, and ~/.claude/debug/ only has entries from Mar 14 (pre-update).
There's no plugin resolution trace log to capture.
This issue has 5 comments on GitHub. Read the full discussion on GitHub ↗