Change Review
Core principle
Change Review is an independent, read-only attempt to disprove readiness.
Ask two questions at the same time:
- Spec axis: does the work satisfy the stated requirements and acceptance criteria?
- Standards axis: is it secure, correct, maintainable, tested, and safe to operate?
Do not assume changed lines are the blast radius. Trace callers, callees, contracts,
data flow, tests, runtime paths, and user impact before giving a verdict.
Load when
Load when a concrete software project artifact needs review: a diff, branch, PR, patch,
migration, fix, implementation result, or project plan that must be assessed against
its specification and engineering standards.
Also load when another Keystone skill needs ../_shared/gates/review.md satisfied before shipping.
At entry, use the full Keystone path when there is an inspectable project artifact and
a readiness or blocker verdict is the outcome. Handle general critiques, prose review,
and standalone explanations directly. Explicit invocation selects the full Change Review behavior.
Not for
Do not use Change Review for:
- fixing, refactoring, formatting, or rewriting code
- committing, merging, tagging, publishing, or shipping
- initial implementation planning before a reviewable artifact exists
- open-ended context-survey with no concrete artifact to assess
- debugging where the requested outcome is a fix
If asked to review and fix, review first, stop, and hand findings to implementation, root-cause-analysis,
context-survey, shipping, or a human only after explicit permission.
Outcome contract
A complete review returns:
- verdict: Block, Caution, or Looks good
- findings ordered P0, P1, P2, P3, then Nitpicks
- evidence for every finding: file/line, behavior path, contract, test, log, or doc
- user impact and why the severity is justified
- remediation guidance without applying the fix
- tests that should be added or updated for affected behavior
- scope reviewed, validation run, limitations, and read-only confirmation
The review is incomplete if it only inspects the diff, only comments on style, or
cannot explain how the work behaves at runtime.
Change Review passes
Perform multiple passes. New evidence from one pass expands later passes.
Pass 0: scope and baseline
- Identify artifact reviewed: diff, branch, files, release candidate, or plan result.
- Read the user request, issue, spec, acceptance criteria, and claimed completion.
- Check repository status without modifying files.
- Record uncommitted work as context, not cleanup.
Pass 1: spec compliance
- Compare implementation against explicit requirements and non-goals.
- Check edge cases, error states, and acceptance criteria.
- Separate spec misses from standards concerns.
- Treat a clean implementation of the wrong behavior as a finding.
Pass 2: correctness and runtime paths
- Trace primary success and failure paths end to end.
- Follow changed functions into helpers, services, adapters, persistence, UI, jobs, and
serializers.
- Validate inputs, outputs, invariants, state transitions, retries, ordering,
concurrency assumptions, and error propagation.
- Look for nullability, off-by-one, time, encoding, pagination, caching, idempotency,
cancellation, and partial-failure issues.
Pass 3: regression and compatibility
- Identify callers, consumers, and workflows that rely on old behavior.
- Check public APIs, CLIs, schemas, migrations, persisted data, environment variables,
feature flags, configuration defaults, and documentation.
- Consider rollback, downgrade, mixed-version, and incremental rollout risks.
- Search for tests or fixtures that encode previous behavior.
Pass 4: security, privacy, and abuse resistance
- Review authentication, authorization, tenancy, secrets, logging, validation,
injection, XSS, SSRF, path traversal, unsafe deserialization, and RCE surfaces.
- Check whether sensitive data leaks through errors, logs, telemetry, URLs, caches,
exports, screenshots, or third-party calls.
- Consider malicious users, compromised clients, replay, races, resource exhaustion,
privilege escalation, and denial of service.
Pass 5: tests and proof
- Map changed behavior to existing tests.
- Identify missing unit, integration, contract, regression, migration, security,
accessibility, performance, or end-to-end coverage.
- Prefer behavior assertions over implementation trivia.
- Run focused read-only validation when practical: existing tests, type checks, lint,
builds, or targeted commands.
- If validation cannot run, state why and what should be run.
Pass 6: maintainability and architecture
- Assess clarity, cohesion, naming, dependency direction, duplication, complexity,
observability, and debuggability.
- Check architectural boundaries, local conventions, and API contracts.
- Flag brittle abstractions, hidden coupling, unnecessary cleverness, and premature
generalization when they create real maintenance risk.
Pass 7: user impact and final consistency
- Translate technical issues into affected personas, workflows, data, accessibility,
performance, reliability, and support burden.
- Re-rank findings by blast radius, likelihood, recoverability, and detectability.
- De-duplicate findings, verify evidence, and state limitations honestly.
Severity rubric
Severity reflects realistic impact, not fix size.
P0: Critical blocker
Immediate or likely severe harm. Examples:
- data loss, corruption, or irreversible destructive action
- unauthorized access, privilege escalation, secret exposure, or major privacy breach
- production outage or release artifact that cannot safely deploy
- legal/compliance risk with material impact
P0 means do not ship or merge without accountable human acceptance and mitigation.
P1: Blocking defect
High-impact issue that violates core requirements or creates serious regression risk.
Examples:
- primary workflow broken for a meaningful user segment
- incorrect billing, permissions, persistence, or business logic
- migration or compatibility gap that can break real deployments
- high-risk behavior lacking tests plus a plausible failure mode
P1 normally blocks shipping.
P2: Important non-blocker or conditional blocker
Material issue with bounded impact, lower likelihood, or workaround. Examples:
- edge case with clear user impact
- moderate-risk test gap
- maintainability issue likely to cause near-term bugs
- weak observability for a risky path
State whether release context makes it blocking.
P3: Low-risk improvement
Valid concern with limited impact. Examples:
- confusing name or local complexity that slows future work
- minor non-hot-path performance inefficiency
- incomplete docs for non-critical behavior
- small test organization weakness
P3 should not block unless it compounds with related risks.
Nitpick
Cosmetic, preference-level, or optional feedback: unenforced formatting, wording tweaks,
or style suggestions with no correctness or maintainability impact. Keep nitpicks
separate from severity findings.
Impact tracing
For each meaningful change, trace:
- Entry points: user action, API route, CLI, job, event, hook, or import.
- Callers: who invokes this and what assumptions they make.
- Callees: helpers, libraries, persistence, network calls, and side effects.
- Data flow: input, validation, transformation, storage, serialization, output.
- Contracts: types, schemas, public APIs, flags, config, docs, and errors.
- Runtime paths: success, failure, retry, timeout, cancellation, concurrency.
- Tests: existing coverage, missing assertions, fixtures, mocks, snapshots.
- Users: visible behavior, accessibility, performance, reliability, trust.
If tracing leaves uncertainty, gather more read-only evidence or report the limitation.
Do not invent confidence.
Security and regression checklist
Ask for every non-trivial review:
- Can a user access, modify, infer, or delete data they should not?
- Are authn, authz, tenancy, and ownership checked at the right layer?
- Can untrusted input reach queries, interpreters, shells, paths, templates, redirects,
or deserializers unsafely?
- Are secrets, tokens, PII, or internal identifiers exposed in logs, errors, telemetry,
URLs, caches, or client bundles?
- Did defaults, permissions, feature flags, or safeguards become unsafe?
- Are races, duplicate submissions, retries, replay, and out-of-order events safe?
- Can persisted data be corrupted, stranded, or made hard to rollback?
- Are public APIs, stored data, configs, and integrations backward compatible?
- Does failure degrade safely without hidden partial success?
- Are performance, resource use, accessibility, localization, and platform differences
acceptable for realistic users and abuse?
- Do tests cover the affected behavior and important regression paths?
Subagents and reasoning
Use read-only subagents for separable risks: security/privacy, test coverage,
architecture/API compatibility, persistence/migration, accessibility/user impact,
performance, concurrency, or release risk. Use deeper analysis for security-sensitive,
data-loss, billing, permissions, public API, migration, or cross-system reviews. When delegation is available, encode required evidence depth and review standard in the prompt.
Subagents must receive the read-only contract and return evidence-backed findings, not
patches. Reconcile duplicates and conflicts before reporting. The primary reviewer
owns final severity and verdict.
Hard rules
- Read-only: inspect files without editing, formatting, generating, staging, committing, merging, tagging, or publishing them.
- Report issues without silently fixing them.
- Do not run destructive or project-mutating commands.
- Do not rely only on changed lines; inspect impacted code paths and contracts.
- Do not approve solely because tests pass.
- Do not report speculation as fact; mark uncertainty.
- Do not bury blockers under minor comments.
- Do not disguise style preferences as correctness findings.
- Do not omit needed tests when behavior changed.
- Do not satisfy
../_shared/gates/review.md unless blockers and non-blockers are separated.
- Load
../_shared/gates/review.md before the verdict; Change Review owns the review execution and supplies the gate evidence.
- Run the checkpoint gate before the final response; if review passes and delivery/finalization was requested, route to
shipping or leave an explicit shipping prompt.
Failure modes
Avoid these anti-patterns:
- Single-pass skim: one read of changed lines plus generic comments.
- Diff tunnel vision: missing callers, callees, contracts, and user impact.
- Checklist theater: naming security/tests without tracing actual risk.
- Green-test rubber stamp: assuming current tests prove new behavior.
- Spec blindness: judging code quality while requirements are unmet.
- Standards blindness: accepting unsafe or fragile code because the narrow spec passes.
- Severity inflation: turning preferences into blockers.
- Severity deflation: downgrading real user harm because the fix is small.
- Patch creep: fixing, refactoring, or committing instead of reviewing.
- Unowned uncertainty: failing to state what was not verified.
- Lost next event: Change Review passes but never routes or prompts for
shipping when finalization remains.
Output format
Worked finding example:
### P1
- Missing tenant check on invoice export
- Evidence: `api/exportInvoice.ts:42` accepts `invoiceId` and loads the invoice without comparing `invoice.accountId` to the authenticated account; `/invoices/:id/export` is reachable by any logged-in user.
- Impact: A user who guesses another invoice ID can download billing data from a different account, which is a privacy and authorization breach.
- Recommendation: Enforce tenant ownership before export and return the existing unauthorized response on mismatch.
- Tests needed: Add an integration test where account A requests account B's invoice and receives 403/no file, plus a happy-path same-account export test.
Use this structure:
## Verdict
Block | Caution | Looks good
## Scope reviewed
- Artifact reviewed:
- Key files/paths inspected:
- Validation run:
- Review limitations:
- Read-only confirmation: no files changed by this review
## Findings
### P0
- [Title]
- Evidence:
- Impact:
- Recommendation:
- Tests needed:
### P1
None
### P2
None
### P3
None
## Nitpicks
None
## Tests to add or update
- Behavior:
- Suggested coverage:
- Why it matters:
## Handoff
- Blockers:
- Non-blocking follow-up:
- Suggested owner module: implementation, root-cause-analysis, context-survey, shipping, or human
### Checkpoint
Use the required fields from `../_shared/gates/checkpoint.md`.
If a severity has no findings, write None. Recommendations must be actionable but
must not be applied by Change Review.
Shared standards
For architecture-sensitive or code-quality-sensitive work, load ../_shared/engineering-standards.md and apply it as reference, not dogma.
1---2name: change-review3description: Project change review for a concrete diff, branch, PR, patch, migration, fix, implementation result, or project plan that needs a new evidence-backed readiness verdict, or when another Keystone skill needs the Review Gate evaluated.4---56# Change Review78## Core principle9Change Review is an independent, read-only attempt to disprove readiness.1011Ask two questions at the same time:121. **Spec axis:** does the work satisfy the stated requirements and acceptance criteria?132. **Standards axis:** is it secure, correct, maintainable, tested, and safe to operate?1415Do not assume changed lines are the blast radius. Trace callers, callees, contracts,16data flow, tests, runtime paths, and user impact before giving a verdict.1718## Load when19Load when a concrete software project artifact needs review: a diff, branch, PR, patch,20migration, fix, implementation result, or project plan that must be assessed against21its specification and engineering standards.2223Also load when another Keystone skill needs `../_shared/gates/review.md` satisfied before shipping.2425At entry, use the full Keystone path when there is an inspectable project artifact and26a readiness or blocker verdict is the outcome. Handle general critiques, prose review,27and standalone explanations directly. Explicit invocation selects the full Change Review behavior.2829## Not for30Do not use Change Review for:31- fixing, refactoring, formatting, or rewriting code32- committing, merging, tagging, publishing, or shipping33- initial implementation planning before a reviewable artifact exists34- open-ended context-survey with no concrete artifact to assess35- debugging where the requested outcome is a fix3637If asked to review and fix, review first, stop, and hand findings to `implementation`, `root-cause-analysis`,38`context-survey`, `shipping`, or a human only after explicit permission.3940## Outcome contract41A complete review returns:42- verdict: **Block**, **Caution**, or **Looks good**43- findings ordered P0, P1, P2, P3, then Nitpicks44- evidence for every finding: file/line, behavior path, contract, test, log, or doc45- user impact and why the severity is justified46- remediation guidance without applying the fix47- tests that should be added or updated for affected behavior48- scope reviewed, validation run, limitations, and read-only confirmation4950The review is incomplete if it only inspects the diff, only comments on style, or51cannot explain how the work behaves at runtime.5253## Change Review passes54Perform multiple passes. New evidence from one pass expands later passes.55### Pass 0: scope and baseline56- Identify artifact reviewed: diff, branch, files, release candidate, or plan result.57- Read the user request, issue, spec, acceptance criteria, and claimed completion.58- Check repository status without modifying files.59- Record uncommitted work as context, not cleanup.6061### Pass 1: spec compliance62- Compare implementation against explicit requirements and non-goals.63- Check edge cases, error states, and acceptance criteria.64- Separate spec misses from standards concerns.65- Treat a clean implementation of the wrong behavior as a finding.6667### Pass 2: correctness and runtime paths68- Trace primary success and failure paths end to end.69- Follow changed functions into helpers, services, adapters, persistence, UI, jobs, and70 serializers.71- Validate inputs, outputs, invariants, state transitions, retries, ordering,72 concurrency assumptions, and error propagation.73- Look for nullability, off-by-one, time, encoding, pagination, caching, idempotency,74 cancellation, and partial-failure issues.7576### Pass 3: regression and compatibility77- Identify callers, consumers, and workflows that rely on old behavior.78- Check public APIs, CLIs, schemas, migrations, persisted data, environment variables,79 feature flags, configuration defaults, and documentation.80- Consider rollback, downgrade, mixed-version, and incremental rollout risks.81- Search for tests or fixtures that encode previous behavior.8283### Pass 4: security, privacy, and abuse resistance84- Review authentication, authorization, tenancy, secrets, logging, validation,85 injection, XSS, SSRF, path traversal, unsafe deserialization, and RCE surfaces.86- Check whether sensitive data leaks through errors, logs, telemetry, URLs, caches,87 exports, screenshots, or third-party calls.88- Consider malicious users, compromised clients, replay, races, resource exhaustion,89 privilege escalation, and denial of service.9091### Pass 5: tests and proof92- Map changed behavior to existing tests.93- Identify missing unit, integration, contract, regression, migration, security,94 accessibility, performance, or end-to-end coverage.95- Prefer behavior assertions over implementation trivia.96- Run focused read-only validation when practical: existing tests, type checks, lint,97 builds, or targeted commands.98- If validation cannot run, state why and what should be run.99100### Pass 6: maintainability and architecture101- Assess clarity, cohesion, naming, dependency direction, duplication, complexity,102 observability, and debuggability.103- Check architectural boundaries, local conventions, and API contracts.104- Flag brittle abstractions, hidden coupling, unnecessary cleverness, and premature105 generalization when they create real maintenance risk.106107### Pass 7: user impact and final consistency108- Translate technical issues into affected personas, workflows, data, accessibility,109 performance, reliability, and support burden.110- Re-rank findings by blast radius, likelihood, recoverability, and detectability.111- De-duplicate findings, verify evidence, and state limitations honestly.112113## Severity rubric114Severity reflects realistic impact, not fix size.115116### P0: Critical blocker117Immediate or likely severe harm. Examples:118- data loss, corruption, or irreversible destructive action119- unauthorized access, privilege escalation, secret exposure, or major privacy breach120- production outage or release artifact that cannot safely deploy121- legal/compliance risk with material impact122123P0 means do not ship or merge without accountable human acceptance and mitigation.124125### P1: Blocking defect126High-impact issue that violates core requirements or creates serious regression risk.127Examples:128- primary workflow broken for a meaningful user segment129- incorrect billing, permissions, persistence, or business logic130- migration or compatibility gap that can break real deployments131- high-risk behavior lacking tests plus a plausible failure mode132133P1 normally blocks shipping.134135### P2: Important non-blocker or conditional blocker136Material issue with bounded impact, lower likelihood, or workaround. Examples:137- edge case with clear user impact138- moderate-risk test gap139- maintainability issue likely to cause near-term bugs140- weak observability for a risky path141142State whether release context makes it blocking.143144### P3: Low-risk improvement145Valid concern with limited impact. Examples:146- confusing name or local complexity that slows future work147- minor non-hot-path performance inefficiency148- incomplete docs for non-critical behavior149- small test organization weakness150151P3 should not block unless it compounds with related risks.152153### Nitpick154Cosmetic, preference-level, or optional feedback: unenforced formatting, wording tweaks,155or style suggestions with no correctness or maintainability impact. Keep nitpicks156separate from severity findings.157158## Impact tracing159For each meaningful change, trace:160- **Entry points:** user action, API route, CLI, job, event, hook, or import.161- **Callers:** who invokes this and what assumptions they make.162- **Callees:** helpers, libraries, persistence, network calls, and side effects.163- **Data flow:** input, validation, transformation, storage, serialization, output.164- **Contracts:** types, schemas, public APIs, flags, config, docs, and errors.165- **Runtime paths:** success, failure, retry, timeout, cancellation, concurrency.166- **Tests:** existing coverage, missing assertions, fixtures, mocks, snapshots.167- **Users:** visible behavior, accessibility, performance, reliability, trust.168169If tracing leaves uncertainty, gather more read-only evidence or report the limitation.170Do not invent confidence.171172## Security and regression checklist173Ask for every non-trivial review:174- Can a user access, modify, infer, or delete data they should not?175- Are authn, authz, tenancy, and ownership checked at the right layer?176- Can untrusted input reach queries, interpreters, shells, paths, templates, redirects,177 or deserializers unsafely?178- Are secrets, tokens, PII, or internal identifiers exposed in logs, errors, telemetry,179 URLs, caches, or client bundles?180- Did defaults, permissions, feature flags, or safeguards become unsafe?181- Are races, duplicate submissions, retries, replay, and out-of-order events safe?182- Can persisted data be corrupted, stranded, or made hard to rollback?183- Are public APIs, stored data, configs, and integrations backward compatible?184- Does failure degrade safely without hidden partial success?185- Are performance, resource use, accessibility, localization, and platform differences186 acceptable for realistic users and abuse?187- Do tests cover the affected behavior and important regression paths?188189## Subagents and reasoning190Use read-only subagents for separable risks: security/privacy, test coverage,191architecture/API compatibility, persistence/migration, accessibility/user impact,192performance, concurrency, or release risk. Use deeper analysis for security-sensitive,193data-loss, billing, permissions, public API, migration, or cross-system reviews. When delegation is available, encode required evidence depth and review standard in the prompt.194195Subagents must receive the read-only contract and return evidence-backed findings, not196patches. Reconcile duplicates and conflicts before reporting. The primary reviewer197owns final severity and verdict.198199## Hard rules200- Read-only: inspect files without editing, formatting, generating, staging, committing, merging, tagging, or publishing them.201- Report issues without silently fixing them.202- Do not run destructive or project-mutating commands.203- Do not rely only on changed lines; inspect impacted code paths and contracts.204- Do not approve solely because tests pass.205- Do not report speculation as fact; mark uncertainty.206- Do not bury blockers under minor comments.207- Do not disguise style preferences as correctness findings.208- Do not omit needed tests when behavior changed.209- Do not satisfy `../_shared/gates/review.md` unless blockers and non-blockers are separated.210- Load `../_shared/gates/review.md` before the verdict; Change Review owns the review execution and supplies the gate evidence.211- Run the checkpoint gate before the final response; if review passes and delivery/finalization was requested, route to `shipping` or leave an explicit shipping prompt.212213## Failure modes214Avoid these anti-patterns:215- **Single-pass skim:** one read of changed lines plus generic comments.216- **Diff tunnel vision:** missing callers, callees, contracts, and user impact.217- **Checklist theater:** naming security/tests without tracing actual risk.218- **Green-test rubber stamp:** assuming current tests prove new behavior.219- **Spec blindness:** judging code quality while requirements are unmet.220- **Standards blindness:** accepting unsafe or fragile code because the narrow spec passes.221- **Severity inflation:** turning preferences into blockers.222- **Severity deflation:** downgrading real user harm because the fix is small.223- **Patch creep:** fixing, refactoring, or committing instead of reviewing.224- **Unowned uncertainty:** failing to state what was not verified.225- **Lost next event:** Change Review passes but never routes or prompts for `shipping` when finalization remains.226227## Output format228Worked finding example:229```markdown230### P1231- Missing tenant check on invoice export232 - Evidence: `api/exportInvoice.ts:42` accepts `invoiceId` and loads the invoice without comparing `invoice.accountId` to the authenticated account; `/invoices/:id/export` is reachable by any logged-in user.233 - Impact: A user who guesses another invoice ID can download billing data from a different account, which is a privacy and authorization breach.234 - Recommendation: Enforce tenant ownership before export and return the existing unauthorized response on mismatch.235 - Tests needed: Add an integration test where account A requests account B's invoice and receives 403/no file, plus a happy-path same-account export test.236```237238Use this structure:239```markdown240## Verdict241Block | Caution | Looks good242243## Scope reviewed244- Artifact reviewed:245- Key files/paths inspected:246- Validation run:247- Review limitations:248- Read-only confirmation: no files changed by this review249250## Findings251### P0252- [Title]253 - Evidence:254 - Impact:255 - Recommendation:256 - Tests needed:257### P1258None259260### P2261None262263### P3264None265266## Nitpicks267None268269## Tests to add or update270- Behavior:271 - Suggested coverage:272 - Why it matters:273## Handoff274- Blockers:275- Non-blocking follow-up:276- Suggested owner module: implementation, root-cause-analysis, context-survey, shipping, or human277278### Checkpoint279Use the required fields from `../_shared/gates/checkpoint.md`.280281```282283If a severity has no findings, write `None`. Recommendations must be actionable but284must not be applied by Change Review.285286## Shared standards287288For architecture-sensitive or code-quality-sensitive work, load `../_shared/engineering-standards.md` and apply it as reference, not dogma.