close-the-release-cyclelisted
Install: claude install-skill damson/hard-won-skills
# Close the release cycle
A release is not the merge. It is a cycle: promote, tag, move whatever floating
tag consumers follow, bring the promotion commit back, and confirm the branches
are level. Every step after the merge fails quietly, and the cost lands on
somebody else, one release later. This skill runs the cycle to completion and
refuses to call it done on a signal that has not been checked.
## Procedure
1. **Read the repo's own release policy before touching anything.** It decides
two things this skill will not guess: whether a human merges the promotion,
and whether the release is tagged by hand or by a workflow.
```bash
# a glob list would be wrong here: in zsh an unmatched pattern aborts the
# whole command, so one missing file hides every policy file that is present
find . -maxdepth 2 \( -iname "RELEASING*" -o -iname "CONTRIBUTING*" \
-o -path "./docs/releas*" \) -print 2>/dev/null
grep -rln "release" .github/workflows/
```
A repo that automates its own release is driven, not bypassed: dispatch its
workflow rather than hand-rolling the steps below, then verify its output the
same way. Dispatching needs the workflow to accept it, so read its trigger and
required inputs first; where there is no `workflow_dispatch`, produce the event
it does listen for rather than working around it.
```bash
gh workflow view <file.yml> --yaml | sed -n '/^on:/,/^jobs:/p'
```
2. **Confirm there is something to promote, by conte