feature-ship-ship
Skill0 starsChanged 4 months agoMITView on GitHub
Phase 4 of 4 (final) in the feature-ship chain (spec → build → review → ship). Addresses blocking findings from Phase 3, commits using the /commit conventions, and opens a PR (or produces a patch if there's no remote), then closes the chain. Trigger when the previous phase says run feature-ship-ship next, or standalone via "feature-ship-ship", "phase 4 of feature-ship", "ship the feature", "ship it".
- Commits and pushes
In this repository21 other files it gives its agents.
- bughunt-diagnoseSkill
- bughunt-fixSkill
- bughunt-reproSkill
- bughunt-verifySkill
- feature-ship-buildSkill
- feature-ship-reviewSkill
- feature-ship-specSkill
- migrate-inventorySkill
- migrate-transformSkill
- migrate-verifySkill
- onboard-deepenSkill
- onboard-digestSkill
- onboard-mapSkill
- release-bumpSkill
- release-changelogSkill
- release-publishSkill
- release-tagSkill
- release-verifySkill
- research-artifactSkill
- research-gatherSkill
- research-synthesizeSkill
The file
We split this skill into the rules it gives an agent
11 rules. About 0 are common, 4 are distinctive, and 7 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈4
Distinctive · estimate
This author's own choices. Worth a look.
7
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 25
All chain state is managed by the chain tool: authoritative JSON at .pi/fairy-tales/chains/feature-ship/state.json with a human-readable …
- Very specific: line 32
Call the chain tool with action: "status", chain: "feature-ship" (a legacy .feature-ship-state.md from an older version is imported …
- Very specific: line 35
If there is no run → abort: "No feature-ship run found.
- Very specific: line 36
If the run is not active with currentPhase: "ship" → abort: "Expected the run to be at phase ship but it is at <currentPhase/status>.
- Very specific: line 39
If the Phase 3 findings (data.blockingFindings / data.nonBlockingFindings or the review phase summary) are missing → abort: "Phase pointer …
- Very specific: line 43
If the tool reports the chain is locked by another session, abort.
- Very specific: line 64
If the project has a configured remote: push the branch and open a PR with gh pr create, using the Phase 1 spec's Goals/Approach as the PR …
- Distinctive: line 67
If there is no remote: produce a patch file instead (git format-patch or git diff against the base branch) and tell the user where it was …
- Distinctive: line 73
Call the chain tool:
- Distinctive: line 88
After completing this phase, output exactly:
- Distinctive: line 94
Do not continue. Stop here.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Feature Ship: Ship
Chain version: 2 (durable state contract — see docs/STATE-CONTRACT.md)
Phase 4 of 4: feature-ship-spec → feature-ship-build → feature-ship-review → feature-ship-ship
Overview
Final phase. Fixes every blocking finding from Phase 3, commits the result using the
fairy-tales /commit conventions, and opens a PR — or, if the project has no remote,
produces a patch file instead so the work is still handed off cleanly. Reports
faithfully: if a blocking finding can't be resolved, it says so rather than shipping
past it.
All chain state is managed by the chain tool: authoritative JSON at
.pi/fairy-tales/chains/feature-ship/state.json with a human-readable state.md
projection beside it. Never create or edit state files by hand, and never create lock
files — the tool locks for you.
Load State
Call the chain tool with action: "status", chain: "feature-ship" (a legacy
.feature-ship-state.md from an older version is imported automatically):
- If there is no run → abort: "No feature-ship run found. Run
feature-ship-specfirst." - If the run is not
activewithcurrentPhase: "ship"→ abort: "Expected the run to be at phaseshipbut it is at<currentPhase/status>. Run that phase's skill instead." - If the Phase 3 findings (
data.blockingFindings/data.nonBlockingFindingsor the review phase summary) are missing → abort: "Phase pointer looks right but the Phase 3 output is missing. Treat as corrupted — restart the chain or repair via chain action 'update'." - If the tool reports the chain is locked by another session, abort; a dead session's
lock can be cleared with
action: "unlock". Never create lock files yourself.
Workflow
Step 1 — Address blocking findings
Fix every item under Phase 3's data.blockingFindings. Re-run the project's test
command after each fix. Do not proceed to commit while any blocking finding is still
open — if one genuinely can't be resolved in this phase, stop and report it instead of
shipping around it. Non-blocking findings may be left as-is; note them in the ship
report for the user's awareness.
Step 2 — Commit using /commit conventions
Stage the changed files and commit following the fairy-tales /commit conventions
(conventional-commit type derived from the spec's nature — feat/fix/refactor —
imperative subject, body explaining why, referencing the Phase 1 spec).
Step 3 — Open a PR, or produce a patch
- If the project has a configured remote: push the branch and open a PR with
gh pr create, using the Phase 1 spec's Goals/Approach as the PR description and noting any non-blocking findings left for reviewers. - If there is no remote: produce a patch file instead (
git format-patchorgit diffagainst the base branch) and tell the user where it was written — this is not a failure, just the no-remote path.
Step 4 — Complete the phase
Call the chain tool:
action: "complete-phase", chain: "feature-ship", phase: "ship",
summary: "committed via /commit conventions; <PR URL | patch file path>; blocking findings resolved: <list>; non-blocking findings left open: <list>",
data: {},
artifacts: { "pr": "<PR URL>", "patch": "<patch file path if no remote>" }The tool validates this is the current phase, marks the run complete, and rewrites
the JSON + markdown projection atomically — this is the final phase, so the run's
status becomes complete and its lock is released.
Handoff
After completing this phase, output exactly:
Chain complete! All 4 phases finished. Chain state updated (
.pi/fairy-tales/chains/feature-ship/state.json). Runfeature-ship-specagain to start a new session.
Do not continue. Stop here.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

