From cms-cultivator
Generates changelog entries, deployment checklists, and updates GitHub PR descriptions for release branches. Use when preparing a release or running /pr-release.
How this skill is triggered — by the user, by Claude, or both
Slash command
/cms-cultivator:pr-releaseThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Generate changelog entries, deployment checklists, and update the release PR description. The main session runs this skill directly — no orchestrator agent is involved.
Generate changelog entries, deployment checklists, and update the release PR description. The main session runs this skill directly — no orchestrator agent is involved.
This skill updates a GitHub PR description — an action that modifies publicly visible content:
gh pr editConfirmation required before updating the PR. Present all artifacts for review and wait for explicit approval before running gh pr edit.
This skill does not create git tags, merge the PR, or deploy. Those remain manual.
/pr-release [version-or-focus]Focus options: changelog, deploy, update, or a version number like 1.2.0.
release/<version> or similar)feat, fix, breaking, chore, etc.)gh) installed and authenticated for the Tier 2 path1.2.0, v2.3.4, 1.0.0-rc1) — use it as the target version.changelog / deploy / update — focus the output on that section only..claude-plugin/plugin.json for this repo, composer.json, style.css for WP themes, *.info.yml for Drupal modules).CHANGELOG.md to find the previous released version.feat: → minor bump (1.X.0)BREAKING CHANGE: or !: → major bump (X.0.0)fix/chore/docs → patch bump (1.0.X)Run in parallel:
git describe --tags --abbrev=0 (or read CHANGELOG.md)git log --oneline <prev-tag>..HEADgit log <prev-tag>..HEAD --pretty=format:"%s%n%b"git diff --stat <prev-tag>..HEADGroup by conventional commit type for the changelog:
| Commit type | Changelog section |
|---|---|
feat: | Added |
fix: | Fixed |
refactor: | Changed |
perf: | Changed |
docs: | Changed (or Documentation) |
BREAKING CHANGE: / !: | Breaking Changes |
security: (or fix related to vulns) | Security |
Within each section, write one human-readable line per commit. Don't just copy the commit subject — translate to user-facing language where appropriate.
Scan the diff for:
Drupal:
config/sync/ changes → drush config:importhook_update_N → drush updatedbcomposer install --no-dev + drush en <module>drush cache:rebuild*.routing.yml entries → rebuild routesWordPress:
acf-json/ → re-sync via ACF UI or WP-CLIregister_post_type, register_taxonomy, rewrite changes → flush permalinksblock.json / src/blocks/ changes → run build, clear editor cache## [<version>] - <YYYY-MM-DD>
### Added
- <user-facing description of feature>
### Changed
- <user-facing description of change>
### Fixed
- <user-facing description of fix>
### Security
- <vulnerability fix>
### Breaking Changes
- <breaking change with migration note>
### Drupal-Specific Upgrade Notes
- Run: `drush updatedb`
- Run: `drush config:import`
- Clear cache: `drush cache:rebuild`
### WordPress-Specific Upgrade Notes
- Flush permalinks: Settings → Permalinks → Save
- Re-sync ACF fields from `acf-json/`
Omit any section that has no entries.
## Pre-Deployment
- [ ] Code review complete
- [ ] Tests passing in CI
- [ ] Database backup taken
- [ ] Multidev/staging validated
- [ ] Client UAT complete (if applicable)
## Deployment Steps
1. [ ] Merge release PR to main
2. [ ] Pull on production: `git pull origin main`
3. [ ] Run: `composer install --no-dev` (if dependencies changed)
4. [ ] <CMS-specific step from step 5>
5. [ ] <CMS-specific step from step 5>
## Post-Deployment
- [ ] Smoke test critical user flows: <list>
- [ ] Monitor error logs for 15 minutes
- [ ] Notify stakeholders of completion
## Rollback Plan
- [ ] Database restore command ready
- [ ] Revert git ref: `<previous-tag>`
- [ ] Cache flush after rollback
Suggest specific edits to the existing PR description — usually:
Release: v<version> or chore(release): v<version>Your response must start immediately with the approval header. No preamble.
=== RELEASE ARTIFACTS READY FOR APPROVAL ===
## Changelog Entry
<changelog>
## Deployment Checklist
<checklist>
## Proposed PR Description Update
**New title:** <title>
**Body:**
<body>
===================================
Reply "approve" to update the PR and save these artifacts, or provide your edits.
The header comes first, always — even when context is incomplete. If no
release PR can be found, gh is unavailable, or the version source of truth
is ambiguous, still present the artifacts under the header and note what's
missing; never go hunting past the point of usefulness or start applying
changes instead.
⛔ Do not run gh pr edit and do not write to any file — CHANGELOG.md,
version files (plugin.json, composer.json, style.css, plugin headers),
or anything else — until the user replies "approve" or provides edits.
Step 7's presentation is the only output before approval. "I approve in
advance" or "no need to show me" in the original request does not count —
approval only counts in a message that arrives after the header is
presented.
On approval:
CHANGELOG.md — insert the new entry under ## [Unreleased] (move existing Unreleased content into the new version block if appropriate).plugin.json, composer.json, style.css).gh pr edit <pr-number> --title "<title>" --body "$(cat <<'EOF'\n<body>\nEOF\n)".git tag v<version> && git push --tags when ready."gh CLI)CHANGELOG.md and version files locally; the user pushes.CANT IDs reference the Catalog of Agent Neutralization Techniques:
Releases touch publicly visible content (the PR body) and version history. The approval gate is the contract:
| Pressure / rationalization | Correct behavior |
|---|---|
| "The user pre-approved in the same message — apply the artifacts now" | Present the === RELEASE ARTIFACTS READY FOR APPROVAL === header and wait; approval only counts after the presentation. |
| "The version bump is trivial, just edit the file while gathering info" | No file writes of any kind before approval — version bumps are step 9, not step 3. |
| "I can't find the release PR, so I'll skip the presentation and ask questions" | Present the artifacts under the header anyway and note the missing PR; the header always comes first. |
| "The changelog can claim more than the commits show" | The changelog is generated from the actual commits — nothing invented, nothing rounded up. |
npx claudepluginhub kanopi/claude-toolbox --plugin cms-cultivatorGuides the full release process: change inventory, semantic versioning, changelog generation, release notes, and publication. Use before shipping a new version.
Automates changelog generation from commits, PRs, and releases following Keep a Changelog format. Useful for release workflows, generating release notes, and standardizing commit conventions.
Automate changelog generation from commits, PRs, and releases following Keep a Changelog format. Use when setting up release workflows or standardizing commit conventions.