mirror of
https://github.com/Donchitos/Claude-Code-Game-Studios.git
synced 2026-10-16 10:17:06 +00:00
Release 1.1.2 — the default path works end to end
Fix release for 1.1.1: the minimal path end to end, engine commands that run on Godot, Unity and Unreal, hook warnings you can see, and verdicts that say when they could not check. Details in CHANGELOG.md; upgrade steps in UPGRADING.md (v1.1.1 → v1.1.2). Fixes #67 Fixes #131 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WuJn2FdynEybfL5KC697nJ
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
7ed2c3e9c4
commit
b21fa0f7f2
@@ -2,24 +2,36 @@
|
||||
|
||||
## Skill Summary
|
||||
|
||||
`/patch-notes` is a Haiku-tier skill that generates player-facing patch notes
|
||||
from existing changelog content, stripping internal task IDs and technical
|
||||
jargon in favor of plain language. It filters entries to only those relevant
|
||||
to players (visible features and bug fixes; internal refactors are excluded).
|
||||
No director gates are used. The skill asks "May I write to
|
||||
`docs/patch-notes-vX.X.md`?" before persisting. Verdict is always COMPLETE.
|
||||
`/patch-notes` is a Sonnet-tier skill that turns a release's changes into
|
||||
player-facing patch notes. Before reading any history it classifies recent
|
||||
commits as Game or Framework / maintenance (Unclear counts as Framework), uses
|
||||
only the Game commits, and says how many of how many it used. It gathers change
|
||||
data from `production/releases/[version]/changelog.md`, the version's entry in
|
||||
`docs/CHANGELOG.md`, and — as a fallback — `git log` from the previous release
|
||||
tag. It checks for a tone guide (`.claude/docs/technical-preferences.md`,
|
||||
`docs/PATCH-NOTES-STYLE.md`, `design/community/tone-guide.md`) and a patch-notes
|
||||
template (`docs/patch-notes-template.md`,
|
||||
`.claude/docs/templates/patch-notes-template.md`), removes internal-only
|
||||
changes, and translates the rest into player language in Brief, Detailed
|
||||
(default) or Full style — or in the template's structure when one exists, saying
|
||||
which template it used. No director gates are used. The skill asks "May I write
|
||||
these patch notes to `docs/patch-notes/[version].md`, and an archive copy to
|
||||
`production/releases/[version]/patch-notes.md`?" — naming both files — and on
|
||||
approval writes both. Verdicts:
|
||||
COMPLETE (notes generated and saved) or BLOCKED (no changelog data and no git
|
||||
history, or no Game commit in the history).
|
||||
|
||||
---
|
||||
|
||||
## Static Assertions (Structural)
|
||||
|
||||
Verified automatically by `/skill-test static` — no fixture needed.
|
||||
Checked against the SKILL.md by `/skill-test spec` — no fixture needed.
|
||||
|
||||
- [ ] Has required frontmatter fields: `name`, `description`, `argument-hint`, `user-invocable`, `allowed-tools`
|
||||
- [ ] Has ≥2 phase headings
|
||||
- [ ] Contains verdict keyword: COMPLETE
|
||||
- [ ] Contains verdict keywords: COMPLETE, BLOCKED
|
||||
- [ ] Contains "May I write" language (skill writes patch notes file)
|
||||
- [ ] Has a next-step handoff (e.g., share with community manager)
|
||||
- [ ] Has a next-step handoff (`/release-checklist`, community-manager tone review)
|
||||
|
||||
---
|
||||
|
||||
@@ -34,137 +46,216 @@ None. Patch notes generation is a fast compilation task; no gates are invoked.
|
||||
### Case 1: Happy Path — Changelog filtered to player-facing entries
|
||||
|
||||
**Fixture:**
|
||||
- `docs/CHANGELOG.md` exists with 5 entries:
|
||||
- "Add dual-wield melee system" (Features — player-facing)
|
||||
- "Fix crash on level transition" (Fixes — player-facing)
|
||||
- "Add enemy patrol AI" (Features — player-facing)
|
||||
- "Refactor input handler to use event bus" (Fixes — internal only)
|
||||
- `docs/CHANGELOG.md` has a `v0.4.0` entry with 5 items:
|
||||
- "Add dual-wield melee system" (player-facing)
|
||||
- "Fix crash on level transition" (player-facing)
|
||||
- "Add enemy patrol AI" (player-facing)
|
||||
- "Refactor input handler to use event bus" (internal only)
|
||||
- "Update dependency: Godot 4.6" (internal only)
|
||||
- Version is `v0.4.0`
|
||||
- Git history since the previous tag holds the Game commits behind those items
|
||||
- No tone guide and no patch-notes template exist
|
||||
|
||||
**Input:** `/patch-notes v0.4.0`
|
||||
|
||||
**Expected behavior:**
|
||||
1. Skill reads `docs/CHANGELOG.md`
|
||||
2. Skill filters to 3 player-facing entries; excludes 2 internal entries
|
||||
3. Skill rewrites entries in plain language (no task IDs, no tech jargon)
|
||||
4. Skill presents draft to user
|
||||
5. Skill asks "May I write to `docs/patch-notes-v0.4.0.md`?"
|
||||
6. User approves; file written; verdict COMPLETE
|
||||
1. Skill classifies the recent commits and says how many of how many it used
|
||||
2. Skill reads the `v0.4.0` entry in `docs/CHANGELOG.md`
|
||||
3. No tone guide is found, so the default tone applies; no template is found,
|
||||
so the built-in Detailed style (the default `--style`) is used
|
||||
4. Skill keeps the 3 player-facing items and removes the 2 internal ones
|
||||
5. Skill rewrites the items in player language (no task IDs, no internal system
|
||||
names)
|
||||
6. Skill presents the notes with a count of changes by category and the list of
|
||||
excluded internal changes
|
||||
7. Skill asks "May I write these patch notes to `docs/patch-notes/v0.4.0.md`, and an archive copy to `production/releases/v0.4.0/patch-notes.md`?"
|
||||
8. User approves; both files are written; verdict COMPLETE
|
||||
|
||||
**Assertions:**
|
||||
- [ ] Only 3 entries appear in the patch notes (2 internal entries excluded)
|
||||
- [ ] Entries are written in plain language without internal task IDs
|
||||
- [ ] File path matches `docs/patch-notes-v0.4.0.md`
|
||||
- [ ] "May I write" prompt appears before file write
|
||||
- [ ] Verdict is COMPLETE after write
|
||||
- [ ] Only the 3 player-facing items appear in the notes; the 2 internal items are listed separately as excluded, for review
|
||||
- [ ] Entries are written in plain language without internal task IDs or system names
|
||||
- [ ] Notes use the built-in Detailed style (Highlights, New Content, … Known Issues) — the default when no `--style` is given and no template exists
|
||||
- [ ] "May I write" prompt naming `docs/patch-notes/v0.4.0.md` appears before any file is written
|
||||
- [ ] Verdict is COMPLETE after the write
|
||||
|
||||
---
|
||||
|
||||
### Case 2: No Changelog Found — Directed to run /changelog first
|
||||
### Case 2: No Changelog File — Falls back to git history
|
||||
|
||||
**Fixture:**
|
||||
- `docs/CHANGELOG.md` does NOT exist
|
||||
- Neither `production/releases/v0.4.0/changelog.md` nor `docs/CHANGELOG.md` exists
|
||||
- Tag `v0.3.0` exists; the range `v0.3.0..HEAD` holds 6 Game commits and 2
|
||||
Framework / maintenance commits (one touching a hook, one touching CI)
|
||||
|
||||
**Input:** `/patch-notes v0.4.0`
|
||||
|
||||
**Expected behavior:**
|
||||
1. Skill attempts to read `docs/CHANGELOG.md` — not found
|
||||
2. Skill outputs: "No changelog found — run /changelog first to generate one"
|
||||
3. No patch notes are generated; no file is written
|
||||
1. Skill classifies the commits, keeps the Game commits, excludes the 2
|
||||
framework commits, and says how many of how many it used
|
||||
2. Skill finds no changelog source and uses `git log` from `v0.3.0` to HEAD as
|
||||
the fallback
|
||||
3. Skill does NOT stop with BLOCKED — the "No changelog data found … Run
|
||||
`/changelog [version]` first" path requires the git history to be empty or
|
||||
unavailable as well
|
||||
4. Skill generates notes from the Game commits only
|
||||
5. Skill asks "May I write" before writing
|
||||
|
||||
**Assertions:**
|
||||
- [ ] Skill does not crash when changelog is absent
|
||||
- [ ] Output explicitly directs user to run `/changelog`
|
||||
- [ ] No "May I write" prompt appears (nothing to write)
|
||||
- [ ] Verdict is BLOCKED (dependency not met)
|
||||
- [ ] Skill does not crash and does not stop with BLOCKED while git history is available
|
||||
- [ ] Skill falls back to `git log` from the previous tag (`v0.3.0`) to HEAD
|
||||
- [ ] Output states how many of how many commits were used
|
||||
- [ ] The 2 framework / maintenance commits do not appear in the patch notes
|
||||
- [ ] "May I write" prompt appears before any file is written
|
||||
|
||||
---
|
||||
|
||||
### Case 3: Tone Guidance from Design Folder — Incorporated into output
|
||||
|
||||
**Fixture:**
|
||||
- `docs/CHANGELOG.md` exists with player-facing entries
|
||||
- `docs/CHANGELOG.md` has a `v0.4.0` entry with player-facing items; git history
|
||||
holds the matching Game commits
|
||||
- `design/community/tone-guide.md` exists with guidance: "upbeat, encouraging tone; avoid passive voice"
|
||||
- `docs/PATCH-NOTES-STYLE.md` does not exist and
|
||||
`.claude/docs/technical-preferences.md` has no tone, voice or style fields
|
||||
- No patch-notes template exists
|
||||
|
||||
**Input:** `/patch-notes v0.4.0`
|
||||
|
||||
**Expected behavior:**
|
||||
1. Skill reads changelog
|
||||
2. Skill detects tone guide at `design/community/tone-guide.md`
|
||||
3. Skill applies tone guidance when rewriting entries in plain language
|
||||
4. Patch notes use upbeat, active-voice phrasing
|
||||
5. Skill presents draft, asks to write, writes on approval
|
||||
1. Skill reads the changelog entry
|
||||
2. Skill checks the three tone sources and finds `design/community/tone-guide.md`
|
||||
3. Skill extracts the guide's instructions and applies them to the language and
|
||||
framing of the notes, in place of the built-in default tone
|
||||
4. Structure stays the built-in Detailed style
|
||||
5. Skill presents the notes, asks "May I write", writes on approval
|
||||
|
||||
**Assertions:**
|
||||
- [ ] Skill checks `design/` for a community or tone guidance file
|
||||
- [ ] Tone guide content influences phrasing of patch note entries
|
||||
- [ ] Output reflects active voice and upbeat tone where applicable
|
||||
- [ ] Skill notes that tone guidance was applied
|
||||
- [ ] Skill checks the tone sources in Phase 2b, including `design/community/tone-guide.md`
|
||||
- [ ] The tone guide's instructions are applied in place of the built-in default tone
|
||||
- [ ] Entries use active voice ("Fixed a crash when…", "You can now…"), not passive ("A crash was fixed")
|
||||
- [ ] Tone guidance changes wording only — the output structure is still the Detailed style
|
||||
|
||||
---
|
||||
|
||||
### Case 4: Patch Note Template Exists — Used instead of generated structure
|
||||
### Case 4: Patch Note Template Exists — Used instead of the built-in styles
|
||||
|
||||
**Fixture:**
|
||||
- `.claude/docs/templates/patch-notes-template.md` exists with a structured header format
|
||||
- `docs/CHANGELOG.md` exists with player-facing entries
|
||||
- `.claude/docs/templates/patch-notes-template.md` exists with a header block,
|
||||
the sections `## New`, `## Fixed` and `## Known Issues`, and a footer
|
||||
- `docs/CHANGELOG.md` has a `v0.4.0` entry with one new feature and one bug fix,
|
||||
both player-facing; git history holds the matching Game commits
|
||||
|
||||
**Input:** `/patch-notes v0.4.0`
|
||||
**Input:** `/patch-notes v0.4.0 --style full`
|
||||
|
||||
**Expected behavior:**
|
||||
1. Skill reads changelog and detects template exists
|
||||
2. Skill populates the template with player-facing entries
|
||||
3. Template header/footer structure is preserved in the output
|
||||
4. Skill asks "May I write" and writes on approval
|
||||
1. Skill globs `docs/patch-notes-template.md` and
|
||||
`.claude/docs/templates/patch-notes-template.md`; finds and reads the second
|
||||
2. Skill uses the template as the output structure instead of the built-in
|
||||
Brief / Detailed / Full templates — even though `--style full` was passed
|
||||
3. The new feature goes under `## New`, the fix under `## Fixed`
|
||||
4. The template's header and footer are preserved
|
||||
5. The output says the template was used and that it replaced `--style full`
|
||||
6. Skill asks "May I write" and writes on approval
|
||||
|
||||
**Assertions:**
|
||||
- [ ] Skill checks for a patch notes template before generating from scratch
|
||||
- [ ] Template structure is used when found (not overridden by default format)
|
||||
- [ ] Player-facing entries are inserted into the correct template section
|
||||
- [ ] Output note confirms template was used
|
||||
- [ ] Skill globs both template locations before generating
|
||||
- [ ] The template's structure replaces the built-in style — no "Developer Commentary" section from the Full style despite `--style full`
|
||||
- [ ] The new feature is placed under `## New` and the fix under `## Fixed`
|
||||
- [ ] The template's header and footer are preserved in the output
|
||||
- [ ] Output notes that `.claude/docs/templates/patch-notes-template.md` was used, and that it replaced the requested `--style full`
|
||||
|
||||
---
|
||||
|
||||
### Case 5: Gate Compliance — No gate; community-manager is separate
|
||||
|
||||
**Fixture:**
|
||||
- `docs/CHANGELOG.md` exists with player-facing entries
|
||||
- `review-mode.txt` contains `full`
|
||||
- `docs/CHANGELOG.md` has a `v0.4.0` entry with player-facing items; git history
|
||||
holds the matching Game commits
|
||||
- `project.yaml` sets `modes.review_mode: full`
|
||||
|
||||
**Input:** `/patch-notes v0.4.0`
|
||||
|
||||
**Expected behavior:**
|
||||
1. Skill compiles patch notes in full mode
|
||||
2. No director gate is invoked (community review is a separate, manual step)
|
||||
3. Skill runs on Haiku model — fast compilation
|
||||
4. Skill notes in output: "Consider sharing draft with community manager before publishing"
|
||||
5. Skill asks user for approval and writes on confirmation
|
||||
1. Skill compiles patch notes; no director gate is spawned (the skill resolves
|
||||
only `automation`, never `review_mode`)
|
||||
2. Skill self-reviews the notes (Phase 5), then presents them and asks to write
|
||||
3. Next steps suggest `/release-checklist` and sharing the draft with the
|
||||
community-manager for tone review before posting publicly
|
||||
4. User approves; notes are written; verdict COMPLETE
|
||||
|
||||
**Assertions:**
|
||||
- [ ] No director gate is invoked regardless of review mode
|
||||
- [ ] Output suggests (but does not require) community manager review
|
||||
- [ ] Skill proceeds directly from compilation to "May I write" prompt
|
||||
- [ ] Output suggests (but does not require) a community-manager tone review before posting
|
||||
- [ ] Skill proceeds directly from compilation and self-review to the "May I write" prompt
|
||||
- [ ] Verdict is COMPLETE
|
||||
|
||||
---
|
||||
|
||||
### Case 6: Provenance Stop — Zero Game commits
|
||||
|
||||
**Fixture:**
|
||||
- `git log --oneline -20` shows 20 commits, all touching the framework or
|
||||
tooling — subjects such as "fix: session-start hook timeout", "docs: skill
|
||||
catalog", "ci: cache the test runner" — and none names a game system in
|
||||
`design/` or the code root
|
||||
- Neither `production/releases/v0.4.0/changelog.md` nor `docs/CHANGELOG.md` exists
|
||||
|
||||
**Input:** `/patch-notes v0.4.0`
|
||||
|
||||
**Expected behavior:**
|
||||
1. Before Phase 2, skill classifies the sampled commits: 0 Game, 20 Framework /
|
||||
maintenance
|
||||
2. Skill stops with "The git history in this repo does not appear to belong to
|
||||
[game] …", describing what the commits actually cover
|
||||
3. No notes are generated and nothing is written; verdict BLOCKED
|
||||
|
||||
**Assertions:**
|
||||
- [ ] Output names the classification result — 0 of 20 commits are Game commits
|
||||
- [ ] Output contains the "does not appear to belong to" stop, not notes written from framework commits (no "Fixed an issue where …" line from a hook fix)
|
||||
- [ ] No "May I write" prompt appears and no file is written
|
||||
- [ ] Verdict is BLOCKED, not COMPLETE
|
||||
|
||||
---
|
||||
|
||||
### Case 7: No Changelog Data — No changelog and no git history
|
||||
|
||||
**Fixture:**
|
||||
- Neither `production/releases/v0.4.0/changelog.md` nor `docs/CHANGELOG.md` exists
|
||||
- The project directory is not a git repository, so `git log` returns nothing
|
||||
|
||||
**Input:** `/patch-notes v0.4.0`
|
||||
|
||||
**Expected behavior:**
|
||||
1. The sampled log is empty, so the provenance check is skipped — there is
|
||||
nothing to classify
|
||||
2. Phase 2 finds no changelog source and no git history; skill outputs "No
|
||||
changelog data found for v0.4.0. Run `/changelog v0.4.0` first to generate
|
||||
the internal changelog, then re-run `/patch-notes v0.4.0`."
|
||||
3. Nothing is generated or written; verdict BLOCKED
|
||||
|
||||
**Assertions:**
|
||||
- [ ] The "does not appear to belong to" provenance stop is NOT shown — an empty history is not a wrong history
|
||||
- [ ] Output contains "No changelog data found for v0.4.0" and recommends `/changelog v0.4.0`
|
||||
- [ ] No notes are generated, no "May I write" prompt appears, and no file is written
|
||||
- [ ] Verdict is BLOCKED
|
||||
|
||||
---
|
||||
|
||||
## Protocol Compliance
|
||||
|
||||
- [ ] Reads `docs/CHANGELOG.md` before generating patch notes
|
||||
- [ ] Filters entries to player-facing items only
|
||||
- [ ] Runs the provenance check before reading history, uses only Game commits, and says how many were used
|
||||
- [ ] Reads the version's changelog entry (`production/releases/[version]/changelog.md`, `docs/CHANGELOG.md`) before falling back to `git log`
|
||||
- [ ] Filters entries to player-facing items only, and lists the excluded internal changes for review
|
||||
- [ ] Rewrites entries in plain language without internal IDs
|
||||
- [ ] Always asks "May I write" before writing patch notes file
|
||||
- [ ] Always asks "May I write" before writing patch notes
|
||||
- [ ] No director gates are invoked
|
||||
- [ ] Runs on Haiku model tier (fast, low-cost)
|
||||
- [ ] Declares `model: sonnet` — it writes player-facing copy
|
||||
|
||||
---
|
||||
|
||||
## Coverage Notes
|
||||
|
||||
- A missing version argument (the skill asks before proceeding) is not tested.
|
||||
- The case where all changelog entries are internal (zero player-facing items)
|
||||
is not tested; behavior is an empty patch notes draft with a warning.
|
||||
- Version number parsing from the changelog header is an implementation detail
|
||||
not verified here.
|
||||
is not tested.
|
||||
- The community manager consultation noted in Case 5 is advisory; a separate
|
||||
skill or manual review handles that step.
|
||||
|
||||
Reference in New Issue
Block a user