Benchmarked, not just claimed

We publish the rows we lose, too.

A separate, public repository measures Aletheore head-to-head against RepoWise, Graphify and the real PR reviewers: locating code, generated docs, PR review quality, and what a bare LLM gets wrong that a deterministic scanner gets right. Every retrieval number recomputes from raw results with no API key and no network; every PR-review number comes from real API runs with the actual production model.

git clone https://github.com/Aletheore/aletheore-benchmarks
cd aletheore-benchmarks
python scripts/score_fallback_judge.py

PR review, 13 real pull requests, one judge for every tool

In the same range as the leading reviewers, after closing a precision gap of our own.

44 human-identified bugs across 13 real pull requests from sentry, grafana, cal.com and keycloak. Every tool's findings, ours and theirs, go through the same blinded judge (gpt-6-luna, told nothing about which tool wrote what), which scores both recall (how many of the 44 bugs a finding actually catches) and precision (how many findings are accurate, specific claims about the diff). Brackets are 95% intervals from resampling the 13 pull requests.
Recall: bugs actually caught, of 44
  • Aletheore Flash53.4%
  • Aletheore AIR51.1%
  • GitHub Copilot59.1%
  • GitLab Duo50.0%
  • Qodo22.7%

95% intervals from resampling the 13 pull requests are wide (about plus or minus 14 to 18 points): read this as "in the same range," not a ranked leaderboard. No difference between Aletheore and Copilot or GitLab here is statistically significant.

Precision: confirmed-accurate findings as a share of everything flagged
  • Qodo100%
  • GitLab Duo95.1%
  • Aletheore AIR93.3%
  • Aletheore Flash92.6%
  • GitHub Copilot89.6%
  • Aletheore Flash, before the fix71.5%

Precision rates land in the same range across most tools; the raw count of real, accurate issues surfaced does not. Qodo's near-100% precision comes from making far fewer findings in the first place (24 total, all accurate), a real trade-off, not a flaw either way.

Accurate findings per run, in absolute terms, not a rate
  • Aletheore Flash87.5
  • Aletheore AIR86.5
  • GitHub Copilot60.0
  • GitLab Duo39.0
  • Qodo24.0
Full PR review comparison with intervals
ToolGolden bugs caught (of 44)Recall (95% CI)Precision (95% CI)Accurate findingsReal findingsConfirmed false positivesRuns
Aletheore Flash, shared context23.553.4% [39-68]92.6% [86-96]87.594.52.02
Aletheore AIR, shared context22.551.1% [37-65]93.3% [87-98]86.592.50.52
GitHub Copilot26.059.1% [40-76]89.6% [82-98]60.06711
GitLab Duo22.050.0% [38-63]95.1% [85-100]39.04111
Qodo10.022.7% [10-38]100% [100-100]24.02401
Aletheore Flash, no shared context (before)23.052.3% [39-66]71.5% [63-82]69.096.513.02
Aletheore AIR, no shared context (before)22.050.0% [37-63]79.7% [73-89]73.792.310.33

Head to head, with intervals

Pairwise differences with 95% intervals
ComparisonRecallPrecision
Flash minus GitLab Duo+3.3 pts [-12.9, +18.1]-2.9 pts [-13.2, +9.6]
Flash minus Copilot-5.3 pts [-26.5, +14.3]+2.5 pts [-8.5, +12.0]
Flash minus Qodo+30.5 pts [+22.2, +37.5]-7.7 pts [-13.9, -3.5]
AIR (with verification) minus Flash-2.1 pts [-9.6, +6.6]+0.9 pts [-4.8, +7.1]

Only the Qodo row excludes zero on both measures: a real recall lead and a real precision deficit. Every other difference is inside the noise. The verification pass on AIR added little once shared context was on, at roughly five times the generation cost, and the product no longer runs it.

The same 13 pull requests through the full production call

