
A four-year study of AI code quality has an ugly number in it. GitClear compared 623 million code changes from 2023 through 2026 and found that regions of five or more consecutive repeated meaningful lines rose from 40.3 to 73.0 per million changed lines, an 81% increase over 2023 and the highest level on record. Over the same window, refactoring line moves fell 70% against 2023, and the share of changes that remove or update code last touched more than twelve months ago fell from 1.7% to 0.46%.
The timing is awkward, because a fifteen-item list of agent working practices is going around this month, and most of it holds up. Not because it sounds sensible, but because the platforms have started enforcing it. Two items are the exception.

Four of those practices are now platform behavior, not advice
"Describe what you want, not how you'd do it" stopped being a style preference on 21 October 2026. Anthropic's API version 2026-10-21 removed three sampling parameters outright — temperature, top_p and top_k:
# Rejected on anthropic-version: 2026-10-21
temperature
top_p
top_k
Sending any of them now returns a 400, and the docs are specific that this holds "even at the parameter's default value." The deprecations table gives exactly one replacement: "Omit and use prompting to guide model behavior." The migration note doesn't pretend this is free. On models that accepted other values, such as Claude Sonnet 4.6, a request that lowered temperature for more consistent output loses that effect, and "No other setting replaces it." Models that already accepted only the defaults, Claude 4.7 and later, sample as before.
"Make the whole SDLC legible to the agent" has similarly hardened. AGENTS.md is stewarded by the Agentic AI Foundation under the Linux Foundation, claims adoption in over 60,000 open-source projects, and specifies a precedence order rather than leaving it to each tool: the closest AGENTS.md to the edited file wins, and explicit user prompts override everything. It also specifies behavior, not just format: agents "will attempt to execute relevant programmatic checks and fix failures before finishing the task." For scale, the spec notes the main OpenAI repo carries 88 of these files.
"Stop manually managing context" is defensible because the loss profile is published rather than folklore. Claude Code's context window documentation states what survives compaction: up to five files get re-read, chosen by most recent modification; a file over 5,000 tokens returns as a path reference with no content; skill bodies are capped at 5,000 tokens each and 25,000 total, with truncation keeping the start. The item most likely to bite is the last one listed. Path-scoped rules and nested CLAUDE.md files load into message history when Claude reads, writes or edits their trigger file, so compaction summarizes them away with everything else. The documented fixes are to drop the paths: frontmatter or move the rule to the project-root CLAUDE.md.
And the practice of spawning several context-free agents to test whether your docs actually work has a documented control arm, which is the part usually left out. Per the subagents documentation, an ordinary subagent still loads the full instruction hierarchy by default: user-level CLAUDE.md, project rules, AGENTS.md. To get a genuinely blind arm you need omitClaudeMd, or the built-in Explore and Plan agents. One catch survives even then: a subdirectory's own CLAUDE.md and matching path-scoped rules still load when the subagent works with files there. Run the eval without that control and you are measuring something else.
The slop item is the one the data breaks
GitClear is not claiming AI writes bad code. They put it more carefully than most of their critics do. "The headline is not 'AI writes bad code,'" the study says. "It is that today's default AI workflow is incentivized to deliver atomic code — a happy-path, a passing test, a closed ticket — while quietly taxing the invisible and the deferred: the reuse, consolidation, and error-surfacing that determine how expensive a codebase is to own in year three."
They also name the mechanism, calling it a propagation tax: "when a developer changes one copy of a five-line block, they inherit the obligation to find and evaluate every sibling … and decide whether the change must propagate." Those siblings sit across files and domains the developer may not know.
The security data is quieter and less forgiving. Veracode has tested more than 100 models over four years and reports an average security pass rate of 56% that has not moved. The 2026 round covered 11 new models across 80 tasks: GPT-5.5 leads at 68%, and six of the eleven land between 50% and 53%. Their summary runs two sentences: "The best model available still fails on nearly 1 in 3 security tasks. The worst fails on 1 in 2." Models purpose-built for code average 51%; general-purpose models average 52%. Training for speed did not produce safety.
Most AI-introduced issues don't survive. The structure still got worse
The strongest objection to this argument comes from a different study, and at first glance it supports the list. Six researchers tracking AI-generated code in the wild scanned 302,600 verified AI-authored commits across 6,299 GitHub repositories, identifying 484,366 distinct AI-introduced issues, 89.3% of them code smells. The number that matters is the last one: 22.7% were still present at the latest revision, so about 77% did not survive. Left alone, it mostly sorted itself out.
The two studies are measuring different objects, though. The arXiv work tracks individual issues that a before-and-after static analysis flags per commit, and a flagged issue has a tool pointing at it, so most get resolved. GitClear tracks the structural direction of the codebase, and over the same window that direction worsened: duplication set a record while refactoring moves and long-term maintenance both fell.

So both findings hold at once. The individually flagged issues mostly did not stick around, and the structure still moved the wrong way. Duplication sits in an awkward spot between the two: it doesn't turn a test red, it doesn't fail a build, and it rarely gets a ticket of its own. It just means the same logic now exists in a second and third place, and the bill arrives on the day someone edits one of them. That is where "review only code with high blast radius" runs into trouble as a filter, because duplication's blast radius reads as zero right up until the moment someone touches it.
What stays in the review set
If your review budget only covers part of the diff, blast radius is the wrong sole filter. Use GitClear's own unit of measurement as the threshold: a region of five or more consecutive repeated meaningful lines. That pattern is running at 73.0 per million changed lines in 2026, and unless you have a duplication detector wired into CI, nothing will surface it before a human edit does.
The second thing is security, and it is not delegable to the model's judgment. Until Veracode's 56% starts moving, swapping models does not change the conclusion: the best one available still misses nearly one security task in three.
The other thirteen practices are fine to adopt, and several are no longer worth debating. "Describe what you want" is now a 400 from the API.
Sources
- The Maintainability Gap: AI Code Quality in 2026, GitClear
- 2026 GenAI Code Security Report, Veracode
- Debt Behind the AI Boom: A Large-Scale Empirical Study of AI-Generated Code in the Wild
- API version 2026-10-21 migration notes, Anthropic
- Model deprecations and retirement schedule, Anthropic
- AGENTS.md format specification
- Claude Code context window and what survives compaction
- Claude Code subagent configuration
About the author
Crafting seamless user experiences with a passion for headless CMS, Vercel deployments, and Cloudflare optimization. I'm a Full Stack Developer with expertise in building modern web applications that are blazing fast, secure, and scalable. Let's connect and discuss how I can help you elevate your next project!
Comments
Join the discussionNo comments yet. Be the first to comment.





