This skill should be used when "restructuring commits", "organizing PR history", "making commits reviewable", or planning how to split work into atomic commits. The intellectual foundation for /reviewable. Do not use for writing commit messages (see git workflow guideline).
From forgenpx claudepluginhub flox/forge-plugin --plugin forgeThis skill uses the workspace's default tool permissions.
Guides Next.js Cache Components and Partial Prerendering (PPR) with cacheComponents enabled. Implements 'use cache', cacheLife(), cacheTag(), revalidateTag(), static/dynamic optimization, and cache debugging.
Migrates code, prompts, and API calls from Claude Sonnet 4.0/4.5 or Opus 4.1 to Opus 4.5, updating model strings on Anthropic, AWS, GCP, Azure platforms.
Analyzes BMad project state from catalog CSV, configs, artifacts, and query to recommend next skills or answer questions. Useful for help requests, 'what next', or starting BMad.
How to transform development history into commits that reviewers
can evaluate efficiently. These principles guide both manual
commit organization and the /forge:reviewable automated
workflow.
/forge:reviewable command needs guidanceGroup changes by what type of review thinking they require, not by file proximity. Changes in the same file that need different review thinking belong in different commits.
Ask: "What does a reviewer need to think about to evaluate this correctly?"
| Concern | Type | Reviewer Thinking |
|---|---|---|
| Configuration | chore | Structured correctly? Sensible defaults? |
| Data layer | feat/refactor | Schema right? State safe? |
| Observability | chore | Right signals? Passive, no behavior change |
| Auth/Authz | feat | Secure? Access controlled? Always isolate |
| Testing | test | Right cases? Edge cases covered? |
| Build/Packaging | chore | Artifact correct? Dependencies right? |
Auth/Authz changes warrant isolation because security review requires focused attention that degrades when mixed with other concerns.
Wrong (organized by file):
Commit: "Update auth.py"
+ from jwt import decode # Auth concern
+ import prometheus_client # Observability concern
+ def verify_jwt(token): ... # Auth concern
+ metrics.inc('auth_attempts') # Observability concern
Right (organized by review concern):
Commit 1 (feat): "Add JWT verification"
+ from jwt import decode
+ def verify_jwt(token): ...
Commit 2 (chore): "Add auth attempt metrics"
+ import prometheus_client
+ metrics.inc('auth_attempts')
Each commit should add detail to an evolving story, like a painter building up a canvas — not like a mover shuffling boxes between rooms.
Commit 1: Move User model to new file
Commit 2: Move Auth logic to new file
Commit 3: Move tests to new file
Reviewer sees file movements with no understanding of why.
Commit 1: Add authentication abstraction
(trait + types, TODO for implementations)
Commit 2: Implement primary auth strategy
(fills in from abstract established in commit 1)
Commit 3: Wire auth into application
(shows how commit 2 integrates into the system)
Commit 4: Add tests validating auth flow
(proves commits 1-3 work together)
Each commit makes sense given what came before.
TODO(NEXT_COMMIT)
tells reviewers "this is coming"The commit type signals review importance from the author. Treat it as a hard constraint when restructuring.
feat: — new feature, affects behaviorfix: — bug fix, affects behaviorchore: — maintenance, no behavior changerefactor: — structure change, behavior unchangedtest: — test changes onlyWhen restructuring, preserve the original author's type intent.
If a commit description needs the word "and", split the commit. "And" indicates multiple concerns mixed together.
Moving code between files without logic changes is a single atomic unit. Git detects the move automatically.
Preferred: one commit with deletion from old location and addition to new location.
When code is both relocated AND modified, split into two:
This separation is mandatory — a reviewer must be able to distinguish "this code moved here" from "this code is new".
Every commit must leave the codebase compilable, testable, and
runnable. This enables git bisect and lets reviewers check
out any commit to test.
When changing method signatures or public APIs:
Commit 1: Extract to strategy (backwards compatible)
- New parameter optional with default
- Mark with TODO(MIGRATION)
Commit 2: Add new implementations
Commit 3: Update all callers (remove defaults)
Commit 4: Remove deprecated parameters
After restructuring, the final state must match the original state exactly. Verification uses dual-branch comparison:
git diff <original-tip> <restructured-tip>
— must be emptyThe original branch is never modified.
Each commit carries a review depth signal — how much scrutiny a reviewer should give it.
| Depth | Signal | Reviewer Action |
|---|---|---|
| high | Behavior, architecture, or security change | Deep focus — trace logic, check edge cases |
| medium | Substantive but lower risk | Normal review — check correctness |
| low | Mechanical or cosmetic | Quick scan — verify it looks right |
high — could break things or introduce vulnerabilities:
medium — substantive work with lower risk:
low — mechanical changes:
Follow conventional commits with review depth trailers:
<type>(<scope>): <subject>
<body explaining why, not what>
Review-depth: <high|medium|low>
Review-reason: <one-line why this depth>
Types: feat, fix, refactor, test, style, chore,
docs
The body should explain WHY the change exists.
The Review-depth and Review-reason trailers help reviewers
triage their attention across many commits.
Different logical changes in the same file belong in different commits — whole-file staging only applies when the entire file is a single unit of change.
For surgical staging of specific hunks within files:
# Extract specific hunks as a patch
git diff HEAD -- <file> > /tmp/full.patch
# Edit patch to keep only desired hunks
# Apply to staging area without modifying working tree
git apply --cached /tmp/selected.patch