AI-assisted code
Is the AI-written code any good?
The honest answer starts by splitting the question in two. Who wrote it cannot be established from the code, and we will not pretend otherwise. Whether what landed is sound can be — and it is measurable the same way for a rushed human and an eager model. This page is what Watchdog can tell you about assisted code, and what it refuses to claim.
Volume went up when the assistants arrived. Review capacity did not.
The half that cannot be answered
Why we do not guess the author.
Authorship cannot be read from the code
Inferring authorship from style is a coin flip sold as a service. OpenAI withdrew its own text classifier for low accuracy, and source code is harder ground than prose: formatters, templates, scaffolding, house style and copied idiom all erase the signal a detector claims to read. We do not offer authorship detection, and we would not rely on it if we had it.
And it would be the wrong question
A method that returns a constant under a confident name is the same defect, carries the same finding and takes the same fix whoever produced it. An authorship claim would add something we cannot support to a verdict that does not need it. Watchdog never scores individual developers, by doctrine — no finding names a person.
The half that can
What assisted code actually gets wrong — measurably.
Hollowness that type-checks
The failure mode is not bad syntax. A method returning a constant under a confident name, an async that never waits, an empty type, a dead branch, a catch that swallows the failure. It compiles, it type-checks, it passes the gate — and it does nothing. Watchdog reads this as the Generation-Debt lens: the quality signature of unreviewed code, judged on its own merits regardless of who or what produced it, reported with the rule that fired and the exact file and line rather than as an impression.
Locally correct, globally wrong
Each change is right where you read it and wrong once you see the whole: a fourth way to do one thing, a duplicate of a helper that already existed, a configuration knob wired to nothing, test-only surface left in a production module. The architecture and domain lenses read the system, so this reads as drift rather than as a hundred individually reasonable diffs — and a coherence family of rules covers the provable cases in C# today, each finding carrying the two spans that prove it. Those ship advisory: they inform the survey and never move the score until their false-positive profile is measured more widely. One sibling rule was cut for producing 71 false positives in 73.
Tests that assert nothing
Generated tests are the cheapest thing to produce and the easiest to fake. The test-quality read asks whether a test actually asserts, and reports skipped and assertion-free tests rather than counting files. This particular read is C# today — the language page states every such boundary rather than leaving you to find it.
Shape carries across languages
A tax calculation that returns zero is the same finding in C#, Java, Python or Go, because the lens reads how the code is organised rather than its syntax. What differs by language is how much of the survey resolves — published per language, with the abstentions named.
Velocity and quality, read separately
"Shipping faster" and "shipping worse" stop being the same sentence.
The composition of what you merged
Every survey scores the mix — the slop, fine and brilliant split — and trends it against the previous one. So the throughput argument and the quality argument become two readings taken the same day, instead of one conversation nobody can settle. Down is as useful as up: you find out within a sprint, not at the next incident.
Did the fix actually land?
An agent reporting success is not evidence. A resolve stays provisional until the next survey confirms it, and finding identity is line-insensitive, so a reformat cannot launder one away. The arbiter is the measurement — never the agent's own account of its work. That is what makes "we cleaned it up" a checkable claim rather than a report.
What we will not claim
- We do not attribute authorship, and we do not sell AI-detection.
- We do not score individual developers, and no finding names a person.
- "AI-generated" is not a defect class here. Hollow is hollow whoever typed it, so the finding and the fix come out identical either way — which is also why the number cannot be argued with on the grounds of who wrote the code.
- Where a dimension cannot run for your stack it is reported as not measured, with the reason, and never converted into a pass.
- We do not publish an audited accuracy figure for this question, or any other, until the measurement protocol has produced one. The design target is stated openly; a validated result is a separate claim and is not made until it holds.
Run one on a repo where the assistants have been busy.
Sign in with GitHub · no card · TypeScript, C#, Java, Python, Kotlin and more · the first full report is €0.