ship-a-feature
Installation
SKILL.md
Ship a feature (so it ships, not half-ships)
The nine-row definition-of-done already exists — cohesive-feature-delivery in
CLAUDE.md. On 2026-09-02 equivalentDisasters went out tested, gated and
committed, and failed four of those rows unnoticed: unreachable from every
public door, a neighbour's JSDoc silently stolen, no doc, no stability mark.
Prose in a 2000-line file does not fire. This does. Every check below names
the failure it was written for; nothing here is theory.
1. Before writing — three decisions only you can make
| Decision | Criterion |
|---|---|
Which door? (package.json exports subpath) |
Free + deterministic → . (src/test.ts). Bills a model → ./eval (paid_ prefix). Hook vocabulary → ./hook. A symbol not re-exported from a door's barrel does not exist to require("vigiles") (failure 1). |
Stable or experimental_? |
STABILITY.md: exported + not stable ⇒ @experimental tag AND experimental_ name. One day old with one consumer is not stable. ESLint local/experimental-name holds tag→name; it cannot write the tag (failure 4). |
Where does the WHY live publicly? (document-the-why) |
A docs/*.md section beside the claim it changes — for equivalentDisasters, next to "blocks 7/7" in docs/compiled-hooks.md. Not the README (brevity), not this file (contributor tier). |
Write the answers into the PR body. The script below refuses to pass the stability row until you state it.