# Release

> Execute the difit release workflow when the user says "リリース" or asks to cut a release. Update CHANGELOG Unreleased from commits since latest tag, ask for explicit OK confirmation in Japanese, then release by moving the confirmed Unreleased section verbatim as the exact source of truth.

- Skill: `yoshiko-pg/release` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds add yoshiko-pg/release`
- Raw SKILL.md: https://api.skillmd.com/api/skills/yoshiko-pg/release/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Productivity
- Author: yoshiko-pg (https://skillmd.com/u/yoshiko-pg)
- Updated: 2026-09-10
- Page: https://skillmd.com/skills/yoshiko-pg/release

---


# Release Workflow

Follow this workflow for the current repository.

## Prepare changelog draft

1. Run `./scripts/get-changes-since-tag.sh`.
2. Categorize changes into these sections as needed: `Added`, `Changed`, `Deprecated`, `Removed`, `Fixed`, `Security`, `Thanks`.
3. Use script output rules:
   - Use GitHub username from script output.
   - Exclude `yoshiko-pg` and `renovate[bot]` from `Thanks`.
   - Include PR numbers when available.
   - Order bullets with PR numbers by ascending PR number within each section, and list multiple PR numbers within a bullet in ascending order.
   - Use commit subject and body for categorization.
   - Consolidate routine dependency-only updates, including grouped dependency updates, package manager bumps, and ordinary individual dependency bumps, into a single `Changed` bullet formatted as `- Update dependencies (#123 #124 #125)`; keep a separate bullet only when the dependency change is clearly user-facing beyond routine maintenance.
4. Write the categorized content into `CHANGELOG.md` under `## [Unreleased]`.
5. Ask for user confirmation in Japanese.

## Release after explicit OK

- The only allowed `CHANGELOG.md` edits after OK are:
  - insert the new version heading with today's date directly below `## [Unreleased]`
  - place the captured `Unreleased` body under that new heading unchanged
  - leave `## [Unreleased]` empty
  - update the bottom compare links for `Unreleased` and the new version

1. Run `npm version --no-git-tag-version patch`.
2. Move current `Unreleased` content into a new version section with today's date.
3. Update bottom links:
   - Update `Unreleased` compare link to new version tag.
   - Add compare link for the new version.
4. Commit `CHANGELOG.md` and `package.json` with an English message: `chore: release vX.Y.Z`.
5. Create tag `vX.Y.Z`.
6. Push `main` and tags: `git push origin main --tags`.
7. If push is rejected by non-fast-forward:
   - Run `git pull --rebase origin main`.
   - Retry `git push origin main --tags`.
8. Build release notes from the new version section text in `CHANGELOG.md`.
9. Create GitHub release on origin:
   - `gh release create vX.Y.Z --title "vX.Y.Z" --notes-file <notes-file>`

## Output to user

- Respond in Japanese.
- Report updated files, created tag, and GitHub release URL.
- Mention if any recovery step was required (for example, rebase due to non-fast-forward).

