Add gx results - #58
Conversation
gx is an AI code review CLI. Two entries, matching the two configurations
it ships with:
gx full-coverage configuration
gx-pro higher-precision configuration
Every finding is verified before it is reported.
Scored through the documented pipeline (extract, dedup, judge) on all three
judge models. Core profile, the dashboard default:
gx gx-pro
prec recall F1 prec recall F1
sonnet-4.5 38.6% 57.0% 46.0 47.7% 46.8% 47.3
opus-4.5 41.2% 57.6% 48.0 49.7% 44.9% 47.2
gpt-5.2 34.3% 55.1% 42.2 43.6% 45.6% 44.6
The two trade coverage against precision. On the 66 Critical and High
severity goldens, gx finds 43 and gx-pro 38.
Both entries follow the documented "adding a new tool" flow. The benchmark
PRs are forked one repo per PR per tool under the naming convention
step1_download_prs.py expects, with the reviews posted on PR #1 of each:
https://github.com/satoricorp-benchmarks
100 repos, 100 PRs, 383 review comments. To regenerate benchmark_data.json
from scratch:
uv run python -m code_review_benchmark.step1_download_prs \
--org satoricorp-benchmarks --tool gx
gx posts under a user account rather than a GitHub App, so both entries are
added to _NON_BOT_TOOLS alongside claude.
No repository-specific configuration was used: none of the five benchmark
repos carries a REVIEW.md, so every review reflects gx's defaults.
Dashboard artifacts are regenerated with `python -m analysis.benchmark_dashboard`.
No existing tool's metrics change; the two new entries are the only additions.
|
Hey @joelachance, thanks for submitting GX. |
|
Hey @ashleyzhang01, thanks for the response! If I understand, you need to see a GX review on an open source project, correct? Thanks again, lmk! |
|
@joelachance On usage, we're looking for somewhere in the range of at least 600-1,000 reviewed public PRs across a good spread of orgs and repos before we add a tool, so scores aren't dominated by one codebase and we can use online results to validate offline. |
|
Ok, I won't have 600+ public PRs for a while. any other benchmarks I can use? this is a main marketing lever for me. i get you want to keep your bench relevant |
|
respectfully, i'd suggest adding this requirement to the README @ashleyzhang01. I spent a couple hundred dollars making sure this was done correctly and ethically, and this is a significant setback, and wish I had known. Thanks for considering. |
|
@joelachance i'm sorry to hear that, we'll definitely add it to the readme. you can still publish your results on your own while referencing our benchmark. the |
Adds two entries for gx, an AI code review CLI.
Submission requirements
step1_download_prs.pyparses._NON_BOT_TOOLS, since gx posts under a user account rather than a GitHub App.Entries
Two entries, following the existing convention for multiple configurations (
qodo-v2/qodo-extended-v2,greptile-v4-1/greptile-v5):gxgx-proEvery finding is verified before it is reported.
Results — all three judges
Core profile, the dashboard default:
gxgx-progxgx-progxgx-proOn the 66 Critical and High severity goldens,
gxfinds 43 andgx-pro38.Reproducible from the forks
benchmark_data.jsoncan be regenerated rather than taken on trust:Repos are named as the parser expects, with each entry's reviews on PR #1:
Verified: all 100 repo names round-trip through
parse_repo_name→find_golden_urlto the correct golden entry, and live comment counts match the submitted data exactly (383/383, zero mismatches).No repository-specific configuration was used: none of the five benchmark repos carries a
REVIEW.md, so every review reflects gx's defaults.One bug found along the way
find_golden_urlmatches by substring:/discourse-graphite/pull/1is a substring of/discourse-graphite/pull/10, so a repo named…__PR1__…can resolve to PR 10's golden set. It is correct today only becausepull/1precedespull/10in the golden file; reordering that file silently mis-scores. An anchored match would fix it. Not touched here — happy to send it separately.What's in the diff
Same file set as #20, the maintainer's own tool-addition PR, plus the
_NON_BOT_TOOLSentry:offline/README.md— one vendor rowoffline/code_review_benchmark/step1_download_prs.py—_NON_BOT_TOOLSoffline/analysis/benchmark_dashboard.py—TOOL_COLORSandTOOL_DISPLAY_NAMESoffline/analysis/benchmark_dashboard.{html,json}— regeneratedoffline/results/benchmark_data.jsonand<judge>/{candidates,dedup_groups,evaluations}.jsonfor all three judgesBoth entries went through step 2.5 dedup.
Integrity
gxandgx-profrombenchmark_data.json,candidates.json, andevaluations.jsonreproducesorigin/mainexactly, for all three judges — verified programmatically.benchmark_dashboard.jsonis key ordering, which the generator does not preserve.benchmark_data.jsonis an additions-only diff.ruff checkclean,pytest tests/28 passed.