ワンクリックで
rdm-review
Review implementation of an rdm phase or task
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Review implementation of an rdm phase or task
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Rate each phase's difficulty and assign a model tier from its body
Act on document reviews requesting changes — work each comment and drive the review to addressed
Review the plan for an rdm roadmap, phase, or task before implementation begins
Implement an rdm roadmap phase or work on an rdm task — plan, execute, then finalize into needs-review for rdm-review
Create an rdm roadmap with phases for a topic
Run a batched backlog grooming pass over rdm's stale/duplicate/tag-cluster/archivable signals and emit a reviewable, propose-only plan of exact rdm commands — no mutations
| name | rdm-review |
| description | Review implementation of an rdm phase or task |
| allowed-tools | ["Read","Bash","Write","Edit","Glob","Grep","Agent"] |
Review the implementation of an rdm phase or task. $ARGUMENTS should be <roadmap-slug> <phase-number> for a phase, or --task <task-slug> for a task.
IMPORTANT: This is the rdm source repo. Always run cargo build first, then use ./target/debug/rdm — never bare rdm.
The review runs as a pipeline: find → verify → filter → report → act → gate. Findings are never surfaced, fixed, or acted on until a separate agent has tried to refute them. The agent that finds an issue is never the agent that confirms it.
cargo build to ensure the binary is up to date.$ARGUMENTS.
--task, the next argument is a task slug../target/debug/rdm phase show <phase-number> --roadmap <slug> --project rdm./target/debug/rdm task show <slug> --project rdm
Extract the acceptance criteria, steps, and any other requirements from the body.git log --oneline -20 and git diff to understand what was recently changed. Identify the commits and files relevant to this phase or task. Note the diff size, which crates it touches, and whether it changes public API, unsafe, dependencies, or user-facing behavior — these drive which conditional agents you launch in step 2. From those same diff signals, derive a tier hint for step 2's fleet: small (localized, single crate, no risky surface — a typo fix, a one-line log message), medium (an ordinary change — new logic in one crate, a bugfix), or large (touches public API, unsafe, spans multiple crates, adds a dependency, or is user-facing). This is a read of the diff's risk, not the phase's own difficulty rating — a "hard" phase can still land a small, low-risk diff, and vice versa.Scope =
rdm review pending../target/debug/rdm review pending --project rdmis the single shared source of truth for "what is in scope to review". An item is in scope by branch identity — its stampedreview_branchequals the current checkout's branch, which keeps roadmaps exactly isolated — falling back to SHA reachability for legacy/unstamped items or when the current branch is unresolvable (these fail open). The auto-review Stop hook keys off the same command, so the skill and the hook never disagree about scope. If you were invoked without explicit$ARGUMENTS, run it to discover what to review on this branch; an item finalized on another worktree's branch will not appear here.Stale stamps after amend/rebase. If you amend or rebase the implementation commit while an item is still
needs-review, its stampedreview_shacan dangle and the item could drop out of scope. The Stop hook callsrdm review restampautomatically before every scope check, so this normally self-heals. If you rebase manually outside that loop (e.g. before the next Stop fires), run./target/debug/rdm review restamp --project rdmyourself to re-point the stamp at the current HEAD/branch — it is idempotent and only touches items this checkout already owns.
Scale the fleet to what the diff actually touches. Always run the base agents; add conditional agents only when the diff hits their surface. This keeps a 10-line phase cheap while a cross-cutting change still gets full coverage. Each agent is read-only — it reviews and reports, it never edits.
Base (always run):
rdm-core, errors must be hand-written matchable enums (no anyhow/type erasure); in rdm-cli/rdm-server, anyhow with .context(). User-facing CLI errors must be actionable.Conditional (add when the trigger is present):
rdm-core. rdm-core is #![warn(missing_docs)]. Every public item needs a doc comment; # Errors on any Result-returning fn, # Panics if it can panic, # Safety on unsafe fn.unsafe, new dependencies, or non-trivial new modules. No unsafe without a // SAFETY: comment; conventional-commit + scope discipline; clippy/fmt cleanliness.CHANGELOG.md ([Unreleased]) in the same commit. Flag a missing or non-user-facing entry as a finding.Decide triggers from the git diff and file list in step 1. When in doubt about a trigger, include the agent — a spurious agent that finds nothing is cheaper than a missed concern. State which agents you launched and why in the report.
Model sizing. Every dispatched agent in this step runs on an explicitly resolved model — never the inherited session model. For each finder agent (AC Compliance, Correctness, and any conditional agent launched above), resolve:
model=$(./target/debug/rdm model resolve review-find --tier <hint>)
using the tier hint derived in step 1, and pass model explicitly when dispatching that agent with the Agent tool. Purely mechanical checks (e.g. a scripted presence/lint check with no judgment involved) may instead resolve ./target/debug/rdm model resolve mechanical, or run inline without a subagent at all. Resolution reads the [models] config table (tier→model-id bindings, review floor, and per-step overrides), falling back to built-in defaults (small→haiku, medium→sonnet, large→opus) when unset.
Each agent returns structured findings, one block per finding:
- id: <short-slug>
concern: <ac|correctness|tests|api-docs|architecture|safety|changelog>
file: <path>:<line>
severity: blocking | concern | suggestion
confidence: 0-100
what-fails: <the specific problem>
why: <root cause / which rule or AC it violates>
impact: <what breaks or degrades>
recommendation: <concrete fix>
The AC agent additionally returns the per-criterion PASS/FAIL/PARTIAL table. Calibrate for signal: one strong finding beats five weak ones. Do not report pure style/formatting nitpicks unless they violate an explicit CLAUDE.md rule.
Severity scale (this drives the overall verdict in step 5):
blocking — the implementation must not advance to reviewed as-is: a logic error, an unmet acceptance criterion, or a mandatory process violation (e.g. a missing required changelog entry). Any single surviving blocking finding forces the overall verdict to BLOCKED.concern — does not block merging but must be recorded; yields PASS WITH CONCERNS when no blockers exist.suggestion — minor optional improvement (subject to the confidence filter; never blocks).For every finding with severity of blocking or concern (and every AC FAIL/PARTIAL verdict), dispatch a fresh Agent whose job is to refute it. The refute agent:
verdict: confirmed | refuted | uncertain, a corrected confidence (0-100), and one line of evidence.Run these concurrently. The finder is never the verifier. Suggestions may skip verification (low stakes) but are still subject to the confidence filter.
The refute agent also runs on an explicitly resolved model, never the inherited session model: resolve model=$(./target/debug/rdm model resolve review-verify) once (its default tier is already floored to the top review tier, so no --tier hint is needed) and pass model when dispatching each refute agent.
refuted, or whose post-verification confidence is below 70.Present a single structured report:
Determine the overall verdict in this strict order — the first matching rule wins:
severity: blocking. A single blocking finding always escalates the whole review to BLOCKED; it can never be downgraded to "pass with concerns".severity: concern (non-blocking concerns exist, but no blockers and all AC pass).Report first, then act. Never fix or file an unverified finding.
Edit/Write, run the relevant tests (cargo nextest run -p <crate>), then fold it into the implementation commit with git commit --amend --no-edit../target/debug/rdm task create <slug> --title "Review finding: description" --body "Details." --tags <tag1>,<tag2> --no-edit --project rdm
For each finding, state how it was handled (fixed-inline / filed-as-task <slug>).
This skill owns the needs-review → reviewed gate.
reviewed, then amend a Done: line into the branch commit — this completes the deferred Done: directive from the rdm-do (or rdm-dispatch-phase) finalize step, not a contradiction of it — so the merge-to-main hook flips it to done later. Recorded concerns do not block this transition.
./target/debug/rdm phase update <phase> --status reviewed --no-edit --roadmap <slug> --project rdm
# or: ./target/debug/rdm task update <slug> --status reviewed --no-edit --project rdm
./target/debug/rdm commit -m "chore(plan): mark <phase-or-task> reviewed"
git commit --amend # SEPARATE, source-repo op: add the Done: line (completing the finalize step's deferred directive)
The Done: line is Done: <roadmap-slug>/<phase-stem> (phase) or Done: task/<slug> (task), using the exact slugs/stems from the rdm commands above. Do NOT set the item to done directly — that flip is owned by the merge-to-main hook.reviewed and write no Done: line. The transition depends on the item kind, because tasks have no blocked status:
blocked with the escalation reason, so the blocked-phase queue surfaces it for a human decision.
./target/debug/rdm phase update <phase> --status blocked --no-edit --roadmap <slug> --project rdm
./target/debug/rdm commit -m "chore(plan): block <phase-or-task>: <reason>"
open | in-progress | done | wont-fix, so there is no blocked status. Return the task to in-progress instead, and state clearly in the report that review found blocking findings and the work is not done (this is not a clean rework — the blockers must be resolved before re-review).
./target/debug/rdm task update <slug> --status in-progress --no-edit --project rdm
./target/debug/rdm commit -m "chore(plan): block <phase-or-task>: <reason>"
in-progress and write no Done: line.
./target/debug/rdm phase update <phase> --status in-progress --no-edit --roadmap <slug> --project rdm
# or: ./target/debug/rdm task update <slug> --status in-progress --no-edit --project rdm
./target/debug/rdm commit -m "chore(plan): return <phase-or-task> to in-progress"
blocking finding forces the overall verdict to BLOCKED (never "pass with concerns"); unmet acceptance criteria yield FAIL; non-blocking concerns with no blockers and all AC passing yield PASS WITH CONCERNS.