release: stamp the tag version into the artifact's plugin.json - it must never diverge from the marketplace entry #121

Closed
opened 2026-07-15 21:38:23 +00:00 by hexajon · 0 comments
hexajon commented 2026-07-15 21:38:23 +00:00 (Migrated from codeberg.org)

The v0.15.1 release shipped a vendored artifact whose .claude-plugin/plugin.json still says "version": "0.14.6", while the claude-plugins marketplace entry was correctly bumped to 0.15.1.

Cause

scripts/assemble-plugin-artifact.sh copies the repo's .claude-plugin/plugin.json into the artifact verbatim (line 151) but derives the marketplace entry version from the release tag (line 95, bump_marketplace_version at line 272). The source plugin.json's version field is hand-maintained and scripts/release.sh (line 20) explicitly treats it as "cosmetic", so nothing bumps it at release time. Any tag that outruns the hand edit ships a mismatched pair, which is the current state on Codeberg (sixfold_space/claude-plugins @ main).

Claude Code resolves the pin from the marketplace-level version, so installs still work, but the shipped plugin.json is what a user sees when checking which plugin version they have, and it currently lies.

Fix

Make the sync structural, not procedural: in assemble-plugin-artifact.sh, after copying plugin.json into the artifact, rewrite its version field to the same tag-derived value used for the marketplace bump (tag without leading v). Then the two values share one source of truth and cannot diverge.

Acceptance criteria

  • Assembling an artifact for tag vX.Y.Z produces a plugin.json with "version": "X.Y.Z", regardless of what the source plugin.json says.
  • The assemble script fails loudly (not silently) if the version rewrite matches nothing.
  • Covered by a case in hooks/tests/assemble-plugin-artifact.test.sh.
  • The stale 0.14.6 in the repo's source .claude-plugin/plugin.json is either bumped or its comment/doc updated to say the field is stamped at release time.
  • Follow-up vendoring of the next release corrects the currently-mismatched artifact in sixfold_space/claude-plugins.
The v0.15.1 release shipped a vendored artifact whose `.claude-plugin/plugin.json` still says `"version": "0.14.6"`, while the claude-plugins marketplace entry was correctly bumped to `0.15.1`. ## Cause `scripts/assemble-plugin-artifact.sh` copies the repo's `.claude-plugin/plugin.json` into the artifact **verbatim** (line 151) but derives the marketplace entry version from the release tag (line 95, `bump_marketplace_version` at line 272). The source plugin.json's version field is hand-maintained and `scripts/release.sh` (line 20) explicitly treats it as "cosmetic", so nothing bumps it at release time. Any tag that outruns the hand edit ships a mismatched pair, which is the current state on Codeberg (`sixfold_space/claude-plugins` @ main). Claude Code resolves the pin from the marketplace-level version, so installs still work, but the shipped plugin.json is what a user sees when checking which plugin version they have, and it currently lies. ## Fix Make the sync structural, not procedural: in `assemble-plugin-artifact.sh`, after copying plugin.json into the artifact, rewrite its `version` field to the same tag-derived value used for the marketplace bump (tag without leading `v`). Then the two values share one source of truth and cannot diverge. ## Acceptance criteria - Assembling an artifact for tag `vX.Y.Z` produces a `plugin.json` with `"version": "X.Y.Z"`, regardless of what the source plugin.json says. - The assemble script fails loudly (not silently) if the version rewrite matches nothing. - Covered by a case in `hooks/tests/assemble-plugin-artifact.test.sh`. - The stale `0.14.6` in the repo's source `.claude-plugin/plugin.json` is either bumped or its comment/doc updated to say the field is stamped at release time. - Follow-up vendoring of the next release corrects the currently-mismatched artifact in `sixfold_space/claude-plugins`.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
sixfold-space/madtea#121
No description provided.