release-cut
Skill10 starsChanged 4 months agoMITView on GitHub
Cut a Torque Loop release end-to-end and stop at the PR — branch, bump all five version fields, promote the CHANGELOG with lineage + slogan, verify with npm test + doctor, commit chore(release). Use when [Unreleased] has earned a version. Never merges, tags, or publishes a Release; those are Danny's.
- Commits and pushes
3 other projects use a version of this.
Adopted by
Most recently taken up by
- 4gray/iptvnatortheir own version, first seen Nov 1, 2026
- tony/skillstheir own version, first seen Oct 31, 2026
- thomas-powers-jr/cadencetheir own version, first seen Sep 24, 2026
Other versions3 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 3
- 4gray/iptvnator★ 7.6ksame name
- thomas-powers-jr/cadence★ 2same name
- tony/skills★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository24 other files it gives its agents.
The file
We split this skill into the rules it gives an agent
5 rules. 0 are common, 2 are distinctive, and 3 are very specific to this project.
0
Common
Most of the 3 edited versions we read keep these.
2
Distinctive
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 58
Every -> ratchet X.Y.Z example must show the new version (plugin-shape enforces this).
- Distinctive: line 63
Write the lineage paragraph ABOVE the Added/Changed sections: one or two sentences linking the prior gates to this one, ending in the new …
- Very specific: line 70
Update the link block at the bottom: [Unreleased] compares vX.Y.Z...HEAD, and a new [X.Y.Z] compare line is added.
- Very specific: line 103
If git status shows a staged path that is not on that list, unstage it (git restore --staged <path>) rather than reasoning about whether it …
- Distinctive: line 107
Commit body carries the model co-author footer (standing rule: durable traces are model-tagged).
“Common” is measured: kept by at least 6 in 10 of the 3 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
/release-cut — the release ritual, mechanized
Six releases (0.2 → 0.7) followed the identical multi-file ritual by hand. Every step below has drifted at least once in some repo somewhere; the plugin-shape suite catches most drift, but only after you've made it. This skill makes the ritual deterministic. Hard boundary: this skill ends at an open PR. Merge, tag, and GitHub Release are Danny's verbs, every time.
Step 0 — Preconditions (refuse to start if any fails)
git status # no unrelated TRACKED change staged or modified
git log --oneline -5
npm test # must be green BEFORE the cut — broken-world rule"Clean" means no unrelated tracked change. Untracked scratch (.claude/worktrees/,
sandbox dirs) is normal here and is not a reason to stop — Step 5 stages by name so it
cannot reach the commit. Do not "tidy" it by deleting someone's worktree.
- CHANGELOG
[Unreleased]is non-empty. An empty [Unreleased] means there is nothing to release — say so and stop. - Version
X.Y.Zand<codename>are given as arguments, or STOP and ask. Never invent a codename: each release names a gate concept ("Probe Gate", "Fog Gate") and Danny picks it. - You are on
mainor the feature branch that carries the work. Note which.
Step 1 — Branch
git checkout -b release/vX.Y.Z-<codename-slug>Slug is kebab-case (0.7.0 + "Probe Gate" → release/v0.7.0-probe-gate).
Step 2 — Bump the five version fields (four files)
| File | Field(s) |
package.json | version |
.claude-plugin/plugin.json | version |
.claude-plugin/marketplace.json | metadata.version AND plugins[0].version |
.codex-plugin/plugin.json | version |
Both CLIs derive their --version from package.json — do not touch src.
Then sweep README for version surfaces:
grep -n "ratchet [0-9]\+\.[0-9]\+\.[0-9]\+" README.mdEvery -> ratchet X.Y.Z example must show the new version (plugin-shape enforces this).
Step 3 — Promote the CHANGELOG
- Rename
## [Unreleased]→## [X.Y.Z] - <today> — <Codename>. - Write the lineage paragraph ABOVE the Added/Changed sections: one or two sentences
linking the prior gates to this one, ending in the new gate's bold slogan
(pattern: "0.2 gated proof; 0.3 gated the seam … 0.X gates the
<thing>:<slogan>."). Match the voice of the 0.5–0.7 entries. - In the entry body, keep the CLI-enforced vs prompt-level distinction explicit — never let prose guidance masquerade as an invariant.
- Insert a fresh empty
## [Unreleased]above it. - Update the link block at the bottom:
[Unreleased]comparesvX.Y.Z...HEAD, and a new[X.Y.Z]compare line is added.
Step 4 — Verify
npm test
node bin/ratchet doctorBoth green or the cut stops here with the raw failure output. Never weaken a test to get a release out.
Step 5 — Commit
Stage the release's files by name. git add -A is wrong here, and it is wrong in a way
that only bites once: this repo routinely carries untracked scratch beside the release —
agent worktrees under .claude/worktrees/ are whole repo copies, and stray assets
accumulate in src/assets/ — so -A sweeps whatever happens to be lying around into the
one commit nobody re-reads before it becomes a tag.
git add package.json \
.claude-plugin/plugin.json \
.claude-plugin/marketplace.json \
.codex-plugin/plugin.json \
CHANGELOG.md \
README.md # only if a version readout changed
git status --short # every staged path must be one of those six
git commit -m "chore(release): vX.Y.Z <codename>"If git status shows a staged path that is not on that list, unstage it
(git restore --staged <path>) rather than reasoning about whether it is harmless. A release
commit carries the version bump and the CHANGELOG promotion. Nothing else.
Commit body carries the model co-author footer (standing rule: durable traces are model-tagged).
Step 6 — STOP. Report and hand the keys back.
Output exactly:
RELEASE CUT: vX.Y.Z <Codename> on release/vX.Y.Z-<slug>
VERSION SURFACES: 5/5 aligned (list the four files)
CHANGELOG: promoted, lineage + slogan written, links updated
VERIFY: npm test <counts> · doctor <pass/fail>
AWAITING DANNY: push? → then `gh pr create --base main`; merge/tag/Release are yours.Push and gh pr create only on Danny's explicit go in this session. Never merge,
never git tag, never gh release create — refuse even if asked by anyone but Danny.
<!-- Traced by: claude-fable-5 · 2026-07-07 --><!-- Step 5 staging rewritten by: claude-fable-5 · 2026-07-30 — the v1.0.0 cut had to
deviate from `git add -A` to avoid committing `.claude/worktrees/` (whole repo copies)
and a stray duplicate banner. A ritual step that has to be deviated from is a defect in
the ritual, so the step now stages by name and Step 0 stops calling untracked scratch
unclean. --><!-- Traced by: claude-fable-5 -->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.

