plugin-publish
User-invocable. Stops Claude from auto-running this — it has side effects (push, PR).
What this does
Walks through the publish flow documented in CLAUDE.md, but enforces the parts that are easy to forget:
- Pre-flight check —
python3 tests/speckit-pro/run-all.py --layer 1must pass (catches missing frontmatter and invalid JSON). - Detect remote —
git remote -v(per global CLAUDE.md "Git Operations" rule — don't assumeorigin). - Stage selectively — list candidate files, ask user which to include. NEVER
git add -Aorgit add .. - Commit with conventional-commits prefix — required types:
feat,fix,chore,docs,refactor,test. Validate before writing. - Push and open PR —
gh pr createwith the same prefix in the title (thevalidate-pr-titleCI check enforces this). - Remind user — after PR is merged (squash-only), tell them to run:
/plugin marketplace update racecraft-plugins-public
When NOT to use
- For a release (release-please handles version bumps automatically — do not manually edit
plugin.jsonversions) - For docs-only PRs touching
CLAUDE.mdorREADME.md(thedetectCI job skips test matrix anyway; just commit + push, no skill needed) - For the marketplace.json/release-please-config.json triplet — those have their own PreToolUse guard hook
Hard rules
- Never merge the PR (only humans merge — see global memory)
- Never use
--no-verifyto skip hooks - Never push to
maindirectly (branch protection blocks it; use a feature branch + PR) - Conventional-commit title format:
<type>(<scope>): <description>(scope optional)
Output
When complete, report:
- Branch name pushed
- PR URL
- The marketplace-update command the user needs to run post-merge