The comparison above scores the diff-only generation path. We then ran the same 13 pull requests through the full call the hosted product makes (file contents, referenced symbols, deterministic checks, ranking and the grounding gate), on the code deployed on 2026-10-14, four times. Recall was 55.1% and precision 89.2%, with 3.5 confirmed false positives per run. Against the earlier run that is about 2 points higher on recall (95% interval -2.6 to +6.4) and about 3 points lower on precision (-8.5 to +3.1), neither distinguishable from zero. The two runs used different code and different numbers of trials, so read it as the same range, not a change. If you want one precision figure for the hosted product today, it is the 89%.

Flash Review, production call against the diff-only path
ConfigurationRecallPrecisionConfirmed false positives per run
Production call, 4 runs, 2026-10-1455.1% [43-67]89.2% [83-94]3.5
Diff-only path, 2 runs, 2026-09-2453.4% [39-68]92.6% [86-96]2.0

Full method, limitations and the reproduce script, Experiment 9 →

Tools not shown. CodeRabbit's terms bar publishing benchmark results about it without consent, Cursor's Bugbot terms allow it only alongside everything needed to replicate the test, and we removed Greptile's results because its terms restrict sharing the service's results with third parties without written authorization. We would add any of them if they agree.

Full method, limitations and the reproduce script, Experiment 8 →

An external benchmark we did not build

On SWE-PRBench's published leaderboard, at or above the frontier-model cluster.

SWE-PRBench is an independent, published benchmark: 350 real merged pull requests with human-annotated ground truth, and a judge validated at kappa 0.75 against human agreement. We ran Aletheore's real review path on the published 100-task diff-only split with the paper's own unmodified harness, so the score sits directly beside its leaderboard.

DatasetHarnessPaper (arXiv 2603.26130)

Overall score on the published eval_100 split, diff-only (higher is better)
  • Aletheore, per-file0.174
  • Claude Haiku 4.50.153
  • Claude Sonnet 4.60.152
  • DeepSeek V30.150
  • Aletheore, bare mode0.149 to 0.169
  • Mistral Large 30.147
  • GPT-4o0.113
  • Bare-mode Aletheore (one call per diff) scored 0.149 to 0.169 depending only on which API route the judge used, statistically tied with Claude Sonnet 4.6, Claude Haiku 4.5, DeepSeek V3 and Mistral Large 3.
  • Turning on per-file completeness, the production paid-tier setting, moved the score to 0.174: recall from 16.8% to 22.3% for about two points of precision. A repeat judge pass on the identical output scored 0.170, a 0.4-point gap.
  • The model doing the work is GLM-5.3-Flash. Generation for all 100 tasks cost $0.055 in bare mode and $0.162 with per-file completeness (more calls). The other costs in the table are what the same 100 tasks would cost on those models at the bare-mode token volume.
SWE-PRBench scores and generation cost
ModelOverall scoreCost per 100 PRs*
Aletheore (GLM-5.3-Flash, per_file_completeness=True)0.174$0.162
Claude Haiku 4.50.153$0.825
Claude Sonnet 4.60.152$2.475
DeepSeek V30.150$0.163
Aletheore (GLM-5.3-Flash, bare mode)0.149 - 0.169$0.055
Mistral Large 30.147$0.350
GPT-4o0.113-

*Competitor costs are priced at Aletheore's bare-mode token volume for the same 100 tasks; per-file mode makes more calls, which is why our own figure is higher there.

Bare mode against per-file completeness

Bare mode against per-file completeness
Bare (original, OpenAI-direct route)per_file_completeness=True
Recall16.8%22.3%
Precision23.8%20.5%
Overall score0.1690.174
Coverage0.400.48

Method, every caveat and the per-task data →

PR review, shipped, not hypothetical

Dropping the raw file dump didn't cost review quality.

