Confirmed via same-session head-to-head blind adjudication: TrueMend 3.0% wrong-match vs. Biome's 8.4% — after a collector bug produced a nonsensical first reading, and a disclosed near-tie that took a full remediation round to actually win.
Biome is a fast, opinionated Rust-built linter/formatter gaining real
adoption in the TypeScript/JS ecosystem — a fair, current comparison
alongside ESLint on the same next.js corpus.
Caught our own pipeline bug before it became a false result
The first collection pass came back with Biome scoring 0% correct — every
single finding wrong. That's not a real result, that's a bug: collect_biome()
ran without setting the subprocess working directory, so Biome re-relativized
every file path against the harness's own invocation directory instead of the
absolute paths it was given. Every source-window lookup silently failed,
which is exactly why the first-pass number looked absurd. We caught it before
publishing it, fixed the collector to pin cwd, and re-collected clean —
2,433 findings, every path independently verified resolvable.
The honest first result: a near-tie, TrueMend narrowly behind
A fresh 12-judge blind adjudication (279 findings: 149 TrueMend, 130 Biome) came back TrueMend 16.8% wrong-match vs. Biome 15.4% — a confirmed near-tie, TrueMend narrowly behind. We published that shape of result before, for Rust against Clippy. We disclosed it the same way here: not yet remediated, a real result, not a chased win.
Remediation, twice — the second pass is the one that held
Round 2 disabled 12 zero-worth-fixing categories and broadened 6 detectors.
The re-judged panel came back 14.1% vs. 13.4% — still a near-tie, honestly
reported as not a win. Round 3 went category by category instead of broad
strokes: re-collected fresh (2,759 → 2,607 findings, a clean −152), then
applied the right fix per category rather than one blanket rule —
console-log-production disabled outright (8 of 8 sampled wrong; framework
logging is intentional, not debug leftovers); slop-magic-number negated for
inline-documented and unit-conversion literals; js-empty-catch and its
Python-AST counterpart negated for the feature-detection idiom (new URL,
sessionStorage capability probes); cq-catch-and-ignore negated for
fire-and-forget .catch() calls paired with a named terminal handler; four
more narrow fixes in the same shape. One detector — cq-deeply-nested-callbacks
— we deliberately left alone despite 2 of 2 sampled wrong: disabling it would
have cost real callback-pyramid recall, caught by an existing regression test
before it shipped. An honest trade-off, not a fix.
Result — confirmed, not a same-day artifact
TrueMend: 3.0% wrong-match. Biome: 8.4%. 338 TrueMend findings and 359 Biome findings, judged blind, same session, Biome re-collected alongside so neither side is stale. TrueMend ahead on worth-fixing too (3.3% vs. 7.2%). The re-collect after remediation was surgical: the −152 findings were confined entirely to the 11 target categories, zero count change anywhere else — no recall regression riding along with the fix. 26 new regression tests, full suite green (10,534 passed).
The residual, not hidden
Ten findings remain wrong across seven categories after this round, each a single- or double-count long-tail case — no systemic pattern left to chase.