'v1'
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
---
|
||||
name: app-store-changelog
|
||||
description: Generate user-facing App Store release notes from git history since the last tag.
|
||||
risk: safe
|
||||
source: "Dimillian/Skills (MIT)"
|
||||
date_added: "2026-03-25"
|
||||
---
|
||||
|
||||
# App Store Changelog
|
||||
|
||||
## Overview
|
||||
Generate a comprehensive, user-facing changelog from git history since the last tag, then translate commits into clear App Store release notes.
|
||||
|
||||
## When to Use
|
||||
- When the user asks for App Store "What's New" text or release notes from git history.
|
||||
- When you need to turn raw commits into concise, user-facing release bullets.
|
||||
|
||||
## Workflow
|
||||
|
||||
### 1) Collect changes
|
||||
- Run `scripts/collect_release_changes.sh` from the repo root to gather commits and touched files.
|
||||
- If needed, pass a specific tag or ref: `scripts/collect_release_changes.sh v1.2.3 HEAD`.
|
||||
- If no tags exist, the script falls back to full history.
|
||||
|
||||
### 2) Triage for user impact
|
||||
- Scan commits and files to identify user-visible changes.
|
||||
- Group changes by theme (New, Improved, Fixed) and deduplicate overlaps.
|
||||
- Drop internal-only work (build scripts, refactors, dependency bumps, CI).
|
||||
|
||||
### 3) Draft App Store notes
|
||||
- Write short, benefit-focused bullets for each user-facing change.
|
||||
- Use clear verbs and plain language; avoid internal jargon.
|
||||
- Prefer 5 to 10 bullets unless the user requests a different length.
|
||||
|
||||
### 4) Validate
|
||||
- Ensure every bullet maps back to a real change in the range.
|
||||
- Check for duplicates and overly technical wording.
|
||||
- Ask for clarification if any change is ambiguous or possibly internal-only.
|
||||
|
||||
## Commit-to-Bullet Examples
|
||||
|
||||
The following shows how raw commits are translated into App Store bullets:
|
||||
|
||||
| Raw commit message | App Store bullet |
|
||||
|---|---|
|
||||
| `fix(auth): resolve token refresh race condition on iOS 17` | • Fixed a login issue that could leave some users unexpectedly signed out. |
|
||||
| `feat(search): add voice input to search bar` | • Search your library hands-free with the new voice input option. |
|
||||
| `perf(timeline): lazy-load images to reduce scroll jank` | • Scrolling through your timeline is now smoother and faster. |
|
||||
|
||||
Internal-only commits that are **dropped** (no user impact):
|
||||
- `chore: upgrade fastlane to 2.219`
|
||||
- `refactor(network): extract URLSession wrapper into module`
|
||||
- `ci: add nightly build job`
|
||||
|
||||
## Example Output
|
||||
|
||||
```
|
||||
What's New in Version 3.4
|
||||
|
||||
• Search your library hands-free with the new voice input option.
|
||||
• Scrolling through your timeline is now smoother and faster.
|
||||
• Fixed a login issue that could leave some users unexpectedly signed out.
|
||||
• Added dark-mode support to the settings screen.
|
||||
• Improved load times when opening large photo albums.
|
||||
```
|
||||
|
||||
## Output Format
|
||||
- Title (optional): "What's New" or product name + version.
|
||||
- Bullet list only; one sentence per bullet.
|
||||
- Stick to storefront limits if the user provides one.
|
||||
|
||||
## Resources
|
||||
- `scripts/collect_release_changes.sh`: Collect commits and touched files since last tag.
|
||||
- `references/release-notes-guidelines.md`: Language, filtering, and QA rules for App Store notes.
|
||||
|
||||
## Limitations
|
||||
- Use this skill only when the task clearly matches the scope described above.
|
||||
- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.
|
||||
- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.
|
||||
@@ -0,0 +1,4 @@
|
||||
interface:
|
||||
display_name: "App Store Changelog"
|
||||
short_description: "Generate App Store release notes"
|
||||
default_prompt: "Use $app-store-changelog to draft App Store release notes from the changes since the last tag."
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
# App Store Release Notes Guidelines
|
||||
|
||||
## Goals
|
||||
- Produce user-facing release notes that describe visible changes since the last tag.
|
||||
- Include all user-impacting changes; omit purely internal or refactor-only work.
|
||||
- Keep language plain, short, and benefit-focused.
|
||||
|
||||
## Output Shape
|
||||
- Prefer 5 to 10 bullets total for most releases.
|
||||
- Group by theme if needed: New, Improved, Fixed.
|
||||
- Each bullet should be one sentence and start with a verb.
|
||||
- Avoid internal codenames, ticket IDs, or file paths.
|
||||
|
||||
## Filtering Rules
|
||||
- Include: new features, UI changes, behavior changes, bug fixes users would notice, performance improvements with visible impact.
|
||||
- Exclude: refactors, dependency bumps, CI changes, developer tooling, internal logging, analytics changes unless they affect user privacy or behavior.
|
||||
- If a change is ambiguous, ask for clarification or describe it as a small improvement only if it is user-visible.
|
||||
|
||||
## Language Guidance
|
||||
- Translate technical terms into user-facing descriptions.
|
||||
- Avoid versions of "API", "refactor", "nil", "crash log", or "dependency".
|
||||
- Prefer "Improved", "Added", "Fixed", "Updated" or action verbs like "Search", "Upload", "Sync".
|
||||
- Keep tense present or past: "Added", "Improved", "Fixed".
|
||||
|
||||
## Examples
|
||||
- "Added account switching from the profile menu."
|
||||
- "Improved timeline loading speed on slow connections."
|
||||
- "Fixed media attachments not opening in full screen."
|
||||
|
||||
## QA Checklist
|
||||
- Every bullet ties to a real change in the range.
|
||||
- No duplicate bullets that describe the same change.
|
||||
- No internal jargon or file paths.
|
||||
- Final list fits App Store text limits for the target storefront if provided.
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
since_ref="${1:-}"
|
||||
until_ref="${2:-HEAD}"
|
||||
|
||||
if [[ -z "${since_ref}" ]]; then
|
||||
if git describe --tags --abbrev=0 >/dev/null 2>&1; then
|
||||
since_ref="$(git describe --tags --abbrev=0)"
|
||||
fi
|
||||
fi
|
||||
|
||||
range=""
|
||||
if [[ -n "${since_ref}" ]]; then
|
||||
range="${since_ref}..${until_ref}"
|
||||
else
|
||||
range="${until_ref}"
|
||||
fi
|
||||
|
||||
repo_root="$(git rev-parse --show-toplevel)"
|
||||
|
||||
printf "Repo: %s\n" "${repo_root}"
|
||||
if [[ -n "${since_ref}" ]]; then
|
||||
printf "Range: %s..%s\n" "${since_ref}" "${until_ref}"
|
||||
else
|
||||
printf "Range: start..%s (no tags found)\n" "${until_ref}"
|
||||
fi
|
||||
|
||||
printf "\n== Commits ==\n"
|
||||
git log --reverse --date=short --pretty=format:'%h|%ad|%s' ${range}
|
||||
|
||||
printf "\n\n== Files Touched ==\n"
|
||||
git log --reverse --name-only --pretty=format:'--- %h %s' ${range} | sed '/^$/d'
|
||||
Reference in New Issue
Block a user