harness-publish
Publish this repo's harness into the mvp-plugin (the mvp-harness submodule) — copy the shippable skills and agents, run the provider-neutrality and leak audits, regenerate the shipped router and Codex
SKILL.md.claude/skills/harness-publish/SKILL.md
GitHubharness-publish
This repo is the workshop; mvp-harness/plugins/mvp-plugin is the one plugin both
Claude Code and Codex install. Publishing is a manual, user-run step.
Steps
Prerequisites and scope. Confirm this is the source workshop and the mvp-harness submodule is initialized with
publish-plugin.shavailable. If absent, report the missing prerequisite; do not pretend publication ran. Read the current publish manifest/help. Confirm publication and commit authority separately; a no-commit instruction remains binding.For the
.repo-context/layout, verify the plugin-owned template, installer, updater, and doctor use that shared location and preserve the glossary. Seedocs/usage/mvp-plugin.mdfor the migration boundary; publishing skills alone does not update the adoption contract.Preflight here. Required root gates must pass; the publish script may require committed source unless an explicitly authorized dirty-tree mode applies:
python3 .claude/scripts/skill-catalog.py --check # no failures; assess warnings git status --short # clean (or know why not)Dry run. Shows the gates, the provider-neutrality audit on the source, and what rsync would change — writes nothing:
bash mvp-harness/plugins/mvp-plugin/scripts/publish-plugin.sh --checkFix anything it reports in this repo (never in the plugin's
skills/— they are overwritten on publish), re-run the catalog check, return here.Publish. Pick the bump from what changed (patch: text/fixes; minor: new or removed skills, behaviour changes; major: adopt/update contract change):
bash mvp-harness/plugins/mvp-plugin/scripts/publish-plugin.sh --bump patch --smoke--smokeinstalls the result into a throwaway$HOMEwithcodexand asserts discovery; drop it ifcodexis not on PATH.--allow-dirtyonly when the user has explicitly accepted publishing from an uncommitted tree.Review the plugin repo (a separate repository on its own branch). Commit only when commit authority was granted:
git -C mvp-harness status --short git -C mvp-harness diff --statStage explicit paths, commit with a message that names the plugin version and the source commit from
plugins/mvp-plugin/publish-info.txt. Do not push; the user pushes and decides the branch/merge.Bump the submodule pointer and commit only when authorized. Otherwise report the prepared plugin state and proposed pointer update:
git add mvp-harness && git commit -m "chore(plugin): mvp-plugin vX.Y.Z (source <sha>)"Give consumers the update command verified against their current local CLI help, then start a new session to verify discovery. Do not assume a historical marketplace command is supported.
What the script enforces (so you know what a failure means)
| Failure line | Cause | Fix |
|---|---|---|
uncommitted changes |
source or plugin tree dirty | commit, or --allow-dirty with user consent |
NOT NEUTRAL <file>:<line> |
a shipped line names a Claude-only tool / env var / .claude/skills/… path without a "Claude Code: … / Codex: …" two-branch |
reword in this repo; allowlist only with a reason in publish-manifest.txt (neutral / skip) |
expect skills N, found M |
the shipped set changed | if intended, edit expect in publish-manifest.txt |
LEAK (…) |
project/machine string in a shipped file | genericise the source (scripts/lib/genericize.sh lists the sweep) |
skill-catalog --check failed |
dead slash/path ref or sidecar drift in the shipped set | fix in this repo; plugin-owned skills (adopt/update/doctor/harness-adopt) are fixed in the plugin |
claude plugin validate failed |
manifest schema | run it by hand for the detail |
Never edit mvp-harness/plugins/mvp-plugin/skills/ or agents/ by hand — they
are build output of this repo. Plugin-owned skills and scripts/ are edited in
the plugin.