change-pack
Change Pack
Generate a complete Git writing pack (Branch Name + Commit Message + PR Content) from one shared diff context.
Why this skill exists: Reading and analyzing diffs is expensive (tokens + time). This skill reads the diff once, builds a shared context, then generates all three outputs from that same context. Much more efficient than calling three separate skills.
PR Title and PR Description are output as separate copy-ready blocks because GitHub has two different input fields.
Context Reuse (Step 0)
See _shared/context-reuse.md for the context reuse protocol.
If DIFF_CONTEXT or RAW_DIFF is already provided, use it directly to save time and tokens.
Build Shared DIFF_CONTEXT (Step 1)
See _shared/branch-diff-gathering.md for branch diff collection details.
Use branch-level diff as primary source (compare current branch against base branch).
Build one compact DIFF_CONTEXT containing:
base_branchand effective diff range (for traceability)- change scope (major modules/files)
- primary intent (
feat|fix|refactor|docs|chore|test|perf) - key behavior changes (what + why)
- notable risks/compatibility impact
- optional issue references if explicitly provided
- domain keywords (
terms) for naming consistency
Why build DIFF_CONTEXT:
- Single source of truth for all three outputs
- Avoids re-reading the same diff three times
- Ensures consistency across branch name, commit, and PR
- Keeps token usage reasonable (≤ 220 lines recommended)
Fallback behavior:
- If branch diff is empty, stop and ask user to confirm target base branch
- If current branch equals base but no upstream tracking, ask for explicit comparison ref
- If user explicitly asks to include uncommitted work, append working tree deltas and mark
source: mixed
Chain Generation from DIFF_CONTEXT (Step 2)
Use the same DIFF_CONTEXT as single source of truth. Do not re-read full diff in downstream steps.
2.1 Branch Name
Generate 3 candidates: one recommended + two alternatives.
Use format <prefix>/<slug> (e.g., feat/user-auth, fix/token-race).
Keep best candidate ≤ 48 chars preferred (hard max 63 due to filesystem limits).
2.2 Commit Message
Generate Conventional Commits output:
- required Header:
type(scope): subject - optional Body and Footer
Keep header ≤ 72 chars (Git tools truncate longer headers).
English subject starts with lowercase (Conventional Commits spec requirement).
Chinese subject written in Simplified Chinese (type(scope) remains in English — they are Conventional Commits keywords).
2.3 PR Content
Generate Title + Description in Markdown.
Type-driven sections with fixed headings (see _shared/pr-heading-map.md).
Why fixed headings: Consistent headings help teams quickly scan PRs and automated tools parse descriptions reliably.
Keep claims grounded in DIFF_CONTEXT facts.
Quick reference:
Type: feat
- 中文:
### 概述→### 改动说明→### 使用方式 - English:
### Summary→### Changes→### Usage
Type: fix
- 中文:
### 问题描述→### 复现步骤(optional) →### 修复方式→### 测试说明 - English:
### Problem→### Steps to Reproduce(optional) →### Solution→### Testing
Type: perf|refactor
- 中文:
### 概述→### 改动说明→### 效果(optional) - English:
### Summary→### Changes→### Impact(optional)
Type: docs|chore
- 中文:
### 概述→### 改动说明 - English:
### Summary→### Changes
Output Consistency
Branch prefix, commit type, and PR title type should be semantically aligned with intent whenever possible. This creates a coherent story across all three artifacts.
Reuse terms from DIFF_CONTEXT.terms to avoid wording drift between outputs.
Language Behavior (Step 3)
See _shared/bilingual-output.md for bilingual output rules.
Default: Simplified Chinese + English (semantically aligned, not word-for-word translation).
If user requests one language, output only requested language.
When bilingual, Chinese and English must each be wrapped in independent code blocks in every section.
Each language version must be written entirely in its respective language — not one version copied and relabeled.
Token-Efficiency Constraints (Step 4)
- Prefer
git diff --stat+ targeted excerpts over massive full-file dumps - Summarize raw diff once; downstream sections consume only
DIFF_CONTEXT - Keep internal
DIFF_CONTEXTconcise (recommended ≤ 220 lines equivalent text) - Avoid duplicate explanations across branch/commit/PR outputs
Final Output Format (Step 5)
Output in order:
Branch NameCommit MessagePR TitlePR Description
PR Title and PR Description are in two separate code blocks for direct paste into different GitHub input fields.
For each section, provide bilingual or single-language content based on request.
Exception: Branch Name is always English only (no bilingual output needed — branch names are English tokens).
In bilingual mode, each section (except Branch Name) contains exactly two copy-ready code blocks (one for 中文, one for English).
Language label line (中文 / English) appears immediately above its corresponding code block.
Copy-Ready Template
Branch Name
Recommended: <prefix/slug>
Alternatives:
- <prefix/slug-2>
- <prefix/slug-3>
Commit Message
中文
<type(scope): subject>
- <what + why>
- <what + why>
English
<type(scope): subject>
- <what + why>
- <what + why>
PR Title
中文
<type: brief description>
English
<type: brief description>
PR Description
中文
### <fixed-section-heading>
- <fact>
English
### <fixed-section-heading>
- <fact>
Example (End-to-End)
Input (context provided once):
DIFF_CONTEXT
- source: staged
- files: src/auth/token.ts, src/auth/refresh.ts, tests/auth/refresh.test.ts
- intent: fix
- highlights:
- serialize token refresh requests to prevent concurrent overwrite
- add retry guard for 401 edge case
- add regression tests for refresh race
- terms: auth, token, refresh, race
Expected chained output:
Branch Name
中文
Recommended: fix/auth-token-refresh-race
Alternatives:
- fix/auth-refresh-lock
- test/auth-refresh-race-coverage
English
Recommended: fix/auth-token-refresh-race
Alternatives:
- fix/auth-refresh-lock
- test/auth-refresh-race-coverage
Commit Message
中文
fix(auth): 修复 token 刷新竞态
- 串行化 refresh 请求,避免并发覆盖有效 token。
- 为 401 重试边界场景补充回归测试。
English
fix(auth): handle token refresh race
- serialize refresh requests to avoid concurrent token overwrite.
- add regression tests to lock behavior for 401 retry edge cases.
PR Title
中文
fix: 防止认证 token 刷新竞态
English
fix: prevent auth token refresh race
PR Description
中文
### 问题描述
- 并发 refresh 请求可能覆盖有效 token。
### 修复方式
- 串行化 refresh 流程,并为 401 边界场景增加重试保护。
### 测试说明
- 增加 refresh 竞态场景的回归测试。
English
### Problem
- concurrent refresh requests could overwrite valid tokens.
### Solution
- serialize refresh flow and add retry guard for 401 edge cases.
### Testing
- add regression tests for refresh race scenarios.
Before Finalizing (Step 6)
Quick verification:
- All sections generated from one shared
DIFF_CONTEXT(no repeated full-diff reads) - Branch prefix, commit type, and PR title type are semantically aligned with
intent - PR description headings follow the type-specific map (see _shared/pr-heading-map.md)
- In bilingual mode, each section uses independent code blocks for each language
- Statements are factual and grounded in
DIFF_CONTEXTonly
If something doesn't look right, adjust and regenerate only the failing section(s).
Conventions
- Do not fabricate details outside provided diff context
- Prefer domain terms from file paths/symbols (maintains consistency with codebase)
- Optimize for clarity and token efficiency by reusing one shared context
More from quentinhsu/skills
pr-content
Generate GitHub Pull Request title and description from branch changes. Use this skill whenever the user asks to create PR content, draft a pull request, write PR description, or says things like '生成 PR 内容', '写 PR 描述', '帮我整理 PR 标题和正文', 'generate PR content', 'write PR title and description', 'draft pull request description', 'what should my PR say', or 'help me write this PR'. Also trigger when you see requests for PR templates, PR summaries, or when the user is preparing to open a pull request.
16commit-message
Generate conventional commit messages from staged git diff. Use this skill whenever the user asks to generate a commit message, write commit text, create a conventional commit, or says things like '生成 commit', '写 commit message', '根据暂存区生成提交说明', 'generate commit message from staged diff', 'write a conventional commit', 'what should my commit say', 'help me commit this'. Also trigger when you see requests to follow Conventional Commits format or when the user has staged changes and asks about committing.
15branch-name
Generate Git branch names from current branch changes against a base branch. Use this skill whenever the user mentions branch naming, wants to create/rename a branch based on their work, asks for branch name suggestions, or says things like '给这个分支起个名字', '生成分支名', '根据改动起一个 branch 名', 'suggest branch name from diff', 'name this branch based on changes', 'what should I call this branch', or 'name this feature branch'. Also trigger when you see diff-based naming requests or when the user has uncommitted work and asks about branching.
13refactor-migrate
Migrate dependencies, frameworks, or runtime versions with minimal breakage. Use this skill when upgrading libraries, switching frameworks, replacing deprecated APIs, bumping language/runtime versions, or says things like '升级依赖', '迁移到新版本', '替换废弃 API', 'upgrade to v4', 'migrate from X to Y', 'replace deprecated calls', 'bump Node/Python/Go version', 'framework migration', or 'dependency upgrade'. Also trigger when handling breaking changes from a version bump.
3refactor-clean
Perform clean refactoring on any codebase — remove dead code, simplify logic, improve naming, extract abstractions, and reduce complexity without changing behavior. Use this skill when the user asks to clean up code, refactor for readability, reduce complexity, remove unused code, simplify conditionals, flatten nesting, rename for clarity, or says things like '重构一下这段代码', '清理无用代码', '简化逻辑', 'clean up this code', 'refactor for readability', 'reduce complexity', 'remove dead code', 'simplify this function', 'flatten nesting', or 'make this easier to read'. Also trigger when reviewing code quality or performing tech debt cleanup.
3refactor-modernize
Modernize code by replacing legacy patterns with current language features and idiomatic conventions. Use this skill when rewriting old-style code to use modern syntax, adopting new language features, replacing callbacks with async/await, using pattern matching instead of switch, applying modern iteration, or says things like '用现代写法重写', '替换旧语法', '用 async/await 重写回调', 'modernize this code', 'use modern syntax', 'replace legacy patterns', 'convert to async/await', 'use destructuring', 'apply modern idioms', or 'rewrite with current best practices'. Also trigger when adopting new edition features (Rust editions, Python 3.10+ features, ES2024, etc.).
3