v0.8.0 — REVIEW.md support, per-agent diff ordering, gate output to agents
Four web-grounded improvements, plus four documentation-drift fixes. Research basis: Cursor's Bugbot (randomized-order parallel passes), SWR-Bench (arXiv 2509.01494, multi-review aggregation), 2026 hybrid LLM + static-analysis studies, and Anthropic's Code Review documentation, which has since formalized REVIEW.md.
REVIEW.md support
Drop a REVIEW.md at the repository root to change what the review flags, at what severity, and where. It is read fresh on every run — never cached — and injected verbatim into all ten agents and the verifier as the highest-priority block. Where it conflicts with a persona or the shared rules, it wins. No configuration key is involved; the file is the interface, and its per-path raised-bar idiom ("in scripts/, only report if near-certain and severe") replaces the previously planned pathBars key.
It steers what gets reviewed, never how it is proven. The 3-question gate, claim classes, file:line evidence, and Phase 2.5 verification are integrity rules: a severity REVIEW.md promotes still has to be earned by proof at that tier, and an instruction to skip verification is ignored while the rest of the file is honored.
In gate mode it moves findings across the blocking floor in both directions — a promotion becomes CI-blocking, and a demotion can un-block a real defect. Same trust model as CLAUDE.md. When REVIEW.md is itself modified inside the reviewed diff, the gate summary now says so, because a change to the rules that grade a diff, arriving inside that diff, is the shape of a self-approving PR.
Per-agent diff ordering
scripts/agent-order.py gives each agent the same diff in a different file order, from sha256("<agent>:<path>"). Attention is not uniform across a long prompt, so ten agents reading an identically ordered diff shared one weak middle. The permutation is reproducible across machines and runs, and filter-stable: an agent reviewing a narrower slice gets the order it would have had if that subset were permuted directly, so one call serves all ten slices.
Chunk composition is computed on the canonical git order first and the permutation applied within each chunk, so chunk membership stays identical across agents. Hunks inside a file are never reordered.
Failing gate output reaches the agents
When a Phase 1 gate fails, its output is passed to every agent and to the verifier as a truncated, failures-only <gate_results> block — omitted entirely on a green run, so the common path costs nothing. A compiler or test runner is ground truth that reading cannot match, which is why hybrid static-analysis plus LLM review outperforms either alone. It is framed as a lead to the underlying defect, never a finding to restate: the failure is already on the report.
dedupe.py now records corroborating_agents, and the report renders "Flagged independently by N agents". The verifier uses the count to prioritize re-read effort and break borderline ties, never as a substitute for the citation gate — agreement is not independence, so the scoring rubric is deliberately unchanged.
CLAUDE.md staleness
The consistency agent flags a doc claim the diff falsifies, but only when it can quote both the doc sentence and the contradicting diff lines. A doc that merely mentions the changed area is not stale. An explicit rule keeps this disjoint from the standards agent, which reads the same sentence from the opposite direction.
Drift fixes
The Phase 4 menu-skip condition now carries the unverified clause in all four places it is stated; SKILL.md's inline config schema regained the nine keys it had fallen behind on; a duplicated Fix Results heading is gone; an orphaned pycache artifact was removed.
Measurement — read this before trusting the new eval cases
A targeted A/B (N=3, v0.7.1 baseline versus this release) ran the two precision counter-cases and the two new cases. Both arms scored 4/4.
- No precision regression. Counter-cases
05and55held at PASS 3/3, with zero critical or important findings on05. The corroboration count is not being read as proof. - No recall lift is claimed. The two new cases (
90REVIEW.md,91CLAUDE.md staleness) also passed on the pre-feature baseline, so they demonstrate nothing about the features and stand only as regression guards.evals/README.mdrecords why each fixture fails to discriminate —90picked a defect default calibration already rates CRITICAL, and91is already caught by the consistency agent's generic stale-reference mechanic — and what a discriminating rewrite needs.
The verifier is bumped 6 → 7 once for all three verifier-affecting changes, so cached verdicts invalidate once rather than three times.
Tests
Five new static doc gates, each proven non-vacuous by deleting its asserted sentence on a scratch copy and confirming failure. check-config-sync.sh set-diffs SKILL.md's config schema against the documented key table, making that drift class structurally unrepeatable. Nine unit tests for agent-order.py, four for corroborating_agents. Suite: 91 eval cases, 73 unit tests, 10 gates, shellcheck clean.