ship
Release-gate sequence: validate → review → push → tag. Wraps kernel:git mechanics with the pre-ship safety chain. Triggers: ship, release, push to main, ready to merge, deploy.
- License 许可
- Apache-2.0
- 最近更新
- 2026-11-11
- Stars
- ★ 1.6k
- Forks
- 468
01 前言 Front Matter
- name
- ship
- kernel
- { "kind": "operator", "version": 1, "confirmation": "on_side_effect", "side_effects": "writes_remote" }
- description
- Release-gate sequence: validate → review → push → tag. Wraps kernel:git mechanics with the pre-ship safety chain. Triggers: ship, release, push to main, ready to merge, deploy.
- allowed-tools
- Read, Bash, Task, Edit
02 资源文件 1
- 参考文档reference/ship-research.md2.7 KB
03 SKILL.md 正文
<skill id="ship">
Sequence
-
Preflight
git status --porcelain— clean? If not: ask user to commit, stash, or abandon.git branch --show-current— matches intent? Wrong branch → stop.git log --oneline {main}..HEAD— commit range matches what you think you're shipping?- (gate: any mismatch → AskUserQuestion before continuing)
-
Validate
- Invoke
/kernel:validate(spawns validator agent, full 9-gate safety chain). - If unavailable: run project's nearest configured command (see reference/ship-research.md for equivalents).
- (gate: any FAIL → stop; report which gate; do NOT push)
- For plugins that support multiple loaders, validate each loader's schema independently and exercise one installed payload per loader. A shared file parsing successfully is not proof that its armed behavior is equivalent.
- Run install, supported upgrade, and documented recovery commands in a disposable plugin/cache copy from outside the source checkout. Assert user data and user-owned files are unchanged.
- Put an explicit resource ceiling around heavyweight suites when available; a release gate must fail loudly instead of exhausting the host machine.
- Invoke
-
Review
- Tier 1 (1–2 file changes, low risk): self-review via Big 5 from skills/quality/SKILL.md.
- Tier 2+: invoke
/kernel:review(spawns reviewer agent, >80% confidence threshold). - (gate: REQUEST CHANGES → stop; address feedback; restart from step 2)
- (gate: COMMENT → AskUserQuestion: "Address now, ship anyway, or hold?")
- (gate: APPROVE → continue)
-
Push
- Feature branch (
feat/*,fix/*,chore/*, etc.):git push(orgit push -u origin {branch}if upstream not set). main/master: STOP. AskUserQuestion required. (NEXUS I0.8)- Detached HEAD or unexpected state: stop; investigate.
- (gate: push rejected / non-fast-forward → surface to user; do NOT force-push)
- Feature branch (
-
Version + Tag (on a release)
- Semver: patch=fix, minor=feature or behavior-preserving refactor, major=breaking. Confirm the number with the user.
- Bump ALL canonical declarations in one shot:
scripts/bump-version.sh X.Y.Zupdates.claude-plugin/plugin.json,.claude-plugin/marketplace.json,governance/kernel.md.tmpl, regeneratesAGENTS.mdandCLAUDE.md, and updatesskills/help/SKILL.md. NEVER hand-edit one location — drift failstest_version_sync_all. - Human-author the release prose the script does NOT touch: the plugin/marketplace
descriptionhighlight + aCHANGELOG.mdentry (## [X.Y.Z] - DATE+ Added/Changed/Fixed). - (gate:
bash tests/run-tests.shgreen —test_version_sync_allconfirms no stale version anywhere.) - If a native manifest validator rejects required safety metadata, do not weaken the safety metadata or hand-author an unvalidated manifest. Keep the proven compatibility loader, record the limitation, and defer the native manifest until both schemas can be satisfied.
- Tag (only if user requested a tagged release):
git tag -lto avoid clobber →git tag -a v{X.Y.Z} -m "{summary}"→git push origin v{X.Y.Z}. - Before upgrading the installed plugin on this machine:
pgrep -fl codex. The upgrade deletes the old cache directory under a live session's feet and every hook in that session exits 127 until it restarts. Name the live sessions in the handoff and say they need a restart; never report "upgraded" as if it covered them (docs/upgrading.md, 2026-08-27). - After publishing the GitHub release, install it into Claude's own cache and verify a
fresh headless Claude process:
scripts/install-release.sh X.Y.Z. The script updates only Claude's marketplace/cache, atomically advances Claude'scurrentselector, and fails unless both the installed manifest and the fresh process reportX.Y.Z. Codex installation remains a separate operation.
-
Human pass (any user-facing release: app build, deploy, anything a person will touch)
- Load
skills/human-pass/SKILL.mdand write the guide for THIS build: literal controls, paste-ready inputs, expected outcome per step, worst case first, bundled to one sitting with the time cost stated. - Hand it over and wait. The build is not shipped, it is awaiting verdict.
- (gate: no guide, or no recorded verdict → the release is NOT done. Say "awaiting your pass on <build>", never "shipped". A green pipeline is not a person having used the thing.)
- Findings come back as prose; YOU convert them into issues, not the human.
- Record the verdict as a state-change receipt on the release issue, naming what it unlocks (next build, submission, deploy promotion).
- Load
-
Checkpoint
agentdb learn pattern "ship: {branch} {commit_range} {sha_pushed}" "validate=pass review=pass push=ok"- Profile-gated: github-oss/github-production → post PR or release note via gh CLI.
The verdict is part of done
For anything a person will use, the completion states are ordered: validated, merged, deployed, accepted. CI proves the first three. Only a human who used the build proves the fourth, and only that one predicts whether the release was any good: a 15-minute guided pass found five defects that 500+ green tests had not, because some properties only exist on the far side of a real screen with real data. Report the state you actually reached, by name.
Ask-user gates (mandatory pause points)
| Point | Condition | Question |
|---|---|---|
| Preflight | Branch or commit range is ambiguous | "Shipping {N} commits on {branch}. Confirm?" |
| Review | COMMENT verdict | "Review returned {N} comments. Address now, ship anyway, or hold?" |
| Push | Target is main/master | "About to push to main. NEXUS I0.8 requires explicit say-so. Confirm?" |
Failure modes
validate FAIL→ block; report which gate; do not loop silentlyreview REQUEST_CHANGES→ block; address comments; restart from step 2push rejected (non-fast-forward)→ ask user; never auto-rebase or force-pushtag conflict→ checkgit tag -lfirst; suggest next version; never overwrite existing tag
Anti-patterns
ship_without_validate— every step depends on the previous; skipping validate skips type/test/securitysilent_skip_review— review FAIL with no surfacing to user = trust violationauto_push_to_main— NEXUS I0.8; main requires explicit user confirmationforce_push_on_rejection— rejection means remote has work you don't; investigate before overwritingtag_without_release_intent— tags are durable; casual pushes get no tagskip_checkpoint— shipped-but-unrecorded work breaks retrospective and learning loops
<on_complete> agentdb write-end '{"skill":"ship","branch":"X","commits":N,"validate":"pass","review":"approve|comment|skip","pushed":true,"tagged":"X.Y.Z|none"}' </on_complete>
</skill>
04 同仓库更多 Skills
deja-search
deja-vu memory — search the user's past AI coding sessions with the deja CLI. Holds what they already settled and never wrote into the repo (naming rules, banned or already-tried tools, required checks before merge, preferred values, who owns what). Use before your first edit in a task, before you call a change done or ready to merge, before you recommend a tool, library, design or reviewer, before re-debugging an error that may already be solved, when they say 'didn't we fix this before', 'what did we decide about X' or 'I already have that', and before telling them something on this machine does not exist.
deja-reflect
End-of-session reflection and memory curation with deja-vu. Review what was decided, what commands broke and what repaired them, and record durable project rules or decisions with deja remember so the next session starts with them.
revid
Make, edit, export and post AI videos with Revid (revid.ai) through the Revid MCP server. Use whenever the user wants a short-form or long-form video made (from an idea, a script, a URL, an article, a PDF, a tweet, a product page, their own clips, or a song), wants to find what is going viral on TikTok, YouTube, Instagram or X before making something, wants to edit or re-export an existing Revid project, generate a standalone AI image or clip, make a series episode, or publish and schedule a finished video to connected social accounts. Covers setup (hosted MCP with OAuth, or an API key), the 36 tools, credits, polling and the rules for publishing. Routes to the more specific revid-* skills when one fits.
review-study
Review a QuestionPunk survey before launch for wording, answer choices, branching, and missing settings. Use for check my survey or review this draft before publishing.
manage-study
Find QuestionPunk studies, check status, publish an explicitly requested draft, or retrieve its participant link. Use for find my survey, publish this study, or how many people responded.
create-study
Create a saved QuestionPunk survey draft from a research brief or edit specified questions. Use for requests such as make a customer feedback survey or shorten my onboarding study.