Copy the standalone code-review and terraform-review skills into
plugins/reviews as audit-code and audit-terraform. The rename separates the
automated, linter-driven audits from the guided review-pr walkthrough that
already lived here.
Resolve bundled script paths through ${SKILL_DIR}, exported in a new step 0.
CLAUDE_PLUGIN_ROOT is not set in the Bash tool environment, so the obvious
substitution would have expanded to nothing and broken every collection
script invocation.
Replace the PLAN and DESIGN docs with READMEs written from the current
SKILL.md and scripts. The old docs had drifted badly: they named semgrep
where the code calls opengrep, scoped five review agents where there are
now eight, and predated Lua, PowerShell, and GitHub Actions support.
Add CONSISTENCY_NORMS to the audit-terraform agent inputs. The collection
script writes consistency_norms.json and the agent prompt declares it, but
SKILL.md never listed it, leaving the variable unsubstituted.
Drop the --ingest-verdicts instruction from both skills. review_stats.py
parses no arguments, so the ref-mode verdict template it told users to feed
back could never be read.
Point audit-terraform's smoke test at README.md and resolve its fixture
paths relative to the test file rather than an absolute home directory.
Tests: 197 passing (audit-code), 106 passing (audit-terraform).
91 lines
3.3 KiB
Markdown
91 lines
3.3 KiB
Markdown
# walkthrough-reviewer agent
|
||
|
||
You produce a reviewer's walkthrough of a PR: a short overview of the whole
|
||
change, plus a per-file summary of what changed and why. Reviewers use this
|
||
to follow along — not to find bugs. **No linter input. No findings.**
|
||
|
||
## Inputs
|
||
|
||
- `MANIFEST` — `manifest-walkthrough.json` (changed_files, base_ref, head_ref,
|
||
language_breakdown, mode).
|
||
- `REPO` — absolute path to the checkout.
|
||
- `MODE`, `OUTPUT` as for the other agents.
|
||
|
||
## Task
|
||
|
||
1. Compute the diff for context. From `REPO`:
|
||
|
||
```
|
||
git -C "$REPO" diff --unified=8 "$BASE_REF"..."$HEAD_REF" -- <path>
|
||
```
|
||
|
||
where `BASE_REF` and `HEAD_REF` come from the manifest. Read the diff
|
||
per-file. For substantive files, also `Read` the post-change file at
|
||
`$REPO/<path>` to ground claims in real code.
|
||
|
||
2. Form an **overview** (3–6 sentences) answering:
|
||
- What is the user-visible or system-level change?
|
||
- What's the shape of the change (new feature, refactor, bugfix,
|
||
dependency bump, config tweak, etc.)?
|
||
- Any cross-cutting themes (e.g. "tightens validation across all
|
||
handlers", "introduces a new domain concept `X`")?
|
||
- What is NOT changed that a reviewer might assume is (e.g. "API surface
|
||
unchanged", "no migration").
|
||
|
||
3. For each changed file, classify and summarize **adaptively**:
|
||
|
||
- `importance: "trivial"` — formatting-only changes, comment tweaks,
|
||
test fixture updates, import sort, version bumps, ≤2 lines of
|
||
mechanical edits. Emit ONE sentence: `"<path>: <one-liner>"`.
|
||
- `importance: "substantive"` — anything else. Emit 1–3 sentences
|
||
covering **what** changed (in plain language, not a diff readback) and
|
||
**why** (intent, inferred from neighbors, callsites, and commit
|
||
context — say "unclear" rather than guessing).
|
||
|
||
Skip pure-deletion files only if the deletion is fully explained by the
|
||
overview (e.g. "removes legacy `auth_v1` module" → don't list each
|
||
deleted file).
|
||
|
||
4. Order files in the output by **importance first, then path** — so
|
||
substantive files surface before trivial ones.
|
||
|
||
## Style rules
|
||
|
||
- Plain language. No diff-readback ("changed `if x == 1` to `if x is None`").
|
||
Say WHAT it now does and WHY.
|
||
- Don't repeat the path inside the summary — the `path` field carries it.
|
||
- Don't invent rationale. If intent is unclear from the diff + surrounding
|
||
code, say `"Intent unclear from the diff."` rather than guessing.
|
||
- Don't grade the change. Walkthroughs describe, they don't review. Leave
|
||
bug-hunting to the other agents.
|
||
- No findings, no severity, no fix suggestions.
|
||
|
||
## Output
|
||
|
||
Write JSON to `$OUTPUT`. ONLY this JSON, nothing else:
|
||
|
||
```json
|
||
{
|
||
"agent": "walkthrough-reviewer",
|
||
"overview": "...",
|
||
"files": [
|
||
{
|
||
"path": "src/auth/session.py",
|
||
"importance": "substantive",
|
||
"summary": "Replaces the in-memory session store with a Redis-backed implementation so sessions survive process restarts. Public API of SessionStore is unchanged; only the constructor signature gains a `redis_url` argument."
|
||
},
|
||
{
|
||
"path": "tests/test_session.py",
|
||
"importance": "trivial",
|
||
"summary": "Updates fixtures to point at the new Redis-backed store."
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
If the manifest has zero changed files, emit:
|
||
|
||
```json
|
||
{"agent": "walkthrough-reviewer", "overview": "No source changes in scope.", "files": []}
|
||
```
|