release
SkillDev toolsRelease gentle-pi through GitHub and npm. Trigger: release, publish, npm publish, GitHub release, version bump.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the release skill
What this skill tells your AI
The instructions your AI receives, as published by gentleman-programming/gentle-pi in skills/release/SKILL.md and read by ahel’s review.
When to Use
Use this skill when preparing, publishing, or verifying a gentle-pi release.
Hard Rules
- Do not publish
gentle-pito npm from a local machine. - npm publishing MUST go through the GitHub Actions workflow
.github/workflows/publish.ymlso provenance, environment protection, and registry credentials are controlled by GitHub. - Dispatch the trusted workflow definition from protected default
main, never from a release tag. Its only caller input is the exact annotated version tag. - Use a clean worktree for release commits. Do not package unrelated local files or scratch artifacts.
- Review outcomes are informational. Release delivery follows ordinary repository policy and must not be blocked, authorized, or rewritten by RDD.
- Never infer the release tag target from local
HEAD; use the freshly fetchedorigin/maincommit and the repository's normal release safeguards. - Never skip package verification. The publish workflow runs verification again, but local validation should still pass before tagging.
Release Procedure
-
Inspect state
git status --short git fetch origin main --tags git log --oneline --decorate --max-count=5 origin/main -
Prepare the release commit
- Apply only intended changes.
- Bump
package.jsonto the next semver version. - Keep lockfile changes out unless dependency resolution actually changed.
-
Verify locally
pnpm test node scripts/verify-package-files.mjs npm pack --dry-runnpm pack --dry-runverifies package contents and lifecycle scripts without entering a publish path. -
Commit and push
git add <intended-files> git commit -m "<type(scope): release-ready change>" git push origin HEAD:main git fetch origin main --tags -
Create and verify the exact version tag
version="$(node -p "require('./package.json').version")" tag="v${version}" release_sha="$(git rev-parse 'origin/main^{commit}')" test "$(git rev-parse 'HEAD^{commit}')" = "${release_sha}" test -z "$(git ls-remote --tags origin "refs/tags/${tag}")" git tag -a "${tag}" "${release_sha}" -m "gentle-pi ${tag}" test "$(git rev-parse "${tag}^{commit}")" = "${release_sha}" git fetch origin main test "$(git rev-parse 'origin/main^{commit}')" = "${release_sha}" git push origin "refs/tags/${tag}" git fetch --no-tags origin "refs/tags/${tag}" test "$(git rev-parse 'FETCH_HEAD^{commit}')" = "${release_sha}" gh release create "${tag}" \ --repo Gentleman-Programming/gentle-pi \ --verify-tag \ --title "gentle-pi ${tag}" \ --notes "<release notes>"Do not retag or overwrite an existing version. The tag target comes from the freshly fetched immutable
origin/maincommit, not an ambient local branch. -
Publish npm through GitHub Actions
version="$(node -p "require('./package.json').version")" tag="v${version}" gh workflow run publish.yml \ --repo Gentleman-Programming/gentle-pi \ --ref main \ -f tag="${tag}"The workflow definition always comes from protected default
main. It accepts only one exactvSemVertag, fetches the remote annotated tag and current remotemain, and requires the peeled tag commit, dispatch/main workflow commit, checkout, andpackage.jsonversion to match. It re-queries remote tag andmainimmediately before npm publication, derives the dist-tag internally, and uses trusted OIDC with provenance.Watch the run and fail the release if it fails:
gh run list --repo Gentleman-Programming/gentle-pi --workflow publish.yml --limit 3 gh run watch <run-id> --repo Gentleman-Programming/gentle-pi --exit-status -
Verify npm
npm view gentle-pi@<version> version --registry=https://registry.npmjs.org/ npm dist-tag ls gentle-pi --registry=https://registry.npmjs.org/
Failure Handling
-
A publication failure is handled through ordinary repository policy. It does not reopen or alter a review lineage.
-
Never attempt or retry
npm publishlocally. Re-dispatch from trustedmainonly when the same tag still targets the current remotemainand the failure was publication-only. -
If remote
mainadvances, do not move or recreate the existing tag. Prepare a new release commit/version and create a new annotated version tag. -
If the workflow fails, inspect logs with:
gh run view <run-id> --repo Gentleman-Programming/gentle-pi --log -
If npm verification is briefly stale after a successful workflow, check the exact version first (
npm view gentle-pi@<version> version) before assuming publish failed.
Output Contract
Report:
- Commit SHA pushed to
main. - Exact version tag and its peeled commit SHA.
- GitHub release URL.
- Publish workflow run URL and conclusion.
- npm exact version and the workflow-derived dist-tag (
latest,beta, ornext). - Any remaining follow-up or warnings.
Signals
- GitHub stars
- 749
- Forks
- 105
- Last commit
- Sep 2026
- Hacker News mentions
- 20
Advanced
- Catalog kind
- skill
- Gateway key
release-gentleman-programming- Source
- github.com/gentleman-programming/gentle-pi