The skill has moved out; this is now only the action - #14
Merged
Conversation
Two products with different audiences shared one version number, and it misfired in both directions. v2.2.2 changed five action files and zero skill files, yet told every skill user their skill had updated. v2.3.0, three days later, changed only skill files and left action.yml and mkp-builder.py byte-identical, yet cut a release of a GitHub Action that consumers pin by major. The skill now lives at oposs/cmk-oposs-plugin. The release machinery had to move with it. .claude-plugin/plugin.json was load-bearing here -- Release publisher triggered on it and read the version out of it -- so deleting it naively would have broken releases entirely. The version now comes from CHANGES.md: the first heading carrying a semver is the newest release, and `## [Unreleased]` has no digits so it is skipped. A changelog with nothing released matches nothing and the publisher fails rather than tagging something arbitrary. Publisher now triggers on CHANGES.md rather than plugin.json, which means an ordinary PR adding an [Unreleased] entry also fires it. That is already safe: the existing guard resolves the newest released version, finds the tag present, sets already_released=true, and every downstream step is gated on it. No new mechanism was needed. The reason plugin.json was synced in the first place is recorded in its own comment -- Claude caches a plugin under its resolved version -- and that reason does not survive the split. The note itself was worth keeping, so it moved to the new repo's RELEASING.md rather than being deleted. Also removed: assets/release.yml and assets/validate.yml went with the skill and are not being replaced. Release and CI workflows belong to oposs/repo-infra, which installs one standard flow across every repository and generates a ci.yml that calls this action. The seam between the three repos is one line: uses: oposs/mkp-builder@v2. RELEASING.md rewritten, README's plugin section replaced with a Related projects section, and the .gitignore whitelist entries for the moved trees dropped. All four workflow YAML files still parse. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Two products with different audiences shared one version number. It misfired in both directions:
v2.2.2v2.3.0@v2saw a new actionThe skill now lives at
oposs/cmk-oposs-plugin. This repo is now only the action.The trap this nearly walked into
.claude-plugin/plugin.jsonwas load-bearing:Release publishertriggered on it and read the version out of it. Deleting it naively would have broken releases entirely.The version now comes from
CHANGES.md:VERSION_NO_V=$(grep -m1 -oP '^##\s+\Kv?[0-9]+\.[0-9]+\.[0-9]+' CHANGES.md || true)Tested against the real file and both edge cases: it skips
## [Unreleased](no digits), returns the newest released section, and matches nothing when nothing is released — so the publisher fails loudly rather than tagging something arbitrary.One behaviour change, already safe
The publisher now triggers on
CHANGES.mdinstead ofplugin.json, so an ordinary PR adding an[Unreleased]entry also fires it. The existing guard already handles that — it resolves the newest released version, finds the tag present, setsalready_released=true, and every downstream step is gated on it. No new mechanism needed.Also removed
assets/release.ymlandassets/validate.ymlwent with the skill and are not being replaced. Release and CI workflows belong tooposs/repo-infra, which installs one standard flow across every repository and generates aci.ymlthat calls this action.The seam between the three repos is one line:
uses: oposs/mkp-builder@v2.Housekeeping
RELEASING.mdrewritten for one product. Its note on why the version bump is load-bearing (Claude caches a plugin under its resolved version; a skill fix without a bump ships nothing, silently) moved to the new repo'sRELEASING.mdrather than being deleted..gitignorewhitelist entries!/skillsand!/.claude-plugindropped.Merge order
Merge
oposs/claude-plugins#4first — it repoints the marketplace at the new repo. Until then the marketplace still resolvescmk-oposs-pluginfrom here.🤖 Generated with Claude Code