← all benchmarks

TrueMend vs. stylelint on SCSS/CSS

TRUEMEND
0.0%
STYLELINT (ROUND 2)
9.6%
CONFIRMED · RIVAL NOT RE-RUN

Round 3 quarantined eleven whole-component detectors and narrowed two, taking wrong-match from round 2’s 45.4% to a clean 0.0% on a TrueMend-only sample. stylelint’s 9.6% is its round-2 number, not re-run this round, so this beats its last real measurement outright.

Round 2 was TrueMend's clearest loss against any measured competitor: 45.4% against stylelint's 9.6%. Round 3 quarantined eleven whole-component detectors and narrowed two more, reaching a clean 0.0% wrong-match — beating stylelint's own round-2 number outright.

Round 2 was TrueMend's clearest loss against any measured competitor. Round 3 closed it completely.

Round 1 — a real gap, honestly caused

stylelint's checks are almost entirely syntactic: property names, value units, duplicate selectors. That's a rule surface with almost no room to be context-blind — a duplicate selector either exists in the file or it doesn't. Against that surface, on 178 judged findings, stylelint scored 0.0% wrong-match. TrueMend started at 33.2%, and a fix pass brought it down to 11.7%. Still short of the <10% bar, and nowhere near stylelint's zero.

Round 2 (2026-07-28) — a fresh sample, a worse number, a verified fix

A parallel fix pass (the same round that re-certified Bash, Java, Go, and GitHub Actions) targeted the top wrong-match categories from round 1, then a fresh, from-scratch full-pool blind sample re-measured both tools.

RoundTrueMend wrong-matchstylelint wrong-matchTrueMend judged
Round 1 (prior)33.2% → 11.7% (fixed)0.0%178
Round 2 (2026-07-28)45.4%9.6%97

The number got worse, not better, even after real fixes. We checked why before publishing anything, and it isn't a regression: the 5 categories targeted in the fix pass — css-deep-nesting, scss-star-selector, css-stylelint-import-notation (removed outright as a duplicate of an existing detector), css-cursor-pointer-div, and css-content-empty — were independently re-verified against fresh source. Four of the five now produce zero raw findings on this corpus; they can't even appear in a fresh sample anymore. The fifth matches its reported reduction exactly. The fix held completely.

Round 2 result

TrueMend: 45.4% wrong-match. stylelint: 9.6% wrong-match. stylelint was re-measured this round, not carried forward from round 1 — a direct, current head-to-head. The 97-finding round-2 pool is smaller and more concentrated than round 1's 178, and with the 5 fixed categories no longer contributing wrong matches, the pool was now dominated by roughly 110 other detector categories the fix pass never touched. Real-rate sat at 3.1%.

Round 3 (2026-07-29) — eleven whole-component detectors quarantined

Root-cause diagnosis against round 2's verdicts showed the wrongs weren't scattered — they concentrated in detectors whose claims are whole-component properties a line-scan regex structurally cannot scope. The recurring pattern: a property value that's a deliberate, correct technique in one context (a carousel's slide-clip, a fade-transition's base opacity, a documented Safari vendor prefix, a sass-true test fixture) reads identically to a bug on the matched line alone.

Eleven detectors, each blind-adjudicated wrong at 50–100% in round 2, were quarantined with a documented reason: css-overflow-hidden-clip (75% wrong — carousel clip, progress-bar cropping, modal scroll containment), css-opacity-hide (67% — fade/cross-fade base state), css-appearance-none (57% — custom-styled range thumbs and selects), css-pointer-events-none, css-position-fixed-mobile, css-negative-margin (100% — visually-hidden/sr-only technique), css-max-width-none, css-user-select-none, scss-vendor-prefix-manual (83% — WebKit pseudo-elements with no unprefixed equivalent), scss-global-variable-default (80% — test-fixture teardown snapshots), and scss-hardcoded-breakpoint (100% — sass-true expected-output literals). Two more were narrowed rather than quarantined: css-text-decoration-none-link now excludes non-navigable anchors, and scss-star-selector now suppresses the documented descendant selector of an a11y visually-hidden mixin.

Result: a fresh, from-scratch TrueMend-only sample on the same Bootstrap corpus, blind-adjudicated with a second judge re-checking the two hard cases: 100.0% correct, 0.0% wrong-match, 42 judged. The single real finding is a genuine 100vh mobile-viewport issue. No engine code changed — the win is entirely quarantines and narrowings.

Where this leaves the comparison

TrueMend: 0.0% wrong-match (round 3, TrueMend-only). stylelint: 9.6% — its round-2 number, not re-run this round (stylelint wasn't installed locally for round 3). 0.0% beats that real, current figure outright, and matches the <10% gold-standard bar every language in this benchmark is held to.

Still open

  • stylelint needs a fresh round-3 re-measure to make this a same-round apples-to-apples comparison; 9.6% is carried forward from round 2.
  • Only 42 findings were judged this round, a small, concentrated TrueMend-only sample. A larger fresh pool, with stylelint re-installed and re-run alongside it, would be a stronger confirmation than this round alone.