Ship
Drive any deliverable to its finish line. The umbrella over delivery terminals: 'ship pr' is the PR lifecycle (= today's /pr), 'ship doc' ships a research brief to output_dir and grades it. Use when: 'ship this', 'ship a PR', 'ship the doc', 'ship the brief', 'deliver this'. Not for ongoing areas (budget, community) - those have no finish line; use /target.From its SKILL.md
npx -y skills add bllshttng/footnote --skill shipAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
5.2 KB, as published. Nobody here has run it
Ship
One verb for delivering anything. /ship <type> drives a deliverable to its finish line, dispatching on the deliverable type the way /target dispatches on task type. /pr only names the code branch; /ship names the whole family.
| Type | Finish line (the mechanical "green") | What runs |
|---|---|---|
pr | PR exists + CI green + required bot reviewed, no unaddressed blocking finding (DonePRGreen) | the /pr router (create / check / merged) |
doc (alias artifact) | brief written to config.research.output_dir + fno doctor evals grade green (DoneAdvisory) | doc.md, in this same context |
The membership test (load-bearing)
A thing is a ship type ONLY if it has a definable green - a finish line readable mechanically. pr and doc both do. An ongoing area (budget, community) has no crisp green: it never "finishes", so it is not a deliverable. Admitting areas would make /ship mean "do stuff", which is exactly what /target already is. Route areas through /target. Types with a plausible-but-unwired green (gtm / launch) are post-MVP and rejected until each has a defined green.
Vocabulary: "ship" the verb vs the ship phase/gate
/ship (this verb) = drive a deliverable to its finish line. It is distinct from the ship phase and ship gate inside /target, from the DonePRGreen/DoneAdvisory termination reasons, from fno do pr merge, and from /ship-docs (which generates documentation and is NOT a ship type). The single canonical disambiguation lives in AGENTS.md -> "Ship vocabulary"; read it if the overlap is confusing.
Composition, not self-containment
/ship is a composing umbrella, deliberately NOT a self-contained, liftable-in-isolation skill. /ship pr routes to the co-installed /pr skill (which stays the real implementation and permanent alias - the plan's no-forced-migration rule); /pr is therefore a hard companion dependency, not reimplemented here. Only the genuinely-new doc mode is local to this folder (doc.md, loaded via Read). This skill is intentionally excluded from the marketplace self-containment lint, because folding /pr's ~400 lines of mode bodies in would tax the dominant code path for no payoff.
Step 1: Resolve the type (ALWAYS announce it)
This is a router, not a monolith. Parse the first argument token:
-
no argument -> do NOT default and do NOT guess. Print the menu and stop with a non-zero result:
/ship needs a type. valid types: pr drive a PR through its lifecycle (create | check | merged) doc ship a research brief to output_dir and grade it -
pr-> the PR lifecycle. Printrunning ship pr (PR lifecycle). The remaining tokens are the/prmode + its arguments. Defer to the/prskill: run/pr <remaining tokens>and follow it. (/pris the retained, permanent alias -/pr createand/ship pr createare the same thing, byte-for-byte./ship prdoes not reimplement the PR flow; it routes to the one implementation in theprskill.) -
docorartifact-> the research-doc deliverable. Printrunning ship doc (research brief + grade). Load doc.md and execute it in full in this context. The remaining tokens are doc's arguments. -
budgetorcommunity-> NOT a ship type. Print and stop with a non-zero result:'<token>' is not a ship type: it is an ongoing area with no mechanical finish line. Route it through /target (one feature at a time). -
gtmorlaunch-> a plausible deliverable, but its green is not wired yet (post-MVP). Print and stop with a non-zero result:'gtm' has no defined green yet (published + metric threshold) - post-MVP. Until then, drive launch work through /target. -
any other non-empty token -> unknown type (likely a typo). Do NOT default, do NOT guess. Print:
unknown ship type: '<token>' valid types: pr, doc (no default - pick a deliverable)and stop with a non-zero result. This is the locked router contract: an unknown or empty type never silently falls through to an action.
Known Limitations and Deferred Work
- Merge consent and review must hold at merge time. See LIMITATIONS.md.
Multi-CLI
Claude-Code primary. ship pr needs everything /pr needs (fno, gh, git, a Haiku-capable provider for create). ship doc needs fno (the research + evals grade verbs). If a dependency is missing, the type fails loud and reports it - it never fakes a PR, a brief, or a grade.