Generating Game Changelogs
Generate a player-facing game changelog from a completed implementation plan and git history.
Reference Files
| File |
Read When |
references/changelog-format.md |
Writing the changelog entry — contains the format template, emoji mapping, tone rules, approved sample, and non-game adaptation guidance |
Workflow
Copy this checklist and work through it:
- [ ] Phase 1: Gather sources
- [ ] Phase 2: Extract & classify changes
- [ ] Phase 3: Version & theme
- [ ] Phase 4: Group into sections
- [ ] Phase 5: Write the entry
- [ ] Phase 6: Save & verify
Phase 1: Gather Sources
Collect all inputs before synthesizing anything.
- Read
IMPLEMENTATION_PLAN.md (or equivalent plan file) in the project root.
This is the primary source — it has richer descriptions than git commits.
- Read git log since the last release tag or the previous changelog entry.
Use
git log --oneline to get a quick summary; dig into individual commits when the plan doesn't cover something.
- Read existing
CHANGELOG.md if it exists.
Note the previous version number and format so the new entry stays consistent.
- Check for a project changelog mechanism. Some projects have their own
user-facing changelog store beyond the repo file — e.g. a DB-backed in-app
"What's new" feed with an authoring CLI (like a
scripts/add-changelog-entry.mjs).
Look for a Changelog section in the project's CLAUDE.md/AGENTS.md and for
changelog-named scripts. If one exists, read its conventions (script flags,
draft/publish states, tone of recent entries) — Phase 6 publishes through it.
If no implementation plan exists, fall back to git history as the sole source.
Phase 2: Extract & Classify Changes
Walk the plan section by section:
- Completed tasks only — items marked
[x], ✅, or with status ✅ Done become changelog candidates.
Skip anything marked [ ], ⏳, or 🔄.
- Cross-reference git — check if any commits introduce changes not captured in the plan.
Add those as additional entries.
- Filter non-user-facing items — exclude:
- Internal refactors with no visible effect
- Build/tooling changes (CI, linting, dev dependencies)
- Code comments, documentation-only changes
- Sprite/asset pipeline details (describe the feature, not how it was made)
- Classify each item as one of:
- New — entirely new feature, system, or content
- Changed — existing feature modified, improved, or rebalanced
- Fixed — bug fix or correction
Phase 3: Version & Theme
Version number:
- Check
package.json for a version field
- Check git tags (
git tag --sort=-v:refname | head -5)
- Check the previous entry in
CHANGELOG.md
Subtitle:
Come up with a short, evocative subtitle that captures the update's theme (e.g., "Dissolution Expands", "The Deeper Dark", "The Final Frontier").
This becomes the quoted string after the version: v0.2.0 "Dissolution Expands".
Thematic summary:
Draft 1–2 sentences that capture the feel of the update.
Focus on what players will experience, not what was implemented.
Write in present tense, active voice.
Phase 4: Group into Sections
Group changes by game system or project area — whatever feels natural for what players/users care about.
For games, think in terms of world, combat, crafting, farming, creatures, abilities, etc.
For non-game projects, see the adaptation guidance in references/changelog-format.md.
Grouping rules:
- Group by the system or area where the user experiences the change.
- Minimum 2 items per section — merge small sections into the closest related one.
- Maximum ~7 sections — combine if you have too many.
- Fixes & Improvements is always the last section.
- Order sections by impact — most exciting changes first.
- Each item appears in exactly one section.
Spotlight intros:
For major sections (3+ items, significant new content), write a one-sentence intro line below the section header.
Keep it flavorful and user-facing.
Skip intros for small sections or Fixes & Improvements.
Phase 5: Write the Entry
Read references/changelog-format.md for the full format template.
Key rules (inline for speed):
- Player-facing tone — describe what the player sees, does, or encounters.
Not: "Added BiomeManager class with config-driven spawning."
But: "Four new regions beyond the void ring, each with unique wildlife and resources."
- No stats — don't include HP, damage numbers, cooldowns, or growth times.
Not: "Shadow King has 500 HP and deals 25 damage per bolt."
But: "A multi-phase boss lurking in the dark forest."
- No implementation details — don't mention file names, class names, config changes, or asset pipelines.
- No empty sections — if a section has no items after grouping, omit it entirely.
- Bold item names — each bullet starts with a bolded feature name, then a dash, then the description.
- Sub-items use italics — for lists within a feature (e.g., biome names), use
*italic* names with a dash and brief description.
- One emoji per section header — placed before the section title, not on individual items.
Format structure:
**{ProjectName} — v{Version} "{Subtitle}"**
_{Thematic summary}_
### {Emoji} {Section Title}
{Optional spotlight intro}
- **{Feature Name}** — {Player-facing description}
- *{Sub-item}* — {Brief description}
### 🔧 Fixes & Improvements
- {Fix description}
Phase 6: Save & Verify
- If
CHANGELOG.md exists, prepend the new entry above existing content (keep a blank line separator).
- If
CHANGELOG.md doesn't exist, create it with the entry.
- Read the file back to verify it was written correctly.
- If the project has its own changelog mechanism (found in Phase 1 step 4 —
e.g. a DB-backed in-app changelog with an authoring script), publish the SAME
entry through it as well. The in-app/DB changelog is the surface users actually
see;
CHANGELOG.md is the more internal, in-repo record — keep both updated.
Follow the mechanism's own conventions (body via file, version/date flags,
draft vs published), and where the project's CLAUDE.md gives changelog rules
that conflict with this skill, the project rules win.
Anti-Patterns
| Avoid |
Do Instead |
| Including HP, damage, cooldown numbers |
Describe the experience: "tough multi-phase boss" |
| Mentioning file paths or class names |
Describe the feature players interact with |
| "Added ShadowKingBoss.js with 3 phases" |
"A new boss lurks in the dark forest" |
| Empty sections with "None this update" |
Omit sections that have no items |
| Listing every commit message |
Synthesize related commits into cohesive feature descriptions |
| Mentioning sprite generation or AI tools |
Describe the visual result: "new hand-crafted item sprites" |
| Dev diary tone ("We worked hard on...") |
Direct, present-tense descriptions of what's new |
| Repeating the same change in multiple sections |
Each item appears in exactly one section |
1---2name: generating-game-changelogs3description: Generates player-facing game changelogs from implementation plans and git history. Covers thematic intros, system-grouped sections, and concise flavor descriptions. Use when generating a game changelog, writing game release notes, or preparing an update post for itch.io or Steam4---56# Generating Game Changelogs78Generate a player-facing game changelog from a completed implementation plan and git history.910## Reference Files1112| File | Read When |13|------|-----------|14| `references/changelog-format.md` | Writing the changelog entry — contains the format template, emoji mapping, tone rules, approved sample, and non-game adaptation guidance |1516## Workflow1718Copy this checklist and work through it:1920```21- [ ] Phase 1: Gather sources22- [ ] Phase 2: Extract & classify changes23- [ ] Phase 3: Version & theme24- [ ] Phase 4: Group into sections25- [ ] Phase 5: Write the entry26- [ ] Phase 6: Save & verify27```2829### Phase 1: Gather Sources3031Collect all inputs before synthesizing anything.32331. **Read `IMPLEMENTATION_PLAN.md`** (or equivalent plan file) in the project root.34 This is the primary source — it has richer descriptions than git commits.352. **Read git log** since the last release tag or the previous changelog entry.36 Use `git log --oneline` to get a quick summary; dig into individual commits when the plan doesn't cover something.373. **Read existing `CHANGELOG.md`** if it exists.38 Note the previous version number and format so the new entry stays consistent.394. **Check for a project changelog mechanism.** Some projects have their own40 user-facing changelog store beyond the repo file — e.g. a DB-backed in-app41 "What's new" feed with an authoring CLI (like a `scripts/add-changelog-entry.mjs`).42 Look for a Changelog section in the project's `CLAUDE.md`/`AGENTS.md` and for43 changelog-named scripts. If one exists, read its conventions (script flags,44 draft/publish states, tone of recent entries) — Phase 6 publishes through it.4546If no implementation plan exists, fall back to git history as the sole source.4748### Phase 2: Extract & Classify Changes4950Walk the plan section by section:5152- **Completed tasks only** — items marked `[x]`, `✅`, or with status `✅ Done` become changelog candidates.53 Skip anything marked `[ ]`, `⏳`, or `🔄`.54- **Cross-reference git** — check if any commits introduce changes not captured in the plan.55 Add those as additional entries.56- **Filter non-user-facing items** — exclude:57 - Internal refactors with no visible effect58 - Build/tooling changes (CI, linting, dev dependencies)59 - Code comments, documentation-only changes60 - Sprite/asset pipeline details (describe the feature, not how it was made)61- **Classify each item** as one of:62 - **New** — entirely new feature, system, or content63 - **Changed** — existing feature modified, improved, or rebalanced64 - **Fixed** — bug fix or correction6566### Phase 3: Version & Theme6768**Version number:**69701. Check `package.json` for a `version` field712. Check git tags (`git tag --sort=-v:refname | head -5`)723. Check the previous entry in `CHANGELOG.md`7374**Subtitle:**7576Come up with a short, evocative subtitle that captures the update's theme (e.g., "Dissolution Expands", "The Deeper Dark", "The Final Frontier").77This becomes the quoted string after the version: `v0.2.0 "Dissolution Expands"`.7879**Thematic summary:**8081Draft 1–2 sentences that capture the feel of the update.82Focus on what players will experience, not what was implemented.83Write in present tense, active voice.8485### Phase 4: Group into Sections8687Group changes by game system or project area — whatever feels natural for what players/users care about.88For games, think in terms of world, combat, crafting, farming, creatures, abilities, etc.89For non-game projects, see the adaptation guidance in `references/changelog-format.md`.9091**Grouping rules:**92931. Group by the system or area where the user experiences the change.942. Minimum 2 items per section — merge small sections into the closest related one.953. Maximum ~7 sections — combine if you have too many.964. **Fixes & Improvements** is always the last section.975. Order sections by impact — most exciting changes first.986. Each item appears in exactly one section.99100**Spotlight intros:**101102For major sections (3+ items, significant new content), write a one-sentence intro line below the section header.103Keep it flavorful and user-facing.104Skip intros for small sections or Fixes & Improvements.105106### Phase 5: Write the Entry107108Read `references/changelog-format.md` for the full format template.109110**Key rules (inline for speed):**111112- **Player-facing tone** — describe what the player sees, does, or encounters.113 Not: "Added BiomeManager class with config-driven spawning."114 But: "Four new regions beyond the void ring, each with unique wildlife and resources."115- **No stats** — don't include HP, damage numbers, cooldowns, or growth times.116 Not: "Shadow King has 500 HP and deals 25 damage per bolt."117 But: "A multi-phase boss lurking in the dark forest."118- **No implementation details** — don't mention file names, class names, config changes, or asset pipelines.119- **No empty sections** — if a section has no items after grouping, omit it entirely.120- **Bold item names** — each bullet starts with a bolded feature name, then a dash, then the description.121- **Sub-items use italics** — for lists within a feature (e.g., biome names), use `*italic*` names with a dash and brief description.122- **One emoji per section header** — placed before the section title, not on individual items.123124**Format structure:**125126```127**{ProjectName} — v{Version} "{Subtitle}"**128129_{Thematic summary}_130131### {Emoji} {Section Title}132{Optional spotlight intro}133134- **{Feature Name}** — {Player-facing description}135 - *{Sub-item}* — {Brief description}136137### 🔧 Fixes & Improvements138- {Fix description}139```140141### Phase 6: Save & Verify1421431. If `CHANGELOG.md` exists, **prepend** the new entry above existing content (keep a blank line separator).1442. If `CHANGELOG.md` doesn't exist, **create it** with the entry.1453. **Read the file back** to verify it was written correctly.1464. **If the project has its own changelog mechanism** (found in Phase 1 step 4 —147 e.g. a DB-backed in-app changelog with an authoring script), publish the SAME148 entry through it as well. The in-app/DB changelog is the surface users actually149 see; `CHANGELOG.md` is the more internal, in-repo record — keep both updated.150 Follow the mechanism's own conventions (body via file, version/date flags,151 draft vs published), and where the project's `CLAUDE.md` gives changelog rules152 that conflict with this skill, the project rules win.153154## Anti-Patterns155156| Avoid | Do Instead |157|-------|------------|158| Including HP, damage, cooldown numbers | Describe the experience: "tough multi-phase boss" |159| Mentioning file paths or class names | Describe the feature players interact with |160| "Added ShadowKingBoss.js with 3 phases" | "A new boss lurks in the dark forest" |161| Empty sections with "None this update" | Omit sections that have no items |162| Listing every commit message | Synthesize related commits into cohesive feature descriptions |163| Mentioning sprite generation or AI tools | Describe the visual result: "new hand-crafted item sprites" |164| Dev diary tone ("We worked hard on...") | Direct, present-tense descriptions of what's new |165| Repeating the same change in multiple sections | Each item appears in exactly one section |