Skip to content

Reference — release

This page documents the skill’s internal workflow. You don’t need to read it to use the skill — it’s here for when you want to understand what’s happening, extend the patterns, or debug a failure.

The skill runs in three phases with 13 total steps. Every step that mutates remote state is gated by AskUserQuestion.

Step 0. Check package.json, pyproject.toml, uv.lock, skills/, and git status --short. Classify into skills-gems, npm, python, monorepo, or generic. If repo_mode is set in config, detection is skipped.

Step 1. Read and execute the pattern file at patterns/<mode>.md. Pre-flight always runs — preflight_confirm: false only skips the confirmation gate, not the checks.

Step 2. Gather context — from the session, identify what was implemented, which files changed, key changes, any breaking changes.

Step 2.5. LanguageAskUserQuestion: English, Japanese, or Other. Applied to plan, issue body, and release notes (commit messages always English).

Step 3. Title — three suggestions plus “Other” for free input.

Step 4. Labels — multi-select: enhancement, bug, documentation, refactor, or custom.

Step 5. Versiongit describe --tags --abbrev=0 to find the current tag. Choose patch / minor / major / skip. Always prefixed v.

Step 6. Plan file — create .plans/<slugified-title>.md from templates/plan.md. Prose in selected language, headings in English.

Step 7. GitHub issue — ensure milestone exists (gh api repos/{owner}/{repo}/milestones), create issue with labels, milestone, and body from templates/issue-body.md.

Step 8. Commit messagefeat(<scope>): <description> (#<issue-number>) (or fix(), docs(), refactor()).

Step 9. Remote statusgit fetch && git rev-list --count HEAD..@{u}. If remote has new commits, prompt to pull --rebase.

Step 9.5. README + CHANGELOG sync — check whether the release’s changes require README or CHANGELOG updates. Edit inline before committing.

Step 10. Commit — show git status --short, propose the commit message, confirm, then git add . && git commit.

Step 11. Taggit tag v<new-version> (skipped if version was skipped).

Step 12. Pushgit push && git push --tags, confirmed first.

Step 13. GitHub releasegh release create v<version> --title "..." --notes "..." with plan content as the body. Close issue with Released in v<version> or Shipped in <sha>.

Save config — if config.json didn’t exist at startup, prompt to save preferences.

  • Verify all skills under skills/ have a valid SKILL.md with frontmatter
  • Check README skill table lists every skill directory (and no stale entries)
  • Check CHANGELOG.md has an entry for the current version
  • Run npm test
  • Check package.json version matches the intended bump
  • Check README.md installation instructions use current package name
  • Run uv run pytest (or pytest if not a uv project)
  • Check pyproject.toml version matches
  • Verify README.md imports match current module layout
  • Detect which sub-projects changed
  • Run the relevant per-mode pre-flight for each changed sub-project
  • Abort if any fail
  • Check for uncommitted changes
  • Check for untracked files that might need staging
  • Minimal sanity — this mode is a fallback, not a safety net

Location: .claude/skills/release/config.json (project-root relative).

{
"language": "en",
"repo_mode": "skills-gems",
"preflight_confirm": false
}
FieldEffect
languageSkip Step 2.5; use this language directly
repo_modeSkip Phase 0 detection; use this mode
preflight_confirm: falseSkip the confirmation gate; pre-flight runs silently

All fields are optional. Missing fields fall back to the interactive flow.

ScenarioAction
Remote fetch failsWarn and continue
Pull produces conflictsStop; instruct user to resolve manually
Pre-flight failsStop; AskUserQuestion: skip pre-flight or fix?
Commit failsStop (likely pre-commit hook); user fixes and reruns
Tag already existsStop; AskUserQuestion with next-version suggestion
Push failsWarn; show the manual git push && git push --tags command
gh not installedWarn; provide the manual release URL
Rate-limited GitHub APIWait and retry is safe; surface the error
Release complete!
- Issue: [#42](https://github.com/oharu121/skills/issues/42)
- Version: v0.3.0 → v0.3.1
- Tag: v0.3.1
- Release: [v0.3.1](https://github.com/oharu121/skills/releases/tag/v0.3.1)
Changes committed and pushed!
- Issue: [#42](https://github.com/oharu121/skills/issues/42)
- Commit: feat(skills): add xyz skill (#42)
No version tag or GitHub release (skipped).

Output always uses plain markdown prose (not a fenced code block) so links are clickable in the IDE.