agentleFS
cenconq25cenconq25/claude-code-app-studio/.claude/skills/patch-notes/SKILL.md

patch-notes

Skill40 starsChanged 7 months agoMITView on GitHub

Generate user-facing patch notes from git history, sprint data, and the internal changelog. Translates engineering language into clear, store-appropriate user communication. Respects App Store / Play Store character limits.

12 other projects use a version of this.

Adopted by

Most recently taken up by

The file

We split this skill into the rules it gives an agent

9 rules. 0 are common, 9 are distinctive, and 0 are very specific to this project.

  • 0

    Common

    Most of the 11 edited versions we read keep these.

  • 9

    Distinctive

    This author's own choices. Worth a look.

  • 0

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    If no internal changelog exists, read git log for the version window and any associated story / bug records.

    line 26
  2. Distinctive:

    Keep Features, Improvements, Fixes, Security in user-friendly form.

    line 53
  3. Distinctive:

    Avoid passive voice unless required by tone.

    line 62
  4. Distinctive:

    Avoid "we fixed a bug where..." — be specific.

    line 63
  5. Distinctive:

    Keep entries punchy — one line per change unless context truly helps.

    line 65
  6. Distinctive:

    If target locales include non-English markets:

    line 128
  7. Distinctive:

    Write source files to:

    line 131
  8. Distinctive:

    Ask before each write:

    line 150
  9. Distinctive:

    If localized files were generated, ask per locale.

    line 156

“Common” is measured: kept by at least 6 in 10 of the 11 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Patch Notes

A focused twin of /changelog. Produces only the user-facing, store-ready patch notes for a release. Haiku tier — this is formatting and rewording, not synthesis.


Phase 1: Locate Inputs

Parse --version=<v>. Default: most recent unreleased tag.

Read in parallel:

  • production/releases/changelog-internal-[version].md (preferred source).
  • If no internal changelog exists, read git log for the version window and any associated story / bug records.
  • .claude/docs/technical-preferences.md for target locales.

Phase 2: Pick the Tone

Parse --tone. If not given, propose options via AskUserQuestion:

  • warm — friendly, first-person plural ("We've added...").
  • neutral — direct, third-person ("[App] now supports Apple Pay").
  • formal — precise, legal-friendly ("Version [N] introduces support for Apple Pay").

Default: warm.

Apply the tone to every line consistently. Mixing tones is a smell.


Phase 3: Distill the Internal Changelog

For each entry in the internal source:

  • Drop Internal / Refactor / Reverted entries unless user-visible.
  • Drop test-only changes.
  • Keep Features, Improvements, Fixes, Security in user-friendly form.

Apply rewriting rules:

  • Replace developer terms with user terms: "reducer" -> drop; "background fetch" -> "while the app is closed"; "Hermes upgrade" -> "faster startup".
  • Lead with user benefit: "Cold start improvements" -> "App opens faster".
  • Avoid passive voice unless required by tone.
  • Avoid "we fixed a bug where..." — be specific. "Sign-in no longer fails when switching from Wi-Fi to cellular."
  • Keep entries punchy — one line per change unless context truly helps.

Phase 4: Compose Long Form

# What's New in [App] [version]

## New
- [bullet]

## Improvements
- [bullet]

## Fixes
- [bullet]

## Notes
[1-3 lines of plain language about anything users should know — new
permission, etc. Optional.]

Thanks for using [App]. Got feedback? [contact].

Show the result. Ask for tone adjustment if needed.


Phase 5: Compose Short Form (Store-Specific)

App Store What's New (4000 chars)

Allowed to be the long-form essentially. Trim if over 4000 chars.

Play Store What's New (500 chars)

This is the hard one. Strategy:

  1. Lead with the headline feature in one sentence.
  2. Mention up to two other notable changes in one sentence.
  3. Mention "stability and bug fixes" if there are fixes but they don't need names.
  4. Stop.

Aim for 300-450 chars to leave room for localized expansion (some languages run longer).

Example:

We've added Apple Pay at checkout and a dark mode for the home feed.
The app now opens faster and scrolls more smoothly. Plus stability
fixes including a more reliable sign-in.

Render character count alongside.


Phase 6: Localization

If target locales include non-English markets:

  • Tag the long-form and short-form English strings as the source.
  • Write source files to:
    • production/releases/whats-new-[version]-en-app-store.md
    • production/releases/whats-new-[version]-en-play-store.md
  • For each target locale, check whether:
    • A translation vendor pipeline is configured -> tag as # UNTRANSLATED — for vendor.
    • The previous release used machine translation -> propose same approach.
    • The team translates manually -> tag for localization-lead review.

For Play Store, remind the user: each locale has its own 500-char limit, and verbose translations may overflow. Generate per-locale guidance: "Spanish typically runs 110-115% of English length — consider a tighter source string."


Phase 7: Save

Ask before each write:

  • production/releases/whats-new-[version]-en-long.md
  • production/releases/whats-new-[version]-en-app-store.md
  • production/releases/whats-new-[version]-en-play-store.md

If localized files were generated, ask per locale.


Phase 8: Update State

Append to production/session-state/active.md:

## Patch Notes — [date]
- Version: [version]
- Tone: [tone]
- Long form: [path]
- App Store: [path] ([N] chars)
- Play Store: [path] ([N] chars)
- Locales pending: [list]
- Next: localization handoff or paste into store consoles

Quality Gates / PASS-FAIL

  • PASS — long form covers every user-visible change; short form fits within store limits with margin; tone is consistent; no engineering jargon leaked through.
  • FAIL — short form over limit, internal jargon present ("reducer", "Hermes", "race condition" without user phrasing), or any reference to internal IDs (BUG-NN, STORY-NN).

Examples

Example 1 — v1.3.0 with three features and two fixes: Long form: 6 bullets across New / Improvements / Fixes. App Store: fits. Play Store: 412 chars. Tone warm. 3 locales tagged for translation.

Example 2 — v1.2.1 hotfix: Single bullet: "Fixed an issue that could cause sign-in to fail when switching networks." Long form 1 line, App Store 1 line, Play Store 86 chars.


Next Steps

  • Paste short form into App Store Connect / Play Console.
  • For locales, run vendor pipeline.
  • Refer to /release-checklist to confirm metadata is uploaded.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.