Repository navigation
v0.4.1
This patch release lists every copy of a repeated defect on a single finding, fixes Fireworks API keys not being detected, makes reviews on cheaper models fail much less often, and fixes a working-tree snapshot that could miss a just-saved edit.
Changelog
One Finding Per Defect, With Every Location
When the same bug showed up in several places, reviewers either filed one finding per copy or mentioned the other copies only inside the collapsed evidence. Either way, it was easy to fix one copy and miss the rest.
Findings now have an also_at list of other locations with the same defect. Reviewers file one finding at the place to fix first and list the other copies there. The coordinator keeps two separate lists:
- Copies of the same defect go into
also_at. - Related locations (a caller, a consumer, the fix location, a test) go into
cross_file_refs, as before.
PR comments, the summary comment's bullets, the markdown export and the web finding card show a "Same problem at: …" line after the impact line. When a finding is carried into a later round, its also_at lines are updated against the new diff. The run schema has a new alsoAt field.
On our 25-PR test set, this cut comments from 124 to 113 at the same review cost. The judge rated 67 of the 75 listed locations as real issues.
Fireworks and NeuralWatt API Keys
DiffLoupe looked up Fireworks keys under the provider id fireworks, but OpenCode's id is fireworks-ai. As a result, FIREWORKS_API_KEY and apiKeys["fireworks-ai"] were never detected. Reviews still worked only because the agent process inherited the environment. We fixed the provider id and added NEURALWATT_API_KEY for NeuralWatt.
Fewer Failed Slices on Cheaper Models
We ran the review benchmark with several cheaper models (GLM-5.3-Flash, DeepSeek V4.1 Flash, MiniMax M3.1 Flash) and fixed the failures they kept hitting:
- Slightly malformed output files. These models sometimes write JSON with raw tabs or newlines inside strings (common when suggested code comes from a tab-indented file) or with unescaped double quotes in prose. DiffLoupe now repairs those two cases before parsing. If the repair doesn't produce valid JSON, the failure message reports the original parse error, so the position matches the file on disk.
- Running out of steps before writing. OpenCode ends an agent's session at the step cap (
REVIEW_MAX_STEPS, default 80). Slower models that make many tool calls could reach the cap without having written their findings, and the slice failed. The governor now treats the step cap like the cost and time limits. It warns the reviewer as the cap approaches. From 5 steps before the cap, it allows only the findings write.
On the 16-slice PR where DeepSeek and MiniMax each failed 3 slices, both now complete with no failures.
If you want a cheaper setup, the best one we measured runs GLM-5.3-Flash at high effort for the reviewers, walkthrough and intent, with Sonnet 5.5 as the coordinator. It was about 95% precise at roughly $0.29 per review, against $1.80 for the default Opus setup:
REVIEW_MODEL='fireworks-ai/accounts/fireworks/models/glm-5p3-flash#high' \
REVIEW_MODEL_WALK='fireworks-ai/accounts/fireworks/models/glm-5p3-flash#high' \
REVIEW_MODEL_INTENT='fireworks-ai/accounts/fireworks/models/glm-5p3-flash#high' \
REVIEW_MODEL_MERGE='anthropic/claude-sonnet-5-5' \
diffloupe review ...Set effort with #high on the model names, not REVIEW_EFFORT. REVIEW_EFFORT would also change the Sonnet coordinator's effort. Expect reviews to take about 5 minutes instead of 2–3, and the largest PRs up to about 20 minutes.
Working Tree Snapshots Missed Same-Second Edits
To review uncommitted changes, DiffLoupe stages the working tree into a copy of the git index. The copy got a new modification time, which turned off git's check for files changed in the same second as the last index write. An edit saved right after a commit or git add could be left out of the review if the file's size didn't change. The copy now keeps the real index's timestamp.
ReviewBench Harness
The repo now includes scripts/review-eval/reviewbench.ts, a harness that runs DiffLoupe over a fixed set of PRs and has a judge model score the findings for precision and recall. It is for developing DiffLoupe and is not part of the published CLI.
What's Changed
- Add
also_atso one finding lists every copy of a defect by @markerikson in #3 - Add a ReviewBench harness for scoring DiffLoupe reviews by @markerikson in #4
- Fix Fireworks key lookup and cheap-model output failures found in the RQA model sweep by @markerikson in #5
Full Changelog: v0.4.0...v0.4.1