[BUG] Plugin skill resolution loads stale cached version after update (1.0.0 instead of 1.0.1)

Resolved 💬 5 comments Opened Mar 20, 2026 by hoanvu91 Closed May 22, 2026

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 /plugin reports 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?

  1. Skill resolution should always use the latest installed version. When /e2e-test:test-init is invoked, the Base directory path should resolve to 1.0.1 (the highest semver in the cache), not 1.0.0.
  2. Old versions should be cleaned up or deprioritized. After a successful update to 1.0.1, the 1.0.0 directory should either be removed automatically or never selected as the active version.
  3. 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

  1. Install a plugin (e.g., e2e-test version 1.0.0)
  2. Plugin updates to 1.0.1/plugin confirms: e2e-test is already at the latest version (1.0.1)
  3. Invoke a skill from that plugin (e.g., /e2e-test:test-init)
  4. Observe the loaded skill instructions contain:

``
Base directory for this skill: ~/.claude/plugins/cache/plugin-marketplace/e2e-test/1.0.0/skills/test-init
``

  1. 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.

View original on GitHub ↗

This issue has 5 comments on GitHub. Read the full discussion on GitHub ↗