chore(skills): add gaia-release skill for end-to-end release flow#939
chore(skills): add gaia-release skill for end-to-end release flow#939itomek-amd wants to merge 3 commits intomainfrom
Conversation
Phased checklist (Phase 1-6) with hard gates before every irreversible step: draft notes, open release PR, pre-tag verification, push tag, monitor publish pipeline, draft Discord announcement. Lives in .claude/skills/ so contributors get it via git. Pre-tag verification phase exists because the v0.17.4 release uncovered two release-blocking bugs that merged-PR CI alone did not catch (squash-merge silently reverting version.py, and the AppImage smoke test's circular pip-install dependency on the unpublished version). Skill cites both lessons inline so future invocations don't talk past the gate.
Review —
|
Test-driving the skill against a hypothetical v0.17.5 surfaced four gaps: - Skill accepted the requested version without checking it against commit scope. 26 commits since v0.17.4 including 5 feat commits (Gemma 4 default, Chat Lite, Eval Toolchain v0.18.0 milestone) would have silently shipped as a patch. Phase 1 step 1 now runs a scope-vs-version rubric and pushes back when the requested version doesn't fit. - Reinvocation mid-flow (a release spans days) would re-run Phase 1 and overwrite already-merged release notes. Added a "Resume detection" block at the top: detects PR/tag/release state and skips ahead to the right phase, never re-running Phase 1 against merged notes. - Phase 2 referenced a "prepared body file" without saying how to prepare it. Added the awk pipeline to strip MDX frontmatter from the release notes and append the Release checklist section from the previous PR. - Phase 1 validate step assumed bare `python` works. Added venv guidance including the worktree-uses-parent-venv case.
Four polish fixes from the review on PR #939: - Unify gh pr search to title-only (in:title) in the hard-rules example so the bare "Release v" form doesn't fuzzy-match unrelated PRs. - Stop relying on $MERGED_SHA across gate pauses (a release spans days; the user often returns in a fresh shell). Phase 3 step 1 now re-derives the SHA from the merged release PR via gh pr view --json mergeCommitOid. Gate 3's question text now carries the release PR number and SHA so Phase 4 can re-derive them with no shell-state dependency. - Phase 3 step 4 said "watch it" without giving the command. Added the concrete gh run watch invocation matching Phase 5's style. - Phase 1 step 4 had a hardcoded Lemonade version in the navbar example that drifts (and is currently inconsistent with version.py on main). Replaced with placeholders and a note that version.py is the source of truth.
SummaryThis adds a single project-local skill ( Issues Found🟡 Important1. Validator command is missing required argument — will fail at first run (
The skill currently calls it with no args in Phase 1 step 7 and Phase 3 step 3, both of which gate the release. As written, the very first validator gate will fail and the user will be told (per the skill's own "no silent fallbacks" rule) to stop — even on a perfectly valid release. Suggested fix in both spots: (Or 🟢 Minor2.
The "if supported" hedge is technically safe, but 3. Stray space inside command substitution ( test "$(git rev-parse HEAD)" = "$MERGED_SHA" || { echo "Local main ($( git rev-parse HEAD)) does not match ...Cosmetic — 4. Phase 2 staged file set may miss The hardcoded Strengths
VerdictApprove with suggestions — Issue 1 (validator command) is a real bug that breaks the skill's first verification gate and should be fixed before merge; the rest are polish. None of the findings change the design or scope of the skill. |
Summary
Adds a project-local Claude skill at
.claude/skills/gaia-release/SKILL.mdthat walks through a GAIA release end-to-end as a phased checklist with hard gates before every irreversible step (open PR, push tag, rerun CI job, post announcement). Lives in the repo so other contributors get it via git.Why
The v0.17.4 release uncovered two release-blocking bugs that merged-PR CI alone did not catch — a squash-merge silently reverting
src/gaia/version.py, and the AppImage smoke test's circularpip install amd-gaia==<unpublished>dependency. Both were caught only because a human ran a manual pre-tag verification pass. This skill encodes that pass (Phase 3) so the next release doesn't rely on the same human remembering the same lesson.Threads
?-terminated gate before doing anything destructive. Reviewer keeps final authority on every irreversible action.CLAUDE.md: no Claude attribution anywhere, no silent fallbacks, factual house style for notes, scope-clean commits, manual approval gate is human-only.0.17.5,v0.17.5, or four-part hotfix form0.15.4.1; auto-derives next-patch fromversion.pyif omitted; refuses to roll backwards.Test plan