Flash Review can build its prompt with the full raw content of every changed file, or with Aletheore's own evidence alone (blast radius, referenced symbols, no file dump). Four experiments across three models asked whether that trade-off actually costs anything. The one that decided it: gpt-5.6-luna, the real production model, generating reviews under both arms; deepseek-v4-flash independently verifying every finding against the diff, three full repeats of a 50-case mixed-language corpus.
Verified-accept rate by arm, three runs
RunEvidence only (compact)+ full file content
Run 197.7% verified-accept (42/43)85.7% (36/42)
Run 297.6% verified-accept (40/41)90.5% (38/42)
Run 396.7% verified-accept (29/30)100% (27/27), coverage artifact*

Read honestly, not cherry-picked: run 3's apparent 100% is not evidence that full context caught up. A transient network failure happened to strip out exactly the harder cases that produced its rejects and uncertains in the other two runs. Evidence-only never underperformed full context in any run.

How much smaller is the prompt, actually?

Prompt size and cost by arm
Evidence only (compact)+ full file contentCompact is
Median context size (measured)1,480 chars (~370 tok)15,212 chars (~3,800 tok)~10.3x smaller
Avg prompt tokens, real API (DeepSeek V4 Flash)2,48316,325~6.6x smaller
Avg cost per review, same run$0.0041$0.0054~24% cheaper

Read the last row honestly rather than expecting a 6 to 10 times price drop to match the token drop: on this model, completion tokens run 11k to 13k almost regardless of which arm generated the prompt, so the real dollar savings land at roughly a quarter, not a multiple. What the input-side reduction buys is headroom against a tight tokens-per-minute quota, such as a free-tier provider's 6,000 TPM.

Result: evidence-only shipped as Flash Review's production default, not an experiment behind a flag. Total cost for all three validation runs on the real production model: $0.9229.

Locating code, same questions, same ground truth

Every shared corpus, both systems, best RepoWise mode.

RepoWise searches its own generated wiki, so each corpus had one built for it first (init --coverage 1.0, deepseek-v4-flash, 1,341 pages, $1.85 total). The table shows RepoWise's best of semantic or full-text search per corpus, so it isn't beating a weaker mode by default.
5-0-2
wins, losses, ties on top-1

all 7 shared corpora

$0.00
to build a searchable index

against RepoWise's $1.85

93.3%
cross-language top-5 accuracy

up from 60.0% after a language pre-filter fix

Top-1 accuracy: Aletheore against RepoWise's best mode, all 7 shared corpora
  • gin (Go)80.0%RepoWise, best mode60.0%
  • serde (Rust)53.3%RepoWise, best mode13.3%
  • gson (Java)40.0%RepoWise, best mode26.7%
  • jekyll (Ruby)26.7%RepoWise, best mode13.3%
  • Slim (PHP)26.7%RepoWise, best mode26.7%
  • guzzle (PHP)20.0%RepoWise, best mode20.0%
  • zod (TypeScript)20.0%RepoWise, best mode13.3%

Top-1: 5 wins, 0 losses, 2 ties. Flask (measured separately, not one of the seven shared corpora): Aletheore 68.8% / 93.8% / 100% (top-1/3/5) against RepoWise semantic 28.1% / 56.2% / 56.2%. Where we lose: jekyll top-5, 46.7% against their 66.7%.

Locating code, top-1, by corpus
CorpusLanguageAletheoreRepoWise semanticRepoWise full-textWinner
ginGo80.0%60.0%46.7%Aletheore
serdeRust53.3%6.7%13.3%Aletheore
gsonJava40.0%26.7%0.0%Aletheore
jekyllRuby26.7%13.3%6.7%Aletheore
SlimPHP26.7%26.7%20.0%tie
guzzlePHP20.0%13.3%20.0%tie
zodTypeScript20.0%6.7%13.3%Aletheore

