@blundergoat/goat-flow
Version:
AI coding agent harness and local dashboard for Claude Code, OpenAI Codex, Google Antigravity, and GitHub Copilot - setup audits, guardrails, structured skills, deny hooks, and persistent learning loops.
141 lines (97 loc) • 6.3 kB
Markdown
---
goat-flow-reference-version: "1.12.1"
---
# Release Notes
Use this when writing a user-facing release announcement: GitHub release body, app-store notes, email, in-app "what's new", or short social copy. For the durable in-repo change ledger, load [`changelog.md`](./changelog.md) first.
## Availability Check
This is a discipline reference, not a runnable tool. Load it when:
- Drafting release notes or a release announcement.
- Turning a changelog into user-facing highlights.
- Reviewing release notes before publish.
- Answering "what's new in vX.Y.Z?"
No availability command applies. If the project has draft-shape, link, or version checks, run them; they augment the **Verification Gate** and do not replace it.
## Intent
You are a coding agent producing or reviewing a release artifact. Your job is to turn verified changelog evidence into the shortest useful user-facing release notes.
A reader opens release notes to decide: should I upgrade, what matters to me, and what might break? They may never read the changelog.
Agents default verbose. Counter that deliberately: draft the accurate version, then cut about half the words. Preserve headline impact, breaking changes, upgrade steps, measurements, and links; remove launch-copy, duplicated changelog detail, and implementation trivia.
## Source Chain
Release notes are derived, not invented:
```text
diff -> changelog -> release notes -> shorter surfaces
```
Rules:
- Fix the changelog first if it is missing a shipped change.
- Every release-note claim must trace to the changelog or a verified changed surface.
- If a claim is internal-only, cut it.
- If the release notes contradict the changelog, the changelog wins.
- Do not summarize from memory.
The useful signal order mirrors changelog work: PRs/issues, tests, changed product surfaces, diff, config/dependency changes, then commit messages last.
## Default Output
If the user does not name a surface, write a concise GitHub release body: title, one-sentence headline, 3-5 highlights, breaking changes if any, and upgrade instructions. Do not write a blog-style introduction unless asked.
## Selection Rules
- Lead with the change a stranger would care about.
- Group by user benefit, not commit, file, or category.
- Keep only material user-facing changes.
- Include all breaking changes, even if the short surface has room for little else.
- Skip refactors, tests, CI, dependency bumps, and internal cleanup unless users see the result.
- If there are many changes, make a highlight reel and put the rest under "Other notable changes".
Theme names must help a user decide whether to read further. Good: "Windows install fixes", "Faster cold start", "Stricter upload validation". Bad: "Refactoring", "Various fixes", "Code quality".
## Writing Rules
- Write for users, not implementers.
- Lead with effect, then add mechanism only when it helps trust or action.
- Use plain English and short sentences.
- Prefer bullets over paragraphs.
- Say "Fixed duplicate search results", not "Refactored search reconciliation".
- Say "Search results now load 3x faster", not "Improved performance".
- Do not use "excited to announce", "game-changing", "powerful", or other launch-copy.
- Do not name internal classes, files, or subsystems for end-user surfaces.
Bad: "Refactored auth middleware." Good: "**Single sign-on works across subdomains.** Users no longer get logged out between app subdomains."
## Breaking Changes
Breaking changes get top billing. For each one:
1. Lead with user impact.
2. Show before/after command, config, or code when useful.
3. Estimate migration effort if non-trivial.
4. Link to migration tooling or docs.
5. Reference prior deprecation if there was one.
If the changelog has `BREAKING:` and release notes omit it, the notes are unsafe to publish.
## Surface Rules
Default shapes: GitHub release = headline, 3-5 highlights, breaks, upgrade; app/in-app = headline plus 1-3 bullets; email = 3-5 bullets plus link; social = one headline plus link; blog = only when asked.
Tailor depth, not facts. Short surfaces may omit secondary changes, but must not hide breaking changes or contradict the full notes.
## Compression Pass
Before publishing:
1. Delete launch-copy and throat-clearing.
2. Delete repeated changelog detail.
3. Delete implementation trivia.
4. Split long sentences; keep one idea per sentence.
5. Keep non-breaking highlights to one sentence unless a second sentence carries measurement, migration note, or user-visible caveat.
The default release body should be about half the first agent draft.
## Antipatterns
- **Changelog dump:** no selection or framing.
- **Marketing-only notes:** enthusiasm without facts.
- **Missing breaks:** breaking change buried or omitted.
- **Wrong audience:** internal subsystem names in user-facing copy.
- **Vague upgrade:** "update and enjoy".
- **Future-vague:** "coming soon" in notes for what shipped.
- **Acknowledgement padding:** names that do not help the release reader.
- **Agent launch-copy bloat:** wrapper prose that hides the user impact.
## Verification Gate
Before publishing:
1. Every claim traces to the changelog or verified diff evidence.
2. Every breaking change appears clearly and early.
3. The headline passes "would a stranger care?"
4. No marketing without measurements.
5. No internal jargon on end-user surfaces.
6. Multi-surface variants do not contradict each other.
7. Upgrade instructions are concrete.
8. Version, date, and install/update location are present.
9. A reader can decide whether to upgrade without reading commit history.
10. The compression pass ran.
## Troubleshooting
- **Thin changelog:** fix it first; release notes from a weak changelog become guesswork.
- **Too long or polished:** cut about half before changing facts.
- **Different headline requested:** use user impact, not internal implementation framing.
- **Missing changelog entry:** add it first, then write the release-note line.
## Related References
- [`changelog.md`](./changelog.md) - source-of-truth release ledger.
- Project's prior release announcements - match voice and structure before inventing a new one.
- Project instruction files (`CLAUDE.md`, `AGENTS.md`, `.github/copilot-instructions.md`) may declare release-note policy.