changes-review
[Code Quality] Use when reviewing current changes, staged or unstaged diffs, or branch-to-branch diffs.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
[Code Quality] Use when reviewing current changes, staged or unstaged diffs, or branch-to-branch diffs.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
[Architecture] Use when auditing the ENTIRE project architecture and production readiness in one pass — bundles architecture-review + architecture-scalability-review + production-readiness-review at project or diff scope, then synthesizes one consolidated Architecture Health Report.
[Code Quality] Use when reviewing architecture compliance for layers, messaging, service boundaries, CQRS, repos, entity events, and data/consistency/tenancy boundaries. Universal architecture laws, coupling taxonomy and the anti-pattern catalog live in `.claude/docs/architecture-knowledge.md` (project docs always outrank it).
[Code Quality] Use when you need to review artifact quality (PBI, user story, test spec, design spec) before handoff. Supports --type={pbi|story|spec-tests|design}.
[Code Quality] Use when evaluating review feedback, requesting targeted code-quality review, or verifying completion claims.
[DDD Quality] Use when you need to review domain entities and value objects for DDD design quality.
[Code Quality] Use when you need to review integration tests for assertion quality, bug protection, repeatability, and test-spec traceability — AND verify the review target (changed production code) has test coverage (integration-first) with spec↔test↔code alignment.
| name | changes-review |
| description | [Code Quality] Use when reviewing current changes, staged or unstaged diffs, or branch-to-branch diffs. |
Codex compatibility note:
- Invoke repository skills with
$skill-namein Codex; this mirrored copy rewrites legacy Claude/skill-namereferences.- Task tracker mandate: BEFORE executing any workflow or skill step, create/update task tracking for all steps and keep it synchronized as progress changes.
- User-question prompts mean to ask the user directly in Codex.
- Ignore Claude-specific mode-switch instructions when they appear.
- Strict execution contract: when a user explicitly invokes a skill, execute that skill protocol as written.
- Subagent authorization: when a skill is user-invoked or AI-detected and its protocol requires subagents, that skill activation authorizes use of the required
spawn_agentsubagent(s) for that task.- Do not skip, reorder, or merge protocol steps unless the user explicitly approves the deviation first.
- For workflow skills, execute each listed child-skill step explicitly and report step-by-step evidence.
- If a required step/tool cannot run in this environment, stop and ask the user before adapting.
Codex uses static project-reference loading instead of runtime-injected project docs. When coding, planning, debugging, testing, or reviewing, open project docs explicitly using this routing.
Always read:
docs/project-config.json (project-specific paths, commands, modules, and workflow/test settings)docs/project-reference/docs-index-reference.md (routes to the full docs/project-reference/* catalog)docs/project-reference/lessons.md (always-on guardrails and anti-patterns)Missing/stale context route: If docs/project-config.json, the docs index, lessons.md, CLAUDE.md, AGENTS.md, or any task-required reference doc is missing or stale, auto-run $project-init or the narrow setup route ($project-config, $docs-init, $scan-all, $scan --target=<key>, $claude-md-init) before ordinary project-specific work. If Codex mirrors or AGENTS.md are missing/stale, ask the user to run $sync-codex; do not auto-run it.
Situation-based docs:
project-structure-reference.mdbackend-patterns-reference.md, domain-entities-reference.mdfrontend-patterns-reference.md, scss-styling-guide.md, design-system/README.mddocs/specs/ pathing, or TC format: feature-spec-reference.md, spec-system-reference.md, spec-principles.mdworkflow-spec-test-code-cycle-reference.md plus the spec docs abovespec-system-reference.md and source Feature Specs under docs/specs/integration-test-reference.mde2e-test-reference.mdcode-review-rules.md plus domain docs above based on changed filesDo not read all docs blindly. Start from docs-index-reference.md, then open only relevant files for the task.
[BLOCKING] Execute skill steps in declared order. NEVER skip, reorder, or merge steps without explicit user approval. [BLOCKING] Before each step or sub-skill call, update task tracking: set
in_progresswhen step starts, setcompletedwhen step ends. [BLOCKING] Every completed/skipped step MUST include brief evidence or explicit skip reason. [BLOCKING] If Task tools are unavailable, create and maintain an equivalent step-by-step plan tracker with the same status transitions.
[TOP REMINDER — WHY-REVIEW FINDINGS-VALIDATION GATE IS NON-NEGOTIABLE]
If this review produces ANY finding (Critical / High / Medium / Low) in standalone mode, you MUST invoke the
$why-reviewskill through the skill invocation with--validate-findings <report-path>before any fix, docs-update, commit, or handoff. An actual skill call is the ONLY way to pass this gate — re-reading the citedfile:lines yourself, "self-validating," or any inline/manual substitute does NOT count.Create the todo the moment the first finding is recorded — never rely on memory: call task tracking →
[Review Phase 6] Why-review findings validation gate — invoke $why-reviewso the gate is tracked and cannot be skipped. Inside$workflow-review-changes, stop after the report; parent step 2 owns validation. Full protocol in Phase 6; mirrored in the Closing Reminders at the bottom.
Goal: Review current working-tree, staged, branch, or commit diffs across code, docs, config, infra, and non-code artifacts — finding correctness bugs, flaws, missing updates, stale docs, and convention drift with evidence — so every reviewed change is defect-free, evidence-backed, convention-aligned, and synchronized with required tests/docs before handoff; when code files changed, also prove the code stays easy to change.
Summary: read-this-if-nothing-else digest —
plans/reports/code-review-{date}-{slug}.md with file:line proof; speculation is forbidden, "looks fine" is not a verdict, codebase convention (grep 3+ examples) wins over textbook rules./goal Stop-hook condition WHEN available — so stopping is BLOCKED until the loop converges. Findings are never auto-fixed on sight: validate (Phase 6 $why-review --validate-findings, an actual skill call) → SELF-FIX (Phase 7) → restart $changes-review from Phase 0 over the WHOLE updated diff (combined with prior fixes, not just the last fix), looping until one whole pass has zero findings. Inside $workflow-review-changes you skip Phase -1, stop after the report, and hand findings to the parent (which owns the goal).$code-simplifier (clarity/maintainability), Phase 3.7 $integration-test-review Gate-7 coverage (every behavior change → covering test + spec TC), and — for every behavior change — Spec Drift Adjudication + the Dual-Feedback Ledger (the gap feeds BOTH spec AND tests).$docs-update ALWAYS runs over the full changeset (deferred only to the parent inside the workflow)./goal gate when available (standalone, FIRST action) → 0 $graph-blast-radius → 0.1 change-context + full-pipeline trace (tier FE↔BE + cross-service/event) → 0.3 change-type risk tasks → 0.7 surface-detection dimension tasks → 0.5 plan compliance → 1 collect diff + create report → 2 file-by-file review → 3 fresh-context gate (SKIP when findings exist) → 3.5 $code-simplifier (code diffs) → 3.7 $integration-test-review Gate-7 coverage (behavior diffs) → 4 finalize + Dual-Feedback Ledger → 5 docs triage → 6 $why-review --validate-findings → 7 self-fix + full restart from Phase 0 → 7.5 holistic full-mode $why-review → 8 $docs-update (unconditional terminal) — why: a skipped phase silently drops a guard (coverage, spec-drift, holistic review, or docs sync) and ships unreviewed work.Routing boundary: This skill reviews a git diff — working-tree (default), staged, branch, or commit. For an explicit file-set or SHA-range review, processing received review feedback, or a pre-completion verification gate over already-known scope, use
code-reviewinstead.
Shared engine (keep in sync):
changes-reviewandcode-reviewshare the same review-protocolSYNC:blocks. Canonical source:.claude/skills/shared/sync-inline-versions.md; policy:SYNC:shared-protocol-duplication-policy. When you change a shared block in one skill, update the canonical file AND the sibling skill so the two never drift. The skills differ only in entry intent (diff vs explicit scope) and diff-specific gates (integration-test-sync, translation-sync, the Phase 3.7 integration-test-review coverage gate) — not in review quality.
Workflow:
/goal optional) — Before any other work, in standalone mode bind the review loop as a standing protocol obligation you self-drive — and, WHEN available, invoke the /goal command as an ACTUAL call — with a self-recursive review-loop condition so stopping is BLOCKED until the loop converges: review the full diff → validate findings (Phase 6) → SELF-FIX validated findings (Phase 7) → restart $changes-review from Phase 0 over the WHOLE updated diff (combined with the prior fixes, never just re-checking the last fix) → loop until one complete pass has zero findings, then docs-update. Skip this gate when running as step 1 inside $workflow-review-changes (the parent owns the goal). Full procedure in Phase -1.$graph-blast-radius skill FIRST (if .code-graph/graph.db exists)$code-simplifier scoped to the changed code files to surface clarity/consistency/maintainability simplifications; record them as findings that flow into the same validation/fix loop (skip docs-only diffs)$integration-test-review over the full diff; its 7 quality gates audit changed tests AND its Gate 7 (Change Coverage) maps every behavior-changing production file to a covering test (integration-first; unit fallback needs justification) and a spec TC. GAP/SPEC-GAP results become findings for the same validation/fix loop (skip docs-only diffs; deferred to the parent's dedicated step inside $workflow-review-changes)$why-review skill (an actual skill invocation-tool call) with --validate-findings to verify every finding is correct, proof-backed, reasonable, and best-practice before fixing. This is a genuine skill invocation — re-reading the cited lines yourself, "self-validating," or any inline/manual substitute does NOT satisfy this gate. When this skill is step 1 inside $workflow-review-changes, stop after the report; parent step 2 owns findings validation.$changes-review from Phase 0 with a fresh task breakdown over the full current diff; repeat until an entire review pass has zero findings. When inside $workflow-review-changes, parent steps 10-15 own plan/feature-implement/restart.$why-review in FULL mode (NOT --validate-findings) ONCE over the WHOLE review target combined with the current changes as a single artifact — a real standalone $why-review call, the same as a user running $why-review against the target directly. The per-file/per-dimension reviewers and the Phase 6 validate-findings gate routinely miss holistic design-rationale and whole-package issues that a standalone full-mode review catches. If it surfaces findings, fix them and re-run Phase 7.5 (run→fix→run) until a full-mode pass returns zero findings. When inside $workflow-review-changes, SKIP this — the parent workflow's dedicated standalone $why-review step (step 13) owns the holistic pass.$docs-update over the full changeset as the terminal step so no stale docs survive. This is unconditional (not gated on a flagged finding) — $docs-update independently detects impacted docs the review may not have surfaced. When inside $workflow-review-changes, the parent workflow's $docs-update step owns this; do not run it locally.Key Rules:
plans/reports/code-review-{date}-{slug}.mdfile:line proof$code-simplifier optimization gate over the changed code files — its simplification opportunities are findings that flow through the same Phase 6 validation → Phase 7 fix loop (never auto-applied unvalidated)$integration-test-review coverage gate over the full diff — every behavior change must map to a covering test (integration-first) and a spec TC; GAP/SPEC-GAP verdicts are findings for the same Phase 6 → Phase 7 loop, never silently logged$docs-update sweep over the full changeset — unconditional, never skipped on a clean verdict — why: a clean code review still leaves docs stale unless docs-update reconciles them against the actual changes/goal Stop-hook gate WHEN available — so stopping is blocked until a complete review pass over the whole diff is clean; soft "loop until clean" prose alone is not enough, and the protocol binding makes abandoning the loop early impossible whether or not /goal exists/goal gate); never hand validated findings back to the user as "recommendations" in standalone mode$changes-review from Phase 0 and review the full updated diff AS A WHOLE FROM THE BEGINNING — combined with the prior fixes, NOT just re-reviewing the previous cycle's fix in isolationMANDATORY Plan ToDo Task to discover and READ project-specific reference docs:
- Search for code standards docs:
*code-review*,*patterns*,*conventions*,*style-guide*— read any found- Search for architecture docs:
*architecture*,*adr-*,README.mdat service/module roots- Look for docs referencing changed technology areas (backend, frontend, infra, etc.)
- Read docs most relevant to the categories of files changed
Prerequisites: MUST ATTENTION READ before executing:
Critical Purpose: Ensure quality — no flaws, no bugs, no missing updates, no stale content. Verify both artifacts AND documentation.
External Memory: For complex or lengthy work (research, analysis, scan, review), write intermediate findings and final results to a report file in
plans/reports/— prevents context loss and serves as deliverable.
Evidence Gate: MANDATORY — every claim, finding, and recommendation requires
file:lineproof or traced evidence with confidence percentage (>80% to act, <80% must verify first).
OOP & DRY Enforcement: MANDATORY — flag duplicated patterns that should be extracted to a base class, generic, or helper. Classes in the same group or suffix MUST ATTENTION inherit a common base (even if empty now — enables future shared logic and child overrides). Verify project has code linting/analyzer configured for the stack.
Review current changes or explicit branch/commit diffs against project standards.
Target: current working-tree changes by default; explicit branch/tag/commit diff when user asks branch comparison.
Use these sources:
git status, git diff, and git diff --cachedgit diff <base>...<head> plus git diff --name-only <base>...<head>git diff <base>..<head> plus git diff --name-only <base>..<head>Be skeptical. Apply critical thinking, sequential thinking. Every claim needs traced proof, confidence >80%.
file:line evidence (grep results, read confirmations)Apply this gate when diff includes source-code or code-adjacent files
(.cs, .ts, .html, .scss, .css, tests, scripts, build/config-as-code).
Pure docs-only changes skip this gate except for executable examples or code
snippets.
Success metric: future change cost. DRY, SRP, abstraction, design patterns, naming, layering, tests — all serve one goal: make next change cheaper.
When evaluating code, refactor, test, or abstraction, ask: does this make next change cheaper or more expensive?
Apply this lens before specific rules, patterns, or checklists below. If downstream rule raises change cost, this principle wins.
YAGNI — Flag code solving hypothetical future problems (unused parameters, speculative interfaces, premature abstractions)
KISS — Flag unnecessarily complex solutions. "Is there a simpler way meeting same requirement?"
DRY — Actively grep for similar/duplicate code before accepting new code. 3+ similar patterns → flag for extraction.
Clean Code — Readable > clever. Names reveal intent. Functions do one thing. No deep nesting.
Follow Convention — Before flagging ANY pattern violation, grep for 3+ existing examples. Codebase convention wins over textbook rules.
No Flaws/No Bugs — Trace logic paths. Verify edge cases (null, empty, boundary values). Check error handling covers failure modes.
Proof Required — Every claim backed by file:line evidence or grep results. Speculation FORBIDDEN.
Doc Staleness — Cross-reference changed files against related docs (feature docs, test specs, READMEs). Flag stale or missing updates.
Run
python .claude/scripts/code_graph batch-query <f1> <f2> --jsonon changed files for test coverage and caller impact.
IMPORTANT MANDATORY MUST ATTENTION: FIRST review action in every review — only the Phase -1 self-recursive review-loop binding (standalone) precedes it. Call
$graph-blast-radiusBEFORE any other review work.
If .code-graph/graph.db exists, run graph-blast-radius analysis before reviewing changes:
$graph-blast-radius skill (runs python .claude/scripts/code_graph blast-radius --json)For each changed file, trace full impact:
python .claude/scripts/code_graph trace <changed-file> --direction downstream --json — all files affected by changesMANDATORY FIRST: Create Todo Tasks for Review Phases Before starting, call task tracking with:
[Review Phase -1] Bind self-recursive review loop — protocol-primary; optional /goal gate when available (standalone-only; skip inside $workflow-review-changes) - in_progress (MUST ATTENTION BE FIRST)[Review Phase 0] Run $graph-blast-radius to analyze change impact - pending (FIRST review step after the goal gate)[Review Phase 0.1] Note change context + holistic full-pipeline trace across BOTH boundaries — client↔server tier (FE↔BE) AND service/event/external — classify each seam/touchpoint NONE/ADDITIVE/BREAKING - pending (MANDATORY comprehension-first; record explicit N/A for single-tier or monolith)[Review Phase 0.3] Detect high-risk change types, create risk tasks - pending[Review Phase 0.7] Categorize changed files, create dimension review tasks - pending[Review Phase 0.5] Plan compliance check (skip if no active plan) - pending[Review Phase 1] Get changes and create report file - pending[Review Phase 2] Review file-by-file and update report - pending[Review Phase 3] Evaluate fresh-context gate; skip when findings already exist - pending[Review Phase 3.5] Run $code-simplifier on changed code files to optimize code quality - pending (MANDATORY when code files changed; skip docs-only diffs)[Review Phase 3.7] Run $integration-test-review coverage gate over full diff - pending (MANDATORY when behavior-bearing code changed; skip docs-only diffs; deferred to parent step inside $workflow-review-changes)[Review Phase 4] Generate final review findings - pending[Review Phase 5] Record stale-doc findings for validation/fix loop - pending[Review Phase 6] Why-review findings validation gate before any fix - pending (MANDATORY when findings exist)[Review Phase 7] Auto-fix validated findings and restart $changes-review from Phase 0 - pending (MANDATORY when validated findings remain)[Review Phase 7.5] Run standalone full-mode $why-review over the whole target+diff; fix and re-run until zero findings - pending (MANDATORY when review loop converges clean; standalone-only — skip inside $workflow-review-changes)[Review Phase 8] Run $docs-update over full changeset to sync all impacted docs - pending (MANDATORY FINAL — always runs once review converges to zero findings; never skipped)Update todo status as each phase completes.
Note: If Phase 1 reveals 10+ changed files, replace Phase 2-4 tasks with Systematic Review Protocol tasks:
[Review Phase 2] Categorize and fire parallel sub-agents,[Review Phase 3] Synchronize and cross-reference,[Review Phase 3.5] Run $code-simplifier on changed code files,[Review Phase 3.7] Run $integration-test-review coverage gate,[Review Phase 4] Generate consolidated report
Phase -1: Bind the Self-Recursive Review Loop (FIRST ACTION — standalone-only; protocol-first, /goal optional)
IMPORTANT MANDATORY MUST ATTENTION: This is the VERY FIRST action in standalone mode — before Phase 0, before any git/graph command. Its purpose is to make the review→fix→re-review loop UNABANDONABLE. The loop is bound by TWO layers: the protocol loop (primary, host-independent) you self-drive, plus an optional
/goalaccelerator (a session Stop hook) WHEN available. Correctness rides on the protocol loop — hooks/commands are accelerators only, so/goal's absence NEVER weakens it.
Entry gate:
$changes-review directly).$workflow-review-changes — the parent workflow owns the loop goal (its own Phase -1 / step-0 goal gate). Record: Phase -1 deferred to parent $workflow-review-changes goal gate.Procedure:
Set the [Review Phase -1] task to in_progress.
Protocol loop — ALWAYS binding (hook/command-independent). You, the running agent, are personally responsible for not stopping until the loop below converges or bounded-escalates. This binds Claude, Codex, and Copilot equally, whether or not /goal exists:
Review the full diff → run
$why-review --validate-findingson every finding → SELF-FIX each validated finding → restart$changes-reviewfrom Phase 0 over the WHOLE updated diff (combined with the prior fixes, not just the last fix) → loop until one complete review pass finds zero findings → then run Phase 7.5: one standalone FULL-mode$why-reviewover the whole target+diff (NOT--validate-findings), fixing and re-running until it is clean → only then run the Phase 8$docs-update. Do not stop while any validated finding is unfixed, any review pass is non-clean, or the holistic full-mode$why-reviewhas unaddressed findings.
/goal command — invoke as an accelerator WHEN AVAILABLE. If a /goal command exists and you are permitted to run it in this environment, ALSO invoke it (the actual command, NOT a paraphrase) with the SAME condition, so a session Stop hook mechanically enforces the loop:
/goal changes-review self-recursive loop: review the full diff → run $why-review --validate-findings on every finding → SELF-FIX each validated finding → restart $changes-review from Phase 0 over the WHOLE updated diff (combined with the prior fixes, not just the last fix) → loop until one complete review pass finds zero findings → then run Phase 7.5: one standalone FULL-mode $why-review over the whole target+diff (NOT --validate-findings), fixing and re-running until it is clean → only then run the Phase 8 $docs-update. Do not stop while any validated finding is unfixed, any review pass is non-clean, or the holistic full-mode $why-review has unaddressed findings.
The /goal Stop hook blocks stopping until that condition holds and auto-clears when it does — do not tell the user to clear it. If /goal is unavailable, unregistered, or not permitted (e.g. Codex/Copilot, or a Claude run without the command): DO NOT error, DO NOT block, and DO NOT invent a stand-in gate. Record /goal accelerator unavailable — review loop bound by protocol (Phase -1 step 2) on the [Review Phase -1] task and proceed; the protocol loop IS the gate, enforced by discipline instead of a hook.
Set the [Review Phase -1] task to completed and proceed to Phase 0.
Why bind the loop, not just prose: the loop rules below ("restart from Phase 0", "continue until zero findings") are soft directives an agent can rationalize away after one cycle. Binding them as a standing protocol obligation (and, WHEN available, a
/goalStop hook) converts them into a mechanical block — the session cannot end with a validated finding still unfixed or a non-clean review pass. — why: a review that reports findings but stops before fixing-and-reproving them ships unreviewed work.
Phase 0: Run Graph Blast Radius Analysis (MANDATORY FIRST REVIEW STEP)
IMPORTANT MANDATORY MUST ATTENTION: FIRST review step, after the Phase -1 goal gate and before ANY other review work.
$graph-blast-radius skill.code-graph/graph.db does not exist, note "Graph not available — skipping blast radius" and proceed to Phase 0.1Phase 0.1: Change Context Comprehension & Full-Pipeline Impact Trace (MANDATORY — comprehension-first)
IMPORTANT MANDATORY MUST ATTENTION: First comprehension step — before any file-by-file or dimensional review. Blast radius (Phase 0) gathers impact data; here holistically UNDERSTAND the change, trace main affected area's full pipeline across every boundary it crosses. Apply BOTH the Cross-Stack Impact Trace and Cross-Service Check protocols (bodies in the SYNC section below). This holistic first-pass map FEEDS the later Phase 0.3 change-type risk tasks and the conditional Phase 3 synthesis — does not replace them.
Write a one-paragraph Change Context note (what changed · intent · originating tier · main affected feature/flow), then run both traces per the Cross-Stack Impact Trace and Cross-Service Check protocols (SYNC blocks below).
Parent workflow boundary: Inside $workflow-review-changes, still RUN Phase 0.1 (comprehension is local review value) but hand findings to the parent — same pattern as Phase 3.5/3.7.
Phase 0.3: Change Type Detection + Risk Tasks (MANDATORY)
Purpose: Identify HIGH-RISK change types in this diff before dimensional review. Each detected type creates a focused risk task. Change types are ORTHOGONAL to file category: the same file can be both a migration AND a security change — detect all independently.
Step 1: Detect change types
git diff --name-only HEAD # unstaged
git diff --cached --name-only # staged
# For branch or commit-range review, use the user-provided diff source:
git diff --name-only <base>...<head>
Evaluate each change type for this diff:
| Change Type | Detection Signal (adapt to project's actual conventions) | TRUE if... |
|---|---|---|
| DepUpgrade | Dependency manifest changed (package.json, *.csproj, Gemfile, go.mod, requirements.txt, Cargo.toml, pom.xml, etc.) | A version number changed in any dependency manifest |
| Migration | File path or name suggests schema change (contains migration, schema, alter_table, or matches project's migration convention) | Any migration-convention file appears in the diff |
| BusEvent | New or modified event/message definition or consumer (infer from project conventions: consumer naming, message type directories) | A consumer or event class is new or its contract changed |
| ApiContract | API definition file changed (controller, route handler, OpenAPI/GraphQL schema) with route or field differences | Diff shows route/action/field additions or removals |
| SecurityChange | Auth/permission definition changed — infer from project conventions (auth middleware, permission constants, policy definitions) | Any auth or permission gate is added, removed, or changed |
| ConfigChange | Configuration files changed (e.g., *.json, *.yaml, *.env*, *Config*, *Options*, *Settings*, *.toml) | Any config-convention file appears |
| InfraChange | Infrastructure definition changed (Dockerfile, docker-compose*.yml, CI/CD pipelines, k8s manifests, IaC files) | Any infra-convention file appears |
Record in report:
## Change Type Analysis
DepUpgrade: [YES/NO] | Migration: [YES/NO] | BusEvent: [YES/NO]
ApiContract: [YES/NO] | SecurityChange: [YES/NO] | ConfigChange: [YES/NO] | InfraChange: [YES/NO]
Step 2: Create change-type risk tasks (ALWAYS before any review work)
MANDATORY: Call task tracking for each TRUE signal. Do NOT create tasks for FALSE signals. The concerns listed are starting points — apply domain knowledge beyond them.
| Condition | task tracking subject | Key concerns to investigate (starting points — expand with domain knowledge) |
|---|---|---|
| DepUpgrade TRUE | [Review-DepUpgrade] Dependency upgrade — semver, breaking changes, security advisories | Major/minor/patch? Read upstream CHANGELOG for breaking API changes. Grep deprecated API usage. Check transitive dependency changes. Known security advisories for new version? Peer dependency compatibility? Tests still passing? |
| Migration TRUE | [Review-Migration] DB migration — rollback path, volume impact, zero-downtime | Rollback/Down script exists? Table size estimate — large tables need lock analysis. NOT NULL column without default on non-empty table? Indexes created with no-lock option? Deployment ordering (before/after service deploy)? Backfill idempotent if run twice? |
| BusEvent TRUE | [Review-BusEvent] Cross-service event/message — consumer, idempotency, retry, poison pill | Consumer exists for new event? Retry strategy: prerequisite data not synced → wait-retry vs silent skip? Handler safe to run twice (idempotency)? Malformed message handling / dead-letter configured? Ordering assumptions vs broker guarantees? |
| ApiContract TRUE | [Review-ApiContract] API contract change — backward compat, client alignment, auth | Additive or breaking? Breaking → versioning or coordinated deploy required. All callers (UI, other services, tests) still compatible? New endpoint protected appropriately? No required response fields added without client update? |
| SecurityChange TRUE | [Review-SecurityChange] Security/permission change — all paths covered, no privilege escalation | All code paths reaching the gate covered? Negative test verifying unauthorized access DENIED? Privilege escalation possible? BOTH enforcement AND display control updated? Permission definition in single authoritative place (no duplicated strings risking drift)? |
| ConfigChange TRUE | [Review-ConfigChange] Config/env change — all environments, no secrets committed | New config key present in ALL environment configs? Hardcoded default masking missing production config? Any secret value in the diff? → CRITICAL if yes. Documented in setup guide? App fails fast if config missing? |
| InfraChange TRUE | [Review-InfraChange] Infrastructure change — env parity, no dev values in prod, reproducible build | Change affects all environments consistently? Hardcoded dev values (localhost, debug flags, dev credentials)? Pinned image/dependency versions? Local dev impact documented? CI/CD secret/permission requirements documented? |
AI-SDD risk lenses: Apply these lenses when the changed files touch specs, workflows, tooling, or shared guidance.
| Lens | Review focus |
|---|---|
| Contract/API/routes | Public behavior, clients, generated specs, and regression tests still agree. |
| Permissions/security-review | Enforcement, display controls, negative tests, and authoritative permission definitions align. |
| Config/flags | All environments, examples, fail-fast behavior, and docs are current. |
| Docs/spec/test drift | Canonical specs, Section 8 TCs, dashboards, and test code are synchronized or explicitly N/A. |
| Generated mirrors | Shared skill/workflow/tooling changes were synced to generated agent surfaces. |
| Reference-only artifacts | AI-extracted specs/TCs remain draft/reference until accepted by the owning review gate. |
Step 3: Work through change-type tasks before dimensional review
For each created change-type task:
in_progressfile:line for PASS or describe finding for FAIL/WARN## {Task Subject} Findings in reportcompletedIMPORTANT: Complete ALL change-type tasks FIRST, then proceed to Phase 0.7. If no change-type signals detected, log
"No high-risk change types detected"and proceed.
Phase 0.7: Change Surface Detection + Dynamic Review Tasks (MANDATORY)
Purpose: Let AI categorize the changes by nature and create review tasks accordingly. Derive categories from what the project's actual changed files are, never assume a fixed set. Think, don't classify into a preset grid. The AI owns this step entirely.
Step 1: Derive categories from the diff
git diff --name-only HEAD # unstaged
git diff --cached --name-only # staged
# For branch or commit-range review, use the user-provided diff source:
git diff --name-only <base>...<head>
For each changed file, infer its category by examining:
Do NOT map to fixed buckets. Derive categories that fit the current repository's actual structure and vocabulary.
Common category types to consider as starting points (not exhaustive — derive what fits):
Record in report:
## Change Surface
{Category name} ({category type}): {N} files
{Category name} ({category type}): {M} files
...
Step 2: For each category, enumerate concerns and create a task
This is where you THINK, not fill in blanks. Apply
SYNC:category-review-thinkingfor each category.
For EACH identified category:
[Review-{Category}] {brief concern summary} listing derived concernsALWAYS create:
[Review-General]— universal quality: correctness, YAGNI/KISS/DRY, doc staleness, test coverage. Runs across ALL changed files regardless of other categories.
Sub-Agent Type Selection:
| Category Nature | agent_type |
|---|---|
| Code logic (any stack) | code-reviewer |
| Implements a documented spec/PBI | spec-compliance-reviewer (pre-pass, before code-reviewer) |
| Security, auth, permissions | security-auditor |
| Performance, query efficiency, latency | performance-optimizer |
| Documentation, plans, specs, ADRs | general-purpose |
| Infrastructure, CI/CD, config | general-purpose |
| Mixed or default | code-reviewer |
Spec-compliance pre-pass (when the changeset implements a documented
docs/specs/**capability or a PBI/story): spawnspec-compliance-reviewerFIRST — it verifies the implementation matches the spec (catches spec drift, missing requirements, extra features) BEFORE thecode-reviewerquality pass runs. Skip when no spec/PBI governs the change (thencode-revieweris the sole code pass). This is the one wired dispatch site forspec-compliance-reviewer(sub-agent-selection-guide.md"Spec compliance" row).
UI/frontend dimension (OWNED by this skill): When a Client-side logic or Styles/Assets category surfaces frontend files matching the project's configured frontend/UI file patterns,
$changes-reviewowns the UI review and invokes$ui-reviewas its UI dimension — preferably as a dedicatedui-ux-designersub-agent spawned in the same parallel batch as the other dimensional agents (inline-fold its checklist only when sub-agent spawning is unavailable). The checklist: long-content overflow (wrap vs ellipsis+tooltip), responsive multi-screen via flex, flex-grow vs fixed sizing (prefer min/max + flex over fixed px), z-index scale discipline (no raw numbers, no!important), and SCSS/BEM quality. This is the SAME behavior in both standalone and workflow contexts —$ui-reviewis NOT a separate workflow step; it always runs here. Skip entirely if no frontend files changed.
Step 3: Work through tasks in order
For each created task:
in_progress before startingSYNC:category-review-thinking — trust your domain knowledge beyond the examples there## {Task Subject} Findings sectioncompleted before starting next taskNEVER mark a dimension task completed by scanning. Work through each relevant file explicitly. For large categories (10+ files): escalate to a parallel sub-agent using the Systematic Review Protocol.
Phase 0.5: Plan Compliance Check (CONDITIONAL — only when active plan exists)
Check ## Plan Context in injected context:
{plan-path}/plan.md — get phase list and scopePhase 1: Get Changes and Create Report File (MUST ATTENTION)
git status for current changes, or git diff --name-only <base>...<head> for branch comparisonsgit diff or git diff <base>...<head> to see actual changesplans/reports/code-review-{date}-{slug}.mdPhase 2: File-by-File Review (Build Report Incrementally)
For EACH changed file, read and immediately update report with:
Phase 3: Fresh-Context Gate (Conditional Protocol — branch on findings and Phase 0.7 surface)
Protocol:
SYNC:double-round-trip-review+SYNC:fresh-context-review+SYNC:review-protocol-injection(all inlined above). INVARIANT: Phase 3 is review-only. It may add findings, but it MUST NOT fix or validate them. Existing findings do not require a fresh-context re-review; any non-zero finding set flows to Phase 6 why-review validation, then Phase 7 auto-fix + full$changes-reviewrestart from Phase 0. A Phase 7 restart alone is NOT a Phase 3 trigger.
Entry gate:
Skipped fresh-context pass because findings already exist; Phase 6 why-review validation is the required next gate. Then proceed to Phase 4 consolidation and Phase 6 validation.Skipped fresh-context pass because the current review is clean and no second-round trigger exists. Then proceed to Phase 4 finalization.Anti-waste rule: Do not run Phase 3 to re-review known findings before Phase 6. Do not run Phase 3 solely because Phase 7 restarted the review after fixes. The restarted review is already the required full pass; if it has zero findings and no explicit trigger above, finalize cleanly.
If the entry gate allows Phase 3, check categories from Phase 0.7 — if multiple distinct domains changed (e.g., server-side + client-side), run Synthesis Mode. Otherwise run Holistic Mode.
[SYNTHESIS MODE — when multiple distinct domains changed]
Spawn a Synthesis Agent as Round 2. Purpose: catch cross-boundary issues individual dimensional tasks cannot see.
When constructing Agent call prompt:
Copy Agent call shape from SYNC:review-protocol-injection template verbatim, agent_type: "code-reviewer"
Embed all 11 universal SYNC blocks verbatim
Set Task as:
Synthesis review — cross-boundary concerns ONLY across the changed domains in this diff.
You have these dimensional findings as context: {summary from each dimensional task}.
Re-read ALL changed files from scratch via your own tool calls.
Focus ONLY on cross-boundary concerns — do NOT re-review each domain's internals:
1. Contract Alignment: Do callers match what callees expose? (routes, parameters, field names, types)
2. Data Consistency: Are field names/types consistent across layer boundaries?
3. Security Boundary: Is auth enforced on BOTH sides (enforcement AND display control)?
4. Cross-Layer Naming: Same concept named differently across layers?
5. Missing Wiring: New producer with no consumer? New consumer with no producer? New feature with no doc?
6. Documentation: Docs reflect changes in BOTH domains together?
Set Target Files as "use the selected diff source from Phase 1"
Set report path as plans/reports/synthesis-review-{date}.md
After sub-agent returns:
## Synthesis Round Findings in main report — DO NOT filter or override[HOLISTIC MODE — when single domain changed]
No cross-boundary synthesis needed. Spawn standard holistic Round 2.
When constructing Agent call prompt:
SYNC:review-protocol-injection template verbatimagent_type based on domain's dominant concern (see Sub-Agent Type Selection)"Review the selected diff holistically. Focus on big picture — overall technical approach coherence, architecture layers, logic placement (lowest layer), DRY violations, YAGNI/KISS, function complexity. Domain: {category from Phase 0.7} — apply domain knowledge for this category accordingly.""use the selected diff source from Phase 1"plans/reports/changes-review-round{N}-{date}.mdAfter sub-agent returns:
## Round {N} Findings (Fresh Sub-Agent) in main report — DO NOT filter or overrideThe following checks are handled by sub-agent but can be verified in Phase 4:
Clean Code & Over-engineering Checks:
Documentation Staleness Check (REQUIRED):
For each changed file, identify related documentation:
$docs-update or applies doc edits.Spec Drift Adjudication (REQUIRED when behavior changed): Apply SYNC:spec-drift-adjudication. For every behavior-bearing change, compare it against the canonical Feature Spec under docs/specs/ and classify any divergence as CODE-WRONG (change violates an intended spec rule/AC/invariant → BLOCKING finding, fix code/test), SPEC-STALE (intentional behavior change the spec no longer reflects → route to $spec [update] + $spec [mode=tests] [update]), AMBIGUOUS (ask the user directly before editing either side), or SPEC-SILENT (code correctly enforces an invariant no spec artifact states → ENRICH: add the §4 BR/§3 AC + a §8 TC via $spec [update] + $spec [mode=tests], then a guarding test). Record the verdict per changed behavior (Spec in sync when no divergence). Do not normalize drift just because code/tests pass. This is the bidirectional generalization of the post-bugfix "Was spec wrong?" check — it runs for ALL behavior-changing reviews, not only post-bugfix. Flag findings here; Phase 6 validates and Phase 7 fixes (CODE-WRONG fixes route through the fix loop; SPEC-STALE and SPEC-SILENT fixes route to the canonical spec updater before $docs-update).
Correctness & Bug Detection: Apply SYNC:bug-detection — null safety, boundaries, error handling, resource cleanup, concurrency.
Test Spec Verification: Apply SYNC:test-spec-verification — locate specs, verify coverage, flag gaps.
Integration Test Sync: Apply SYNC:integration-test-sync-check — surface missing tests by asking the user directly.
Translation Sync: Apply SYNC:translation-sync-check — for multilingual UI text changes, require translation updates or explicit user risk acceptance.
Phase 3.5: Code-Simplifier Quality Optimization (MANDATORY when code files changed)
Purpose: A correctness review proves the change WORKS; this gate proves the changed code stays easy to read, consistent, and cheap to change. Bug-finding (Phases 2-3) and simplification optimization are different lenses — run both.
$code-simplifieris the canonical owner of clarity/consistency/maintainability refinement, so this skill delegates to it rather than duplicating that logic.
Entry gate:
.cs, .ts, .tsx, .html, .scss, .css, tests, scripts, build/config-as-code).Skipped Phase 3.5 — no code files in diff.Protocol:
[Review Phase 3.5] task to in_progress.$code-simplifier scoped to the changed code files only (pass the Phase 1 diff source — working-tree, staged, branch, or commit range — so it refines the related changed files, NOT the whole codebase). Direct it to surface reuse, DRY, KISS/YAGNI, naming, dead-code, altitude/layer-placement, and readability simplifications.$code-simplifier runs in report mode: integrate its recommendations into the main report under ## Code-Simplifier Optimization Findings with file:line evidence and a one-line rationale each. These are findings, not edits.[Review Phase 3.5] task to completed.Pipeline integration: Phase 3.5 findings are ordinary findings — they consolidate in Phase 4, are validated in Phase 6 ($why-review --validate-findings filters false-positive or change-cost-raising simplifications), and only validated ones are fixed in Phase 7. NEVER let $code-simplifier mutate the working tree before Phase 6 validates its suggestions.
Parent workflow boundary: When this skill is invoked as step 1 inside $workflow-review-changes, still run Phase 3.5 (it is a review dimension, producing findings for the report) but do NOT fix here — the parent workflow's $code-simplifier self-review and $feature-implement fix cycle own application. Record the findings and hand the report to parent step 2.
Phase 3.7: Integration-Test-Review Coverage Gate (MANDATORY when behavior-bearing code changed)
Purpose: Phases 2-3 prove the change is correct as written; this gate proves the change is covered and specced.
$integration-test-reviewis the canonical owner of the 7-gate test-quality audit — its Gate 7 (Change Coverage) maps every behavior-changing production file in the diff to a covering test (integration-first; unit fallback needs explicit justification) AND a spec TC. This skill delegates to it rather than duplicating that logic.SYNC:integration-test-sync-checkstays as the lightweight file-pairing check; this gate goes deeper — assertion quality, data-state verification, repeatability, and bidirectional spec↔test↔code alignment over the full change set.
Entry gate:
Skipped Phase 3.7 — no behavior-bearing code in diff.Protocol:
[Review Phase 3.7] task to in_progress.$integration-test-review scoped to the Phase 1 diff source (working-tree, staged, branch, or commit range) so it audits the FULL change set — changed production code AND changed test files, never just the test files. It runs all 7 quality gates, builds the Gate 7 Coverage Mapping Table, and cross-checks spec TCs in both directions.## Integration-Test-Review Findings: per-gate verdicts, the Coverage Mapping Table, and every GAP / SPEC-GAP / unjustified COVERED-UNIT as a finding (GAP = HIGH severity minimum; CRITICAL for auth/money/data-integrity paths).[Review Phase 3.7] task to completed.Pipeline integration: Phase 3.7 findings are ordinary findings — consolidated in Phase 4, validated in Phase 6, fixed in Phase 7. GAP fixes WRITE the missing test via $integration-test; SPEC-GAP fixes run $spec [mode=tests] [update]. The Phase 7 restart then re-audits coverage over the full updated diff, including the new tests.
Parent workflow boundary: When this skill is invoked as step 1 inside $workflow-review-changes, do NOT run Phase 3.7 locally — the parent workflow's dedicated $integration-test-review step owns the 7-gate audit and coverage mapping. Record Phase 3.7 deferred to parent workflow $integration-test-review step. (SYNC:integration-test-sync-check still applies locally as the lightweight pairing check.)
Phase 4: Generate Final Review Result
Update report with final sections (MUST ATTENTION — include every section below):
Spec in sync, with the routed fix; or "No behavior change — N/A")Dual-Feedback Ledger (REQUIRED for every behavior-changing finding). A behavior gap must feed back into BOTH the spec AND the tests — not merely fix the code. The Spec Drift Adjudication row above and the Phase 3.7 Gate 7 coverage row each cover only ONE axis; this ledger unifies them into a single "update BOTH" assertion so neither is silently skipped. For each behavior-changing finding, emit one row with two cells:
Finding ( file:line)Spec feedback Test feedback {cite}{the §8 spec/Feature-Spec update needed — e.g. $spec [update] then $spec [mode=tests], OR N/A-because-CODE-WRONG-spec-already-correct}{the TC/regression test needed — e.g. new §8 regression TC via $spec [mode=tests], or covering integration test via $integration-test}
- A blank cell on EITHER axis = FAIL. "N/A" alone is not allowed — every N/A must carry its reason inline (e.g.
N/A — CODE-WRONG: canonical spec already describes the correct behavior, so no spec edit; only the regression TC is owed).- CODE-WRONG finding → Spec feedback is typically
N/A — spec correct, Test feedback is REQUIRED (regression TC first, perSYNC:spec-drift-adjudication).- SPEC-STALE finding → BOTH cells are non-N/A: Spec feedback =
$spec [update]then$spec [mode=tests]; Test feedback = the new/updated TC + guarding test.- SPEC-SILENT finding (code correctly enforces an invariant the spec never states) → BOTH cells are non-N/A: Spec feedback = add the missing §4 BR / §3 AC (+ §5 invariant if applicable) and a §8 TC via
$spec [update]+$spec [mode=tests]; Test feedback = the new property/regression test guarding the now-written invariant. The highest-value capture — never leave a discovered invariant only in code or only in tests.- Covered-but-stale TC (Gate 7 SPEC-GAP routed by
$integration-test-review— its Gate 7 classifies a TC that exists but no longer describes current behavior as a SPEC-GAP, not a satisfied coverage row): Spec feedback = correct the stale §8 TC via$spec [mode=tests] [update]; Test feedback = update the guarding test to the corrected TC.- This ledger is itself an ordinary finding set: it consolidates here (Phase 4), is validated in Phase 6 (
$why-review --validate-findingsconfirms BOTH axes are present for each behavior change), and its owed spec/test actions are applied in Phase 7. A ledger row with a blank axis that survives to Phase 7 = the review is INCOMPLETE.
If Documentation Staleness Check in Phase 4 identified stale docs:
$docs-update yet; stale-doc findings are fixed in Phase 7 only after $why-review --validate-findings returns CLEAN for them$changes-review invocation must re-review the updated docs from Phase 0Phase 5 triages only the docs the review FLAGGED. Regardless of whether anything is flagged here, the mandatory Phase 8 final
$docs-updategate still runs once the review converges clean — it independently detects impacted docs this triage may have missed. Phase 5 is conditional; Phase 8 is unconditional.
Before approving, verify artifacts are easy to read, maintain, understand:
docs/project-config.json or equivalent)orderRecords not data)isActive, hasPermission, canEdit)file:line showing existing pattern)Concise hot-path pass — OOM first, then structure, then batching. Deep multi-dimension analysis belongs to
$performance-review; flag here, route there if it needs measurement.
SELECT *, no full materialization before paging/filtering, stream/chunk instead of buffering a whole export, no blobs/large-JSON/tracked entities loaded for list views, no unbounded cache/accumulator, no accidental multiple enumeration. Reduce rows AT THE SOURCE — row COUNT before row SIZESet/Map/dict lookup instead of linear find/includes/contains inside a loop; no O(n²) where O(n log n)/O(n)/O(1) existsIN/bulk/aggregate/prefetch); run independent calls bounded-parallel, not sequential awaits (preserve ordering/authorization)For bugfix, failed-verification, stale/incorrect final output, regression, or behavior-changing fixes, FAIL review if any required proof is missing:
Debugger Trace: End -> Start names the observed final state and final reader/query/renderer/assertionSYNC:spec-drift-adjudication): for every behavior-changing file, decide whether a divergence from the canonical Feature Spec is CODE-WRONG (change is the defect — BLOCKING, fix code/test), SPEC-STALE (change is intended — update spec via $spec [update] first), AMBIGUOUS (intended behavior unclear — ask the user directly before editing either side), or SPEC-SILENT (code correctly enforces an invariant no spec artifact states — enrich: add §4 BR/§3 AC + §8 TC + guarding test). Do not flag a divergence as a one-directional "stale doc" without naming which side is canonical. Unadjudicated behavior-vs-spec divergence is a FAIL; an unwritten-but-enforced invariant left uncaptured is equally a FAIL.Contract: See
.claude/skills/shared/sdd-artifact-contract.md→ "AI-SDD Mandates (M1-M7)". This review enforces M6 for any spec/feature-doc/PBI/story/test-spec touched by — or supposed to be synced by — this change. Frame each check as: did this change introduce M1/M2 prose leakage, break a logical-ID mapping (M3), create AC/expected-result ambiguity (M4), or ADD A NON-DEMOABLE CASE TO A BUSINESS SPEC (M7)? A FAIL must name the violated mandate ID and cite the changed file + line. Passing an introduced M1-M5/M7 violation makes this review itself defective. (M6 binds THIS review, not the artifact — hence the artifact-facing set reads M1-M5 and M7, never "M1-M6".)Carriers are EXEMPT from M1/M2 — source identifiers stay CORRECT inside
[Source: ...],**Evidence**,CoveredBy:fields, legacy**IntegrationTest:**migration fields, YAML frontmatter, and```mermaid ```blocks. Only flag leakage in spec/doc narrative prose. Banned prose token list:docs/project-reference/spec-principles.md§3.2. Scope this gate to changed artifact files (docs/specs/**, PBI/story/test-spec files in the diff); SKIP with a one-line note when the diff touches no such artifact.
spec-principles.md §3.2). Cite the changed file + line + token.FR-/BR-/OP-/TC-), strips a logical ID, demotes it below the [Source:] evidence, writes physical code coordinates or repository-root paths instead of a stack-portable abstract anchor ([Source: namespace/service/id]), OR drops the [Source:] abstract-anchor evidence (evidence is REQUIRED and KEPT — SECONDARY to the logical ID; a code move alone does NOT change the anchor — physical coords live only in the provenance sidecar).When is an invocation (a handler runs, a consumer receives, a job fires, data syncs, a model/schema is inspected) or whose Then asserts a schema/type/nullability/column/call-count rather than a business outcome. Cite the changed file + line + the offending When/Then. The case belongs in the technical tree — the fix is to move it there, or rewrite it demoably, NOT to reword it.🔴 M7 is the gate on the bugfix→spec pump — this is the step where business specs actually rot. The failure has a signature: a technical bug is fixed (a sync, a consumer, an event handler, a load path, a UI defect), no business behavior changes, and a new case is nonetheless appended to the business spec — carefully worded to avoid technical vocabulary, and therefore passing M1 and M2 cleanly while remaining a case no user or QC could ever demo. ⚠️ M1 governs vocabulary; M7 governs subject matter. A reviewer who checks only M1/M2 waves these through forever, one defensible case at a time, and the business tree fills with cases that cannot be demoed.
Ask on every diff that fixes a technical bug: did the BUSINESS behavior change? If NO, the business spec should usually gain NOTHING — ⚠️ "a no-op is a correct outcome" (see the contract's
[HARD] A no-op is a correct outcome). A regression test in the technical tree is the correct home for a technical fix. Adding a business TC "for coverage" is the defect, not diligence.
If ANY item fails → the verdict is FAIL; list each violated mandate ID with its changed-file/line citation in the Critical Issues or High Priority section.
Provide feedback in this format:
Summary: Brief overall assessment
Critical Issues: (Must fix before commit)
High Priority: (Should fix)
Suggestions: (Nice to have)
Documentation Staleness: (Docs that may need updating)
No doc updates needed — if no changed file maps to a docSpec Drift Adjudication: (Behavior-changing changes only — per SYNC:spec-drift-adjudication)
<behavior/file> → CODE-WRONG | SPEC-STALE | AMBIGUOUS | SPEC-SILENT — verdict + routed fix ($spec [update], regression TC, ask the user directly, or enrich-spec: add §4 BR/§3 AC + §8 TC + guarding test)Spec in sync — if changed behavior matches the canonical Feature SpecNo behavior change — N/A — if the diff is docs/tooling/style onlyDebugger Trace Gaps: (Bugfix/behavior-changing changes only)
Trace complete — if the required trace, feeder paths, hypothesis matrix, owner, and forward proof are presentGoal Satisfaction: (MANDATORY before any PASS verdict — resolve the active Goal Contract per the goal-contract-satisfaction-loop protocol: active plan goal.md → plans/goals/{YYMMDD-HHmm}-{slug}/goal.md; if none exists, record No active goal — skipped: {one-line reason})
| Success Criterion | Evidence | Status |
|---|---|---|
| {saved criterion} | {file:line, command output, report path} | PASS/FAIL/BLOCKED |
Positive Notes:
Suggested Commit Message:
type(scope): description
- Detail 1
- Detail 2
When Phase 1 finds 10+ changed files, apply the Systematic Review Batching protocol (map-reduce: size-capped batches + hierarchical synthesis) defined below.
MANDATORY — NO EXCEPTIONS: If NOT already in a workflow, MUST use ask the user directly to ask user. Do NOT judge task complexity or decide "simple enough to skip" — user decides, not you:
- Activate
workflow-review-changesworkflow (Recommended) — run the canonical workflow from.claude/workflows.json; it sequences this skill, findings validation, parallel reviewers,code-simplifierself-review, fix-plan cycle, full re-review restart, docs, and handoff.- Execute
$changes-reviewdirectly — run this skill standalone
For each changed file, verify no import from forbidden layer:
docs/project-config.json → architectureRules.layerBoundariespaths glob patternscannotImportFrom, it is a violationarchitectureRules.excludePatterns"BLOCKED: {layer} layer file {filePath} imports from {forbiddenLayer} layer ({importStatement})"If architectureRules not present in project-config.json, skip silently.
Purpose: Validate own findings BEFORE any fix. Verify EVERY finding is correct, proof-backed (
file:line), reasonable, and convention-aligned. Catch false positives, inflated severity, and missed improvements before code/doc edits.
MANDATORY: REQUIRED todo task whenever findings exist. Register via task tracking as
[Review Phase 6] Why-review findings validation gate(already in Phase task list above). Do NOT fix, docs-update, commit, or hand off until this gate passes CLEAN or reaches an explicit blocked state.