Both systems were also given vocabulary-phrased questions on the same wikis. RepoWise gains from this too, because its wiki pages name the symbols, and on jekyll it overtakes us outright: 80.0% to 66.7%. Across those ten cells we lead in seven, tie in two and lose one. RepoWise's --mode symbol returned 0.0% on every corpus and is excluded as a misapplied mode, not counted as a loss.

General against vocabulary phrasing
CorpusAletheore generalRepoWise generalAletheore vocabularyRepoWise vocabulary
Slim26.7%26.7%73.3%66.7%
gson40.0%26.7%60.0%46.7%
zod20.0%13.3%60.0%26.7%
guzzle20.0%20.0%53.3%53.3%
jekyll26.7%13.3%66.7%80.0%

Search latency, measured in-process for both tools: Aletheore 40.5 ms mean against RepoWise's 52.5 ms, reversed from an earlier 125 ms against 68 ms figure (see METHODOLOGY.md).

Indexing cost
AletheoreRepoWise
Indexing cost, 7 corpora$0.00$1.85
Per corpus$0.00$0.09 to $0.47
What it costs money fornothing, local nomic-embed-textLLM generation of 1,341 wiki pages
Typical setup timeseconds to ~1 min per corpusminutes per corpus
Full retrieval matrix: top-1, top-3, top-5 and MRR, 12 corpora, 23 regime rows

Aletheore 0.8.11 installed from PyPI, each corpus re-scanned and re-indexed from scratch with local nomic-embed-text (768-dim) embeddings, no API key. Two phrasing regimes are published per corpus: general deliberately avoids the project's own vocabulary, vocabulary uses it. Real users ask somewhere between the two. Every weak corpus moves 20 to 47 points on phrasing alone, larger than any ranking change in this programme.

Full retrieval matrix
CorpusRegimeTop-1Top-3Top-5MRRn
location (Flask)general71.9%93.8%100.0%0.83232
gingeneral80.0%100.0%100.0%0.87815
serdegeneral53.3%66.7%73.3%0.61715
Slimgeneral26.7%60.0%66.7%0.45815
Slimvocabulary73.3%80.0%93.3%0.79715
guzzlegeneral20.0%53.3%66.7%0.37415
guzzlevocabulary53.3%93.3%100.0%0.72815
jekyllgeneral26.7%33.3%46.7%0.33715
jekyllvocabulary66.7%86.7%93.3%0.77815
zodgeneral20.0%40.0%40.0%0.28915
zodvocabulary60.0%73.3%73.3%0.66715
gsongeneral40.0%66.7%80.0%0.54415
gsonvocabulary60.0%86.7%86.7%0.74915
axiosgeneral20.0%46.7%66.7%0.40715
axiosvocabulary73.3%93.3%100.0%0.85015
jqgeneral53.3%66.7%80.0%0.64815
jqvocabulary73.3%100.0%100.0%0.86715
fmtgeneral40.0%60.0%86.7%0.52715
fmtvocabulary66.7%93.3%93.3%0.78915
AutoMappergeneral6.7%20.0%33.3%0.17715
AutoMappervocabulary86.7%100.0%100.0%0.93315
thriftgeneral6.7%33.3%53.3%0.24115
thriftcross-language53.3%73.3%93.3%0.67715

Code intelligence against Graphify

Ties or leads Graphify on all 15 questions, in fewer tokens.

Graphify is a tree-sitter code-knowledge-graph tool with its own benchmark on frappe/erpnext (about 1M lines). Rather than cite either tool's published numbers, we ran both ourselves under one shared agent loop and one anonymized judge, on the same pinned ERPNext commit: 15 independently authored questions, each run three times (baseline grep/read/list, plus Aletheore, plus Graphify), scored by a judge never told which tool produced which answer. New
Key-fact coverage on 15 ERPNext questions (mean of 30 samples)
  • baseline92.2%
  • + Aletheore100.0%
  • + Graphify93.3%
