Skip to content

skill-quality: plugin.json ships two version members (0.11.0 and 0.12.0) — advertised release is parser-dependent #1492

Description

@kyle-sexton

plugins/skill-quality/.claude-plugin/plugin.json on main (3018a5089d, merged from #1096) contains two version members:

4:  "version": "0.11.0",
5:  "version": "0.12.0",

Impact

The advertised release is parser-dependent: last-wins readers (jq, Python json.load) resolve 0.12.0; first-wins readers retain 0.11.0; duplicate-rejecting consumers can reject the manifest outright. That can prevent or misidentify a plugin update. Surfaced by external review on #1096 after merge.

Fix

Delete line 4. The intended release is 0.12.0, which is what the CHANGELOG's top section and the marketplace catalog already describe.

Root cause, so the same shape does not recur

Introduced while resolving the second main merge in #1096. Both sides of that conflict carried "version": "0.11.0" — main had released 0.11.0 in #1450 and the branch also claimed 0.11.0 — so git treated the version line as common context outside the conflict region and left only the differing description inside it. A scripted replacement of the conflict region emitted a fresh version + description pair, adding a second version above the surviving common-context one.

Both verification steps in play were blind to it by construction:

  • python -c "json.load(...)['version']" returns the last-wins value, so it printed the expected 0.12.0.
  • scripts/validate-plugins.sh validates against the manifest schema, which duplicate keys do not violate under a last-wins parser.

Worth considering as a follow-up: a duplicate-key check over plugins/*/.claude-plugin/plugin.json in the plugin gate. Python exposes it cheaply via json.load(..., object_pairs_hook=...), which is what identified this instance. A manifest-level guard would catch the whole class rather than this one occurrence.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    priority: highSignificant impact, or blocks an imminent release; staff this cycle.

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions