Use when the user asks whether a release is ready, or to gate/verify release criteria before publishing. A thin readiness-gate that runs the existing read-only verifiers (evolve release-preflight, evolve release-consistency), adds the CI-green-on-main and no-WIP-commit checks they don't cover, then delegates execution to /evo:publish. Does NOT reimplement the release pipeline.
Install
npx skillscat add mickeyyaya/evolve-loop/release Install via the SkillsCat registry.
/evo:release
Release readiness-gate, not a release executor. It composes the checks that already exist (
evolve release-preflight,evolve release-consistency) and adds the two gaps they miss — CI green onmainHEAD and no WIP/fixup commits — then hands a green report to `/evo:publish`, which owns the actual bump → changelog → ship → propagate lifecycle.
Why this exists
evolve release-preflight already gates: clean tree, attached branch, semver bump, recent audit PASS, gate-test suites. evolve release-consistency already verifies the 6 version markers (plugin.json, marketplace.json, README, CHANGELOG, SKILL headings). Neither checks whether GitHub CI is actually green on the commit you're about to release from, nor screens for accidental WIP commits. This skill closes exactly those gaps — nothing more.
Defense-in-depth: `/evo:publish` now performs the same pre-release CI-green check itself (so a direct
/evo:publishcall is still gated) and adds a post-release watch of the released commit'sgo/CIworkflows. Running/evo:releasefirst stays the recommended path;evolve release(the raw binary) isgh-free and only prints a "CI not verified" advisory.
Procedure
Run in order. Any FAIL → print the reason and stop (do not delegate to /evo:publish).
- Preflight (5 gates) — read-only:
Non-zero exit → stop.$CLAUDE_PROJECT_DIR/go/bin/evolve release-preflight <target> --dry-run - Consistency (version markers):
Non-zero exit → stop.$CLAUDE_PROJECT_DIR/go/bin/evolve release-consistency <target> - Gap 1 — CI green on
mainHEAD (requiresgh; if absent, report "cannot verify CI" and stop):
Confirmgh run list --branch main --limit 1 --json headSha,status,conclusion,urlheadShamatchesgit rev-parse origin/main,status == "completed",conclusion == "success". Anything else (in-progress, failure, stale SHA) → stop with the run URL. - Gap 2 — no WIP/fixup commits since the last tag:
If any subject matchesgit log "$(git describe --tags --abbrev=0)..HEAD" --format=%s^(WIP|fixup!|squash!|amend!)→ stop and list them. - All green → delegate: invoke
/evo:publish <target>(pass--dry-runthrough if the user gave it). Report the readiness summary first so the user sees what passed.
Output
Emit a compact readiness table (✅/❌ per check) before delegating or stopping, e.g.:
| Check | Result |
|---|---|
| preflight (5 gates) | ✅ |
| version markers | ✅ |
| CI green on main HEAD | ❌ run failed (url) |
| no WIP/fixup commits | ✅ |
→ verdict: NOT READY (or READY → handing off to /evo:publish).
When NOT to use this skill
- To actually publish. This only gates.
/evo:publishexecutes. - For ordinary commits. Use
/evo:commit.