
Changelog Maintenance
- 225 installs
- 40 repo stars
- Updated August 4, 2026
- akillness/oh-my-skills
Keep CHANGELOG files accurate across releases by grouping commits, semver sections, and user-facing notes before tagging versions.
About
Maintains structured CHANGELOG files for semver releases by curating commits into Added, Changed, Fixed, and Breaking sections. Ensures release notes stay accurate, scannable, and ready for tags, PRs, and user communications.
- Keep a Changelog formatting
- Semver section organization
- Breaking-change callouts
- Commit-to-entry curation
- Release-note consistency checks
Changelog Maintenance by the numbers
- 225 all-time installs (skills.sh)
- Ranked #73 of 248 Release Management skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/akillness/oh-my-skills --skill changelog-maintenanceAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 225 |
|---|---|
| repo stars | ★ 40 |
| Last updated | August 4, 2026 |
| Repository | akillness/oh-my-skills ↗ |
What it does
Keep CHANGELOG files accurate across releases by grouping commits, semver sections, and user-facing notes before tagging versions.
Files
Changelog Maintenance
Use this skill when the deliverable is release history or shipped-change communication, not a broad documentation or launch-campaign bundle.
changelog-maintenance is the documentation-cluster anchor for:
CHANGELOG.mdupkeep- GitHub / GitLab / docs-site release notes
- migration and deprecation updates tied to a shipped change
- customer-facing “what changed” summaries
- lightweight game patch notes and small update posts
Read these support docs before choosing the mode or boundary:
- references/modes-and-boundaries.md
- references/output-packets-and-channel-handoffs.md
- references/release-note-quality-checklist.md
- references/automation-and-source-of-truth.md
When to use this skill
- A repo needs a durable changelog entry or
Unreleasedrefresh based on shipped work - A release needs audience-appropriate notes for developers, customers, internal stakeholders, or players
- A breaking change, deprecation, or compatibility shift needs a migration update linked from release history
- Release automation drafted notes, but the output still needs truthful grouping, clearer wording, or better route-outs
- A game update needs concise patch notes without collapsing into marketing copy, deployment runbooks, or full help docs
- The real job is deciding the smallest release-writing packet rather than writing every neighboring document from scratch
When not to use this skill
- The main job is an internal spec, runbook, ADR, rollout plan, or deep migration procedure →
technical-writing - The main job is published API / SDK / webhook / developer-portal content →
api-documentation - The main job is end-user onboarding, tutorials, screenshots, FAQs, or help-center walkthroughs →
user-guide-writing - The main job is deployment execution, environment promotion, rollback mechanics, or release orchestration →
deployment-automation - The main job is launch copy, feature positioning, campaign sequencing, or GTM messaging →
marketing-automation - There is no credible shipped evidence yet → collect proof first instead of inventing release notes from a roadmap or TODO list
Instructions
Step 1: Classify one primary release-writing mode
Normalize the request before drafting.
changelog_mode:
primary_mode: changelog | release-notes | migration-update | game-patch-notes
audience: developers | end-users | mixed | players | internal-stakeholders | unknown
release_scope: patch | minor | major | rolling | unknown
source_of_truth: release-pr | tagged-release | prs | issues | commits | docs | mixed | unknown
publishing_surface: changelog-file | github-release | docs-site | in-app-updates | steam-news | mixed | unknown
automation_context: manual | release-drafter | changesets | release-please | autogenerated-release-notes | mixed | unknown
output_shape: single-entry | summary-plus-links | migration-brief | patch-note-brief | sync-packet | unknownUse one mode per run:
changelog→ durable repo history inCHANGELOG.mdrelease-notes→ audience-facing summary of what changed and why it mattersmigration-update→ changed behavior, required actions, deadlines, and compatibility notesgame-patch-notes→ concise player-facing update summary
Step 2: Confirm audience, proof, and route-outs
Answer these before writing: 1. Who reads this first? 2. What action should they take after reading it? 3. Which shipped evidence proves each headline claim? 4. Which deeper artifact should carry the rest?
Quick route-out table:
| If the request sounds like... | Use |
|---|---|
| “Write the architecture / rollout / runbook / internal migration plan” | technical-writing |
| “Publish API reference, SDK docs, auth troubleshooting, or portal pages” | api-documentation |
| “Write help docs, tutorials, screenshots, or FAQs for the changed workflow” | user-guide-writing |
| “Plan deploy / rollback / release execution” | deployment-automation |
| “Write launch copy / announcement / campaign messaging” | marketing-automation |
| “Summarize shipped changes truthfully for a release surface” | changelog-maintenance |
Step 3: Gather the smallest truthful evidence set
Do not write release history from memory alone. Pull the smallest credible packet first:
- merged release PR, tag, or release entry if it exists
- merged PRs / issues / commits included in the release
- linked migration docs, upgrade notes, or help docs
- breaking changes, removals, deprecations, deadlines, or rollout caveats
- publishing-surface constraints (
CHANGELOG.md, GitHub Release, customer update hub, Steam patch-note post) - automation context, if any
If evidence is incomplete, label assumptions and missing proof explicitly.
Step 4: Choose the smallest useful artifact packet
Use references/output-packets-and-channel-handoffs.md.
Default shapes:
single-entry→ one changelog entry or one release-note blocksummary-plus-links→ short release summary plus migration/help/API linksmigration-brief→ what changed, who is affected, required action, deadline, link-outspatch-note-brief→ concise new content / tuning / fixes / known issues packetsync-packet→ release-note draft plus list of downstream docs or channels that must stay aligned
Do not ship a broad handbook when one release packet and a short sync list will do.
Step 5: Apply mode-specific writing rules
- Changelog: favor grouped notable changes over commit archaeology; keep compare links or version/date framing when the repo uses them.
- Release notes: lead with impact, not internal ticket numbers; keep wording plain and scannable.
- Migration update: foreground required action, affected readers, deadline, and compatibility risk.
- Game patch notes: keep the note lightweight and player-facing; do not smuggle rollout mechanics or campaign copy into it.
Step 6: Keep record, communication, and promotion separate
Guard these boundaries aggressively:
- changelog / release notes summarize what shipped
- migration detail lives in linked migration docs when the procedure is too large for the summary
- tutorials / FAQs live in
user-guide-writing - API and integration detail lives in
api-documentation - rollout / rollback mechanics live in
deployment-automation - campaign-style language lives in
marketing-automation
Step 7: Work with automation without surrendering judgment
Use automation as draft input, not the final editor.
- Release Drafter / autogenerated release notes → good for PR grouping and starter bullets
- Changesets → good for package/version intent and monorepo release aggregation
- release-please / semantic-release style flows → good for release PRs, version bumps, and commit-driven summaries
Still decide manually:
- the primary audience
- what counts as notable
- what needs a migration link
- what should become a separate help/API/internal doc
Step 8: Run the trust check before publishing
Use references/release-note-quality-checklist.md.
Verify: 1. Every claim matches shipped or merged evidence. 2. The chosen mode fits the audience and channel. 3. Breaking changes, removals, and deadlines are impossible to miss. 4. Route-outs stay explicit instead of bloating the note. 5. The packet is as small as possible while still truthful.
Step 9: Return a brief or the finished artifact
Preferred brief shape before full drafting:
# Release Writing Brief
## Mode
- Primary mode:
- Why it fits:
- Audience:
- Output shape:
## Evidence used
- Source of truth:
- Supporting docs / links:
- Assumptions / missing proof:
## Planned artifact packet
1. main release artifact
2. downstream sync / linked-doc follow-up
## Writing notes
- Breaking changes / deadlines:
- Route-outs kept out of scope:
- Channel-specific constraints:If the user already asked for the finished artifact, produce the selected packet directly with the matching structure.
Examples
Example 1: Changelog plus migration link
Input
Update CHANGELOG.md for v2.4.0 from the merged PR list and make the Basic Auth deprecation obvious.Good output direction
- mode:
changelog - output shape:
summary-plus-links - grouped sections such as
Added,Changed,Deprecated,Fixed - migration link or placeholder instead of embedding the full auth procedure
Example 2: Customer-facing release summary
Input
Turn these shipped product updates into release notes customers will actually read.
Good output direction
- mode:
release-notes - output shape:
single-entryorsummary-plus-links - benefit-led headings like
What’s new,Improvements,Fixes - route tutorials or help refreshes to
user-guide-writing
Example 3: Lightweight game patch notes
Input
Write patch notes for our latest game update and keep them short.
Good output direction
- mode:
game-patch-notes - output shape:
patch-note-brief - concise sections for new content, tuning, fixes, and known issues
- route launch-event hype or campaign beats to
marketing-automation
Best practices
1. Start from shipped evidence, not vibes. 2. Pick one primary audience and one primary mode. 3. Use the smallest packet that fits the channel. 4. Separate release summary, migration detail, help docs, API docs, rollout mechanics, and launch messaging. 5. Let automation collect draft material, but do not outsource judgment. 6. Call out breaking changes and deadlines early. 7. Treat patch notes as a real workflow with player-facing constraints, not just a renamed changelog.
References
{
"skill_name": "changelog-maintenance",
"evals": [
{
"id": 1,
"prompt": "Update CHANGELOG.md and draft release notes for v2.4.0 from the merged PR summary. We added Slack SSO, fixed CSV export, and deprecated the legacy Basic Auth login.",
"expected_output": "Selects changelog or release-notes mode explicitly, groups changes logically, and calls out the auth deprecation without dumping raw commit history.",
"assertions": [
"Output names a primary mode from changelog | release-notes | migration-update | game-patch-notes",
"Output contains grouped sections such as Added/Changed/Fixed/Deprecated or equivalent release-note groupings",
"Output explicitly mentions the Basic Auth deprecation or breaking-change follow-up",
"Output does not instruct the agent to paste raw git logs as the final artifact"
]
},
{
"id": 2,
"prompt": "Write a migration update for the v3.0 release: API keys are replaced by OAuth client credentials for server-to-server integrations, and the old auth method stops working in 60 days.",
"expected_output": "Selects migration-update mode, identifies who is affected, and makes the deadline plus required action obvious.",
"assertions": [
"Output names migration-update as the primary mode or clearly structures the response as a migration update",
"Output includes both what changed and who is affected",
"Output includes the 60-day deadline or deprecation window",
"Output includes a required action, next step, or link-out placeholder for deeper docs"
]
},
{
"id": 3,
"prompt": "Turn this Steam update into lightweight patch notes: new desert biome, shotgun recoil tuning, fixed two matchmaking crashes, known issue with missing French subtitles. Keep the launch campaign separate.",
"expected_output": "Selects game-patch-notes mode, keeps the update player-facing and lightweight, and routes broader launch messaging elsewhere.",
"assertions": [
"Output names game-patch-notes as the primary mode or clearly formats the result as patch notes",
"Output includes new content, tuning, fixes, and known issue information",
"Output keeps the wording concise and player-facing instead of turning into a long technical dump",
"Output routes launch campaign or broader marketing work to another skill or separate artifact"
]
},
{
"id": 4,
"prompt": "We shipped a billing overhaul. I need release notes for customers, an obvious heads-up that legacy invoice exports disappear in 30 days, and a short list of downstream docs that must be refreshed. Do not turn this into a full tutorial or rollout runbook.",
"expected_output": "Selects release-notes or migration-update with a bounded packet shape, makes the 30-day removal obvious, and routes tutorial / rollout detail to neighboring skills instead of absorbing them.",
"assertions": [
"Output names a primary mode from changelog | release-notes | migration-update | game-patch-notes",
"Output identifies a compact output shape such as summary-plus-links, migration-brief, or sync-packet",
"Output explicitly mentions the 30-day removal window or deadline",
"Output names downstream sync work or linked-doc follow-ups rather than embedding a full tutorial/runbook",
"Output routes tutorial/help or deployment execution work to another skill or separate artifact"
]
}
]
}
Automation and Source of Truth
Source-of-truth priority
When changelog input sources disagree, prefer this order unless the repo clearly documents a different policy:
1. merged release PR / tagged release notes 2. merged PRs included in the release 3. linked issues or milestone notes 4. commit history 5. draft planning docs
Do not treat draft roadmap or TODO items as shipped changes.
Automation lanes
Release Drafter
Good for:
- PR-label grouping
- release-draft generation
- consistent headings
Still requires:
- wording cleanup
- audience fit
- migration / deprecation review
- doc-link hygiene
Changesets
Good for:
- package versioning
- monorepo release notes
- per-package change intent
Still requires:
- deciding what belongs in customer-facing notes
- linking to migration/user guides
- filtering internal-only package noise
release-please
Good for:
- release PRs
- version bumps
- conventional-commit driven summaries
Still requires:
- accurate breaking-change framing
- explicit route-outs for tutorials, API docs, and migrations
- readability review for non-engineer audiences
Practical writing rule
Automation can propose categories and bullets. Humans/agents still decide:
- the primary audience
- what is notable
- what needs a migration link
- what belongs in a separate guide
Game/live-ops note
Steam patch-note workflows favor lightweight title + description style update posts. Do not overload that artifact with build, deployment, or campaign detail.
Changelog / Release-Notes Modes and Boundaries
Core split
changelog-maintenance owns the release-history artifact and the release-summary artifact.
That includes:
CHANGELOG.md- GitHub/GitLab release notes
- migration / deprecation summaries attached to a release
- customer-facing “what shipped” notes
- lightweight game patch notes
It does not own every neighboring document.
Route-outs
| If the deeper artifact is... | Route to |
|---|---|
| internal spec / design doc / ADR / runbook / rollout procedure | technical-writing |
| API reference, SDK docs, webhook guide, integration docs | api-documentation |
| tutorial, onboarding guide, FAQ, help-center walkthrough | user-guide-writing |
| deployment steps, rollback execution, environment promotion | deployment-automation |
| launch messaging, campaign copy, feature marketing, GTM packaging | marketing-automation |
Mode chooser
1. changelog
Use when the durable source is CHANGELOG.md or an equivalent release-history file.
Best for:
- repo history
- compare links
- grouped notable changes
- long-term historical lookup
2. release-notes
Use when the artifact is meant to be read by developers, admins, or end users after a release.
Best for:
- “what’s new” pages
- in-app update notes
- GitHub Release text
- customer-facing update posts with doc links
3. migration-update
Use when compatibility changed and readers need explicit next steps.
Best for:
- deprecation announcements
- API or behavior changes
- renamed config keys, removed endpoints, changed defaults
- upgrade windows and deadlines
4. game-patch-notes
Use when the update is lightweight and player-facing.
Best for:
- Steam patch notes
- live-ops update summaries
- balance changes and fixes
- concise update notes attached to a shipped build
Common failure modes
- Treating a changelog like a commit archive
- Treating release notes like launch copy
- Hiding breaking changes in a generic “Changed” bullet
- Mixing patch notes, tutorials, and rollout instructions into one blob
- Writing every artifact for “everyone” instead of one primary audience
Output Packets and Channel Handoffs
Use this reference when the front door already knows the work belongs in changelog-maintenance but you still need the smallest truthful release-writing artifact.
Packet chooser
| Situation | Best packet | Why |
|---|---|---|
Update one version block or Unreleased section in CHANGELOG.md | single-entry | Durable repo history with minimal ceremony |
| Publish release notes plus a few linked follow-up docs | summary-plus-links | Lets the summary stay short while deeper docs live elsewhere |
| Breaking change, deprecation, renamed setting, or removed API path | migration-brief | Makes required action and deadline impossible to miss |
| Lightweight player-facing update on Steam or another game-news surface | patch-note-brief | Keeps the note concise and channel-appropriate |
| Release touched multiple downstream surfaces that must stay aligned | sync-packet | Preserves one summary plus a short handoff list |
Packet skeletons
1. single-entry
Use for a changelog entry or one concise release-note block.
## [version-or-date]
### Added / Changed / Deprecated / Removed / Fixed / Security
- grouped notable changesGood when:
- the repo already has the surrounding changelog structure
- deeper docs already exist
- one durable record matters more than audience-specific packaging
2. summary-plus-links
Use for customer/dev/internal release notes that should stay short.
# Release Notes: <version>
## What's new
## Improvements
## Fixes
## Important changes
## Learn more
- migration / help / API linksGood when:
- the audience needs impact-first wording
- the release still points to migration/help/API docs
- the request risks turning into a giant mixed-purpose document
3. migration-brief
Use when the summary alone is unsafe.
# Migration Update: <change>
## What changed
## Who is affected
## Required action
## Deadline / support window
## Links to deeper docsGood when:
- a breaking change or deprecation needs a visible action
- the timeline matters
- the full procedure belongs in
technical-writingorapi-documentation
4. patch-note-brief
Use for lightweight game or live-ops updates.
# Patch Notes - <version/date>
## New content / features
## Balance / tuning
## Fixes
## Known issues / next stepsGood when:
- the note is player-facing
- the platform surface rewards concise updates
- build / deployment / campaign detail should stay elsewhere
5. sync-packet
Use when one release update has to keep several other artifacts honest.
# Release Writing Sync Packet
## Primary artifact
- changelog / release-note / patch-note block
## Must-sync follow-ups
- migration doc
- API doc page
- help-center article
- customer update hub entry
- store / news postGood when:
- the release spans docs, customer comms, and channel-specific notes
- one summary should drive several smaller downstream updates
- you need a bounded handoff instead of writing every artifact immediately
Channel handoff rules
| Deeper need | Route to |
|---|---|
| Full internal migration/runbook/rollback procedure | technical-writing |
| API reference, integration examples, SDK/webhook docs | api-documentation |
| End-user tutorial, FAQ, screenshot refresh, help-center article | user-guide-writing |
| Rollout, rollback, promotion, environment sequencing | deployment-automation |
| Launch announcement, campaign copy, feature positioning, lifecycle messaging | marketing-automation |
Common packet mistakes
- Writing one blob that tries to be changelog, migration guide, tutorial, and launch post all at once
- Treating autogenerated notes as publish-ready when they still need audience cleanup
- Hiding required action inside a generic
Changedbullet - Sending player patch notes full of rollout or build-process detail
- Forgetting the downstream sync list when one release changed multiple docs surfaces
Release Note Quality Checklist
Use this checklist before finalizing changelog or release-note output.
Accuracy
- Every claim matches shipped or merged evidence
- Version number / release scope is correct
- Breaking changes, removals, or deprecations are explicit
- Migration links point to real docs
Readability
- No raw ticket dumps or commit-log phrasing
- Audience-facing notes use plain language
- Entries are short and scannable
- Sections are grouped logically
Boundary discipline
- Deep technical explanation moved to
technical-writingorapi-documentation - Tutorials / FAQs moved to
user-guide-writing - Rollout mechanics moved to
deployment-automation - Campaign-style copy moved to
marketing-automation
Trust
- No claims about GA / rollout completeness without proof
- No “various improvements” filler if specifics are available
- Known limitations or next steps are called out when material
Good section labels
AddedChangedDeprecatedRemovedFixedSecurityWhat’s newImprovementsBreaking changesKnown issues
Smells that need rewriting
- “Misc updates”
- “Bug fixes and improvements” with no specifics
- internal ticket IDs as the first thing the reader sees
- more than one audience being served equally badly in the same artifact
- migration steps hidden inside a long prose paragraph
N:changelog-maintenance
D:Write and maintain release-history artifacts for shipped changes. Use when the main job is turning shipped evidence into the smallest truthful changelog, release-note, migration-update, or game patch-note packet; routes internal docs to technical-writing, API docs to api-documentation, end-user help to user-guide-writing, rollout execution to deployment-automation, and launch messaging to marketing-automation.
G:changelog release-notes patch-notes migration-update deprecation what's-new release-history
U[4]:
**CHANGELOG.md refresh**: update durable repo history from shipped work
**Customer or developer release notes**: summarize impact and link deeper docs
**Breaking-change notice**: publish migration/deprecation update with deadlines
**Game patch notes**: keep player-facing update concise and truthful
S[2]{n,action}:
1,Classify one primary mode plus the smallest output packet
2,Verify shipped evidence and route deeper docs to neighboring skills