decision: plugin distribution contradicts the official docs (plugin.json version is authoritative; a separate marketplace repo is not needed for one plugin) #437
Labels
No labels
breaking
bug
documentation
enhancement
epic
good first issue
help wanted
refactoring
resolution/duplicate
resolution/invalid
resolution/wontfix
security
severity/critical
severity/high
severity/low
severity/medium
status/abandoned
status/blocked
status/needs-decision
status/needs-info
status/needs-verification
testing
upstream
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
sixfold-space/madtea#437
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Scope note
This forks ADR 0010 (release is a tag; plugin.json version treated as cosmetic) and touches ADR 0033 (distribution home). I checked the official Claude Code docs, not our own rationale. I have changed nothing; this records the finding and the decision.
Finding 1 - plugin.json
versionis authoritative, not cosmeticThe docs say Claude Code reads the plugin's OWN
versionfor update detection:ADR 0010 assumes the opposite: the marketplace entry is authoritative and the source
plugin.jsonversion is cosmetic and "never hand-maintained." That is backwards. Today it does not bite only becausescripts/assemble-plugin-artifact.shstamps the tag version into the VENDORED artifact's plugin.json. The SOURCE.claude-plugin/plugin.jsonstill says0.14.6while main is at v0.18.3. An install straight from the madtea repo would read0.14.6and never detect an update.Correct handling per the docs: bump
plugin.jsonversionon every release, OR omit the field so Claude Code uses the commit SHA. Either one reopens the ADR 0010 "zero-commit release, never touch plugin.json" goal.Finding 2 - a separate marketplace repo is not required for one plugin
The docs support one repo being BOTH the plugin AND its own marketplace: add
.claude-plugin/marketplace.jsonbeside.claude-plugin/plugin.json, with the plugin entry"source": "./". Users run/plugin marketplace add sixfold-space/madteathen/plugin install madtea@<name>. A separate marketplace repo is warranted only to catalog many plugins from different repos. For one plugin it is extra machinery (the vendor + stamp + PR-into-claude-plugins flow).Sources:
Options
marketplace.json, source./), retire the separateclaude-pluginsvendor/stamp flow, and either bump plugin.jsonversionper release or omit it for SHA-based updates. Simplest; removes a repo and the assemble step; but a per-release version bump is a commit, so this reopens the zero-commit-release rule unless the field is omitted.versionfrom the source plugin.json, or make "not authoritative" explicit by setting the source to the0.0.0sentinel and treating the stamped vendored artifact as the only supported install path.I need to settle this before the public launch, because it reopens ADR 0010's premise.
Secondary (minor)
The plugin
descriptionclaims madtea "works with Claude Code, OpenAI Codex CLI, and Antigravity CLI." The plugin format itself is Claude-Code-only; the cross-client surface is the MCP server, a separate install. Worth splitting that claim so the plugin manifest does not assert cross-client support it cannot have.Related
Decision:
sixfold-space/claude-pluginsis authoritative for the plugin. The manifest drops itsversionfield, so update detection keys off the marketplace repo's git commit hash rather than a stamped version. madtea's source.claude-plugin/is removed and the assemble step is reworked to match. Full task list and implementation: #443.Resolved. The plugin-distribution contradiction (a
plugin.jsonversion competing with the marketplace's update model) is gone:versionanywhere. Claude Code keys update detection off the marketplace repo's commit hash (verified against code.claude.com/docs plugin-marketplaces).sixfold-space/claude-plugins) is the sole owner ofplugin.json,marketplace.json, and the README.Landed in: the claude-plugins narrowing (its PR #16, merged) and madtea PR #453 (merged, full gate green). The product-shape decision behind it is #450 (option 3, plugin = hooks + skills). Closing.