Skip to content

Commit edc34d3

Browse files
authored
Added a new skill file that can be used to create monthly releases. (#2573)
1 parent 0543879 commit edc34d3

3 files changed

Lines changed: 162 additions & 0 deletions

File tree

Lines changed: 158 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,158 @@
1+
---
2+
name: gum-monthly-release
3+
description: Draft an end-of-month Gum release notes markdown file from PRs and commits since the last release. Produces a draft in /temp/ matching the established release-notes style (Breaking Changes, Biggest Changes, Gum Tool, Gum Runtimes, Tutorials and Templates, Full Changelog), with image placeholders and an open-questions block at the bottom. The user manually triggers this skill near the end of each month and iterates on the draft afterward.
4+
disable-model-invocation: true
5+
---
6+
7+
Invoking coder agent to draft the monthly Gum release notes.
8+
9+
# Ask first, don't guess
10+
11+
This skill is a **collaboration**. The user has explicitly said: when anything is unclear at any point — categorization, intent of a sparse commit, whether a change cross-cuts Tool and Runtimes, which features deserve the spotlight — **stop and ask**. Do not invent user-impact descriptions from a one-line commit message. When the diff is genuinely ambiguous, surface the ambiguity rather than papering over it. The point of this skill is to save the user keystrokes, not to silently misrepresent the release.
12+
13+
Anything you can't resolve mid-draft, capture in the `## Open Questions` block at the bottom of the markdown file. The user will work through that block with you after the file is generated.
14+
15+
## Step 1: Front-loaded questions
16+
17+
Before doing any work, ask the user (in a single message, as a numbered list — they can answer all at once):
18+
19+
1. **Release tag / date.** What's the release tag name? (e.g. `Release_April_29_2026`) The skill uses this to name the output file and to draft the Full Changelog placeholder.
20+
2. **Previous-release boundary.** What should I diff against? The user may give a tag (`PreRelease_March_26_2026`), a commit hash, a date, or a `compare/...` URL. If they have no preference, propose the most recent tag from `gh release list --repo vchelaru/Gum --limit 5` and ask them to confirm.
21+
3. **Breaking-changes migration doc URL.** Is there one for this month? (e.g. `https://docs.flatredball.com/gum/gum-tool/upgrading/migrating-to-2026-april`) If none, the Breaking Changes section is omitted.
22+
4. **Primary author for `(thanks)` exclusion.** Who is the release operator whose PRs *don't* get a thank-you? Default `vchelaru`. Confirm or override.
23+
5. **Pre-featured Biggest Changes.** Anything they already know they want featured before you make your own picks?
24+
25+
Wait for answers before proceeding. If they answer some but not others, ask the rest.
26+
27+
## Step 2: Gather PRs and commits
28+
29+
With the boundary established, gather all merged PRs and direct-to-`main` commits since that point. Use the GitHub CLI:
30+
31+
```bash
32+
# PRs merged since boundary date (replace YYYY-MM-DD)
33+
gh pr list --repo vchelaru/Gum --state merged --search "merged:>=YYYY-MM-DD" --limit 200 --json number,title,author,mergedAt,body,labels,files
34+
35+
# For details on a specific PR (description + commits)
36+
gh pr view <number> --repo vchelaru/Gum --json title,body,commits,author,files
37+
38+
# For direct-to-main commits with no PR
39+
git log --no-merges <prev-tag>..HEAD --format="%h %s"
40+
```
41+
42+
Look at:
43+
- **PR title** — usually the headline
44+
- **PR body** — often has user impact already written
45+
- **Individual commits in the PR** — supply detail when titles are terse
46+
- **Files touched** — used for categorization (Tool vs Runtimes)
47+
- **Author** — for `(thanks @author)` attribution
48+
49+
If a commit message is sparse and intent is genuinely unclear from the diff, **add it to the Open Questions block** rather than guessing.
50+
51+
## Step 3: Translate into user-impact bullets
52+
53+
The release-notes style is **user-impact-first, not mechanical**. The reader is a Gum customer trying to decide whether this release matters to them and what they'll see differently. Use the March 28, 2026 release as a tone reference:
54+
55+
```bash
56+
gh release view Release_March_28_2026 --repo vchelaru/Gum
57+
```
58+
59+
Examples of the translation:
60+
- Mechanical: *"Refactored TextRuntime font loading."* → User-impact: *"Better error messages when attempting and failing to load fonts due to Gum not being initialized."*
61+
- Mechanical: *"Added IsTilingMiddleSections property to NineSlice."* → User-impact: *"NineSlices can now optionally tile the middle section sprites in tool and at runtime."*
62+
63+
Keep bullets short (one line) unless a feature genuinely needs more. Link to docs (`https://docs.flatredball.com/gum/...`) when relevant.
64+
65+
## Step 4: Categorize
66+
67+
Sections, in order:
68+
69+
1. **Breaking Changes** — bullets + a "For more information... see <migration-doc-url>" line. Omit the section entirely if the user said no breaking changes this month.
70+
2. **Biggest Changes** — see Step 5.
71+
3. **Gum Tool** — anything affecting the Gum WPF tool (paths under `Tool/`, `Gum/`, plugins, tool-side projects).
72+
4. **Gum Runtimes** — anything affecting shipped runtime libraries (`MonoGameGum`, `KniGum`, `FnaGum`, `SkiaGum`, `RaylibGum`, `GumCommon`'s runtime-facing pieces).
73+
5. **Tutorials and Templates** — sample/template/tutorial changes. Often empty — **omit if empty**.
74+
6. **Full Changelog** — placeholder line (see Step 7).
75+
76+
**Cross-cutting changes (e.g. `GumCommon` changes that affect both sides): duplicate the bullet in both Tool and Runtimes sections.** The user explicitly wants this — customers only read the section that applies to them and shouldn't have to guess whether a change in the other section affects them.
77+
78+
When you can't tell which section a change belongs to, **ask** or add it to Open Questions.
79+
80+
**Attribution:** every PR not authored by the primary author gets ` (thanks @author)` appended. Skip bot accounts: `claude`, `claude-code`, `dependabot`, `dependabot[bot]`, `github-actions`, `github-actions[bot]`, and any other obviously-automated handle.
81+
82+
## Step 5: Biggest Changes — Top 4 + candidates
83+
84+
The user picks the spotlight features by gut feel: coolest / most impactful for end users. Your job is to **propose**, not decide.
85+
86+
- Choose **the Top 4** from the gathered PRs/commits. Lean toward: net-new features (new controls, new variables, new tools), high-visibility UX changes, cross-platform additions, and things users would talk about. Lean away from: bug fixes, refactors, internal improvements.
87+
- Identify **up to 4 additional candidates** — also strong but didn't make your top 4.
88+
- Place the Top 4 in the **Biggest Changes** section in the markdown, each with:
89+
- `### <Feature name>` heading
90+
- 1–3 sentence user-impact description
91+
- Doc link if available
92+
- `PLACEHOLDER!!!! IMAGE/GIF for <feature name>` line where the image goes
93+
- Put the additional candidates in the **Open Questions** block at the bottom (see Step 8) so the user can swap or re-rank.
94+
95+
If any of the user's pre-featured items from Step 1 question 5 weren't in your Top 4, **always include them** in the Top 4 and bump one of yours to the candidates list.
96+
97+
## Step 6: Image placeholders
98+
99+
Use a **plain-text loud placeholder**, not an HTML comment. The user reports HTML comments sometimes don't render and they want the placeholders to be impossible to miss.
100+
101+
```
102+
PLACEHOLDER!!!! IMAGE/GIF for Hot Reload Support
103+
```
104+
105+
Place these on their own line where each image should go in the Biggest Changes section.
106+
107+
## Step 7: Full Changelog placeholder
108+
109+
Place this at the very bottom of the file, above the Open Questions block:
110+
111+
```
112+
PLACEHOLDER!!!! Full Changelog link
113+
```
114+
115+
The user fills this in after they cut the tag.
116+
117+
## Step 8: Open Questions block
118+
119+
Append a section at the bottom titled `## Open Questions`. It is **not** part of the release notes — the user will delete it before publishing. Include:
120+
121+
- **Biggest Changes ranking** — your proposed Top 4 with one-line rationale, plus the additional candidates with one-line rationale, in a way that lets the user re-rank by reordering lines.
122+
- **Categorization uncertainties** — any PR/commit you weren't sure where to file.
123+
- **Sparse/unclear commits** — any commit whose intent you couldn't confidently translate.
124+
- **Anything else** flagged during drafting.
125+
126+
Format as a numbered list so the user can answer "1. swap candidate B into Top 4" etc.
127+
128+
## Step 9: Write the file and open it
129+
130+
Write to `temp/release-notes-YYYY-MM-DD.md` at the repo root, where the date is parsed from the release tag from Step 1 question 1.
131+
132+
After writing, open the file:
133+
134+
```bash
135+
start temp/release-notes-YYYY-MM-DD.md
136+
```
137+
138+
Confirm the path in chat so the user can find it again.
139+
140+
## Step 10: Walk through Open Questions
141+
142+
After the file is open, work through the Open Questions block with the user **one question at a time**. As each is resolved, edit the file directly (move bullets between sections, swap Biggest Changes entries, fill in clarified user-impact descriptions). Once all are resolved, delete the Open Questions block.
143+
144+
The skill is done when the markdown file contains only the release notes — no Open Questions — and the user is satisfied.
145+
146+
## Out of scope
147+
148+
This skill only writes the markdown draft. It does **not**:
149+
- Bump NuGet versions (see the `bump-nuget-version` skill)
150+
- Create the git tag or trigger the GitHub Actions release workflow
151+
- Draft the breaking-changes migration doc (separate skill, future)
152+
- Run pre-release flows
153+
154+
## Iterating on the skill itself
155+
156+
Expect this skill to evolve. Each release will surface new edge cases or shortcuts (e.g. labels the user starts applying to PRs, conventions in PR titles). When the user gives feedback during a release run that would generalize, **suggest updating this SKILL.md** at the end of the run.
157+
158+
$ARGUMENTS

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,3 +47,7 @@ Runtimes/GumShapes/XnbTest/
4747

4848
/.claude/designs
4949
*.setj
50+
51+
# Temp folder for draft/scratch files (e.g. release notes drafts)
52+
/temp/*
53+
!/temp/.gitkeep

temp/.gitkeep

Whitespace-only changes.

0 commit comments

Comments
 (0)