Generate user-facing TestFlight build notes from git history. Use when asked for TestFlight notes, build notes, release notes, or a summary of changes since a timeframe, tag, or commit.
Generate concise, tester-friendly TestFlight build notes from git history.
This skill is designed to work in Codex CLI, Codex Desktop, and Copilot CLI.
Prefer one of these user inputs:
last 10 days, since 2 weeks ago)abc1234, build-151)If the user does not provide one, use this fallback order:
HEADState the assumption before output.
Use one of:
# By timeframe
git --no-pager log --oneline --since="<natural language date>"
# From commit or tag
git --no-pager log --oneline <START>..HEAD
# Since latest tag fallback (with no-tags handling)
latest_tag="$(git describe --tags --abbrev=0 2>/dev/null || true)"
if [[ -n "$latest_tag" ]]; then
git --no-pager log --oneline "$latest_tag"..HEAD
else
git --no-pager log --oneline --since="14 days ago"
fi
Collect structured commit data for the selected range:
git --no-pager log \
--pretty=format:"%H%x09%h%x09%s%x09%b%x09%an%x09%ad" \
--date=short \
<RANGE>
Then inspect full bodies for candidate commits:
git --no-pager show <SHA> --format="%B" --no-patch
Always inspect merge/squash commit bodies in range; they often contain user-facing summaries.
Do not rely only on feat: and fix: prefixes.
Apply references/classification-rules.md:
refactor, chore, or unprefixedMany ranges contain multiple commits for one feature/fix. Collapse these into one final entry per logical change:
Use references/format-guide.md for final structure and style.
For each final entry:
NEW, IMPROVED, or FIXNEW (iOS): ...FIX (macOS): ...Use platform heuristics from references/classification-rules.md.
Hard limit is 4000 characters.
Before final output:
Before printing, verify:
# headings)What's new in this build:Print only the final notes block to terminal. Do not save to a file unless explicitly requested.
What's new in this build:
IMPROVED: Internal quality and stability updates for this build.