Expert review of an implementation plan against a GitHub issue/enhancement description (provided as a local file or a GitHub issue URL) and the current repository codebase. Use when asked to critique a plan for correctness, completeness, codebase alignment, risks, and test/rollout readiness (do not implement).
Scanned 9/7/2026
Install to Claude Code
npx -y skills add jiayaoqijia/cryptoskill --skill blockscout-implementation-plan-review --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Blockscout Implementation Plan Review?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/jiayaoqijia-blockscout-implementation-plan-review)More formats (shields.io, HTML) on the badges page.
---
name: implementation-plan-review
description: Expert review of an implementation plan against a GitHub issue/enhancement description (provided as a local file or a GitHub issue URL) and the current repository codebase. Use when asked to critique a plan for correctness, completeness, codebase alignment, risks, and test/rollout readiness (do not implement).
disable-model-invocation: true
---
# Implementation Plan Review (Expert)
Review an implementation plan for coverage, correctness, and fit with the current codebase. Do not implement.
## Inputs
- Implementation plan: a local file path.
- Issue/requirements: either (a) a local file path, or (b) a GitHub issue number (run from the target repo so `gh` resolves it).
If the user provides a GitHub issue number, prefer fetching it into a local file using the bundled script:
```bash
bash scripts/fetch_github_issue.sh <issue-number> --out /tmp/issue.md
```
Run this command from the skill directory when that directory is inside the target repository. If it is not, keep the
command agent-agnostic by resolving the script path relative to this skill directory while running `gh` from the target
repo so the issue number resolves against the correct repository.
Fetching is a network operation. When command execution is sandboxed, request
network escalation (`require_escalated`) for this exact fetch command rather
than granting a reusable broad `bash` permission. On failure, follow the
script's self-contained `ACTION` line. It distinguishes unavailable network
(exit `6`), credentials unavailable to the process (exit `3`), other GitHub
fetch failures (exit `4`), and local output failures (exit `5`).
## Workflow
1) Prepare a clean review run:
- Before reading or listing any scratchpad files, run from this skill directory:
```bash
bash scripts/new_scratchpads_dir.sh <plan-file>
```
- Use exactly the absolute path the script printed on stdout as this review's run directory; never glob or guess a path under `scratchpads/` yourself.
- Each run creates a fresh timestamped directory (`scratchpads/<YYMMDD-HHMM>/`); nothing is deleted. Directories from earlier reviews belong to a different run — never read or reuse them for this review. (If the printed path is ever lost from context, the lexicographically-last timestamp subdirectory is the most recent, since the format sorts chronologically — but prefer the printed path.)
- If the script fails (non-zero exit; `error: <message>` on stderr), stop and report the failure.
2) Read the two inputs in full:
- Plan file
- Issue description file (or the fetched `/tmp/issue.md`)
3) Apply versioning neutrality policy:
- Do **not** request a missing version bump (package version, `server.json`, manifests, etc.) unless a repo rule, user instruction, release plan, or issue text explicitly requires one.
- Do **not** suggest removing version bump steps merely because the issue does not mention versioning. Issues usually describe the problem, motivation, or code-level improvement; they are not expected to spell out release mechanics.
- If the plan already includes version bump steps, review them only for correctness and consistency with applicable repo rules: required files, matching version strings, valid version format, and no unrelated version/manifests changed.
- Raise a versioning finding only when the plan's versioning steps are internally inconsistent, contradict explicit requirements, or are objectively attached to the wrong files/surfaces.
4) Apply review-noise policy:
- Do not raise findings only because an implementation plan omits developer execution mechanics such as checking `/.dockerenv`, choosing host vs devcontainer command prefixes, or spelling out both command variants.
- Do not teach command invocation mechanics in recommendations.
- Review verification semantically: required test/lint/integration categories, targets, and coverage, not how a developer invokes commands in their environment.
- Still flag objectively wrong verification scope, such as requiring only a narrow test subset when repo rules require the full default suite.
5) Validate codebase reality (start targeted, expand as needed):
- Start by finding referenced modules/configs/env vars/tests with `rg` (fast and low-noise).
- Prefer opening the minimal set of files *first* to confirm patterns and naming, but broaden freely if you suspect hidden coupling or cross-cutting behavior (e.g., shared helpers, config loading, response models, pagination, truncation).
- If the plan touches MCP tools, REST API, docs, or tests, cross-check relevant `.cursor/rules/*.mdc` guidance.
- If it improves confidence, use any other repo investigation strategy (e.g., inspect docs like `SPEC.md`/`API.md`, check tests, use `git blame`, or run unit tests/lint locally).
Suggested commands (adapt as needed):
```bash
rg -n "name_in_plan|function_in_plan|ENV_VAR_IN_PLAN" -S .
rg -n "ToolResponse\\[|@mcp\\.tool\\(|log_tool_invocation" blockscout_mcp_server -S
rg -n "ServerConfig\\(|BaseSettings\\(|BLOCKSCOUT_" blockscout_mcp_server/config.py -S
rg -n "pytest\\.mark\\.integration|tests/integration|tests/tools" tests -S
```
6) Independently adjudicate candidate findings:
Read these two skill resources completely before creating candidate inputs or
launching adjudicators:
- `references/finding-adjudication-protocol.md`
- `assets/finding-adjudication-report.md`
Treat every initially suspected problem as a **candidate**, not a final
finding. Do not create candidates for pure summary text or obvious nits.
For each candidate, create a directory in the clean run:
```text
finding-01-short-slug/
├── input.md
├── full-report.md # written by the adjudicator
└── brief.md # generated by the finalizer
```
Create `input.md` with:
- candidate ID;
- absolute plan, issue snapshot, template, protocol, and output paths;
- one neutral, falsifiable candidate hypothesis;
- focused research questions;
- candidate-specific scope or edge cases;
- an explicit statement that `Confirmed`, `Downgraded`, `Question`, and
`Closed` are all successful outcomes.
Do not include prior scratchpad conclusions, a preferred solution, expected
disposition, or another adjudicator's work.
Launch one independent subagent per candidate, batching when concurrency is
limited. Use `fork_turns="none"` so the adjudicator receives only the
candidate input and stable protocol. Prefer a strong reasoning model
(`gpt-5.6-sol` with `xhigh` reasoning when available) unless the user
requests otherwise. The launcher prompt should contain only:
- the absolute protocol path and instruction to read it completely;
- the absolute `input.md` path;
- the exact writable candidate directory;
- the absolute template path;
- the requirement to run the protocol's finalization loop before returning.
Each adjudicator must write `full-report.md`, run
`scripts/finalize_adjudication.py`, fix every validation error, and return
only the protocol's short completion record. The script deterministically
generates `brief.md`; the adjudicator must not edit the brief.
After all adjudicators finish, independently verify the complete run:
```bash
python3 scripts/verify_adjudication_run.py \
--run <absolute-run-directory> \
--expected-count <candidate-count>
```
If verification fails, send the exact errors back to the responsible
adjudicator and require it to correct and re-finalize its report. Do not use
an invalid or stale brief.
Read all valid `brief.md` files first. Open the full report or extract a
tagged section only when progressive disclosure is warranted, for example:
- unexpected `Closed` or `Downgraded` disposition;
- low confidence or a close variant result;
- a decision that depends on an unresolved product assumption;
- overlap or conflict between candidates;
- a recommendation that materially expands plan scope;
- a challenged finding.
Extract one validated section without loading the full report:
```bash
python3 scripts/finalize_adjudication.py \
--report <candidate-directory>/full-report.md \
--extract <section-slug>
```
The main agent owns cross-finding work: deduplicate overlapping candidates,
resolve conflicts, apply one common severity scale, and assess cumulative
scope. Case-specific rubric totals are not comparable across candidates.
Only `Confirmed`, actionable `Downgraded`, and unresolved `Question`
candidates may reach final §4. Omit `Closed` candidates. Point the final
comment's `Scratchpad` field to the candidate's generated `brief.md`, never
directly to `full-report.md`. The brief's generated `Source` link is the
progressive-disclosure path to the full report.
7) Produce the review in the required format (next section).
## Required output format
Produce a review with these sections:
### 1) Understanding
- Issue summary
- Acceptance criteria (bulleted)
### 2) Plan ↔ Requirements coverage
- What is covered well
- What is missing / ambiguous
### 3) Codebase alignment
- Key files/modules you inspected (with paths)
- Assumptions in the plan that match the codebase
- Assumptions that don’t match (explain and suggest correction)
### 4) Review comments (actionable)
Provide comments as a list. Each comment must include:
- Severity: `Blocker | Major | Minor | Question | Nit`
- Location: plan section/step + (when relevant) repo file/function/class
- Problem: what’s wrong / missing
- Recommendation: concrete change to the plan
- Rationale: why it matters (bug risk / security / perf / maintainability)
- Scratchpad: path to the candidate's generated `brief.md`, when the comment is actionable and not a pure `Question`; never link `full-report.md` directly from the final review
**Testing gaps rule:**
- List every specific missing/incorrect test as an actionable comment in **§4**.
- In **§6**, provide a consolidated checklist that references those items **without repeating full explanations**.
### 5) Junior-dev readiness check
- Missing task-specific prerequisites, step ordering, and verification coverage
- Do not flag omitted environment-specific command invocation details
- Where the plan needs more explicit detail
### 6) Test & rollout strategy
- Consolidated test checklist (Unit / Integration / E2E / Negative & security / Performance & regression), referencing §4 test comments
- Migration/rollback plan if applicable
- Feature flags / safe rollout suggestions if applicable
## Review focus checklist (use as prompts, not new requirements)
- Coverage: every acceptance criterion mapped to plan steps.
- Codebase alignment: paths, module structure, naming, existing helpers and patterns.
- Edge cases & compatibility: pagination, timeouts, empty results, truncation limits, backward compatibility.
- Security: input validation, SSRF/DNS rebinding boundaries, secrets handling, logging redaction, auth assumptions.
- Performance/scale: API call counts, caching, pagination strategy, long-running tasks/progress updates.
- Ops/observability: error handling, logs, metrics/telemetry/analytics implications, rollout/rollback.
- Versioning: only comment if explicitly required by the issue description; otherwise assume omission is intentional.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!