Tokens per query (mean of 15 samples, lower is better)
  • baseline11,839
  • + Aletheore14,893
  • + Graphify17,921
  • Aletheore ties or leads Graphify on every question once a ground-truth error found in pre-publication review was corrected.
  • Excluding the one question both tools timed out on, Aletheore answers for 36% fewer tokens than Graphify (9,803 against 15,296 mean).
  • The honest caveat: only 2 of 15 questions actually discriminate between conditions, so this is a real result on this question set, not a claim that generalizes past 15 questions on one corpus. Total real cost of the whole comparison: $0.19.

Method, both corrections made before publishing, and the setup-time comparison →

Explaining code, "how does X work?"

Roughly at parity with RepoWise, leaning ahead.

A blind LLM judge scores answers 0 to 3, each question graded twice with the two systems' positions swapped, an equal 12,000-character context budget, tool names scrubbed and three repeats per question. Re-measured across five languages on current code, full 12-question architecture set per corpus. New
Blind-judge score, 0 to 3, per corpus (higher is better)
  • flask (Python)1.96RepoWise1.75
  • axios (JavaScript)2.12RepoWise1.85
  • automapper (C#)2.08RepoWise1.78
  • fmt (C++)1.92RepoWise1.72
  • jq (C)1.93RepoWise1.76
  • Average2.00RepoWise1.77

We lead on average, not decisively. Most individual per-corpus gaps sit inside that corpus's own measured judge-repeat spread. The aggregate preference count across all 360 judged pairs is more telling: Aletheore 198 (55.0%), RepoWise 144 (40.0%), tie 18 (5.0%). This reverses an earlier loss (2.13 against 2.35) measured on different code with a different method.

The full history, including a fix that shipped and sat undetected for months →

Deterministic analysis against a bare LLM

Handed the same data, a bare LLM still cannot reproduce it.

For the parts of Aletheore that are not an LLM call at all (hotspots, ownership, dead code, computed from real git history and a real import graph), can a bare LLM reproduce the answer if it is simply handed the same data? On the same Flask corpus, given the exact git log slice and import statements the scanner consumes: New
Deterministic analysis against a bare LLM on the same Flask data
Aletheoregpt-5.6-luna (bare)gpt-5.6-terra (bare)
Hotspots (top 10 by commit count)exact, every rundeclined, asked for real code instead0/10 counts correct, 4 fabricated entries
Ownership (top 8 by commit count)exact1/8 exact, mean error ~14.5, drops a real contributor4/8 exact, still fabricates a person
Dead code (unreachable modules)2/2, zero false positives48 flagged, 4.2% precision49 flagged, 4.1% precision

Methodology and known limitations →

Deterministic scanner accuracy

No LLM, no judge: exact matches against labeled ground truth.

Aletheore's fully deterministic scanners (secrets, vulnerabilities, dead code, licenses, database schema) and structural code search had no systematic accuracy measurement before this pass. Each ran the real production function against real, large open-source repos, not mocks. The synthetic pilot gives exact-match ground truth; the real-repo runs give a false-positive signal a pilot cannot, and they found real defects that were fixed. New

Secrets and vulnerabilities

Pilot
Secrets 6/6 recall, 0/5 false positives. Vulnerabilities 10/10 recall, 0/7 false positives, all 10 manifest ecosystems covered.
Real repos
21,430 files across 20 real repos; 96 secrets and 231 vulnerability findings manually reviewed. 6 real product gaps found and fixed, all shipped with regression tests. Against RepoWise on secrets, same 20 repos: RepoWise misses 5 of 6 real credential formats, and every one of its 375 real-repo findings was noise, mostly Django's own test-suite fake passwords.

Dead code

Pilot
10/10 recall, 0/7 false positives.
Real repos
Flask reported all six of its real runtime dependencies as unused: a severe bug (the unused-dependency check read a graph field that structurally excludes external packages), found and fixed.

AST-pattern search

Pilot
All 12 existing unit tests pass.
Real repos
A reproducible tree-sitter segfault on large repos, on Python 3.12 as well as 3.14 (not 3.14-only as first documented). Fixed with batched subprocess isolation, verified 20/20 clean on both versions.

License detection

Pilot
46 pre-existing unit tests, all passing.
Real repos
3 real gaps found and fixed: BSD license bodies contain no "BSD" keyword at all, LICENSE.rst was not a recognized filename, and Maven license lookups never followed parent POM references.

SQL schema extraction

Pilot
Zero crashes across 5,378 real migration files in 9 real repos, raw SQL and ORM-native (Django, Rails, Alembic) conventions.
Real repos
8 real gaps found and fixed over two rounds; one alone, a Django FK field subclass Sentry uses 249 times, took Sentry's extracted relations from 8 to 235. RepoWise extracted zero foreign keys or indexes across 622 files.

Each corpus's full case tables and root-cause write-ups →

Hosted embeddings

What the hosted endpoint runs, and how we chose it.

Aletheore's hosted embedding endpoint serves Qwen3-Embedding-8B at 1024 dimensions (since 2026-10-13); it used to serve jina-embeddings-v2-base-code. This section has two measurements. The first, behind the switch, recomputes offline from committed rankings. The second, older one measured the Jina model and needs the hosted service (aletheore login and a paid plan) to re-run, so it does not carry the "no API key, no network" guarantee of the rest of the page.

Why Qwen3-Embedding-8B: level on quality, much faster

We tested nine configurations (eight hosted models and one query-instruction variant) against the production Jina model on the same code-search questions as the retrieval matrix: 257 questions used to choose, 90 held out. Qwen3-Embedding-8B is level with Jina on retrieval quality, not better: +0.008 MRR with a 95% interval of -0.019 to +0.035 on 332 questions for the shipped setting, and the same on the held-out questions. Asking for a 1024-dimension vector scores the same as the native 4096. Three of the other models (bge-m3, bge-base, Nemotron 1B) were clearly worse than Jina. What changed is operational: on one production host, bulk indexing ran about 7 times faster with one request at a time and up to about 17 times faster with four in parallel, and the CPU-bound sidecar can be retired. Embedding code now means sending code chunks to the provider; the privacy policy names it and the CLI says so before it uploads.

Embedders on 332 code-search questions
ConfigurationMRRMRR against Jina (95% interval)Questions
Qwen3-8B at 1024 dimensions (shipped)0.695+0.008 [-0.019, +0.035]332
Qwen3-8B at 4096 dimensions (native)0.694+0.007 [-0.020, +0.034]332
Jina (previous production model)0.687baseline332
Qwen3-0.6B0.665-0.022 [-0.049, +0.004]332

Small effects on a small set: a 95% interval on MRR is about plus or minus 0.03, so differences under that are noise. The speed figures are for one host's CPU and vary with provider load; the raw runs, including one that did not scale, are published with the method and limitations.

Full method, limitations and the reproduce script →

Earlier measurement: local nomic against hosted jina

Mean: top-1 +5.0 points, MRR +0.049. 20 of 23 rows flat or better; 3 worse, all in Slim's vocabulary regime or zod. Thrift's cross-language row is the largest single gain (+20.0 points), the same regime the language pre-filter fix targeted.

All 23 corpus and regime rows: nomic against jina
Local nomic against hosted jina embeddings
Corpusnomic top-1jina top-1Δ top-1nomic MRRjina MRR
flask (location)71.9%81.2%+9.3pp0.8320.901
gin80.0%86.7%+6.7pp0.8780.933
serde53.3%53.3%+0.0pp0.6170.678
Slim (general)26.7%53.3%+26.6pp0.4580.647
Slim (vocab)73.3%66.7%-6.6pp0.7970.811
guzzle (general)20.0%20.0%+0.0pp0.3740.458
guzzle (vocab)53.3%73.3%+20.0pp0.7280.844
jekyll (general)26.7%26.7%+0.0pp0.3370.382
jekyll (vocab)66.7%66.7%+0.0pp0.7780.791
zod (general)20.0%13.3%-6.7pp0.2890.237
zod (vocab)60.0%53.3%-6.7pp0.6670.658
gson (general)40.0%46.7%+6.7pp0.5440.569
gson (vocab)60.0%66.7%+6.7pp0.7490.797
axios (general)20.0%20.0%+0.0pp0.4070.420
axios (vocab)73.3%80.0%+6.7pp0.8500.878
jq (general)53.3%53.3%+0.0pp0.6480.728
jq (vocab)73.3%80.0%+6.7pp0.8670.883
fmt (general)40.0%46.7%+6.7pp0.5270.621
fmt (vocab)66.7%66.7%+0.0pp0.7890.789
AutoMapper (general)6.7%13.3%+6.6pp0.1770.243
AutoMapper (vocab)86.7%86.7%+0.0pp0.9330.922
thrift (general)6.7%20.0%+13.3pp0.2410.285
thrift (cross-language)53.3%73.3%+20.0pp0.6770.822

Update, 2026-08-20: a later, independent hosted-jina measurement against the live service found a much steeper zod gap than the -6.7 points above (general top-1 20.0% to 0.0%, vocabulary 60.0% to 6.7%). Two decoy files that jina ranks above the true answer explain it: a 37-line smoke-test file that imports every zod build variant, and the roughly 30 locale files under packages/zod/src/.

Same evidence, fewer tokens

TOON against raw JSON, measured on this exact repo's own self-scan.

1,174,274
air.json tokens
619,575
air.toon tokens
47.2%
fewer tokens, same evidence, 53.8% smaller on disk

Every coding agent that reads this file pays less to do it. Measured with the o200k_base tokenizer on a fresh self-scan of this repository (2026-09-25 snapshot; 5,112,929 against 2,362,099 bytes). The absolute counts change as the repo grows.

Where we lose

Stated here rather than in a footnote.

  • Five of eight corpora score below 35% top-1 under vocabulary-avoiding phrasing, though most of that gap is our question authoring, not the product. Every one recovers 20 to 47 points when asked in the project's own terms.
  • AIRview writes a page for only 21 of 100 changed files on Flask's last 30 commits; the rest are served by a deterministic fallback, not the generated wiki this project is named for.
  • "How does X work?" comprehension is close, not a clean win: 2.00 against 1.77 averaged across five languages, but most per-corpus gaps sit inside the judge's own noise.
  • On SWE-PRBench our absolute recall (22.3%) and precision (20.5%) are low, as they are for every model; the score is above the published cluster by a margin close to our own run-to-run variance.
  • The Graphify comparison rests on 15 questions on one corpus, of which only 2 discriminate between conditions.
  • Our local setup was slower than Graphify's: scanning and indexing ERPNext took about 23 minutes against their about 1 minute. We found the real bottleneck (dead-code detection, 77% of scan time, not parsing) and fixed it in aletheore 0.9.5: 53.23 s against the old 236.02 s, verified against the installed release. Indexing (about 19 minutes, a separate I/O-bound step) is now the honest remaining gap.
  • The PR-review comparison rests on 13 pull requests, so its intervals are wide and small differences between tools are noise. Our fix for cross-file false positives was developed while looking at these same pull requests and has not been checked on unseen ones. "Precision" counts any accurate, specific claim about the diff, so it measures accuracy of claims, not how important they are. The head-to-head runs the diff-only generation path; a separate four-run measurement of the production call scored 89.2% precision, and it too was developed while looking at these pull requests. The other tools' rows are single runs from before 2026-09-23.

Every number above is in a public repo, with the raw results.

418 questions across 12 corpora, a 50-case PR-review corpus, the SWE-PRBench run, the Graphify comparison and the scanner-accuracy suites: all reproducible, all checked against real Aletheore output, not a mockup.