Releasing godplans
August 2, 2026 ยท View on GitHub
Releases are cut from a clean main branch after the release pull request is
merged. The Git tag, GitHub release, and every version surface use the same
SemVer value.
Release checklist
- Add the new top entry to CHANGELOG.md with the release date.
- Update the version in package.json, which is the single source of truth, and
sync it into every other surface: SKILL.md frontmatter and body, marketplace
metadata, plugin metadata, the README version badge, and the PLAN template.
npm run release:prepare -- <patch|minor|major|X.Y.Z>does the bump, the sync, the prompt rebuild, and a stubbed CHANGELOG entry in one command;scripts/version-sync.jsholds the authoritative surface list, so add new surfaces there rather than to this checklist alone. - Run
npm run build:promptafter every inlined source is final. - Install the pinned official validator in an isolated environment, then run
npm run release:checkfrom a clean checkout. It includesnpm run check, deterministic evaluation contracts, official validation of the canonicalskills/godplanspackage, immutable action pins, tag-to-release parity, and a package dry run. - Open a ready pull request and wait for the
release qualityworkflow. - Merge the pull request to
mainwithout bypassing a failed required check. - Pull the merged
main, create annotated tagvX.Y.Z, and push the tag. - Create the GitHub release from the matching CHANGELOG section.
- Verify the release page, tag target, default branch version, and a clean local worktree.
Commands
npm run build:prompt
python3 -m venv .venv-skills-ref
.venv-skills-ref/bin/pip install -r requirements/skills-ref.txt
SKILLS_REF_BIN="$PWD/.venv-skills-ref/bin/skills-ref" npm run release:check
version=X.Y.Z
release_notes=$(mktemp)
trap 'rm -f "$release_notes"' EXIT HUP INT TERM
awk -v version="$version" '
index(\$0, "## [" version "] - ") == 1 { capture = 1; next }
capture && /^## \[/ { exit }
capture { print }
' CHANGELOG.md > "$release_notes"
test -s "$release_notes"
git tag -a "v$version" -m "godplans v$version"
git push origin "v$version"
gh release create "v$version" --verify-tag --title "godplans v$version" --notes-file "$release_notes"
rm -f "$release_notes"
trap - EXIT HUP INT TERM
Run the release check again after the release is published so the new tag and GitHub release enter the parity set. Do not reuse or move a published tag. A failed release gets a new patch version.