review-implementation
Internal scope/classification engine composed by review-change (and reused by the audit skills): consumes the synthesized findings table, verifies every applicable axis is represented, and classifies each finding into a decision table (fix-now / replan-in-unit / decision-required
Install
npx skills add https://github.com/gtrabanco/agentic-workflow/tree/main/skills/review-implementation
claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install gtrabanco-agentic-workflow@llmmart
git clone https://github.com/gtrabanco/agentic-workflow.git
The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole gtrabanco/agentic-workflow collection as a plugin from our marketplace. Git is the plain clone.
Skill manifest
Review Implementation (internal scope/classification engine)
The classification engine the review/audit skills compose: it consumes the
synthesized findings table (the fused output of the applicable per-axis
passes), verifies every applicable axis is represented, and returns the
classified decision table — then stops. Never refactors or edits code. It owns
the scope/axis-coverage contract and the classification rubric (the
current-unit contract + routing) that review-change, audit-pr, and
product-audit reference instead of restating.
It does not scan the diff: every finding concern has exactly one owning
pass (see the axis ownership map) — the per-axis passes
(review-code, review-security, review-verify, review-perf,
design/a11y/brand/SEO) find, and this engine classifies. No broad findings
scan here.
When to use
- Invoked by
review-change(the user-facing review entry) as its classification engine, over the fused findings table. - The audit skills reference its rubric and coverage contract.
Scope
The caller's scope statement (the branch diff vs. the default branch, or the passed path/glob) is authoritative; the synthesized table was gathered over it. State the scope at the top of the classified report.
Step 0 — Discover the project (always first)
Per the agent guide's Workflow conventions + documentation map, read
what THIS skill needs: the architecture/layering rules, the testing philosophy,
and any runtime/platform, security, money, i18n/SEO/a11y and bundle rules. Pull
the project's specific risk axes from its guardrail skills where present. The
FIND.md axis map is the default; the project's docs refine which axes are
applicable.
Step 1 — Verify axis coverage (the synthesized table)
For the declared scope, confirm every applicable axis is represented in the
synthesized findings table — one finding owner per axis, per the FIND.md
map: an axis the change touches that the table says nothing about is a
missing-axis finding (axis coverage), not a silent pass. Overlapping
signals from different passes on the same defect collapse into one row during
synthesis — the table must contain neither duplicates nor gaps. State which
axes were applicable and confirm each appears.
Step 2 — Classify (the current-unit contract)
Read Classify and route and classify every row of the
synthesized table without reopening source files: ignore first (the claim),
then the current-unit contract (fix-now / replan-in-unit / decision-required
for in-scope work), then proposal for genuinely independent future
capabilities. One pass — no per-pass or per-reviewer classification.
Context budget
The input is the synthesized table, not the diff. Read at most 10 non-diff files in full for surrounding context (callers, contracts, SPEC); targeted reads (≤ 50 lines of a named range) and grep/glob results don't count. Record each classification as its table row immediately and drop raw file content.
Guardrails
- Findings + table only. Never refactor or edit code in this skill.
- One classifier. Classification happens HERE, once, over the fused table — never per-reviewer, never re-litigated in the per-axis passes.
- Honor the dead-code exception — staged/planned code is not dead code.
- Don't inflate severity; separate "correctness/security" from "taste".
- Don't deflate either: current-unit work is never
postpone/tradeoff/wontfix/disputedand never a new issue — size routes toreplan-in-unit, not to a downgrade (current-unit contract inCLASSIFY.md). - Otherwise per the project's Workflow conventions (docs-language,
evidence): cite
file:line, mark uncertainties verify.
Relationship to other skills
- Classification engine of
review-change— the user-facing review skill runs the applicable per-axis passes (the finders), fuses their tables, then composes this engine to classify.audit-prandproduct-auditreuse this rubric. - Sits in Stage 4 of the feature workflow (verification & review).
fix-nowfolds into the current unit;replan-in-unitrunsnode scripts/unit-route.mjs <unit>, whoseroute: replanline names the planner that appends user-confirmed phases beforeexecute-phase;decision-requiredblocks for the user; independent work becomes proposals the user routes totriage-issue(D3).
Done when
- A synthesized table consumed, axis coverage verified (no applicable axis missing, no duplicate rows), every finding classified with reasoning and routed — and no code changed.
Files (agentic-workflow)
-
references
-
CLASSIFY.md 8.1 KB
## Classify and route (no refactor) The single classification engine is `review-implementation`, run **once** over the **synthesized** findings table (D5). Classify each finding into exactly one class, in this order. Never reopen source files to classify; the table's evidence is authoritative. ### Step 1 — `ignore` first (the claim, not a class choice) `ignore` claims **"this is not a real defect"** — a false positive or a negligible taste/overengineering note. It is decided first, on the claim alone: a false positive has no fix and no scope to check, so it never runs through the current-unit gate. If the finding IS a real defect, it is not `ignore` — drop it only with a rationale. ### Step 2 — Is it current-unit work? (only blocking outcomes) **Severity floor first.** A `low` finding (taste, cosmetics, micro-optimization without a measured need) is **never persisted and never blocks**: it is carried as a report note with its evidence, and the fold ledger never sees it. But a real defect mislabeled `low` stays real: when the evidence shows a correctness, security, behavioral, or data-integrity defect, classify it at `med` minimum — deflating a real defect to `low` to unblock a review is itself a review defect. Only `high` and `med` findings run through the current-unit gate below. A finding belongs to the **current unit** when it maps to the governing SPEC, a phase, a documented invariant, correctness, security, accessibility, a required UX/error state, or an expectation necessary for a competent user to consider an in-scope capability complete (D2: complete capabilities, not short unit duration). Current-unit work has **only blocking outcomes**: - **fix-now** — it can fold directly. It is NEVER a tracked issue and NEVER routes to `plan-fix`: it folds into the current unit's open phase (AC 12). - **replan-in-unit** — it needs additional user-confirmed phases (see *Large in-scope fix-now → replan, never downgrade* below). - **decision-required** — a new product/architecture decision is unavoidable. Stop and surface it; the unit blocks until the user decides. For current-unit work, `postpone`, `tradeoff`, `wontfix`, `disputed`, and reviewer-created issue creation are **forbidden** (AC 10). A previously approved trade-off is **cited as existing evidence**, never reinvented by review. `disputed` remains a later fold/user outcome, not a reviewer shortcut. ### Step 3 — Independent future capabilities → proposals, never issues Only a **truly independent future capability** — work the current unit does not promise and no competent user expects from it (D3) — may become a **non-blocking proposal**: batched in the report with a trigger, and NEVER sent to `triage-issue` automatically. `review-change` creates no backlog work; only the user routes a proposal to `triage-issue`. ### Large in-scope fix-now → replan, never downgrade An in-scope fix-now too large to fold as-is (multi-file redesign, or evidence the unit should have been split) keeps its **fix-now** class — size is never a reason to downgrade. Set its `Route` to **`replan-in-unit`**: run `node scripts/unit-route.mjs <unit>` — its `route: replan` line names the planner (`/plan-feature <unit>` or `/plan-fix <n>`) — and the unit's SPEC `## Phases` ledger gets one or more new phases covering the work, on the SAME branch, a fresh `/review-plan <unit>` passing before `execute-phase` runs them. It never routes to `plan-fix` for a new unit or a new issue (AC 12). Placement depends on whether the final `Hardening & PR` phase has already run: - **Hardening not yet executed** → insert the new phase(s) BEFORE it; the ledger's existing close-out stays last. - **Hardening already executed** → append the new phase(s) AFTER it, plus one fresh final `Hardening & PR` phase closing them out — the ledger must always end with an unexecuted hardening close-out covering every phase before it; a completed hardening never vouches for work added after it ran. The finding is not folded directly; it is folded by the new phase(s). ### Decision table For every finding, give the reasoning columns. Example (generic — your findings, your domains): | Finding | Axis | Sev | Class | WHY | Implementation risk | Long-term impact | Premature-opt? | Route | |---|---|---|---|---|---|---|---|---| | API token committed in a config file | security | high | fix-now | Credential exposure | Low (move to secret store) | Incident risk | no | fold into phase | | New export endpoint has no failure-mode test | tests | med | fix-now | Untested error path | Low | Regression risk | no | fold into phase | | Fixing this backend bug pulls in an auth redesign | correctness | high | decision-required | Unavoidable product/architecture decision | — | Blocking | no | surface decision, block | | Rate limiter reusable across the fleet | architecture | low | proposal | Independent of this unit (D3) | — | — | yes | batch proposal + trigger | | Single-caller wrapper around a stdlib call | overengineering | low | ignore | Indirection with no payoff | — | Negligible | no | note rationale | - **Sev** — **high**: correctness, security, or data-loss risk, or a merge blocker. **med**: degraded behavior, a real untested path, or notable debt. **low**: taste, cosmetics, or micro-optimization without a measured need. - **WHY** — one-sentence justification for the class. - **Implementation risk** — risk of *fixing* it now (blast radius, churn). - **Long-term impact** — cost of *not* fixing it (debt, drift, incident odds). - **Premature-opt?** — yes/no: optimizing without a measured need? - **Route** — where it goes next (below). ## Routing (what each class feeds) - **fix-now** → fold directly into the current unit's open phase; never a tracked issue, never `plan-fix` (AC 12). - **fix-now / `replan-in-unit`** → `node scripts/unit-route.mjs <unit>` prints `route: replan`; the planner it names re-cuts the SPEC `## Phases` ledger (user confirms), a fresh `/review-plan <unit>` passes, then `execute-phase` runs the new phases — never a downgrade, never a tracked issue (AC 12). - **fix-now / `decision-required`** → stop and surface the decision; the unit blocks until the user decides. No issue is created. - **proposal** (independent future capability) → batched in the report with a trigger; the **user** decides whether to route it to `triage-issue` (D3). - **ignore** → note the rationale in the report; no further action. ## Owning stage: which artifact is actually wrong Class says what to do with the finding; the **owning stage** says which artifact must change, and it is the owning stage that picks the hand-off. Use the five values published by `pre-execution-review` (`product | plan | source | environment | runtime`) — this skill classifies, it does not redefine them — and state one per finding in its `Route` cell. | Owning stage | Hand-off | Never | |---|---|---| | `source` | fold locally: `/fold-findings`, then re-run `/review-change` on the changed HEAD | — | | `plan` | run `node scripts/unit-route.mjs <unit>` → `route: replan`; the planning author re-cuts the artifact (SPEC `## Phases`, an obligation row, an acceptance mapping, a ledger) on the same branch with the user's confirmation, then a **fresh `/review-plan <unit>`** precedes `execute-phase` | fold it in code and leave the plan describing the old build | | `product` | `/design-feature <unit>` repairs the half, then `/review-spec <unit>` re-judges it | patch the product claim into agreement in code | | `environment` / `runtime` | the existing retry/`BLOCKED` paths | translate into a PASS, or an issue | - `fix-now` with a `plan` or `product` owner keeps its severity but is **not** foldable: it appears in the report as replan/re-review work, because the loop that folds source cannot repair authority (see the no-progress/convergence rule in `pre-execution-review`). - Cite the artifact beside the owner — `SPEC.md ## Phases`, the obligation id, the acceptance id — an owning stage without a citation is a guess. - When both `source` and `plan` look culpable, name the one check that distinguishes them, run it, and record which it refutes; do not silently pick the cheaper route. -
FIND.md 2.9 KB
## Axis ownership — one concern, one pass The internal review pack assigns **every review concern to exactly one owning pass**. No pass rescans another's surface; the per-axis passes find, and `review-implementation` (the scope/classification engine) verifies coverage and classifies the synthesized table. | Concern | Owning pass | Looks for | |---|---|---| | Bug / correctness | `review-code` | Logic errors, wrong edge-case handling, races, unhandled rejections, imprecise numeric handling | | Simplification / dead code / duplication | `review-code` | Unused exports, unreachable branches, commented-out blocks, obsolete files, duplicate logic — **see exception below** | | Overengineering | `review-code` | Unnecessary abstractions, single-caller indirection, speculative generality, micro-opt without a measured bottleneck | | Architecture / runtime compatibility | `review-code` | Broken dependency direction, business logic in the wrong layer, abstraction bypass, cross-layer shortcut, runtime-incompatible deps, blocking calls in the request path | | Project-rule violations | `review-code` | Whatever the project's docs mandate (e.g. domain value-object rules, no hardcoded UI strings, don't hide user-facing limitations, naming conventions) | | Security / cybersecurity | `review-security` | Secrets in code, injection, missing authz, unsafe deserialization, PII exposure, weak crypto, SSRF, over-broad CORS, leaking errors, dependency security | | Tests — failing/weak & missing | `review-verify` | Flaky/over-mocked/snapshot-heavy tests, uncovered branches, new use-cases/adapters without tests, SPEC dev-scenario failure modes not exercised | | Performance / bundle-size | `review-perf` | Algorithmic/resource/performance evidence, heavy/duplicate deps, accidental large imports, non-tree-shakeable patterns | | Design / a11y / brand / SEO | `review-design` / `review-a11y` / `review-brand` / `review-seo` | Only their named surfaces | | Tech-debt triggers | `review-debt` | Transform of the synthesized table — every debt-character finding gains an explicit TRIGGER (a debt item without a trigger is itself a finding) | ### Dead-code exception (important) Do **not** flag code as removable if it is **intentionally staged for an in-progress or planned feature**. Before reporting the dead-code concern (`review-code`), cross-check the roadmap, feature SPECs/`TASKS.md`, and `known-issues.md`: if the code is wired into a planned phase or another feature, classify it *intentional / in-progress*, not dead. When unsure, mark it **verify** and ask — never assert "dead" on a guess. ### Coverage contract (consumed by `review-implementation`) The classification engine verifies that every applicable axis for the declared scope is represented in the synthesized findings table: an axis the change touches with no table row is a **missing-axis finding** (axis `coverage`), not a silent pass.
-
-
SKILL.md 5.2 KB
--- name: review-implementation user-invocable: false version: 1.8.0 argument-hint: <path-or-glob> allowed-tools: Read, Grep, Glob, Bash, WebFetch author: "Gabriel Trabanco <gtrabanco@users.noreply.github.com>" license: MIT description: > Internal scope/classification engine composed by review-change (and reused by the audit skills): consumes the synthesized findings table, verifies every applicable axis is represented, and classifies each finding into a decision table (fix-now / replan-in-unit / decision-required / proposal / ignore). Findings only — never refactors. --- # Review Implementation (internal scope/classification engine) The classification engine the review/audit skills compose: it consumes the **synthesized findings table** (the fused output of the applicable per-axis passes), verifies every applicable axis is represented, and returns the classified decision table — then stops. Never refactors or edits code. It owns the **scope/axis-coverage contract** and the **classification rubric** (the current-unit contract + routing) that `review-change`, `audit-pr`, and `product-audit` reference instead of restating. It does **not** scan the diff: every finding concern has exactly one owning pass (see the [axis ownership map](references/FIND.md)) — the per-axis passes (`review-code`, `review-security`, `review-verify`, `review-perf`, design/a11y/brand/SEO) find, and this engine classifies. No broad findings scan here. ## When to use - Invoked by `review-change` (the user-facing review entry) as its classification engine, over the fused findings table. - The audit skills reference its rubric and coverage contract. ## Scope The caller's scope statement (the branch diff vs. the default branch, or the passed path/glob) is authoritative; the synthesized table was gathered over it. State the scope at the top of the classified report. ## Step 0 — Discover the project (always first) Per the agent guide's **Workflow conventions** + **documentation map**, read what THIS skill needs: the architecture/layering rules, the testing philosophy, and any runtime/platform, security, money, i18n/SEO/a11y and bundle rules. Pull the project's specific risk axes from its guardrail skills where present. The `FIND.md` axis map is the default; the project's docs refine which axes are applicable. ## Step 1 — Verify axis coverage (the synthesized table) For the declared scope, confirm **every applicable axis is represented** in the synthesized findings table — one finding owner per axis, per the `FIND.md` map: an axis the change touches that the table says nothing about is a **missing-axis finding** (axis `coverage`), not a silent pass. Overlapping signals from different passes on the same defect collapse into one row during synthesis — the table must contain neither duplicates nor gaps. State which axes were applicable and confirm each appears. ## Step 2 — Classify (the current-unit contract) Read [Classify and route](references/CLASSIFY.md) and classify every row of the synthesized table without reopening source files: `ignore` first (the claim), then the current-unit contract (fix-now / replan-in-unit / decision-required for in-scope work), then `proposal` for genuinely independent future capabilities. One pass — no per-pass or per-reviewer classification. ## Context budget The input is the synthesized table, not the diff. Read at most 10 non-diff files in full for surrounding context (callers, contracts, SPEC); targeted reads (≤ 50 lines of a named range) and grep/glob results don't count. Record each classification as its table row immediately and drop raw file content. ## Guardrails - **Findings + table only. Never refactor or edit code in this skill.** - **One classifier.** Classification happens HERE, once, over the fused table — never per-reviewer, never re-litigated in the per-axis passes. - Honor the dead-code exception — staged/planned code is not dead code. - Don't inflate severity; separate "correctness/security" from "taste". - Don't deflate either: current-unit work is never `postpone`/`tradeoff`/ `wontfix`/`disputed` and never a new issue — size routes to `replan-in-unit`, not to a downgrade (current-unit contract in `CLASSIFY.md`). - Otherwise per the project's **Workflow conventions** (docs-language, evidence): cite `file:line`, mark uncertainties *verify*. ## Relationship to other skills - **Classification engine of `review-change`** — the user-facing review skill runs the applicable per-axis passes (the finders), fuses their tables, then composes this engine to classify. `audit-pr` and `product-audit` reuse this rubric. - Sits in **Stage 4** of the feature workflow (verification & review). - `fix-now` folds into the current unit; `replan-in-unit` runs `node scripts/unit-route.mjs <unit>`, whose `route: replan` line names the planner that appends user-confirmed phases before `execute-phase`; `decision-required` blocks for the user; independent work becomes proposals the user routes to `triage-issue` (D3). ## Done when - A synthesized table consumed, axis coverage verified (no applicable axis missing, no duplicate rows), every finding classified with reasoning and routed — and **no code changed**.
Comments (0)
Sign in to join the conversation.
Reviews (0)
No reviews yet.
No comments yet.