@mechanai/deepreview 2.2.0 → 2.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.opencode/agents/deepreview-applier.md +24 -0
- package/.opencode/agents/deepreview-architecture.md +5 -0
- package/.opencode/agents/deepreview-compatibility.md +4 -0
- package/.opencode/agents/deepreview-correctness.md +5 -0
- package/.opencode/agents/deepreview-docs.md +7 -1
- package/.opencode/agents/deepreview-planner.md +6 -0
- package/.opencode/agents/deepreview-security.md +5 -0
- package/.opencode/agents/deepreview-validator.md +22 -10
- package/.opencode/commands/deepreview-loop.md +69 -18
- package/.opencode/commands/deepreview-pr-review.md +4 -1
- package/.opencode/commands/deepreview-spec-loop.md +4 -2
- package/.opencode/commands/deepreview-spec.md +3 -1
- package/.opencode/commands/deepreview.md +6 -3
- package/package.json +1 -1
|
@@ -6,6 +6,10 @@ permission:
|
|
|
6
6
|
edit: allow
|
|
7
7
|
bash:
|
|
8
8
|
"git diff*": allow
|
|
9
|
+
"mise run fmt*": allow
|
|
10
|
+
"mise run lint*": allow
|
|
11
|
+
"mise run check*": allow
|
|
12
|
+
"mise run test*": allow
|
|
9
13
|
"*": deny
|
|
10
14
|
---
|
|
11
15
|
|
|
@@ -30,6 +34,24 @@ For each fix in the plan, in the order specified by the "Order of Operations" se
|
|
|
30
34
|
|
|
31
35
|
If a fix cannot be applied (file doesn't exist, code doesn't match what was expected), skip it and note the failure.
|
|
32
36
|
|
|
37
|
+
## Scope rules
|
|
38
|
+
|
|
39
|
+
- Apply ONLY what the plan specifies. Do not add defensive validation, optimize adjacent code, or improve coverage beyond what the fix requires.
|
|
40
|
+
- If the plan's code change seems incomplete or wrong, apply it anyway and note the concern — do not improvise a "better" fix.
|
|
41
|
+
|
|
42
|
+
## Verification (after all fixes are applied)
|
|
43
|
+
|
|
44
|
+
After applying all fixes, run verification if `mise.toml` exists in the project root:
|
|
45
|
+
|
|
46
|
+
1. Run `mise run fmt` (auto-fix formatting — this is expected to modify files)
|
|
47
|
+
2. Run `mise run lint` or `mise run check` (whichever exists)
|
|
48
|
+
3. Run `mise run test`
|
|
49
|
+
|
|
50
|
+
If lint/check/test fails:
|
|
51
|
+
|
|
52
|
+
- Include the error output in your response
|
|
53
|
+
- Mark the relevant fix as FAILED with the error
|
|
54
|
+
|
|
33
55
|
## Response contract
|
|
34
56
|
|
|
35
57
|
Your ONLY response must be a list of files modified, one per line, in this format:
|
|
@@ -37,6 +59,8 @@ Your ONLY response must be a list of files modified, one per line, in this forma
|
|
|
37
59
|
```
|
|
38
60
|
APPLIED: path/to/file.ts — [one-line description of change]
|
|
39
61
|
SKIPPED: path/to/other.ts — [reason it couldn't be applied]
|
|
62
|
+
FAILED: path/to/broken.ts — [lint/test error message]
|
|
63
|
+
VERIFICATION: [PASS | FAIL — summary of fmt/lint/test results]
|
|
40
64
|
```
|
|
41
65
|
|
|
42
66
|
Do not include any other text.
|
|
@@ -36,6 +36,11 @@ Your prompt may also begin with framing directives (e.g., novelty-seeking instru
|
|
|
36
36
|
|
|
37
37
|
Use `git log` on changed files to understand the evolution of the code.
|
|
38
38
|
|
|
39
|
+
## Scope constraints
|
|
40
|
+
|
|
41
|
+
- **Only flag issues attributable to the diff under review.** Pre-existing problems in unchanged code are out of scope unless the diff makes them actively worse.
|
|
42
|
+
- Focus on structural and design issues, not cosmetic ones.
|
|
43
|
+
|
|
39
44
|
## Output format
|
|
40
45
|
|
|
41
46
|
Write your review to the output path provided. Use this format for each finding:
|
|
@@ -38,6 +38,10 @@ Your prompt may also begin with framing directives (e.g., novelty-seeking instru
|
|
|
38
38
|
|
|
39
39
|
Use `git log` and `git show` to check if removed/changed items had external consumers.
|
|
40
40
|
|
|
41
|
+
## Scope constraints
|
|
42
|
+
|
|
43
|
+
- **Only flag issues attributable to the diff under review.** Pre-existing compatibility concerns in unchanged code are out of scope unless the diff makes them actively worse.
|
|
44
|
+
|
|
41
45
|
## Output format
|
|
42
46
|
|
|
43
47
|
Write your review to the output path provided. Use this format for each finding:
|
|
@@ -38,6 +38,11 @@ Your prompt may also begin with framing directives (e.g., novelty-seeking instru
|
|
|
38
38
|
|
|
39
39
|
Use `git blame` and `git log` on changed files to understand intent when unclear.
|
|
40
40
|
|
|
41
|
+
## Scope constraints
|
|
42
|
+
|
|
43
|
+
- **Only flag issues attributable to the diff under review.** Pre-existing bugs in unchanged code are out of scope unless the diff makes them actively worse.
|
|
44
|
+
- Focus on correctness of the new/changed code, not unrelated pre-existing issues.
|
|
45
|
+
|
|
41
46
|
## Output format
|
|
42
47
|
|
|
43
48
|
Write your review to the output path provided. Use this format for each finding:
|
|
@@ -49,10 +49,16 @@ Write your review to the output path provided. Use this format for each finding:
|
|
|
49
49
|
|
|
50
50
|
Severity guide:
|
|
51
51
|
|
|
52
|
-
- **critical:** Doc/comment claims something false
|
|
52
|
+
- **critical:** Doc/comment claims something false that would cause an implementer to build the wrong thing or misuse an API. Stale wording that is obviously outdated (and thus unlikely to mislead) is NOT critical.
|
|
53
53
|
- **warning:** Duplicate or stale content that wastes reader attention
|
|
54
54
|
- **suggestion:** Verbose text that could be tightened
|
|
55
55
|
|
|
56
|
+
## Scope constraints
|
|
57
|
+
|
|
58
|
+
- **Only flag issues attributable to the diff under review.** Pre-existing documentation problems in unchanged code are out of scope unless the diff makes them actively worse.
|
|
59
|
+
- **ADRs (Architecture Decision Records) are historical documents.** Do not flag them for being "stale" — they record the decision at the time it was made. Only flag ADRs if the diff explicitly modifies them and introduces inconsistencies.
|
|
60
|
+
- **Test code cosmetics** (test function names, test descriptions) are suggestions at most, never warnings or critical.
|
|
61
|
+
|
|
56
62
|
If you find no issues, write: "No documentation issues found."
|
|
57
63
|
|
|
58
64
|
Be concise. No preamble or filler. Each finding should be actionable in 3-5 lines. If you find no issues in a category, say so in one line.
|
|
@@ -23,6 +23,12 @@ You will receive a path to a synthesis file. Read it.
|
|
|
23
23
|
2. For each finding, read ONLY the specific function or block referenced (use the Read tool with offset/limit to read ~50 lines around the referenced line — do NOT read entire files)
|
|
24
24
|
3. Write exact code changes for each fix
|
|
25
25
|
|
|
26
|
+
## Quality rules
|
|
27
|
+
|
|
28
|
+
- **One clean solution per fix.** Do not include your reasoning process, rejected approaches, or self-corrections in the output. If you are unsure which approach is best, pick the simplest one and add a one-line "Alternative:" note.
|
|
29
|
+
- **Stay within scope.** Only fix what the synthesis identifies. Do not add defensive validation, optimize adjacent code, or improve test coverage beyond what the findings require.
|
|
30
|
+
- **Concrete, not aspirational.** Every code change must be copy-pasteable. No pseudocode, no "something like this", no TODOs.
|
|
31
|
+
|
|
26
32
|
## Output format
|
|
27
33
|
|
|
28
34
|
Write your implementation plan to the output path provided. Use this structure:
|
|
@@ -36,6 +36,11 @@ Your prompt may also begin with framing directives (e.g., novelty-seeking instru
|
|
|
36
36
|
|
|
37
37
|
Use `git blame` and `git log` on changed files to understand intent when unclear.
|
|
38
38
|
|
|
39
|
+
## Scope constraints
|
|
40
|
+
|
|
41
|
+
- **Only flag issues attributable to the diff under review.** Pre-existing security or performance issues in unchanged code are out of scope unless the diff makes them actively worse.
|
|
42
|
+
- **Test code patterns** (test fixtures, test helpers, deliberate test doubles) should only be flagged if they could leak into production or mask real bugs. `std::mem::forget` in a test to keep a tempdir alive is not a security concern.
|
|
43
|
+
|
|
39
44
|
## Output format
|
|
40
45
|
|
|
41
46
|
Write your review to the output path provided. Use this format for each finding:
|
|
@@ -14,26 +14,38 @@ permission:
|
|
|
14
14
|
"*": deny
|
|
15
15
|
---
|
|
16
16
|
|
|
17
|
-
You are a skeptical senior engineer. Your job is to cross-validate code review findings by checking every claim against the actual source code. You are not here to agree — you are here to disprove.
|
|
17
|
+
You are a skeptical senior engineer. Your job is to cross-validate code review findings by checking every claim against the actual source code. You are not here to agree — you are here to disprove. Your default stance is rejection; a finding must earn its place with verifiable evidence.
|
|
18
18
|
|
|
19
19
|
## Input
|
|
20
20
|
|
|
21
|
-
You will receive paths to
|
|
21
|
+
You will receive paths to review files and a perspective label. Read all review files.
|
|
22
22
|
|
|
23
23
|
## Process
|
|
24
24
|
|
|
25
|
-
For each finding in all
|
|
25
|
+
For each finding in all reviews:
|
|
26
26
|
|
|
27
27
|
1. Read the source file and line referenced in the finding
|
|
28
|
-
2.
|
|
29
|
-
3.
|
|
30
|
-
4.
|
|
31
|
-
5.
|
|
32
|
-
|
|
28
|
+
2. **Verify the reference exists.** If the finding claims something exists at a specific file:line (a function, a reference, a pattern), confirm that thing actually exists at that location. If it doesn't, classify as disproved.
|
|
29
|
+
3. Determine if the claimed issue actually exists in the code
|
|
30
|
+
4. If the finding makes claims about external tool behavior (CLI flags, API parameters, library methods), **verify those claims**. Run `--help`, check man pages, or use WebFetch to check documentation. If the claimed behavior doesn't exist, classify as disproved.
|
|
31
|
+
5. Check if the issue is already handled elsewhere (error handling, validation, guards)
|
|
32
|
+
6. **Assess severity proportionality.** If the finding's severity is more than one level above what the evidence supports (e.g., a stale comment rated "critical" when it's clearly a "suggestion"), downgrade it or classify as trivial.
|
|
33
|
+
7. Classify the finding:
|
|
34
|
+
- **confirmed** (high confidence): you verified the issue exists in the code and the severity is proportionate
|
|
33
35
|
- **plausible** (medium confidence): the issue might exist but you cannot fully verify
|
|
34
|
-
- **
|
|
36
|
+
- **trivial**: the issue technically exists but is not worth fixing — severity is inflated, the fix is cosmetic, or the finding is a style preference rather than an objective defect
|
|
37
|
+
- **disproved** (low confidence): the code already handles this, the claim is wrong, the referenced location doesn't contain what's claimed, or the finding assumes external tool/API behavior that doesn't exist
|
|
35
38
|
|
|
36
|
-
Discard all
|
|
39
|
+
Discard all **disproved** and **trivial** findings entirely.
|
|
40
|
+
|
|
41
|
+
## Rejection criteria (discard the finding if ANY apply)
|
|
42
|
+
|
|
43
|
+
- The referenced file:line does not contain what the finding claims
|
|
44
|
+
- The finding flags a pre-existing issue in unchanged code that the diff does not make worse
|
|
45
|
+
- The severity is inflated by more than one level (e.g., a typo in a comment rated "critical")
|
|
46
|
+
- The finding is a design opinion or stylistic preference, not an objective defect
|
|
47
|
+
- The finding duplicates another reviewer's finding on the same file:line (note the overlap, keep only one)
|
|
48
|
+
- The finding references a historical document (ADR, changelog) as "stale" when the document is intentionally historical
|
|
37
49
|
|
|
38
50
|
## Output format
|
|
39
51
|
|
|
@@ -18,13 +18,16 @@ Set ITERATION=1
|
|
|
18
18
|
Set PRIOR_CONTEXT="" (empty — built up across iterations; holds both design context and prior findings)
|
|
19
19
|
Set ALL_SESSION_DIRS=[] (list of all session directories used, in order)
|
|
20
20
|
|
|
21
|
+
Determine REPO_ROOT — the main repository root (not a worktree root). Run:
|
|
22
|
+
`REPO_ROOT=$(realpath "$(git rev-parse --git-common-dir)" | sed 's|/\.git$||')`
|
|
23
|
+
|
|
21
24
|
If CONTEXT_FILE exists, read its contents and set PRIOR_CONTEXT to:
|
|
22
25
|
"## Design Decisions (intentional — do not flag)\nThe following are deliberate design choices. Do NOT flag these as issues or suggest alternatives.\n`\n" + contents of CONTEXT_FILE + "\n`\n"
|
|
23
26
|
|
|
24
27
|
STEP 2: RUN INITIAL DEEPREVIEW (full pipeline with cross-validation)
|
|
25
28
|
Run the full deepreview pipeline (Stages 1-5 from the deepreview command):
|
|
26
29
|
|
|
27
|
-
- Determine SESSION_DIR and write input.txt
|
|
30
|
+
- Determine SESSION_DIR=`$REPO_ROOT/.ai/deepreview/loop-iter$ITERATION-$(date +%Y-%m-%d-%H%M%S)` and write input.txt
|
|
28
31
|
- Append SESSION_DIR to ALL_SESSION_DIRS
|
|
29
32
|
- Stage 1: 5 parallel reviewers — prepend PRIOR_CONTEXT (if non-empty) to each reviewer's prompt as "${PRIOR_CONTEXT}You are reviewing ... Read the content at $SESSION_DIR/input.txt. Write your review to $SESSION_DIR/review-{perspective}.md."
|
|
30
33
|
- Stage 2: 5 parallel validators (cross-validation)
|
|
@@ -44,9 +47,20 @@ Dispatch the applier automatically — do NOT ask the user for permission.
|
|
|
44
47
|
Use the Task tool with subagent_type="deepreview-applier":
|
|
45
48
|
"Read the implementation plan at $SESSION_DIR/implementation-plan.md. Apply the fixes."
|
|
46
49
|
|
|
47
|
-
Wait for the applier to return.
|
|
50
|
+
Wait for the applier to return. Parse the applier's response for VERIFICATION status.
|
|
51
|
+
|
|
52
|
+
STEP 4b: HANDLE VERIFICATION RESULTS
|
|
53
|
+
If the applier reports VERIFICATION: FAIL:
|
|
54
|
+
|
|
55
|
+
- Show the user the error summary from the applier's response
|
|
56
|
+
- Ask: "Applied fixes failed verification (lint/test). Options: revert and skip failing fix, continue anyway, or stop?"
|
|
57
|
+
- If revert: run `git checkout -- .` to undo all changes from this iteration, note which fix failed, add it to a SKIP_LIST, and re-run the planner+applier without that fix.
|
|
58
|
+
- If continue: proceed to STEP 5 (the next iteration's reviewers will likely catch the introduced error).
|
|
59
|
+
- If stop: STOP.
|
|
48
60
|
|
|
49
|
-
|
|
61
|
+
If the applier reports VERIFICATION: PASS (or no verification was possible): proceed to STEP 5.
|
|
62
|
+
|
|
63
|
+
STEP 5: INCREMENT AND RE-REVIEW
|
|
50
64
|
Set ITERATION = ITERATION + 1
|
|
51
65
|
|
|
52
66
|
If ITERATION > 5:
|
|
@@ -57,7 +71,7 @@ If ITERATION > 5:
|
|
|
57
71
|
- If user says stop → STOP.
|
|
58
72
|
- If user says continue → reset limit to ITERATION + 5 and proceed.
|
|
59
73
|
|
|
60
|
-
Create new session directory: SESSION_DIR="
|
|
74
|
+
Create new session directory: SESSION_DIR="$REPO_ROOT/.ai/deepreview/loop-iter$ITERATION-$(date +%Y-%m-%d-%H%M%S)"
|
|
61
75
|
Run `mkdir -p $SESSION_DIR`
|
|
62
76
|
Append SESSION_DIR to ALL_SESSION_DIRS
|
|
63
77
|
|
|
@@ -68,36 +82,47 @@ Prepare fresh input:
|
|
|
68
82
|
|
|
69
83
|
Check if input.txt is empty. If empty, tell user "Nothing to review — all changes resolved." and STOP.
|
|
70
84
|
|
|
71
|
-
STEP 5a:
|
|
85
|
+
STEP 5a: DIFF SIZE DIVERGENCE CHECK
|
|
86
|
+
Compare the size of the new input.txt to the previous iteration's input.txt (in bytes or lines).
|
|
87
|
+
If the new input is more than 50% larger than the previous iteration's input:
|
|
88
|
+
|
|
89
|
+
- Tell the user: "Divergence warning: diff grew from ~N to ~M lines (X% increase). The applier may be adding more code than it's fixing."
|
|
90
|
+
- Ask: "Continue with the larger diff, or revert last iteration's changes?"
|
|
91
|
+
- If revert: run `git checkout -- .`, STOP.
|
|
92
|
+
- If continue: proceed.
|
|
93
|
+
|
|
94
|
+
STEP 5b: BUILD PRIOR CONTEXT
|
|
72
95
|
Accumulate findings from ALL previous iterations into PRIOR_CONTEXT so no finding is re-reported.
|
|
73
96
|
|
|
74
|
-
To build this, dispatch a helper task that reads ALL previous syntheses:
|
|
97
|
+
To build this, dispatch a helper task that reads ALL previous syntheses AND implementation plans:
|
|
75
98
|
NOTE: Interpolate the actual directory paths from ALL_SESSION_DIRS into this task string — the subagent cannot access your variables.
|
|
76
99
|
Task — Use the Task tool with subagent_type="general":
|
|
77
|
-
"Read the synthesis files from these directories: [LIST EACH PATH FROM ALL_SESSION_DIRS EXCLUDING CURRENT]. If any
|
|
100
|
+
"Read the synthesis files AND implementation plan files from these directories: [LIST EACH PATH FROM ALL_SESSION_DIRS EXCLUDING CURRENT]. If any file does not exist, skip it. Extract:
|
|
78
101
|
|
|
79
102
|
## Prior Findings (already reported — do not re-report or verify)
|
|
80
103
|
|
|
81
104
|
- [Short Issue Title] ([category]) — [file:line]
|
|
82
105
|
|
|
106
|
+
## Applied Fixes (changes made by previous iterations — new bugs here are regressions)
|
|
107
|
+
|
|
108
|
+
- [Fix title from implementation plan] — [file:line] (applied in iter N)
|
|
109
|
+
|
|
83
110
|
## Covered Regions (already examined — prioritize elsewhere)
|
|
84
111
|
|
|
85
112
|
- [file:line-range] (pad each finding's file:line by 20 lines in each direction)
|
|
86
113
|
|
|
87
|
-
Deduplicate findings that appear in multiple syntheses. Return ONLY these
|
|
114
|
+
Deduplicate findings that appear in multiple syntheses. Return ONLY these three sections, nothing else."
|
|
88
115
|
|
|
89
116
|
Set PRIOR_CONTEXT to the returned text. Validate that it contains "## Prior Findings" — if not, warn the user ("Helper returned malformed prior context — proceeding without deduplication") and set PRIOR_CONTEXT="". If CONTEXT_FILE exists, prepend:
|
|
90
117
|
"## Design Decisions (intentional — do not flag)\nThe following are deliberate design choices. Do NOT flag these as issues or suggest alternatives.\n`\n" + contents of CONTEXT_FILE + "\n`\n\n"
|
|
91
118
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
The key difference: iteration 2+ skips cross-validation. This prevents validators from filtering out new issues introduced by fixes.
|
|
119
|
+
STEP 5c: RUN REVIEW WITH CROSS-VALIDATION
|
|
95
120
|
|
|
96
121
|
Stage 1 — DISPATCH 5 PARALLEL REVIEWERS:
|
|
97
122
|
Each reviewer prompt MUST include PRIOR_CONTEXT and the novelty-seeking framing below.
|
|
98
123
|
|
|
99
124
|
The REVIEWER_PREAMBLE for all iter2+ reviewers is:
|
|
100
|
-
"Your goal is to find issues that PREVIOUS reviewers missed. Do NOT re-report, verify, or comment on prior findings.
|
|
125
|
+
"Your goal is to find issues that PREVIOUS reviewers missed. Do NOT re-report, verify, or comment on prior findings. If you find a bug in code listed under 'Applied Fixes', flag it as a regression.
|
|
101
126
|
|
|
102
127
|
$PRIOR_CONTEXT
|
|
103
128
|
|
|
@@ -130,14 +155,39 @@ Read the content at $SESSION_DIR/input.txt. Write your review to $SESSION_DIR/re
|
|
|
130
155
|
|
|
131
156
|
Wait for all 5. Record which succeeded.
|
|
132
157
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
158
|
+
STEP 5d: VERIFY REVIEWER OUTPUT
|
|
159
|
+
Check how many review files were actually written. Run: `ls $SESSION_DIR/review-*.md 2>/dev/null | wc -l`
|
|
160
|
+
|
|
161
|
+
- If 0 files exist: Tell the user "All reviewers failed to produce output. This usually means the diff is too large for subagent context windows or there was an infrastructure failure." STOP.
|
|
162
|
+
- If 1-2 files exist: Warn the user "Only N/5 reviewers produced output. Proceeding with partial results." Continue with what exists.
|
|
163
|
+
- If 3+ files exist: Proceed normally.
|
|
164
|
+
|
|
165
|
+
Stage 2 — DISPATCH 5 PARALLEL VALIDATORS (cross-validation):
|
|
166
|
+
Task 6 — Use the Task tool with subagent_type="deepreview-validator":
|
|
167
|
+
"Your perspective: correctness. Read all review files at: $SESSION_DIR/review-correctness.md, $SESSION_DIR/review-security.md, $SESSION_DIR/review-architecture.md, $SESSION_DIR/review-docs.md, $SESSION_DIR/review-compatibility.md. Also read the original input at $SESSION_DIR/input.txt for context. Write your validated review to $SESSION_DIR/validated-correctness.md."
|
|
168
|
+
|
|
169
|
+
Task 7 — Use the Task tool with subagent_type="deepreview-validator":
|
|
170
|
+
"Your perspective: security. Read all review files at: $SESSION_DIR/review-correctness.md, $SESSION_DIR/review-security.md, $SESSION_DIR/review-architecture.md, $SESSION_DIR/review-docs.md, $SESSION_DIR/review-compatibility.md. Also read the original input at $SESSION_DIR/input.txt for context. Write your validated review to $SESSION_DIR/validated-security.md."
|
|
171
|
+
|
|
172
|
+
Task 8 — Use the Task tool with subagent_type="deepreview-validator":
|
|
173
|
+
"Your perspective: architecture. Read all review files at: $SESSION_DIR/review-correctness.md, $SESSION_DIR/review-security.md, $SESSION_DIR/review-architecture.md, $SESSION_DIR/review-docs.md, $SESSION_DIR/review-compatibility.md. Also read the original input at $SESSION_DIR/input.txt for context. Write your validated review to $SESSION_DIR/validated-architecture.md."
|
|
174
|
+
|
|
175
|
+
Task 9 — Use the Task tool with subagent_type="deepreview-validator":
|
|
176
|
+
"Your perspective: docs. Read all review files at: $SESSION_DIR/review-correctness.md, $SESSION_DIR/review-security.md, $SESSION_DIR/review-architecture.md, $SESSION_DIR/review-docs.md, $SESSION_DIR/review-compatibility.md. Also read the original input at $SESSION_DIR/input.txt for context. Write your validated review to $SESSION_DIR/validated-docs.md."
|
|
177
|
+
|
|
178
|
+
Task 10 — Use the Task tool with subagent_type="deepreview-validator":
|
|
179
|
+
"Your perspective: compatibility. Read all review files at: $SESSION_DIR/review-correctness.md, $SESSION_DIR/review-security.md, $SESSION_DIR/review-architecture.md, $SESSION_DIR/review-docs.md, $SESSION_DIR/review-compatibility.md. Also read the original input at $SESSION_DIR/input.txt for context. Write your validated review to $SESSION_DIR/validated-compatibility.md."
|
|
180
|
+
|
|
181
|
+
Wait for all 5 to return.
|
|
182
|
+
|
|
183
|
+
Stage 3 — DISPATCH SYNTHESIZER:
|
|
184
|
+
Task 11 — Use the Task tool with subagent_type="deepreview-synthesizer":
|
|
185
|
+
"Read the validated reviews at: $SESSION_DIR/validated-correctness.md, $SESSION_DIR/validated-security.md, $SESSION_DIR/validated-architecture.md, $SESSION_DIR/validated-docs.md, $SESSION_DIR/validated-compatibility.md (skip any that don't exist). Write the synthesis to $SESSION_DIR/synthesis.md."
|
|
136
186
|
|
|
137
187
|
Record the stats line.
|
|
138
188
|
|
|
139
189
|
Stage 4 — DISPATCH PLANNER:
|
|
140
|
-
Task
|
|
190
|
+
Task 12 — Use the Task tool with subagent_type="deepreview-planner":
|
|
141
191
|
"Read the synthesis at $SESSION_DIR/synthesis.md. Write the implementation plan to $SESSION_DIR/implementation-plan.md."
|
|
142
192
|
|
|
143
193
|
Record the summary line.
|
|
@@ -160,8 +210,9 @@ IMPORTANT RULES:
|
|
|
160
210
|
- Use ONLY the file paths and stats/summary lines returned by subagents.
|
|
161
211
|
- Apply ALL findings (critical, warning, AND suggestion) — the goal is a clean review.
|
|
162
212
|
- Do NOT ask the user for permission to apply fixes. Apply automatically.
|
|
163
|
-
- DO ask the user if iteration limit is hit
|
|
164
|
-
- Iteration 2+ MUST
|
|
213
|
+
- DO ask the user if: iteration limit is hit, deadlock is detected, verification fails, or diff size diverges.
|
|
214
|
+
- Iteration 2+ MUST include cross-validation, MUST include PRIOR_CONTEXT, and MUST use novelty-seeking framing.
|
|
165
215
|
- Iteration 2+ MUST NOT tell reviewers to "verify" or "check status of" prior findings.
|
|
166
216
|
- Each iteration uses a NEW session directory — never reuse a previous one.
|
|
167
217
|
- If --context file is provided, include its contents under "Design Decisions" in PRIOR_CONTEXT for ALL iterations (including iter1).
|
|
218
|
+
- If all reviewers produce zero output files, STOP immediately — do not continue to synthesis.
|
|
@@ -7,7 +7,10 @@ You are an orchestrator for a multi-agent code review pipeline that posts findin
|
|
|
7
7
|
STEP 1: VALIDATE INPUT
|
|
8
8
|
$ARGUMENTS must be a PR number (integer). If it is not a number, tell the user "Usage: /deepreview-pr-review <PR_NUMBER>" and STOP.
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
Determine REPO_ROOT — the main repository root (not a worktree root). Run:
|
|
11
|
+
`REPO_ROOT=$(realpath "$(git rev-parse --git-common-dir)" | sed 's|/\.git$||')`
|
|
12
|
+
|
|
13
|
+
Set SESSION_DIR="$REPO_ROOT/.ai/deepreview/$ARGUMENTS-review-$(date +%Y-%m-%d-%H%M%S)"
|
|
11
14
|
Create the directory with `mkdir -p $SESSION_DIR`
|
|
12
15
|
Set INPUT_DESCRIPTION="a PR diff (code changes)"
|
|
13
16
|
|
|
@@ -13,12 +13,14 @@ STEP 1: DETERMINE INPUT
|
|
|
13
13
|
- Set ITERATION=1
|
|
14
14
|
- Set PRIOR_CONTEXT="" (empty — built up across iterations; holds both design context and prior findings)
|
|
15
15
|
- Set ALL_SESSION_DIRS=[] (list of all session directories used, in order)
|
|
16
|
+
- Determine REPO_ROOT — the main repository root (not a worktree root). Run:
|
|
17
|
+
`REPO_ROOT=$(realpath "$(git rev-parse --git-common-dir)" | sed 's|/\.git$||')`
|
|
16
18
|
- If CONTEXT_FILE exists, set PRIOR_CONTEXT="## Design Decisions (intentional — do not flag)\nThe following are deliberate design choices. Do NOT flag these as issues or suggest alternatives.\n`\n" + contents of CONTEXT_FILE + "\n`\n\n"
|
|
17
19
|
|
|
18
20
|
STEP 2: RUN INITIAL DEEPREVIEW-SPEC (full pipeline with cross-validation)
|
|
19
21
|
Run the full deepreview-spec pipeline (Stages 1-5 from the deepreview-spec command):
|
|
20
22
|
|
|
21
|
-
- Determine SESSION_DIR="
|
|
23
|
+
- Determine SESSION_DIR="$REPO_ROOT/.ai/deepreview/spec-loop-iter1-$(date +%Y-%m-%d-%H%M%S)" and write input.txt
|
|
22
24
|
- Append SESSION_DIR to ALL_SESSION_DIRS
|
|
23
25
|
- Stage 1: 5 parallel reviewers (completeness, consistency, feasibility, docs, architecture) — prepend PRIOR_CONTEXT (if non-empty) to each reviewer's prompt as "${PRIOR_CONTEXT}You are reviewing ... Read the content at $SESSION_DIR/input.txt. Write your review to $SESSION_DIR/review-{perspective}.md."
|
|
24
26
|
- Stage 2: 5 parallel validators (cross-validation)
|
|
@@ -57,7 +59,7 @@ If ITERATION > 7:
|
|
|
57
59
|
- Show the latest stats.
|
|
58
60
|
- STOP.
|
|
59
61
|
|
|
60
|
-
Create new session directory: SESSION_DIR="
|
|
62
|
+
Create new session directory: SESSION_DIR="$REPO_ROOT/.ai/deepreview/spec-loop-iter$ITERATION-$(date +%Y-%m-%d-%H%M%S)"
|
|
61
63
|
Run `mkdir -p $SESSION_DIR`
|
|
62
64
|
Append SESSION_DIR to ALL_SESSION_DIRS
|
|
63
65
|
|
|
@@ -8,7 +8,9 @@ STEP 1: DETERMINE SESSION DIRECTORY
|
|
|
8
8
|
|
|
9
9
|
- If "$ARGUMENTS" starts with `--context <path>`, extract CONTEXT_FILE=<path> and remove it from $ARGUMENTS before parsing the rest.
|
|
10
10
|
- Validate CONTEXT_FILE: it must be a relative path (no leading `/`), must not contain `..`, must exist on disk, and must be a regular file (not a directory or symlink to outside the project), and must be under 50KB. If validation fails, tell the user the error and STOP.
|
|
11
|
-
-
|
|
11
|
+
- Determine REPO_ROOT — the main repository root (not a worktree root). Run:
|
|
12
|
+
`REPO_ROOT=$(realpath "$(git rev-parse --git-common-dir)" | sed 's|/\.git$||')`
|
|
13
|
+
- Set SESSION_DIR="$REPO_ROOT/.ai/deepreview/spec-$(date +%Y-%m-%d-%H%M%S)"
|
|
12
14
|
- Create the directory with `mkdir -p $SESSION_DIR`
|
|
13
15
|
|
|
14
16
|
STEP 2: PREPARE INPUT
|
|
@@ -14,11 +14,14 @@ Classify "$ARGUMENTS":
|
|
|
14
14
|
- If it is multiple space-separated file paths → MODE=files
|
|
15
15
|
- If it is empty → MODE=branch
|
|
16
16
|
|
|
17
|
+
Determine REPO_ROOT — the main repository root (not a worktree root). Run:
|
|
18
|
+
`REPO_ROOT=$(realpath "$(git rev-parse --git-common-dir)" | sed 's|/\.git$||')`
|
|
19
|
+
|
|
17
20
|
Set SESSION_DIR based on mode:
|
|
18
21
|
|
|
19
|
-
- MODE=pr: SESSION_DIR="
|
|
20
|
-
- MODE=files: SESSION_DIR="
|
|
21
|
-
- MODE=branch: SESSION_DIR="
|
|
22
|
+
- MODE=pr: SESSION_DIR="$REPO_ROOT/.ai/deepreview/$ARGUMENTS-$(date +%Y-%m-%d)"
|
|
23
|
+
- MODE=files: SESSION_DIR="$REPO_ROOT/.ai/deepreview/files-$(date +%Y-%m-%d-%H%M%S)"
|
|
24
|
+
- MODE=branch: SESSION_DIR="$REPO_ROOT/.ai/deepreview/$(git branch --show-current)-$(date +%Y-%m-%d)"
|
|
22
25
|
|
|
23
26
|
Create the directory with `mkdir -p $SESSION_DIR`
|
|
24
27
|
|