overkill 0.9.0__tar.gz → 0.10.0__tar.gz
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.
- {overkill-0.9.0 → overkill-0.10.0}/.overkillrc.example +7 -0
- {overkill-0.9.0 → overkill-0.10.0}/.refactorsuggestrc.example +7 -0
- {overkill-0.9.0 → overkill-0.10.0}/PKG-INFO +102 -15
- {overkill-0.9.0 → overkill-0.10.0}/README.md +101 -14
- overkill-0.10.0/benchmarks/README.md +59 -0
- overkill-0.10.0/benchmarks/__init__.py +1 -0
- overkill-0.10.0/benchmarks/fixtures/gemini-review-review-only.prompt.md +101 -0
- overkill-0.10.0/benchmarks/gemini_prompt_benchmark.py +1110 -0
- overkill-0.10.0/benchmarks/results/gemini-171-2026-09-20.json +78 -0
- overkill-0.10.0/docs/gemini-review-guidance.md +169 -0
- {overkill-0.9.0 → overkill-0.10.0}/prompts/active/gemini-refactor-full.prompt.md +20 -0
- {overkill-0.9.0 → overkill-0.10.0}/prompts/active/gemini-refactor-layer.prompt.md +20 -0
- {overkill-0.9.0 → overkill-0.10.0}/prompts/active/gemini-refactor-micro.prompt.md +20 -0
- {overkill-0.9.0 → overkill-0.10.0}/prompts/active/gemini-refactor-module.prompt.md +20 -0
- overkill-0.10.0/prompts/active/gemini-review.prompt.md +126 -0
- {overkill-0.9.0 → overkill-0.10.0}/pyproject.toml +1 -1
- {overkill-0.9.0 → overkill-0.10.0}/src/mr_overkill/__main__.py +4 -1
- {overkill-0.9.0 → overkill-0.10.0}/src/mr_overkill/agents.py +314 -41
- {overkill-0.9.0 → overkill-0.10.0}/src/mr_overkill/budget/claude.py +93 -22
- {overkill-0.9.0 → overkill-0.10.0}/src/mr_overkill/cli.py +146 -59
- {overkill-0.9.0 → overkill-0.10.0}/src/mr_overkill/commit_scope.py +25 -4
- {overkill-0.9.0 → overkill-0.10.0}/src/mr_overkill/git_ops.py +2 -1
- {overkill-0.9.0 → overkill-0.10.0}/src/mr_overkill/init.py +18 -8
- {overkill-0.9.0 → overkill-0.10.0}/src/mr_overkill/loop_engine.py +13 -33
- {overkill-0.9.0 → overkill-0.10.0}/src/mr_overkill/models.py +22 -3
- {overkill-0.9.0 → overkill-0.10.0}/src/mr_overkill/refactor_suggest.py +15 -25
- {overkill-0.9.0 → overkill-0.10.0}/src/mr_overkill/retry.py +94 -11
- overkill-0.10.0/src/mr_overkill/review_evidence.py +22 -0
- {overkill-0.9.0 → overkill-0.10.0}/src/mr_overkill/self_review.py +42 -16
- overkill-0.10.0/src/mr_overkill/two_step_fix.py +156 -0
- {overkill-0.9.0 → overkill-0.10.0}/src/mr_overkill/wip_scope.py +3 -3
- overkill-0.10.0/src/mr_overkill/workspace_policy.py +103 -0
- {overkill-0.9.0 → overkill-0.10.0}/tests/test_agents.py +7 -0
- overkill-0.10.0/tests/test_backend_selection.py +471 -0
- overkill-0.10.0/tests/test_budget_claude.py +282 -0
- {overkill-0.9.0 → overkill-0.10.0}/tests/test_cli.py +5 -5
- {overkill-0.9.0 → overkill-0.10.0}/tests/test_commit_scope.py +58 -0
- overkill-0.10.0/tests/test_gemini_scope_evidence.py +214 -0
- overkill-0.10.0/tests/test_parallel_reviewers.py +408 -0
- overkill-0.10.0/tests/test_review_benchmark.py +452 -0
- overkill-0.10.0/tests/test_self_review_evidence.py +96 -0
- overkill-0.10.0/tests/test_workspace_policy.py +306 -0
- {overkill-0.9.0 → overkill-0.10.0}/uv.lock +1 -1
- overkill-0.9.0/src/mr_overkill/two_step_fix.py +0 -112
- overkill-0.9.0/tests/test_budget_claude.py +0 -91
- {overkill-0.9.0 → overkill-0.10.0}/.github/workflows/publish.yml +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/.github/workflows/test.yml +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/.gitignore +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/.python-version +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/AGENTS.md +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/CLAUDE.md +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/GEMINI.md +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/LICENSE +0 -0
- /overkill-0.9.0/prompts/active/gemini-review.prompt.md → /overkill-0.10.0/benchmarks/fixtures/gemini-review-pre171.prompt.md +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/install.sh +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/prompts/active/claude-fix-execute.prompt.md +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/prompts/active/claude-fix.prompt.md +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/prompts/active/claude-refactor-fix-execute.prompt.md +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/prompts/active/claude-refactor-fix.prompt.md +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/prompts/active/claude-refactor-full.prompt.md +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/prompts/active/claude-refactor-layer.prompt.md +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/prompts/active/claude-refactor-micro.prompt.md +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/prompts/active/claude-refactor-module.prompt.md +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/prompts/active/claude-review.prompt.md +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/prompts/active/claude-self-review.prompt.md +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/prompts/active/codex-refactor-full.prompt.md +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/prompts/active/codex-refactor-layer.prompt.md +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/prompts/active/codex-refactor-micro.prompt.md +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/prompts/active/codex-refactor-module.prompt.md +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/prompts/active/codex-review.prompt.md +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/prompts/reference/claude-code-review-plugin.md +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/prompts/reference/claude-security-review.md +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/prompts/reference/codex-review-original.md +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/src/mr_overkill/__init__.py +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/src/mr_overkill/budget/__init__.py +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/src/mr_overkill/budget/codex.py +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/src/mr_overkill/budget/gemini.py +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/src/mr_overkill/budget_report.py +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/src/mr_overkill/classify.py +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/src/mr_overkill/data/__init__.py +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/src/mr_overkill/data/review.schema.json +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/src/mr_overkill/json_extract.py +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/src/mr_overkill/reporting.py +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/src/mr_overkill/resume.py +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/src/mr_overkill/review_loop.py +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/src/mr_overkill/time_utils.py +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/tests/__init__.py +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/tests/conftest.py +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/tests/test_budget_codex.py +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/tests/test_budget_gemini.py +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/tests/test_budget_policy.py +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/tests/test_budget_report.py +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/tests/test_classify.py +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/tests/test_git_ops.py +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/tests/test_init.py +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/tests/test_integration.py +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/tests/test_json_extract.py +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/tests/test_loop_engine.py +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/tests/test_refactor_suggest.py +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/tests/test_reporting.py +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/tests/test_resume.py +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/tests/test_retry.py +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/tests/test_review_loop.py +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/tests/test_self_review.py +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/tests/test_time_utils.py +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/tests/test_two_step_fix.py +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/tests/test_wip_scope.py +0 -0
- {overkill-0.9.0 → overkill-0.10.0}/uninstall.sh +0 -0
|
@@ -51,3 +51,10 @@
|
|
|
51
51
|
# Save full Claude event stream (tool calls, reasoning) to .stream.jsonl files.
|
|
52
52
|
# Useful for debugging missed findings. (default: false)
|
|
53
53
|
# DIAGNOSTIC_LOG=false
|
|
54
|
+
|
|
55
|
+
# Role backends: claude, codex, gemini, or agy (Antigravity).
|
|
56
|
+
# REVIEWER_BACKEND also accepts comma lists for parallel reviewers.
|
|
57
|
+
# REVIEWER_BACKEND="codex"
|
|
58
|
+
# FIXER_BACKEND="claude"
|
|
59
|
+
# Self-review follows FIXER_BACKEND unless explicitly overridden.
|
|
60
|
+
# SELF_REVIEWER_BACKEND="gemini"
|
|
@@ -54,3 +54,10 @@
|
|
|
54
54
|
# Save full Claude event stream (tool calls, reasoning) to .stream.jsonl files.
|
|
55
55
|
# Useful for debugging missed findings. (default: false)
|
|
56
56
|
# DIAGNOSTIC_LOG=false
|
|
57
|
+
|
|
58
|
+
# Role backends: claude, codex, gemini, or agy (Antigravity).
|
|
59
|
+
# REVIEWER_BACKEND also accepts comma lists for parallel reviewers.
|
|
60
|
+
# REVIEWER_BACKEND="codex"
|
|
61
|
+
# FIXER_BACKEND="claude"
|
|
62
|
+
# Self-review follows FIXER_BACKEND unless explicitly overridden.
|
|
63
|
+
# SELF_REVIEWER_BACKEND="gemini"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: overkill
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.10.0
|
|
4
4
|
Summary: AI-powered code review loop — automates Codex/Gemini review + Claude fix cycles
|
|
5
5
|
Project-URL: Repository, https://github.com/modocai/mr-overkill
|
|
6
6
|
Project-URL: Issues, https://github.com/modocai/mr-overkill/issues
|
|
@@ -141,7 +141,10 @@ Options:
|
|
|
141
141
|
--fix-nits Also flag nits and style issues during self-review
|
|
142
142
|
--context <text> Additional context for the reviewer (design intent,
|
|
143
143
|
constraints)
|
|
144
|
-
--reviewer
|
|
144
|
+
--reviewer <be[,be]> Reviewer backend(s): claude|codex|gemini|agy
|
|
145
|
+
(default: codex)
|
|
146
|
+
--fixer-backend <be> Fixer backend: claude|codex|gemini|agy (default: claude)
|
|
147
|
+
--self-reviewer-backend <be> Self-review backend (default: same as fixer)
|
|
145
148
|
--ci-trigger-mode <m> CI trigger policy: every|last-only|none (default: last-only).
|
|
146
149
|
'last-only' tags each iteration commit with [skip ci]
|
|
147
150
|
and pushes a single empty trigger commit on PASS —
|
|
@@ -157,7 +160,8 @@ Examples:
|
|
|
157
160
|
overkill review-loop -n 1 --dry-run # single review, no fixes
|
|
158
161
|
overkill review-loop -n 3 --no-self-review # disable self-review sub-loop
|
|
159
162
|
overkill review-loop --resume # resume an interrupted run
|
|
160
|
-
overkill review-loop -n 2 --reviewer
|
|
163
|
+
overkill review-loop -n 2 --reviewer claude # use Claude as reviewer
|
|
164
|
+
overkill review-loop -n 2 --reviewer codex,gemini # parallel reviewers
|
|
161
165
|
overkill review-loop -n 10 --ci-trigger-mode last-only # CI fires once on PASS
|
|
162
166
|
|
|
163
167
|
# Review only what landed after a given commit, before opening a PR
|
|
@@ -281,7 +285,10 @@ Options:
|
|
|
281
285
|
--resume Resume from a previously interrupted run (reuses existing logs)
|
|
282
286
|
--with-review Run review-loop after PR creation (default: 4 iterations)
|
|
283
287
|
--with-review-loops <N> Set review-loop iteration count (implies --with-review)
|
|
284
|
-
--reviewer
|
|
288
|
+
--reviewer <be[,be]> Reviewer backend(s): claude|codex|gemini|agy
|
|
289
|
+
(default: codex)
|
|
290
|
+
--fixer-backend <be> Fixer backend: claude|codex|gemini|agy (default: claude)
|
|
291
|
+
--self-reviewer-backend <be> Self-review backend (default: same as fixer)
|
|
285
292
|
--diagnostic-log Save full Claude event stream to sidecar files
|
|
286
293
|
--no-budget-gate Skip token-budget checks and run regardless
|
|
287
294
|
(same as OVERKILL_SKIP_BUDGET=1)
|
|
@@ -294,6 +301,7 @@ Examples:
|
|
|
294
301
|
overkill refactor-suggest --scope full -n 1 --create-pr # architecture redesign + PR
|
|
295
302
|
overkill refactor-suggest -n 2 --with-review # auto scope + auto review
|
|
296
303
|
overkill refactor-suggest --scope module -n 3 --with-review-loops 6 # custom review
|
|
304
|
+
overkill refactor-suggest -n 1 --reviewer codex,claude # parallel analysis
|
|
297
305
|
```
|
|
298
306
|
|
|
299
307
|
## Usage: overkill init
|
|
@@ -330,10 +338,10 @@ Creates:
|
|
|
330
338
|
|
|
331
339
|
```
|
|
332
340
|
1. Collect source file list (git ls-files)
|
|
333
|
-
2. Reviewer
|
|
341
|
+
2. Reviewer(s) analyze the full codebase for scope-specific refactoring opportunities
|
|
334
342
|
3. (layer/full) Display refactoring plan and wait for confirmation
|
|
335
|
-
4.
|
|
336
|
-
5.
|
|
343
|
+
4. The selected fixer applies refactoring (two-step: opinion → execute)
|
|
344
|
+
5. The selected self-reviewer checks changes, re-fixes if needed
|
|
337
345
|
6. Auto-commit & push to refactoring branch
|
|
338
346
|
7. Repeat until clean or max iterations reached
|
|
339
347
|
8. (--create-pr) Create draft PR
|
|
@@ -353,7 +361,9 @@ TARGET_BRANCH="main"
|
|
|
353
361
|
MAX_LOOP=5
|
|
354
362
|
MAX_SUBLOOP=4
|
|
355
363
|
AUTO_COMMIT=true
|
|
356
|
-
REVIEWER_BACKEND="codex" #
|
|
364
|
+
REVIEWER_BACKEND="codex" # comma list: claude | codex | gemini | agy
|
|
365
|
+
FIXER_BACKEND="claude" # claude | codex | gemini | agy
|
|
366
|
+
# SELF_REVIEWER_BACKEND="gemini" # omitted: follows FIXER_BACKEND
|
|
357
367
|
PROMPTS_DIR="./custom-prompts"
|
|
358
368
|
```
|
|
359
369
|
|
|
@@ -372,7 +382,9 @@ AUTO_APPROVE=false
|
|
|
372
382
|
CREATE_PR=false
|
|
373
383
|
WITH_REVIEW=false
|
|
374
384
|
REVIEW_LOOPS=4
|
|
375
|
-
REVIEWER_BACKEND="codex" #
|
|
385
|
+
REVIEWER_BACKEND="codex" # comma list: claude | codex | gemini | agy
|
|
386
|
+
FIXER_BACKEND="claude" # claude | codex | gemini | agy
|
|
387
|
+
# SELF_REVIEWER_BACKEND="gemini" # omitted: follows FIXER_BACKEND
|
|
376
388
|
PROMPTS_DIR="./custom-prompts"
|
|
377
389
|
```
|
|
378
390
|
|
|
@@ -384,13 +396,13 @@ PROMPTS_DIR="./custom-prompts"
|
|
|
384
396
|
3. Loop (iteration 1..N):
|
|
385
397
|
a. Generate diff: git diff $TARGET...$CURRENT
|
|
386
398
|
b. Empty diff → exit
|
|
387
|
-
c. Reviewer
|
|
399
|
+
c. Reviewer(s), via --reviewer, review the diff → JSON with findings
|
|
388
400
|
d. No findings + "patch is correct" → exit
|
|
389
|
-
e.
|
|
401
|
+
e. The selected fixer fixes all issues (P0-P3)
|
|
390
402
|
f. Sub-loop (1..MAX_SUBLOOP):
|
|
391
|
-
-
|
|
403
|
+
- The selected self-reviewer checks the uncommitted fixes (git diff)
|
|
392
404
|
- If clean → break
|
|
393
|
-
-
|
|
405
|
+
- The selected fixer re-fixes based on self-review findings
|
|
394
406
|
g. Auto-commit all fixes + re-fixes to branch
|
|
395
407
|
h. Push to remote (updates PR)
|
|
396
408
|
i. Post review/fix/self-review summary as PR comment
|
|
@@ -406,7 +418,8 @@ All logs are git-ignored by default (inside `.overkill/`).
|
|
|
406
418
|
|
|
407
419
|
| File | Description |
|
|
408
420
|
|------|-------------|
|
|
409
|
-
| `review-N.json` |
|
|
421
|
+
| `review-N.json` | Combined review output for iteration N |
|
|
422
|
+
| `reviewers/<backend>/review-N.json` | Individual reviewer output for iteration N when multiple reviewers run |
|
|
410
423
|
| `opinion-N.md` | Claude's opinion on review findings (iteration N) |
|
|
411
424
|
| `fix-N.md` | Claude fix log for iteration N |
|
|
412
425
|
| `self-review-N-M.json` | Claude self-review output (iteration N, sub-iteration M) |
|
|
@@ -419,7 +432,8 @@ All logs are git-ignored by default (inside `.overkill/`).
|
|
|
419
432
|
| File | Description |
|
|
420
433
|
|------|-------------|
|
|
421
434
|
| `source-files.txt` | List of files analyzed (from `git ls-files`) |
|
|
422
|
-
| `review-N.json` |
|
|
435
|
+
| `review-N.json` | Combined refactoring analysis for iteration N |
|
|
436
|
+
| `reviewers/<backend>/review-N.json` | Individual reviewer output for iteration N when multiple reviewers run |
|
|
423
437
|
| `opinion-N.md` | Claude's opinion on refactoring findings (iteration N) |
|
|
424
438
|
| `fix-N.md` | Claude fix log for iteration N |
|
|
425
439
|
| `self-review-N-M.json` | Claude self-review (iteration N, sub-iteration M) |
|
|
@@ -554,3 +568,76 @@ uv run pytest --tb=short
|
|
|
554
568
|
## License
|
|
555
569
|
|
|
556
570
|
[MIT](LICENSE) © 2026 ModocAI
|
|
571
|
+
|
|
572
|
+
### Selecting role backends
|
|
573
|
+
|
|
574
|
+
Both `review-loop` and `refactor-suggest` accept independent reviewer and fixer
|
|
575
|
+
backends. `--reviewer` selects one or more review backends; `--reviewer-backend`
|
|
576
|
+
remains a compatible alias. The rc key `REVIEWER_BACKEND` is unchanged.
|
|
577
|
+
Defaults remain Codex review and Claude fix. Self-review follows the
|
|
578
|
+
fixer unless `--self-reviewer-backend` / `SELF_REVIEWER_BACKEND` is set.
|
|
579
|
+
|
|
580
|
+
```sh
|
|
581
|
+
overkill review-loop -n 3 --reviewer gemini --fixer-backend codex
|
|
582
|
+
overkill review-loop -n 3 --reviewer codex,claude,gemini
|
|
583
|
+
# Optional independent verification of the fix:
|
|
584
|
+
overkill review-loop -n 3 --fixer-backend codex --self-reviewer-backend claude
|
|
585
|
+
```
|
|
586
|
+
|
|
587
|
+
Reviewer lists are comma-separated, whitespace is ignored, and duplicates are
|
|
588
|
+
collapsed while preserving the first occurrence. When multiple reviewers are
|
|
589
|
+
selected, they run in parallel once per iteration. Their findings are combined
|
|
590
|
+
into a single review for the normal fixer path, and all selected reviewers must
|
|
591
|
+
succeed before fixing begins. Exact duplicate findings are collapsed only by
|
|
592
|
+
exact match; Mr. Overkill does not semantically merge similar findings. Each
|
|
593
|
+
individual review is written to `reviewers/<backend>/review-N.json`, while the
|
|
594
|
+
combined result remains `review-N.json`. The fixer and self-reviewer behavior is
|
|
595
|
+
unchanged.
|
|
596
|
+
|
|
597
|
+
Install and authenticate each selected CLI before running. Codex fixes use
|
|
598
|
+
`workspace-write`; Gemini fixes use sandboxed `yolo` mode. Opinion and self-review
|
|
599
|
+
use Codex `read-only` or Gemini `plan` mode (requires a Gemini CLI supporting that
|
|
600
|
+
mode). Claude retains its existing two-step session. Codex and Gemini receive the
|
|
601
|
+
opinion and original findings explicitly in the editing step. Existing
|
|
602
|
+
`claude-*-fix*` and `claude-self-review` prompt filenames remain shared templates
|
|
603
|
+
for compatibility with custom prompt directories.
|
|
604
|
+
|
|
605
|
+
Gemini reviewers (including refactoring analysis) also use sandboxed `plan` mode,
|
|
606
|
+
never `yolo`. Overkill supplies the requested diff directly because plan mode may
|
|
607
|
+
disable shell tools; commit/WIP scope remains authoritative. The bundled Gemini
|
|
608
|
+
prompts include evidence-driven review guidance without invoking an installed
|
|
609
|
+
`/code-review` command, changing the target to `origin/HEAD`, or replacing the
|
|
610
|
+
JSON/P0-P3 contract. Refresh existing local prompt copies with `overkill init`
|
|
611
|
+
after inspecting any customizations. Permission failures are not code defects;
|
|
612
|
+
there is no automatic fallback to editing mode.
|
|
613
|
+
|
|
614
|
+
Plan mode is a CLI permission policy, not a guarantee against every possible
|
|
615
|
+
side effect (for example, Gemini permits its own plan-directory writes). See
|
|
616
|
+
[`docs/gemini-review-guidance.md`](docs/gemini-review-guidance.md) for provenance,
|
|
617
|
+
headless verification limits, and the reproducible prompt benchmark.
|
|
618
|
+
|
|
619
|
+
CLI options override rc settings. `--resume` restores saved role selections unless
|
|
620
|
+
explicitly overridden on the command line; an inherited self-review selection
|
|
621
|
+
continues to follow the fixer. `--no-self-review` still disables this stage.
|
|
622
|
+
|
|
623
|
+
Antigravity CLI is supported explicitly as `agy` for all three roles:
|
|
624
|
+
|
|
625
|
+
```sh
|
|
626
|
+
overkill review-loop -n 3 --reviewer agy --fixer-backend codex
|
|
627
|
+
overkill refactor-suggest --scope module --fixer-backend agy
|
|
628
|
+
```
|
|
629
|
+
|
|
630
|
+
Google announced the consumer transition from Gemini CLI on May 19, 2026, with
|
|
631
|
+
free/Pro/Ultra access ending June 18; enterprise and paid API-key access remain.
|
|
632
|
+
See the [official announcement](https://developers.googleblog.com/an-important-update-transitioning-gemini-cli-to-antigravity-cli/).
|
|
633
|
+
Existing `gemini` selections continue to invoke `gemini`; no automatic executable
|
|
634
|
+
or account switching occurs. Authenticate `agy` separately before use.
|
|
635
|
+
|
|
636
|
+
Antigravity uses `--mode plan` for review/opinion and `--mode accept-edits` for
|
|
637
|
+
fixes, with `--sandbox` in both. It does not bypass permissions: shell commands
|
|
638
|
+
may be denied in headless mode unless your Antigravity policy permits them.
|
|
639
|
+
Use an up-to-date CLI that applies `--mode` to headless runs. Antigravity shares
|
|
640
|
+
the existing `gemini-*` review prompts. Local Antigravity quota preflight data is
|
|
641
|
+
not available; runtime errors go through the retry/error handling path.
|
|
642
|
+
See [headless mode](https://antigravity.google/docs/cli/headless/) and
|
|
643
|
+
[execution modes](https://www.antigravity.google/docs/cli/modes/).
|
|
@@ -118,7 +118,10 @@ Options:
|
|
|
118
118
|
--fix-nits Also flag nits and style issues during self-review
|
|
119
119
|
--context <text> Additional context for the reviewer (design intent,
|
|
120
120
|
constraints)
|
|
121
|
-
--reviewer
|
|
121
|
+
--reviewer <be[,be]> Reviewer backend(s): claude|codex|gemini|agy
|
|
122
|
+
(default: codex)
|
|
123
|
+
--fixer-backend <be> Fixer backend: claude|codex|gemini|agy (default: claude)
|
|
124
|
+
--self-reviewer-backend <be> Self-review backend (default: same as fixer)
|
|
122
125
|
--ci-trigger-mode <m> CI trigger policy: every|last-only|none (default: last-only).
|
|
123
126
|
'last-only' tags each iteration commit with [skip ci]
|
|
124
127
|
and pushes a single empty trigger commit on PASS —
|
|
@@ -134,7 +137,8 @@ Examples:
|
|
|
134
137
|
overkill review-loop -n 1 --dry-run # single review, no fixes
|
|
135
138
|
overkill review-loop -n 3 --no-self-review # disable self-review sub-loop
|
|
136
139
|
overkill review-loop --resume # resume an interrupted run
|
|
137
|
-
overkill review-loop -n 2 --reviewer
|
|
140
|
+
overkill review-loop -n 2 --reviewer claude # use Claude as reviewer
|
|
141
|
+
overkill review-loop -n 2 --reviewer codex,gemini # parallel reviewers
|
|
138
142
|
overkill review-loop -n 10 --ci-trigger-mode last-only # CI fires once on PASS
|
|
139
143
|
|
|
140
144
|
# Review only what landed after a given commit, before opening a PR
|
|
@@ -258,7 +262,10 @@ Options:
|
|
|
258
262
|
--resume Resume from a previously interrupted run (reuses existing logs)
|
|
259
263
|
--with-review Run review-loop after PR creation (default: 4 iterations)
|
|
260
264
|
--with-review-loops <N> Set review-loop iteration count (implies --with-review)
|
|
261
|
-
--reviewer
|
|
265
|
+
--reviewer <be[,be]> Reviewer backend(s): claude|codex|gemini|agy
|
|
266
|
+
(default: codex)
|
|
267
|
+
--fixer-backend <be> Fixer backend: claude|codex|gemini|agy (default: claude)
|
|
268
|
+
--self-reviewer-backend <be> Self-review backend (default: same as fixer)
|
|
262
269
|
--diagnostic-log Save full Claude event stream to sidecar files
|
|
263
270
|
--no-budget-gate Skip token-budget checks and run regardless
|
|
264
271
|
(same as OVERKILL_SKIP_BUDGET=1)
|
|
@@ -271,6 +278,7 @@ Examples:
|
|
|
271
278
|
overkill refactor-suggest --scope full -n 1 --create-pr # architecture redesign + PR
|
|
272
279
|
overkill refactor-suggest -n 2 --with-review # auto scope + auto review
|
|
273
280
|
overkill refactor-suggest --scope module -n 3 --with-review-loops 6 # custom review
|
|
281
|
+
overkill refactor-suggest -n 1 --reviewer codex,claude # parallel analysis
|
|
274
282
|
```
|
|
275
283
|
|
|
276
284
|
## Usage: overkill init
|
|
@@ -307,10 +315,10 @@ Creates:
|
|
|
307
315
|
|
|
308
316
|
```
|
|
309
317
|
1. Collect source file list (git ls-files)
|
|
310
|
-
2. Reviewer
|
|
318
|
+
2. Reviewer(s) analyze the full codebase for scope-specific refactoring opportunities
|
|
311
319
|
3. (layer/full) Display refactoring plan and wait for confirmation
|
|
312
|
-
4.
|
|
313
|
-
5.
|
|
320
|
+
4. The selected fixer applies refactoring (two-step: opinion → execute)
|
|
321
|
+
5. The selected self-reviewer checks changes, re-fixes if needed
|
|
314
322
|
6. Auto-commit & push to refactoring branch
|
|
315
323
|
7. Repeat until clean or max iterations reached
|
|
316
324
|
8. (--create-pr) Create draft PR
|
|
@@ -330,7 +338,9 @@ TARGET_BRANCH="main"
|
|
|
330
338
|
MAX_LOOP=5
|
|
331
339
|
MAX_SUBLOOP=4
|
|
332
340
|
AUTO_COMMIT=true
|
|
333
|
-
REVIEWER_BACKEND="codex" #
|
|
341
|
+
REVIEWER_BACKEND="codex" # comma list: claude | codex | gemini | agy
|
|
342
|
+
FIXER_BACKEND="claude" # claude | codex | gemini | agy
|
|
343
|
+
# SELF_REVIEWER_BACKEND="gemini" # omitted: follows FIXER_BACKEND
|
|
334
344
|
PROMPTS_DIR="./custom-prompts"
|
|
335
345
|
```
|
|
336
346
|
|
|
@@ -349,7 +359,9 @@ AUTO_APPROVE=false
|
|
|
349
359
|
CREATE_PR=false
|
|
350
360
|
WITH_REVIEW=false
|
|
351
361
|
REVIEW_LOOPS=4
|
|
352
|
-
REVIEWER_BACKEND="codex" #
|
|
362
|
+
REVIEWER_BACKEND="codex" # comma list: claude | codex | gemini | agy
|
|
363
|
+
FIXER_BACKEND="claude" # claude | codex | gemini | agy
|
|
364
|
+
# SELF_REVIEWER_BACKEND="gemini" # omitted: follows FIXER_BACKEND
|
|
353
365
|
PROMPTS_DIR="./custom-prompts"
|
|
354
366
|
```
|
|
355
367
|
|
|
@@ -361,13 +373,13 @@ PROMPTS_DIR="./custom-prompts"
|
|
|
361
373
|
3. Loop (iteration 1..N):
|
|
362
374
|
a. Generate diff: git diff $TARGET...$CURRENT
|
|
363
375
|
b. Empty diff → exit
|
|
364
|
-
c. Reviewer
|
|
376
|
+
c. Reviewer(s), via --reviewer, review the diff → JSON with findings
|
|
365
377
|
d. No findings + "patch is correct" → exit
|
|
366
|
-
e.
|
|
378
|
+
e. The selected fixer fixes all issues (P0-P3)
|
|
367
379
|
f. Sub-loop (1..MAX_SUBLOOP):
|
|
368
|
-
-
|
|
380
|
+
- The selected self-reviewer checks the uncommitted fixes (git diff)
|
|
369
381
|
- If clean → break
|
|
370
|
-
-
|
|
382
|
+
- The selected fixer re-fixes based on self-review findings
|
|
371
383
|
g. Auto-commit all fixes + re-fixes to branch
|
|
372
384
|
h. Push to remote (updates PR)
|
|
373
385
|
i. Post review/fix/self-review summary as PR comment
|
|
@@ -383,7 +395,8 @@ All logs are git-ignored by default (inside `.overkill/`).
|
|
|
383
395
|
|
|
384
396
|
| File | Description |
|
|
385
397
|
|------|-------------|
|
|
386
|
-
| `review-N.json` |
|
|
398
|
+
| `review-N.json` | Combined review output for iteration N |
|
|
399
|
+
| `reviewers/<backend>/review-N.json` | Individual reviewer output for iteration N when multiple reviewers run |
|
|
387
400
|
| `opinion-N.md` | Claude's opinion on review findings (iteration N) |
|
|
388
401
|
| `fix-N.md` | Claude fix log for iteration N |
|
|
389
402
|
| `self-review-N-M.json` | Claude self-review output (iteration N, sub-iteration M) |
|
|
@@ -396,7 +409,8 @@ All logs are git-ignored by default (inside `.overkill/`).
|
|
|
396
409
|
| File | Description |
|
|
397
410
|
|------|-------------|
|
|
398
411
|
| `source-files.txt` | List of files analyzed (from `git ls-files`) |
|
|
399
|
-
| `review-N.json` |
|
|
412
|
+
| `review-N.json` | Combined refactoring analysis for iteration N |
|
|
413
|
+
| `reviewers/<backend>/review-N.json` | Individual reviewer output for iteration N when multiple reviewers run |
|
|
400
414
|
| `opinion-N.md` | Claude's opinion on refactoring findings (iteration N) |
|
|
401
415
|
| `fix-N.md` | Claude fix log for iteration N |
|
|
402
416
|
| `self-review-N-M.json` | Claude self-review (iteration N, sub-iteration M) |
|
|
@@ -531,3 +545,76 @@ uv run pytest --tb=short
|
|
|
531
545
|
## License
|
|
532
546
|
|
|
533
547
|
[MIT](LICENSE) © 2026 ModocAI
|
|
548
|
+
|
|
549
|
+
### Selecting role backends
|
|
550
|
+
|
|
551
|
+
Both `review-loop` and `refactor-suggest` accept independent reviewer and fixer
|
|
552
|
+
backends. `--reviewer` selects one or more review backends; `--reviewer-backend`
|
|
553
|
+
remains a compatible alias. The rc key `REVIEWER_BACKEND` is unchanged.
|
|
554
|
+
Defaults remain Codex review and Claude fix. Self-review follows the
|
|
555
|
+
fixer unless `--self-reviewer-backend` / `SELF_REVIEWER_BACKEND` is set.
|
|
556
|
+
|
|
557
|
+
```sh
|
|
558
|
+
overkill review-loop -n 3 --reviewer gemini --fixer-backend codex
|
|
559
|
+
overkill review-loop -n 3 --reviewer codex,claude,gemini
|
|
560
|
+
# Optional independent verification of the fix:
|
|
561
|
+
overkill review-loop -n 3 --fixer-backend codex --self-reviewer-backend claude
|
|
562
|
+
```
|
|
563
|
+
|
|
564
|
+
Reviewer lists are comma-separated, whitespace is ignored, and duplicates are
|
|
565
|
+
collapsed while preserving the first occurrence. When multiple reviewers are
|
|
566
|
+
selected, they run in parallel once per iteration. Their findings are combined
|
|
567
|
+
into a single review for the normal fixer path, and all selected reviewers must
|
|
568
|
+
succeed before fixing begins. Exact duplicate findings are collapsed only by
|
|
569
|
+
exact match; Mr. Overkill does not semantically merge similar findings. Each
|
|
570
|
+
individual review is written to `reviewers/<backend>/review-N.json`, while the
|
|
571
|
+
combined result remains `review-N.json`. The fixer and self-reviewer behavior is
|
|
572
|
+
unchanged.
|
|
573
|
+
|
|
574
|
+
Install and authenticate each selected CLI before running. Codex fixes use
|
|
575
|
+
`workspace-write`; Gemini fixes use sandboxed `yolo` mode. Opinion and self-review
|
|
576
|
+
use Codex `read-only` or Gemini `plan` mode (requires a Gemini CLI supporting that
|
|
577
|
+
mode). Claude retains its existing two-step session. Codex and Gemini receive the
|
|
578
|
+
opinion and original findings explicitly in the editing step. Existing
|
|
579
|
+
`claude-*-fix*` and `claude-self-review` prompt filenames remain shared templates
|
|
580
|
+
for compatibility with custom prompt directories.
|
|
581
|
+
|
|
582
|
+
Gemini reviewers (including refactoring analysis) also use sandboxed `plan` mode,
|
|
583
|
+
never `yolo`. Overkill supplies the requested diff directly because plan mode may
|
|
584
|
+
disable shell tools; commit/WIP scope remains authoritative. The bundled Gemini
|
|
585
|
+
prompts include evidence-driven review guidance without invoking an installed
|
|
586
|
+
`/code-review` command, changing the target to `origin/HEAD`, or replacing the
|
|
587
|
+
JSON/P0-P3 contract. Refresh existing local prompt copies with `overkill init`
|
|
588
|
+
after inspecting any customizations. Permission failures are not code defects;
|
|
589
|
+
there is no automatic fallback to editing mode.
|
|
590
|
+
|
|
591
|
+
Plan mode is a CLI permission policy, not a guarantee against every possible
|
|
592
|
+
side effect (for example, Gemini permits its own plan-directory writes). See
|
|
593
|
+
[`docs/gemini-review-guidance.md`](docs/gemini-review-guidance.md) for provenance,
|
|
594
|
+
headless verification limits, and the reproducible prompt benchmark.
|
|
595
|
+
|
|
596
|
+
CLI options override rc settings. `--resume` restores saved role selections unless
|
|
597
|
+
explicitly overridden on the command line; an inherited self-review selection
|
|
598
|
+
continues to follow the fixer. `--no-self-review` still disables this stage.
|
|
599
|
+
|
|
600
|
+
Antigravity CLI is supported explicitly as `agy` for all three roles:
|
|
601
|
+
|
|
602
|
+
```sh
|
|
603
|
+
overkill review-loop -n 3 --reviewer agy --fixer-backend codex
|
|
604
|
+
overkill refactor-suggest --scope module --fixer-backend agy
|
|
605
|
+
```
|
|
606
|
+
|
|
607
|
+
Google announced the consumer transition from Gemini CLI on May 19, 2026, with
|
|
608
|
+
free/Pro/Ultra access ending June 18; enterprise and paid API-key access remain.
|
|
609
|
+
See the [official announcement](https://developers.googleblog.com/an-important-update-transitioning-gemini-cli-to-antigravity-cli/).
|
|
610
|
+
Existing `gemini` selections continue to invoke `gemini`; no automatic executable
|
|
611
|
+
or account switching occurs. Authenticate `agy` separately before use.
|
|
612
|
+
|
|
613
|
+
Antigravity uses `--mode plan` for review/opinion and `--mode accept-edits` for
|
|
614
|
+
fixes, with `--sandbox` in both. It does not bypass permissions: shell commands
|
|
615
|
+
may be denied in headless mode unless your Antigravity policy permits them.
|
|
616
|
+
Use an up-to-date CLI that applies `--mode` to headless runs. Antigravity shares
|
|
617
|
+
the existing `gemini-*` review prompts. Local Antigravity quota preflight data is
|
|
618
|
+
not available; runtime errors go through the retry/error handling path.
|
|
619
|
+
See [headless mode](https://antigravity.google/docs/cli/headless/) and
|
|
620
|
+
[execution modes](https://www.antigravity.google/docs/cli/modes/).
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Gemini Prompt Benchmark
|
|
2
|
+
|
|
3
|
+
Stdlib-only harness for issue #171. It creates tiny temporary Git repos, renders
|
|
4
|
+
Gemini review prompt variants, runs the Gemini CLI in bounded read-only plan mode,
|
|
5
|
+
and writes prompts, raw CLI output, snapshots, `results.json`, `report.json`, and
|
|
6
|
+
`report.md` to the selected output directory.
|
|
7
|
+
|
|
8
|
+
Variants:
|
|
9
|
+
- `baseline`: vendored pre-171 Gemini review prompt fixture.
|
|
10
|
+
- `review-only`: vendored prompt fixture with the review-only constraint.
|
|
11
|
+
- `adapted`: exact current production `prompts/active/gemini-review.prompt.md`.
|
|
12
|
+
|
|
13
|
+
Run all variants/cases:
|
|
14
|
+
|
|
15
|
+
```sh
|
|
16
|
+
uv run python -m benchmarks.gemini_prompt_benchmark \
|
|
17
|
+
--output-dir /tmp/overkill-171-benchmark \
|
|
18
|
+
--workers 3 \
|
|
19
|
+
--timeout 240
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Run a smaller slice:
|
|
23
|
+
|
|
24
|
+
```sh
|
|
25
|
+
uv run python -m benchmarks.gemini_prompt_benchmark \
|
|
26
|
+
--variants adapted \
|
|
27
|
+
--cases seeded-bug,wip-scope \
|
|
28
|
+
--output-dir /tmp/overkill-171-slice
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Notes:
|
|
32
|
+
- The harness sets `GEMINI_CLI_TRUST_WORKSPACE=true` only for the Gemini child process because its generated fixture repos are known-safe.
|
|
33
|
+
- Do not commit raw output directories; keep them under `/tmp` or another external archive path.
|
|
34
|
+
- The harness references captured diff evidence files for every variant so prompt comparisons do not depend on Gemini shell availability.
|
|
35
|
+
|
|
36
|
+
## Fixture Provenance and Limits
|
|
37
|
+
|
|
38
|
+
`fixtures/gemini-review-review-only.prompt.md` is the Overkill Gemini template from commit
|
|
39
|
+
`4dc4b45083a022a2daaf72fe316d6c74e6c68bc0` (MIT); the baseline removes only its
|
|
40
|
+
`Review-only constraint` section. These are not copied Google extension assets.
|
|
41
|
+
The adapted variant is loaded directly from the working production template.
|
|
42
|
+
|
|
43
|
+
All variants share the same read-only command and captured diff file, so this measures
|
|
44
|
+
prompt differences, not historical write-enabled execution. Seeded regressions
|
|
45
|
+
have existing callers/tests. The non-default target includes an `origin/HEAD`
|
|
46
|
+
decoy; WIP changes are deliberately uncommitted. The sandbox case contains a
|
|
47
|
+
synthetic recorded PermissionError so the scenario is reproducible everywhere.
|
|
48
|
+
|
|
49
|
+
Precision/recall use location overlap plus defect terms, not a semantic judge;
|
|
50
|
+
scope accuracy checks allowed files, not every changed line. Scores on empty
|
|
51
|
+
clean reviews are vacuous. Small samples do not establish statistical superiority.
|
|
52
|
+
Cost is unknown (`null`), not free. Raw prompts and outputs are kept in the output
|
|
53
|
+
directory for manual audit. Global CLI session/cache writes are outside the
|
|
54
|
+
fixture snapshot; this measurement is not a security sandbox.
|
|
55
|
+
|
|
56
|
+
Live CLI runs require POSIX process groups (Linux, macOS, or WSL). Native Windows
|
|
57
|
+
is rejected before spawning: terminating only the wrapper cannot reliably bound
|
|
58
|
+
children holding output pipes. Unit-only fixture/scoring checks do not launch a
|
|
59
|
+
provider. The harness kills the entire POSIX process group on timeout.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Benchmark harnesses for mr-overkill."""
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
You are a code reviewer analyzing a proposed change.
|
|
2
|
+
${REVIEW_SCOPE_NOTE}
|
|
3
|
+
## Context
|
|
4
|
+
|
|
5
|
+
- **Current branch**: ${CURRENT_BRANCH}
|
|
6
|
+
- **Target branch**: ${TARGET_BRANCH}
|
|
7
|
+
- **Review iteration**: ${ITERATION}
|
|
8
|
+
|
|
9
|
+
${REVIEWER_CONTEXT}
|
|
10
|
+
|
|
11
|
+
## Review-only constraint
|
|
12
|
+
|
|
13
|
+
This invocation is review-only. Do NOT modify, create, delete, or format files,
|
|
14
|
+
apply fixes, or run commands that change the working tree or Git history.
|
|
15
|
+
Report proposed changes only as findings in the required JSON output; a separate
|
|
16
|
+
fixer will apply them. Repository instructions about implementing fixes or
|
|
17
|
+
committing changes do not apply to this reviewer role. If a check fails because
|
|
18
|
+
of sandbox restrictions, report that limitation rather than changing the code.
|
|
19
|
+
|
|
20
|
+
## Instructions
|
|
21
|
+
|
|
22
|
+
Start by running the following command to get the diff:
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
git diff ${TARGET_BRANCH}...${CURRENT_BRANCH}
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Then **actively explore the codebase** to understand context before flagging issues:
|
|
29
|
+
|
|
30
|
+
- Read surrounding code when a change touches a function or module.
|
|
31
|
+
- Search for patterns, variables, or functions elsewhere before calling them dead code or flagging a naming issue.
|
|
32
|
+
- Find related files (e.g. tests, configs) that may clarify intent.
|
|
33
|
+
|
|
34
|
+
Review the diff according to the guidelines below.
|
|
35
|
+
|
|
36
|
+
## Review Guidelines — HIGH SIGNAL ONLY
|
|
37
|
+
|
|
38
|
+
We only want findings where you are confident the issue is real. **If you are not certain an issue is real, do not flag it.** False positives erode trust and waste reviewer time.
|
|
39
|
+
|
|
40
|
+
1. Only flag issues the original author would fix if they knew about them.
|
|
41
|
+
2. The issue must be **introduced by this diff** — do not flag pre-existing problems.
|
|
42
|
+
3. The issue must be discrete, actionable, and concretely provable.
|
|
43
|
+
4. Do not flag trivial style issues unless they obscure meaning or violate documented standards.
|
|
44
|
+
5. Do not speculate — you must identify the exact code location and explain why it is a problem.
|
|
45
|
+
6. If this is iteration > 1, focus on whether issues from prior reviews have been properly fixed, and identify any new issues introduced by the fixes.
|
|
46
|
+
7. **Only flag issues where your confidence is >= 0.85.** If you cannot reach that threshold after investigating, do not include the finding.
|
|
47
|
+
|
|
48
|
+
### Do NOT flag (false positive filter)
|
|
49
|
+
|
|
50
|
+
- Pre-existing issues not introduced by this diff.
|
|
51
|
+
- Something that appears to be a bug but is actually correct when you read the surrounding code.
|
|
52
|
+
- Pedantic nitpicks that a senior engineer would not flag in a real review.
|
|
53
|
+
- Issues that a linter or formatter will catch — do not run the linter to verify.
|
|
54
|
+
- Potential issues that depend on specific inputs or state that are not demonstrated in the diff.
|
|
55
|
+
- General code quality concerns (e.g. lack of test coverage, general security hygiene) unless they are concretely exploitable.
|
|
56
|
+
|
|
57
|
+
## Priority Levels
|
|
58
|
+
|
|
59
|
+
- **P0** — Drop everything. Blocking release, operations, or major usage. Universal issues not dependent on assumptions.
|
|
60
|
+
- **P1** — Urgent. Should be addressed in the next cycle.
|
|
61
|
+
- **P2** — Normal. To be fixed eventually.
|
|
62
|
+
- **P3** — Low. Nice to have.
|
|
63
|
+
|
|
64
|
+
## Comment Guidelines
|
|
65
|
+
|
|
66
|
+
- One comment per distinct issue.
|
|
67
|
+
- Brief (at most 1 paragraph body).
|
|
68
|
+
- Clearly state the scenarios/inputs required for the bug to manifest.
|
|
69
|
+
- Matter-of-fact tone, no flattery.
|
|
70
|
+
- Code snippets max 3 lines, wrapped in markdown code tags.
|
|
71
|
+
|
|
72
|
+
## Output Format
|
|
73
|
+
|
|
74
|
+
Output **only** valid JSON matching this schema exactly. Do NOT wrap in markdown fences or add any text outside the JSON. Begin your response with the `{` character — no prose, no commentary, no preamble.
|
|
75
|
+
|
|
76
|
+
{
|
|
77
|
+
"findings": [
|
|
78
|
+
{
|
|
79
|
+
"title": "<P-tag + imperative description, max 80 chars>",
|
|
80
|
+
"body": "<Markdown explaining why this is a problem; cite files/lines/functions>",
|
|
81
|
+
"confidence_score": <float 0.0-1.0>,
|
|
82
|
+
"priority": <int 0-3>,
|
|
83
|
+
"code_location": {
|
|
84
|
+
"file_path": "<repo-relative file path, e.g. src/main.ts>",
|
|
85
|
+
"line_range": {"start": <int>, "end": <int>}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
],
|
|
89
|
+
"overall_correctness": "patch is correct" | "patch is incorrect",
|
|
90
|
+
"overall_explanation": "<1-3 sentence justification>",
|
|
91
|
+
"overall_confidence_score": <float 0.0-1.0>
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
If there are no findings, return:
|
|
95
|
+
|
|
96
|
+
{
|
|
97
|
+
"findings": [],
|
|
98
|
+
"overall_correctness": "patch is correct",
|
|
99
|
+
"overall_explanation": "<brief justification>",
|
|
100
|
+
"overall_confidence_score": <float 0.0-1.0>
|
|
101
|
+
}
|