Skip to content

Commit bca1bba

Browse files
sourcehawkclaude
andauthored
fix(plugin): let each pinned framework tag install its own plugin (#232)
* ci(release): fail a release whose plugin version does not match its tag Claude Code caches a plugin by the version in plugin.json, so a release that forgets to bump it leaves installed plugins on old content. The new Release workflow checks the version when a draft is saved or a release is published. On a mismatch it opens a PR that sets the version through the contents API, so GitHub signs the commit, links that PR in the job summary, and fails. When Actions may not create PRs, it links a compare page that opens the PR in one click. make plugin-version VERSION=<tag> sets the version for the PR made before tagging, and the AI instructions add this step to the release rules. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(plugin): let each pinned framework tag install its own plugin Claude Code caches a plugin by the version in plugin.json, and consumers pin the marketplace ref to a framework tag. A version that a release forgets to change keeps pinned users on old skills, and a version bumped after the tag never reaches the tag at all. Without a version, Claude Code caches by commit, so each tag installs exactly the plugin it shipped. This replaces the release workflow and make target, which could only check the version after the tag existed, because GitHub runs no workflow for a draft release. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
1 parent c23b80c commit bca1bba

3 files changed

Lines changed: 8 additions & 3 deletions

File tree

‎.ai/base.md‎

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,13 +125,16 @@ When updating documentation in markdown files, make sure to run `make fmt-md` fo
125125
### Claude Code plugin
126126

127127
The repository ships a Claude Code plugin for framework consumers in `plugin/` (marketplace manifest at
128-
`.claude-plugin/marketplace.json`). Two rules keep it accurate:
128+
`.claude-plugin/marketplace.json`). Three rules keep it accurate:
129129

130130
- Files under `plugin/skills/*/references/` are generated copies of `docs/` files. Never edit them by hand; edit the
131131
source under `docs/` and run `make sync-plugin`. The sync rewrites each relative link for the plugin layout and fails
132132
when a link in `plugin/` resolves to no file.
133133
- When changing public API behaviour, check whether the distilled guidance in the affected `plugin/skills/*/SKILL.md` is
134134
stale and update it in the same response.
135+
- Do not add a `version` to `plugin/.claude-plugin/plugin.json` or to the marketplace entry. Claude Code caches a plugin
136+
by that version, and without one it uses the commit. Consumers pin the marketplace `ref` to a framework tag, so the
137+
commit makes each tag install its own plugin. A version that a release forgets to change keeps them on old skills.
135138

136139
### Examples
137140

‎.github/copilot-instructions.md‎

Lines changed: 4 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎plugin/.claude-plugin/plugin.json‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
{
22
"name": "ocf",
33
"displayName": "Operator Component Framework",
4-
"version": "0.23.0",
54
"description": "Skills, scaffolding commands, and a guidelines reviewer for building Kubernetes operators with the operator-component-framework.",
65
"author": {
76
"name": "sourcehawk",

0 commit comments

Comments
 (0)