the numbers

figurewhat it measures
63.2%had dead code left in
60.5%had files past the ~600-line threshold
59.2%contained commented-out code
55.6%had duplicated logic
89 / 80.7median score (a B) vs mean of 80.7. The distribution is bimodal: tiny demo repos inflate the median while 71 of 549 graded F

the same numbers, minus the toy repos (n = 467)

Substantive subset: repos with 15+ scannable files, dropping workshop demos and single-page toys. That's the more honest read of real projects, and it's what the pitch numbers use.

70%had dead code left in
66%contained commented-out code
63%had duplicated logic
42.6%had at least one critical or high cleanliness finding

the shape of the data

grade distribution (n = 549)
A
273
B
92
C
65
D
48
F
71
most common findings, by % of repos (n = 549)
commented-out code
59.2%
file past ~600 lines
56.1%
deep nesting
53.6%
cross-file duplication
46.4%
in-file repetition
41.2%
file past ~1,200 lines
33%

Charts are free to reuse with a link back to this page.

methodology

clean·vibes heuristic rules engine run over the same 549 public AI/vibe-coded GitHub repos. The June 2026 set grew to 577 candidates in July 2026.

Same corpus and selection rules as the security study: 577 candidates that call themselves AI- or vibe-coded, 28 skipped, n = 549 analyzed. We took the self-description at face value.

Per-rule reporting caps at 10 findings (300 per repo), so the messiest repos' counts are floors. The Claude review in a normal clean·vibes scan was off. Deterministic rules only, re-runnable.

The downloadable per-repo rows carry anonymised repo IDs, shared with the security study's rows. The two files join to each other, not to named repos.

download the raw data

Check our numbers — every figure on this page recomputes from these files.