release-notes
GitHub分析Git提交记录与PR元数据,为Intelligent Terminal生成面向用户的发布说明、更新日志及版本摘要。
Trigger Scenarios
Install
npx skills add microsoft/intelligent-terminal --skill release-notes -g -y
SKILL.md
Frontmatter
{
"name": "release-notes",
"description": "Generate user-facing release notes for Intelligent Terminal. Use when asked to write release notes, changelog, what-is-new summary, or prepare a release. Compares git commits between releases, looks up PR-linked issues and community contributors, then outputs formatted notes with \"Verbed + Impact + Scenario\" style bullets, issue references, and contributor thanks."
}
Release Notes Generator
Generate polished, user-facing release notes for Intelligent Terminal releases by analyzing git history, PR metadata, and issue links.
When to Use This Skill
- User asks to write release notes or changelog
- User asks "what's new since last release"
- User asks to prepare a release
- User asks to summarize recent commits for end-users
Step-by-Step Workflow
Phase 1: Identify the Commit Range
The base is the latest release tag (the vX.Y.Z sequence, e.g. v0.1.18) and the head is main. The range is everything between them.
- Find the latest release tag — the newest 3-part
vX.Y.Ztag that is merged intomain. The filter is what keeps this reliable: it excludes upstream Windows Terminalv1.xtags (not on this fork's history) and the legacy four-partv0.1.NNNN.0tags (stale, some point at ancient upstream commits). Do not anchor onstable— it is a cherry-picked subset that lags the release tag.git tag --list 'v*' --merged main --sort=-v:refname | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+$' | head -1
(The user may override with a specific base commit/tag; if the plaingit tag --list 'v*' --merged main | Where-Object { $_ -match '^v\d+\.\d+\.\d+$' } | Sort-Object { [version]($_ -replace '^v','') } | Select-Object -Last 1git taglist looks nothing like the above — e.g. onlyv1.xshows up — the--merged mainfilter is being skipped.) - List all commits from the base tag to
main(replace$BASE_TAGwith the tag from step 1):git log --oneline --reverse "$BASE_TAG"..main - Extract PR numbers from commit messages (pattern:
(#NNN)).
The
0.1.xxxx.0build number is injected by CI at release time; the human-facing version is thevX.Y.Ztag sequence.
Phase 2: Enrich with PR Metadata
For each PR number, look up linked issues and author info (replace PR_NUMBER and OWNER/REPO):
gh pr view PR_NUMBER --repo OWNER/REPO --json number,title,body,author,closingIssuesReferences
Use
OWNER/REPO=microsoft/intelligent-terminalfor this repo's own PRs — they live on the canonical repo even when you're working from a fork/clone — ormicrosoft/terminalfor upstream#20xxxPRs.
To batch this lookup across many PRs at once, run scripts/Get-PrMetadata.ps1 with a list of PR numbers — it reports linked issues and flags community contributors (authors not in references/core-team.md).
Collect:
- PR → Issue mapping: Which PRs fix/close GitHub issues
- Community contributors: Authors NOT in the core team list
Core Team (do NOT thank as community contributors)
See core-team.md for the current list.
Phase 3: Write Release Notes
Use the release notes template and follow these rules:
Formatting Rules
-
Use numbered lists (
1.,2.,3.) within every section — matches the house style shown inreferences/example-release-notes.md, not bullet points. -
Every item uses "Verbed + Impact + Scenario" — a human must understand what changed and why it matters to them
- ✅
**Press F5 to refresh the session list.** Re-scans history on demand so sessions that appeared after launch show up without restarting. #344 - ❌
Fixed bug #344(no impact or scenario) - ❌
emit connection_state:closed on UI-initiated pane/tab close(developer jargon)
- ✅
-
Every item ends with its PR number(s) — a space then
#PRafter the trailing period (e.g.… without restarting. #344or… in strict-mode shells. #340).- Use the PR number as the primary reference (the shipped notes are PR-centric).
- In the 💜 Community section you may add the linked issue too, e.g.
(#366, closes #351). - Group related items that share user impact into one entry with multiple numbers (e.g.
#305, #365).
-
Open with a metadata blockquote header, as shown in
references/example-release-notes.md: the base release tag + commit + build, the headmaincommit, the new-PR count, the CI-injects-build-number note, and the "base is the tag, notstable" note. -
Frame the notes with a one-paragraph plain-language intro (the release's headline theme) after the header, and a closing call-to-action inviting users to file issues.
-
Omit purely internal changes — CI fixes, code refactors, dev docs, test-only changes, localization bot updates — unless they have direct user-visible impact. (Prior releases sometimes collect these under a
## Developmentsection instead of omitting them; follow the maintainer's preference for the release at hand.) -
Avoid detailed security disclosures in public release notes — fold security-related stability fixes into the Bug Fixes section rather than calling them out as security issues, and coordinate any security-sensitive wording with maintainers per SECURITY.md
-
Thank community contributors in a 💜 Community section with GitHub profile links:
1. [@username](https://github.com/username) (Display Name) — what they contributed. (#PR, closes #issue)
Section Structure
Open with the metadata blockquote header and the intro paragraph, then use these sections in order:
## ✨ New Features— new capabilities users can use## 🔧 Improvements— enhancements to existing features## 🐛 Bug Fixes— things that were broken and are now fixed## 💜 Community— external contributor thanks## 🚀 Top 5 Elevator-Pitch Points— the most compelling highlights for social media / announcements
Close with the call-to-action paragraph.
Phase 4: Output
- Draft into
Generated Files/release-notes-vX.Y.Z.md— this folder is gitignored, so the working draft stays untracked while you iterate and get user sign-off. - Present the full notes to the user for review.
- Also list the top 5 elevator-pitch points separately.
- Publish (only once approved). Copy the finalized notes to
doc/release-notes/vX.Y.Z.mdand commit them (create thedoc/release-notes/folder if it doesn't exist yet — this is the intended home for published release notes). Follow the format inreferences/example-release-notes.md. This committed file is the source of truth for the version — do not commit theGenerated Files/draft.
Gotchas
- Avoid a dedicated 🔒 Security section — prefer folding security-related stability improvements into Bug Fixes rather than publicly detailing security issues; see SECURITY.md for vulnerability handling and coordinate sensitive wording with maintainers.
- Upstream Windows Terminal PRs (#20xxx numbers) should be looked up on
microsoft/terminal, notmicrosoft/intelligent-terminal. - The "Verbed + Impact + Scenario" format is non-negotiable — every single bullet must follow it. "Fixed X" alone is not enough; you must explain the user impact.
- Some commits are cherry-picks from upstream — check both repos when looking up PRs.
- Group related commits — if 3 PRs all improve the FRE, combine into one bullet with multiple issue numbers rather than 3 separate bullets.
References
Version History
- abddd44 Current 2026-07-23 04:38


