Build1 distinct publisher3 min readUpdated
A practitioner argues the 80% coverage norm was a budget for review time, not a standard, and that any check living only in the pipeline reports to you rather than constraining the agent.
The Engineer · Build desk
Compiled by The EngineerSomething wrong?How this is made
The direction the feedback travels is the load-bearing part. A linter that fails in CI thirty minutes after the agent has stopped is addressed to a person, not to the thing that wrote the code [5]. The post's test for admission to the harness is one command the agent can run itself, failing loudly enough that it cannot be ignored [6]. That demotes a familiar piece of infrastructure. Most teams call CI the enforcement layer; on this reading it is the reporting layer, and enforcement has moved to whatever the agent can invoke before the branch exists [5].
Then the arithmetic. Moving from the industry's 80% to a 100% floor shifts one branch in five out of optional and into mandatory [1]. That fifth is not a random sample. The author's point is that an agent skips the awkward branch precisely because it is the annoying one to set up [7], so the portion everybody wrote off is where the fixtures, the doubles and the error paths live. It was never the cheap 20% left over. It was the expensive 20% that human review time could not afford.
On an existing codebase the 100% minimum applies only to files a pull request touches, so coverage ratchets upward as the agent works through the code [8].
Coverage remains the weaker of the two checks described here. Left alone, an agent adds defensive code that does nothing, the classic being an emptiness check before looping over an array, when looping over an empty array already does nothing at the same speed [9]. Tests execute that line, so coverage marks it covered. Mutation testing is what catches it: change the line, and no test cares [10]. A suite sitting at 100% can still be certifying noise, which is worth knowing before anyone treats the number as an outcome.
Two of the failure modes are specific to generated code. A model working from a half-remembered API emits a method that looks entirely plausible and does not exist, and a type checker rejects it statically with a precise error rather than a stack trace the agent has to interpret [11]. And a model's instincts come from its training data, so it reaches for the idiom that was correct in 2019 with complete confidence; the example given is Time.now in a Rails codebase where Time.current is the timezone safe call, a bug rather than a style preference, and one an agent will reintroduce every few weeks unless something stops it [12]. Insecure output follows the same pattern: the mistakes are learned from existing codebases, which means detectors for them already exist [13].
This is one practitioner's account, and the toolkit is Ruby-shaped, with rspec, simplecov, mutant, sorbet and rubocop named rather than any before-and-after measurement [14]. The mechanism is the portable part. Any threshold your team justified by the cost of looking at things is now a setting, and someone should reopen it [4].
Follow any of these and your For You feed starts watching them — no settings page required.
Ranked by verification strength, evidence, and original report placement.
The recommendation is a testing framework with minimum line and branch coverage set to 100%, because at 80% an agent will leave the awkward branch untested, that being exactly the branch that is annoying to set up, while at 100% there is no judgement call left to get wrong and no negotiation to have.
On an older codebase the 100% minimum is not feasible in one go; applying it only to files touched in a pull request works, so coverage ratchets up as the agent works through the code while new work meets the high standard immediately.
The author names the tools he uses: rspec and simplecov for testing and coverage, mutant for mutation testing, Sorbet for types, and rubocop, erb_lint, eslint, remark-validate-links and hadolint for linting, with stryker-mutator's docs for mutation testing basics.
Raising the coverage floor from the settled 80% to 100% moves 20 percentage points of branches, one in five, from optional to mandatory.
Every quality threshold the industry set was really a judgement about how much human time it was worth spending: 100% branch coverage was not wrong, it was expensive, so it was called diminishing returns and the industry settled at 80%.
That enforcement cost is now paid in agent time, which is cheap and which you are not spending your evening on, so thresholds that were uneconomic five years ago are now just settings to turn up.
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Single practitioner account, no measurement
Every substantive mechanism claim rests on one first-person dev.to post with no benchmarks, defect-rate data, agent-time costs or third-party corroboration. The verifiable parts are narrow: the numeric coverage arithmetic and the author's own named toolchain. The supplied body is also truncated before the hooks argument closes.
One self-reported toolchain
Adoption evidence is limited to the author's disclosure of the tools he personally runs. The individual tools named are established open-source projects, but there is no disclosed adoption of the specific prescription (a 100% coverage floor with agent-run mutation testing and hook-staged enforcement) beyond this one engineer's repositories, and no team, org or vendor deployment data.
Prescriptive framing ahead of evidence
Language is comparatively measured for the genre and the recommendations are cheap to falsify locally, but several absolutes outrun what is shown: agent time being 'cheap', mutation testing being 'the only tool' that answers both halves, 100% coverage leaving 'no judgement call left', and security scanning being 'non negotiable'. None are supported by measurement, and the costs of maximal enforcement (false positives, flake, hook latency) are not weighed, so claims sit moderately overstated relative to evidence and adoption.
No disclosed incentives
The supplied source contains no vendor affiliation, sponsorship, employer disclosure, commercial relationship or product being sold; the named tools are third-party open-source projects linked without any stated stake. There is no basis in the material to score incentive pressure, and inferring one would require facts the cluster does not contain.
Coherent but uncorroborated and truncated
Internal consistency is good and the mechanisms are specific enough to test (dead defensive code invisible to coverage, hallucinated method calls caught by types, Time.now versus Time.current), which raises confidence above the floor. It stays low because there is one publisher, one voice, no outside verification, no counter-evidence sought, and the article text ends mid-sentence in the hooks section so part of the argument is unavailable.
build
Agent reliability is a harness problem, not a prompt problem1 distinct publisher
build
The Cap Was One Line of Scheduler Policy, Not the GPU1 distinct publisher
build
Deleting a 1,350-line CLAUDE.md broke two rules out of twenty1 distinct publisher
build
Allow-list the closed set, block-list the open one: 193 thin geo pages, one gate1 distinct publisher
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 22, 2026