git-what
git-what turns git history into plain, paste-ready summaries for App Store Connect, Play Console, Slack, or email. It provides several commands, all of which run inside a git repo.
Shared output rules
Every command shares the same final processing and output. Only source data collection differs from command to command. These rules apply to all commands:
- Use plain text, simple bullets (
• or -), and basic separators (blank lines, ---) when helpful
- Do not use heavy markdown: no
# headings, no **bold**, no backticks, no code blocks in the delivered output
- A short plain title line (e.g.
What's new) is fine when it reads as summary text, not as markdown structure
- No commit hashes in the final output
- Do not invent changes. If a change is unclear, say so briefly or omit it
- Use plain language, no technical terms (no file names, APIs, stores, refactors, TTL, debounce, etc.) unless the command's output shape requires them
- Merge similar items into single bullets instead of one bullet per commit or file
- Past or present tense is fine; stay consistent within the list
- Do not include Co-Authored-By footers or any AI attribution
Each command below documents how it collects its source data and the output shape it follows on top of these shared rules.
gw-changelog
Generate short Play Store / App Store release notes from git history.
Usage
gw-changelog <commit_id>
If COMMIT_ID is missing, ask the developer for the starting commit before continuing.
Source data collection
- Run
git log <commit_id>..HEAD --no-merges --format="%h %s%n%b%n---" to collect commits from the given commit (exclusive) through HEAD.
- Read commit subjects and bodies. Use
git show or git diff <commit_id>..HEAD --stat only when a commit message is too vague to judge user impact.
- Keep only changes that affect the end user. Drop build scripts, lint fixes, refactors, dependency bumps, CI, and internal tooling unless they clearly change app behavior.
Output shape
- Start with a short plain title line such as
What's new (no extra intro paragraph unless asked)
- 4–8 bullets max when possible
- Each bullet = one user-visible theme (notifications, links, comments, login/guest behavior, bug fixes)
Example output shape
What's new
• Tapping notifications from your phone or the in-app list now opens the right article, comment, or badge
• Comment alerts scroll to the right place on the article
• Fixed duplicate alerts on Android and a freeze when opening articles from comment alerts
• Shared links open more reliably after sign-up and no longer misroute after log out
gw-verify
Generate a tester verification checklist for the same commit range as gw-changelog.
Usage
gw-verify <commit_id>
If COMMIT_ID is missing, ask the developer for the starting commit before continuing.
Source data collection
- Run
git log <commit_id>..HEAD --no-merges --format="%h %s%n%b%n---" to collect commits from the given commit (exclusive) through HEAD.
- Read commit subjects and bodies to identify what changed and what user-facing behavior is affected.
Output shape
- Start with a short plain title line such as
Verification checklist (no extra intro paragraph unless asked)
- 4–12 checks; one bullet per check
- Each check starts with an imperative verb (e.g.
Verify, Check, Confirm, Test, Try)
- Group related checks under a short plain section label line (labels read as summary text, not markdown structure)
- Cover at least: the main flow of each change, the edge cases called out in commits, and the most likely regressions (neighboring flows touched by the same area)
Example output shape
Verification checklist
Notifications
- Verify tapping a notification on the phone opens the correct article
- Check the in-app notifications list opens the right comment or badge
- Confirm comment alerts scroll to the right place on the article
Login and sharing
- Test opening a shared link right after sign-up
- Confirm a shared link opened after logging out lands on the right article
- Verify no duplicate alerts appear on Android
- Check the app no longer freezes when opening articles from comment alerts
gw-staged
Generate a commit message covering only screens created/updated/removed and APIs integrated/updated. Merge common items into single bullets.
Usage
gw-staged
Operates on the current uncommitted working tree (staged + unstaged + untracked). No commit ID needed.
Source data collection
- Run
git status --porcelain and git diff --stat to enumerate changed and untracked files.
- Read diffs for screen files and API/service files. The exact locations vary by repo. Common defaults to check first: screens under
src/screens/** and src/navigation/**; API/service code under src/api/**, src/services/**, src/types/**. If the repo does not use these paths, discover the equivalents: look for where UI components and data/API code live (e.g. lib/, app/, features/, pages/, or a top-level api/ / services/ directory) and use those instead.
- Drop non-screen, non-API changes (plans, docs, lint fixes, config, tests for non-API code) from the commit body. Do not mention them.
- Do not invent changes. If a diff is unclear, inspect the file before deciding the bullet.
Output shape
- Subject line:
feat/fix/chore(<scope>): <short summary of primary screen or API change>. Scope = affected tab/feature (e.g. profile, auth, chat). Derive the scope from the changed areas, not from a fixed list.
- Two sections only:
Screens and APIs. Omit a section if empty
- 3–7 bullets per section max; merge common items
- Each bullet starts with a verb:
Add, Update, Remove, Integrate, Wire
- For APIs: include HTTP method + path (e.g.
Integrate GET /customer/me/call-history)
- For screens: state screen name + the user-visible change (new screen, new section, removed flow)
Example output shape
feat(profile): add bank accounts, call history, call detail screens
Screens
- Add BankAccounts screen with bank list, primary badge, add-account sheet
- Add CallHistory screen listing past/missed expert calls with advisor header
- Add CallDetail screen with summary, key points, action items, notes PDF download
- Update Profile screen to wire BankAccounts + CallHistory row routes
- Update NomineeDetails screen: add "Folios with nominee" section, drop percentage column
- Update MainTabBar: profile tab icon now reflects focused state
APIs
- Integrate GET /customer/me/call-history (list)
- Integrate GET /customer/me/call-history/{scheduleId} (detail)
- Integrate GET /customer/me/call-history/{scheduleId}/notes.pdf (binary download via new apiGetBinary helper)
- Update CustomerAccount + PatchCustomerAccountPayload types: add taxType, occupation, contactOwner, sourceOfFunds, politicallyExposed, placeOfBirth, countryCode fields; rename IncomeRange enum values to backend contract
gw-week / gw-fortnight / gw-month
Personal work summaries for the last 7 / 15 / 30 days. They share one implementation; the only difference is the time window.
Usage
gw-week
gw-fortnight
gw-month
No commit ID needed. The window counts back from today (7 / 15 / 30 days).
Source data collection
- Resolve the current git user from the repo's own config: run
git config user.name and git config user.email. Do not assume a username; use whatever the repo reports.
- Build the author filter. Match commits by the git user's name OR email (a commit matches if the author name equals
user.name or the author email equals user.email). Run one pass per identity because git's --author is a regex, not a plain name/email matcher.
- If the repo was just cloned or has branches reachable only through a remote, run
git fetch --all first so remote-tracking branches are current.
- Collect commits across ALL active branches, not just the current one:
git log --all --no-merges --author="<name>" --since="<N> days ago" --format="%h %s%n%b%n---" and the same again with --author="<email>"; combine both result sets and drop duplicate hashes
- Use
--all to cover every local and remote-tracking branch in one pass.
- Drop merge commits (
--no-merges) to avoid duplicate summaries of the same work.
- Read commit subjects and bodies. Use
git show when a message is too vague to summarize.
- Filter to the current git user's work only. Anything committed by other authors is excluded.
Output shape
- Start with a short plain title line reflecting the window, e.g.
This week / Last fortnight / Last month
- 4–8 bullets max when possible; each bullet = one work theme
- Commits that exist only on branches other than the current one are expected to appear — that is the point of the
--all scan
- If there are no commits in the window, say so plainly rather than inventing output
Example output shape
This week
• Finished the onboarding flow: sign-up, profile setup, and guest access all work end to end
• Reworked how shared links open so they land on the right article after sign-up or log out
• Fixed a freeze on Android when opening articles from comment alerts
• Tightened notification behavior — taps now open the correct article, comment, or badge
Version history
- v0.0.1:
gw-changelog, gw-verify, gw-staged
- v0.0.2: adds
gw-week, gw-fortnight, gw-month — personal work summaries for the last 7 / 15 / 30 days, filtered to the current git user, across all active branches. Adds skill metadata (keywords, tags) for discoverability.
1---2name: git-what3description: Generate release notes, tester verification checklists, and commit summaries from git history. Use whenever the user asks for release notes, changelog, app store / play console notes, what's new notes, tester verification checklists, QA regression checklist, commit summaries, commit messages, or invokes any gw-* command (gw-changelog, gw-verify, gw-staged, gw-week, gw-fortnight, gw-month) inside a git repo. Also use when the user asks to summarize work done in the last week / fortnight / month, daily standup updates, sprint reports, work logs, or to review recent work on all branches.4license: MIT5---67# git-what89git-what turns git history into plain, paste-ready summaries for App Store Connect, Play Console, Slack, or email. It provides several commands, all of which run inside a git repo.1011## Shared output rules1213Every command shares the same final processing and output. Only source data collection differs from command to command. These rules apply to all commands:1415- Use plain text, simple bullets (`•` or `-`), and basic separators (blank lines, `---`) when helpful16- Do not use heavy markdown: no `#` headings, no `**bold**`, no backticks, no code blocks in the delivered output17- A short plain title line (e.g. `What's new`) is fine when it reads as summary text, not as markdown structure18- No commit hashes in the final output19- Do not invent changes. If a change is unclear, say so briefly or omit it20- Use plain language, no technical terms (no file names, APIs, stores, refactors, TTL, debounce, etc.) unless the command's output shape requires them21- Merge similar items into single bullets instead of one bullet per commit or file22- Past or present tense is fine; stay consistent within the list23- Do not include Co-Authored-By footers or any AI attribution2425Each command below documents how it collects its source data and the output shape it follows on top of these shared rules.2627---2829## gw-changelog3031Generate short Play Store / App Store release notes from git history.3233**Usage**3435```36gw-changelog <commit_id>37```3839If `COMMIT_ID` is missing, ask the developer for the starting commit before continuing.4041**Source data collection**42431. Run `git log <commit_id>..HEAD --no-merges --format="%h %s%n%b%n---"` to collect commits from the given commit (exclusive) through `HEAD`.442. Read commit subjects and bodies. Use `git show` or `git diff <commit_id>..HEAD --stat` only when a commit message is too vague to judge user impact.453. Keep only changes that affect the end user. Drop build scripts, lint fixes, refactors, dependency bumps, CI, and internal tooling unless they clearly change app behavior.4647**Output shape**4849- Start with a short plain title line such as `What's new` (no extra intro paragraph unless asked)50- 4–8 bullets max when possible51- Each bullet = one user-visible theme (notifications, links, comments, login/guest behavior, bug fixes)5253**Example output shape**5455```56What's new5758• Tapping notifications from your phone or the in-app list now opens the right article, comment, or badge59• Comment alerts scroll to the right place on the article60• Fixed duplicate alerts on Android and a freeze when opening articles from comment alerts61• Shared links open more reliably after sign-up and no longer misroute after log out62```6364---6566## gw-verify6768Generate a tester verification checklist for the same commit range as `gw-changelog`.6970**Usage**7172```73gw-verify <commit_id>74```7576If `COMMIT_ID` is missing, ask the developer for the starting commit before continuing.7778**Source data collection**79801. Run `git log <commit_id>..HEAD --no-merges --format="%h %s%n%b%n---"` to collect commits from the given commit (exclusive) through `HEAD`.812. Read commit subjects and bodies to identify what changed and what user-facing behavior is affected.8283**Output shape**8485- Start with a short plain title line such as `Verification checklist` (no extra intro paragraph unless asked)86- 4–12 checks; one bullet per check87- Each check starts with an imperative verb (e.g. `Verify`, `Check`, `Confirm`, `Test`, `Try`)88- Group related checks under a short plain section label line (labels read as summary text, not markdown structure)89- Cover at least: the main flow of each change, the edge cases called out in commits, and the most likely regressions (neighboring flows touched by the same area)9091**Example output shape**9293```94Verification checklist9596Notifications97- Verify tapping a notification on the phone opens the correct article98- Check the in-app notifications list opens the right comment or badge99- Confirm comment alerts scroll to the right place on the article100101Login and sharing102- Test opening a shared link right after sign-up103- Confirm a shared link opened after logging out lands on the right article104- Verify no duplicate alerts appear on Android105- Check the app no longer freezes when opening articles from comment alerts106```107108---109110## gw-staged111112Generate a commit message covering only screens created/updated/removed and APIs integrated/updated. Merge common items into single bullets.113114**Usage**115116```117gw-staged118```119120Operates on the current uncommitted working tree (staged + unstaged + untracked). No commit ID needed.121122**Source data collection**1231241. Run `git status --porcelain` and `git diff --stat` to enumerate changed and untracked files.1252. Read diffs for screen files and API/service files. The exact locations vary by repo. Common defaults to check first: screens under `src/screens/**` and `src/navigation/**`; API/service code under `src/api/**`, `src/services/**`, `src/types/**`. If the repo does not use these paths, discover the equivalents: look for where UI components and data/API code live (e.g. `lib/`, `app/`, `features/`, `pages/`, or a top-level `api/` / `services/` directory) and use those instead.1263. Drop non-screen, non-API changes (plans, docs, lint fixes, config, tests for non-API code) from the commit body. Do not mention them.1274. Do not invent changes. If a diff is unclear, inspect the file before deciding the bullet.128129**Output shape**130131- Subject line: `feat/fix/chore(<scope>): <short summary of primary screen or API change>`. Scope = affected tab/feature (e.g. `profile`, `auth`, `chat`). Derive the scope from the changed areas, not from a fixed list.132- Two sections only: `Screens` and `APIs`. Omit a section if empty133- 3–7 bullets per section max; merge common items134- Each bullet starts with a verb: `Add`, `Update`, `Remove`, `Integrate`, `Wire`135- For APIs: include HTTP method + path (e.g. `Integrate GET /customer/me/call-history`)136- For screens: state screen name + the user-visible change (new screen, new section, removed flow)137138**Example output shape**139140```141feat(profile): add bank accounts, call history, call detail screens142143Screens144- Add BankAccounts screen with bank list, primary badge, add-account sheet145- Add CallHistory screen listing past/missed expert calls with advisor header146- Add CallDetail screen with summary, key points, action items, notes PDF download147- Update Profile screen to wire BankAccounts + CallHistory row routes148- Update NomineeDetails screen: add "Folios with nominee" section, drop percentage column149- Update MainTabBar: profile tab icon now reflects focused state150151APIs152- Integrate GET /customer/me/call-history (list)153- Integrate GET /customer/me/call-history/{scheduleId} (detail)154- Integrate GET /customer/me/call-history/{scheduleId}/notes.pdf (binary download via new apiGetBinary helper)155- Update CustomerAccount + PatchCustomerAccountPayload types: add taxType, occupation, contactOwner, sourceOfFunds, politicallyExposed, placeOfBirth, countryCode fields; rename IncomeRange enum values to backend contract156```157158---159160## gw-week / gw-fortnight / gw-month161162Personal work summaries for the last 7 / 15 / 30 days. They share one implementation; the only difference is the time window.163164**Usage**165166```167gw-week168gw-fortnight169gw-month170```171172No commit ID needed. The window counts back from today (7 / 15 / 30 days).173174**Source data collection**1751761. Resolve the current git user from the repo's own config: run `git config user.name` and `git config user.email`. Do not assume a username; use whatever the repo reports.1772. Build the author filter. Match commits by the git user's name OR email (a commit matches if the author name equals `user.name` or the author email equals `user.email`). Run one pass per identity because git's `--author` is a regex, not a plain name/email matcher.1783. If the repo was just cloned or has branches reachable only through a remote, run `git fetch --all` first so remote-tracking branches are current.1794. Collect commits across ALL active branches, not just the current one:180 - `git log --all --no-merges --author="<name>" --since="<N> days ago" --format="%h %s%n%b%n---"` and the same again with `--author="<email>"`; combine both result sets and drop duplicate hashes181 - Use `--all` to cover every local and remote-tracking branch in one pass.182 - Drop merge commits (`--no-merges`) to avoid duplicate summaries of the same work.1835. Read commit subjects and bodies. Use `git show` when a message is too vague to summarize.1846. Filter to the current git user's work only. Anything committed by other authors is excluded.185186**Output shape**187188- Start with a short plain title line reflecting the window, e.g. `This week` / `Last fortnight` / `Last month`189- 4–8 bullets max when possible; each bullet = one work theme190- Commits that exist only on branches other than the current one are expected to appear — that is the point of the `--all` scan191- If there are no commits in the window, say so plainly rather than inventing output192193**Example output shape**194195```196This week197198• Finished the onboarding flow: sign-up, profile setup, and guest access all work end to end199• Reworked how shared links open so they land on the right article after sign-up or log out200• Fixed a freeze on Android when opening articles from comment alerts201• Tightened notification behavior — taps now open the correct article, comment, or badge202```203204---205206## Version history207208- **v0.0.1**: `gw-changelog`, `gw-verify`, `gw-staged`209- **v0.0.2**: adds `gw-week`, `gw-fortnight`, `gw-month` — personal work summaries for the last 7 / 15 / 30 days, filtered to the current git user, across all active branches. Adds skill metadata (keywords, tags) for discoverability.