Bottom Line Studio

42% of your code is AI-written. Who checked it?

A passing build tells you the code runs. It doesn’t tell you anyone checked what it does. Here’s the review checklist I use on AI-written changes, including the one that got past me.

Passing isn’t checked.

TL;DR for the exec

Do any of these sound familiar?

  • A 600-line change was approved in four minutes because every test was green.
  • You ask who reviewed a change and the honest answer is “the AI wrote it, and I skimmed it.”
  • Something broke in production that worked fine on the developer’s laptop.

Developers now say AI writes 42% of the code they commit. Almost all of them say they don’t fully trust it. Only about half always check it before it goes in. That gap is where the expensive surprises live.

Animated: 42% of committed code is AI-generated or assisted, 96% of developers don’t fully trust it, 48% always verify it before committing. Final frame: Passing isn’t checked. Source: Sonar 2026 State of Code survey.

The fix isn’t to stop using AI. It’s to know what your checks actually looked at. One of mine looked in the wrong place.

Developers trust AI code less than they ship it

Sonar, which sells code-quality tools, surveyed more than 1,100 professional developers for its 2026 State of Code report (January 2026). Three numbers stand out:

  • 42% of the code they commit is AI-generated or AI-assisted.
  • 96% don’t fully trust that code.
  • 48% always verify it before committing.

The same survey found 38% say reviewing AI code takes more effort than reviewing a colleague’s. It’s a vendor’s survey, so read it with that in mind. But the shape matches what I see: the writing got fast, and the checking didn’t keep up.

My site passed every check and still crashed

My own website is built with an AI coding agent. In August it made a small change to how article images were wired together. The build was clean. The agent’s own checks passed in development mode. I published it.

The live site crashed. The change had created a circular import, two files that each needed the other to load first. In development the order happened to work. In production it didn’t. Nothing in the checks ran the code the way production starts it up, so nothing could have caught it.

Since then, nothing on the site ships until a separate verification pass runs a production build, starts every page the way the live site does, checks the import graph and reviews the changed code for security problems.

The check looked somewhere. The problem was elsewhere.One miss on my own site in 2026. The build and a dev-mode run said clean; the problem was production start-up, where a circular import crashed the live site.The check looked somewhere. The problem was elsewhere.One miss on my own site, 2026. The change passed every check it was given.WHAT THE CHECK LOOKED ATWHAT IT SAIDWHERE THE PROBLEM WASThe build and a dev-mode runClean. Ready to ship.PASSProduction start-up: a circularimport crashed the live sitePassing isn't checked. Ask what the check would have missed.BOTTOM LINE STUDIObottomlinestudio.ai
The change passed the checks it was given. The question that would have caught it: what would this check miss?

Review by what it can reach, not by how big it is

The change wasn’t big. Most review habits scale effort with the size of the diff: long change, careful read; short change, quick approve. AI-written code breaks that habit, because an assistant will happily make a three-line change in the one file everything else depends on.

Review by what it can reach, not by how big it isIllustrative. Two by two: diff size against reach. Small diff with wide reach (imports, config, auth, start-up code, packages) is the one that bites; read every line. Large and wide: split it. Small and narrow: let the tests carry it. Large and narrow: skim it, check the edges.Review by what it can reach, not by how big it isIllustrative. A short diff in the wrong place does more damage than a long one in the right place.Small diff, wide reachThe one that bites. Read every line.Large diff, wide reachSplit it before anyone reviews it.Small diff, narrow reachLet the tests carry it.Large diff, narrow reachSkim it. Check the edges.WIDE REACHImports, config, auth,start-up code, packagesNARROW REACHOne screen, one report,one functionSMALL DIFFLARGE DIFFBOTTOM LINE STUDIObottomlinestudio.ai
Illustrative. Spend review time where a change can reach, not where it’s long.

Wide reach means imports, configuration, authentication, start-up code and package versions. A short change there deserves a line-by-line read. Narrow reach means one screen or one report, where good tests can carry most of the load.

Five questions for every AI-written change

None of these needs you to read every line. All of them need an honest answer before the merge.

  1. What can it reach that the tests don’t? If it touches imports, config or start-up code, the tests probably aren’t looking there.
  2. Did it run the way production runs? A production build and a real start-up, not development mode.
  3. What changed that nobody asked for? Package bumps, lockfile updates, a “small fix” to make a check pass. On my site, an agent once patched a type error outside the scope I gave it. It said so.
  4. What check would fail if it were wrong? If you can’t name one, nothing was checked. Something just ran.
  5. Who signs for it, by name? “The team” doesn’t count. Neither does the model.

Each way of reviewing misses something different

Most teams lean on one of three habits. Each catches a different kind of problem, and each has a blind spot.

Read the diffTrust the testsVerify the behavior
CatchesLogic you can see in the changeRegressions in paths someone testedWhat happens when it runs like production
MissesWhat the change reaches outside the diffPaths nobody wrote a test forAnything the check doesn’t look at, so name that too
CostScales with diff sizeNear zero per changeMinutes per change, set up once
Who signsThe reviewerNobody, in practiceA named person, on the record

You want all three. The third is the one most teams skip, and it’s the one that would have caught my miss.

Keep the AI. Add the signature.

I still use an AI agent on my site every week. It writes faster than I do and it’s usually right. What changed is that “usually right” stopped being the standard for shipping. Every change now has a check that looks where production looks, and a person who signs for it.

Passing isn’t checked. Checked means someone can say what the check looked at, and what it would have missed.

What’s the last AI-written change on your team that shipped on a green build alone?

Building on AI-written code and not sure what’s been checked? I run fixed-scope technical go / no-go reviews that tell you what’s solid, what isn’t, and what to verify before you build further. Book a Consultation.