Sb ship
Graduate ONE Explore experiment to a production component — preserve the experiment (cp, never git mv), pick new-vs-update, close the decision loop. Use for 'ship this', 'promote this experiment', 'graduate to production'.From its SKILL.md
npx -y skills add strongeron/storybook-workbench --skill sb-shipAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- 18 stars18 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.
- runs commandsInstructs the agent to run 4 commands, including `${CLAUDE_PLUGIN_ROOT}/scripts/validate-stories.sh` and 3 more.
What its file declares
Copied from the file, not written here
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
3.5 KB, 674 tokens by cl100k_base, as published. Nobody here has run it
sb-ship — graduate, preserving history
Event-triggered when an Explore iteration meets the graduation gate. The one rule that matters:
preserve the experiment — cp, never git mv. The Explore story stays as design history;
git mv here is the destructive bug propagate-workflow.md exists to prevent. Load
references/propagate-workflow.md before any Ship action — it's the only reference
this skill needs; Do NOT load the sb-wrappers/sb-audit refs (lifecycle, galleries, composition) for
a Ship.
Decide the path (ask yourself)
- Did the Explore define its own component file, or iterate on an existing one? → Path A vs Path B.
- Path B: evolve in place (B1) or keep V1 in
_legacy/(B2)? B2 only when V1 still has live callsites needing a migration window. - Did the import path change? If yes →
ast-grepcallsites. If not → skip it. - Other tagged stories that should flip? (a Compare
decision:pending→decision:chosen+ winner.)
Execute
- Path A — NEW component.
cpthe component explore→components, write a fresh production stories file to the recordedstoriesLocation(.storybook/audit/status.md; the rule lives inCONTEXT.md§STORIES LOCATION — never scatter) — don'tcpthe Explore stories (production has different concerns: autodocs, no decision metadata), validate, thenast-grepcallsites only if a path changed. - Path B — UPDATE existing. Apply the Explore's diffs into the production component + stories
in place;
ast-greponly if the import path changed. - Both — close the loop IN PLACE (no
git mv):tags: ['explore','decision:chosen','archived','!autodocs','!test']+parameters.decision = { status, winner, date, shippedTo }. Confirm withfind-stories-by-tag.sh decision:chosen.
Gate + next
Run the bundled scripts/validate-stories.sh on the new production story (in the bundle:
${CLAUDE_PLUGIN_ROOT}/scripts/validate-stories.sh, or
${CLAUDE_PLUGIN_ROOT}/scripts/). Confirm the flip with scripts/find-stories-by-tag.sh decision:chosen. Append the decision to the ledger (templates/design-decisions.md); the graduated experiment stays put.
Re-enter the usage flow. A graduated component is new to src/ — it isn't in the rendered JSONs
yet, so its Docs "Real usage" band and storyCoverage are blank. Trigger the one-command usage refresh
(refresh-usage.sh, owned by sb-audit/sb-inventory) so the new component enters component-usage.json
/ project-inventory.json; a Storybook rebuild then shows its real usage. Then /sb-hub.
What ships with it: 6 files
50.5 KB alongside SKILL.md, 2 of them executable
agents/
- openai.yaml740 B
references/
- propagate-workflow.md17.8 KB
scripts/
- find-stories-by-tag.shruns3.3 KB
- validate-stories.shruns12.8 KB
templates/
- design-decisions.md1.8 KB
- CONTEXT.md14.1 KB
Gives 0 of the 12 instructions most ship operate skills give in 674 tokens
Counted across 1,077 of the 1,713 authors here whose files we hold, read 2026-09-06
- Create GitHub releasein 44 of 1077, across 43 files
- Run the test suitein 30 of 1077, across 25 files
- Create and push git tagin 27 of 1077, across 26 files
- Push commits and tagsin 27 of 1077
- Create annotated tagin 25 of 1077, across 22 files
- Ensure working tree is cleanin 24 of 1077
- Check for product marketing context firstin 23 of 1077, across 6 files
- Commit version bump changesin 22 of 1077, across 21 files
- Update CHANGELOG.mdin 21 of 1077, across 20 files
- Structure launch marketing across three channel typesin 20 of 1077, across 5 files
- Commit and tag the releasein 20 of 1077, across 18 files
- Update the CHANGELOG for new releasesin 19 of 1077
Said here and by no other author read
- Preserve the experiment using cp instead of git mv
- Load references/propagate-workflow.md before any Ship action
- Run scripts/validate-stories.sh on the new production story
- Close the loop in place by updating tags and parameters
- Append the decision to templates/design-decisions.md
- Run refresh-usage.sh to update component usage
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.