Release Notes Generator
This skill generates release notes for ORE Studio by combining the sprint backlog with every pull request merged since the previous release tag, then drives the tagging and draft GitHub-release publication.
When to Use This Skill
Use this skill whenever the user asks to close a sprint / cut a release — i.e.
to produce release notes for the latest sprint under doc/agile/v0/ and push
a draft GitHub release.
End-to-End Process
The full flow has five steps; each one is described in its own section below.
- Prepare a feature branch from
origin/main, e.g.feature/release-automation. - Collect PR data for every PR merged since the previous
v*tag usingbuild/scripts/collect_release_pr_data.py. Output goes totmp/release_pr_data/(gitignored). - Read the sprint backlog at
doc/agile/v0/sprint_backlog_<N>.org. - Generate the release notes by combining the PR overviews with the sprint
backlog's DONE / IN-PROGRESS / BLOCKED / POSTPONED stories, following the
template in Release Notes Template. Save to
doc/agile/v0/sprint_backlog_<N>_release_notes.md. - Tag main and open a draft GitHub release (see Tag and Release below). The release is always created in draft state so a human can review and amend before publishing.
Collecting PR Data
Script: build/scripts/collect_release_pr_data.py.
- Finds the most recent
v*tag viagit tag --sort-v:refname= (can be overridden with--since-tag v0.0.N). - Uses the tag's commit ISO date as the lower bound for
gh pr list --search "is:pr is:merged base:main merged:>=<date>". - For each PR it calls
gh pr view --json number,title,author,mergedAt,url,body,labels,baseRefName,comments,reviewsand extracts "overviews" from bot-authored comments/reviews. Recognised authors includegemini-code-assist,claude[bot],claude-code[bot],anthropic-claude[bot](seeOVERVIEW_AUTHORSin the script). It also falls back to heuristic markers (## Summary of Changes,## Code Review,Claude's review, etc.) so new review bots will still be picked up. - Writes
tmp/release_pr_data/pr_<NNNNN>.jsonper PR plus asummary.jsonindex with counts and metadata.
Run it from the project root:
python3 build/scripts/collect_release_pr_data.py
Requires gh CLI to be authenticated. Add --since-tag v0.0.N to override
the detected previous release.
Combining PR Data with the Sprint Backlog
When drafting notes:
- The sprint backlog is the source of truth for the sprint mission,
DONE=/=IN-PROGRESS=/=BLOCKED=/=POSTPONEDstories, and thesprint_summaryclocktable (time breakdown). - The PR overviews are the source of truth for what actually shipped. In practice backlogs may be sparser than the merged work; the PRs cover the rest.
- Group related PRs thematically (workflow, ORE integration, market data, trading/instruments, Qt, services, build/portability, etc.). Each theme should become a sub-section under Key Improvements.
- Clock totals: if
sprint_summaryreads0:00it has not been refreshed — flag this explicitly in the Time Summary section rather than inventing numbers. Always include the PR count and dominant components as a fallback.
Tag and Release
After the notes file is committed to main (via PR), perform:
# 1. Create a signed tag on the release commit git tag -s v0.0.<N> -m "Sprint <N>" git push origin v0.0.<N> # 2. Open a draft GitHub release with the generated notes gh release create v0.0.<N> \ --draft \ --title "Sprint <N>" \ --notes-file doc/agile/v0/sprint_backlog_<N>_release_notes.md
The release remains in draft state so a human can review, add screenshots or binaries, and publish it.
Release Notes Template
Follow the following template for the release notes, replacing with actual content from sprint backlog and PR overviews.
# **ProjectName Sprint N – Release Notes** *Month Year* A brief 1–2 sentence summary of the sprint’s primary focus and achievements. --- ## ✅ **Highlights** - Use bullet points to list **3–5 major accomplishments**. - Focus on high-impact features, architectural decisions, or process improvements. - Keep each item short and outcome-oriented. ## 🛠️ **Key Improvements** Organize improvements into **thematic sections** (e.g., Architecture, UI, Testing, Infrastructure). - Use bold section headers (e.g., `### **Authentication & Security**`). - Under each, list specific changes as bullet points. - Include technical details where relevant (e.g., libraries used, patterns applied). - Group related stories logically; avoid listing every task. ## ⚠️ **Known Issues & Postponed** - List **BLOCKED**, **POSTPONED**, or unresolved issues. - For each, provide a **short reason** or status (e.g., "Deferred to next sprint", "Waiting on upstream fix"). - Do not include resolved or cancelled items. ## 📊 **Time Summary** - Show total effort: `**Total effort**: Xh Ym` - Show effort distribution: `**Code**: A% | **Infra**: B% | **Agile/Analysis/Doc**: C%` - List top time-consuming tasks with durations (e.g., `Top tasks: Task A (8h), Task B (6h)`) --- *Next sprint: One sentence summarizing the upcoming sprint mission or focus.* ---
Requirements:
- Use clean Markdown formatting with consistent emoji (✅ 🛠️ ⚠️ 📊).
- Keep the entire document under 1 page in length.
- Use bold for emphasis and `code` for filenames, commands, or libraries.
- Do not invent details — only include information present in the input.
- Match the tone: professional, factual, and developer-focused.
- Do not include headers, footers, or metadata outside the template.
- Replace
ProjectName,Sprint N,Month Year, and all content with actual values from the sprint data.