Player-facing patch notes from git history and changelogs. Translates developer language into player communication.
复制下面这句话,粘贴给 Claude Code、Codex、Cursor 等 AI 编程工具,它会读取安装说明并在你确认后完成安装。
请阅读 https://ai.atlankj.com/install/asset/gh-patch-notes-7dd7ab7ec600 ,按照其中的说明把「patch-notes」安装到你(当前 AI 工具)中。执行前先告诉我将运行的命令和写入的位置,等我确认。
查看 AI 将读取的安装说明正在读取 GitHub 原文…
内容来自 GitHub 原始文件,由原作者维护。在 GitHub 查看
!bash "${CLAUDE_SKILL_DIR}/../../hooks/yaml-helper.sh" resolve_config --keys automation
Automation mode: Resolve modes.automation (project.local.yaml →
project.yaml → default collaborative). Every AskUserQuestion call and
every file write follows .claude/docs/automation-modes.md
(collaborative asks always · guided major-only · autonomous logs and proceeds;
automation_always_ask categories always prompt).
Confirm the history you are about to read belongs to THIS game. Run this before Phase 2 and stop if it fails.
git log --oneline -20.Filter per commit; do not stop on a repo that merely contains maintenance work. Every project built on this framework accumulates commits touching hooks, CI and skills — the game repo is the framework repo. An earlier version of this check listed "subjects naming the framework, its skills, hooks, agents or test plan" as a hard STOP, which fires on virtually every real project and contradicted its own step 2 whenever a history was mostly the game's. The danger was never that such commits exist; it is that they get rendered as player-facing copy. Excluding them addresses that exactly, and a repo-level stop does not.
Corroborate before you proceed, cheaply: the Game commits should name systems
that appear in design/ and src/. If they name a product those directories
never mention, that is the real wrong-history signal — stop.
If no commit in the range is this game's, say so and stop:
"The git history in this repo does not appear to belong to [game]. The recent commits describe [what they actually describe]. I cannot generate release notes from it — point me at the right history, or supply the change list directly."
Why this is a hard stop, not a warning. This exact failure is real, not hypothetical: a batch of framework-internal commits produced player-facing copy reading "Fixed an issue where progress from your last session could be lost on launch" — a session-hook timeout rendered as a gameplay fix for a game with no save system. It was fluent, plausible, and entirely false. A reader cannot tell the difference; only this check can.
version: the release version to generate notes for (e.g., 1.2.0)--style: output style — brief (bullet points), detailed (with context), full (with developer commentary). Default: detailed.If no version is provided, ask the user before proceeding.
production/releases/[version]/changelog.md if it existsdocs/CHANGELOG.md for the relevant version entrygit log between the previous release tag and current tag/HEAD as a fallbackproduction/sprints/ for contextdesign/balance/If no changelog data is available (neither production/releases/[version]/changelog.md
nor a docs/CHANGELOG.md entry for this version exists, and git log is empty or unavailable):
"No changelog data found for [version]. Run
/changelog [version]first to generate the internal changelog, then re-run/patch-notes [version]."
Verdict: BLOCKED — stop here without generating notes.
Tone guide detection — before drafting notes, check for writing style guidance:
.claude/docs/technical-preferences.md for any "tone", "voice", or "style"
fields or sections.docs/PATCH-NOTES-STYLE.md if it exists.design/community/tone-guide.md if it exists.Template detection — check whether a patch notes template exists:
docs/patch-notes-template.md and .claude/docs/templates/patch-notes-template.md.Categorize all changes into player-facing categories:
Translate developer language to player language:
# Patch [Version] — [Title]
**New**
- [Feature 1]
- [Feature 2]
**Changes**
- [Balance/mechanic change with before → after values]
**Fixes**
- [Bug fix 1]
- [Bug fix 2]
**Known Issues**
- [Issue 1]
# Patch [Version] — [Title]
*[Date]*
## Highlights
[1-2 sentence summary of the most exciting changes]
## New Content
### [Feature Name]
[2-3 sentences describing the feature and why players should be excited]
## Gameplay Changes
### Balance
| Change | Before | After | Reason |
| ---- | ---- | ---- | ---- |
| [Item/ability] | [old value] | [new value] | [brief rationale] |
### Mechanics
- **[Change]**: [explanation of what changed and why]
## Quality of Life
- [Improvement with context]
## Bug Fixes
### Combat
- Fixed [description of what players experienced]
### UI
- Fixed [description]
### Networking
- Fixed [description]
## Performance
- [Improvement players will notice]
## Known Issues
- [Issue and workaround if available]
Includes everything from Detailed, plus:
## Developer Commentary
### [Topic]
> [Developer insight into a major change — why it was made, what was considered,
> what the team learned. Written in first-person team voice.]
Check the generated notes for:
Present the completed patch notes to the user along with: a count of changes by category, and any internal changes that were excluded (for review).
Ask: "May I write these patch notes to docs/patch-notes/[version].md?"
If yes, write the file to docs/patch-notes/[version].md, creating the directory
if needed. Also write to production/releases/[version]/patch-notes.md as the
internal archive copy.
Verdict: COMPLETE — patch notes generated and saved.
/release-checklist to verify all other release gates are met before publishing.