When you write code yourself, the tradeoff sticks in memory because choosing it took effort. When you approve an AI suggestion, a real decision still happens, but no friction attaches to it. Weeks later the code looks intentional whether it was carefully reasoned or casually accepted, and you have no way to tell which.
The Details:
Commit messages and comments were built for a world where the coder and the reasoner were the same person. Now the reasoning splits between developer and model and neither side retains it once the session ends, so the message points at a decision nobody fully owns anymore.
Asking a fresh AI session to explain old code feels like a fix but is not. The model produces a fluent, confident account of why the code might exist, reconstructed from the artifact itself rather than recovered from memory. If the real reason was a specific incident, like a rate limit hit on a particular Tuesday, the model has no access to that and will invent something plausible instead, which is worse than admitting the reasoning is lost.
Some AI output is a load-bearing accident: the model adds protective logic while solving an unrelated problem, nobody asked for it, and nobody documents it. Months later a cleanup pass removes it because it looks like unnecessary complexity, and only then does it become clear the code was preventing something real. Deliberate, inferred, and accidental code all look identical on the page.
The fix is a lightweight decision note written at approval time, before the tab closes, capturing what you were trying to prevent or achieve rather than what the code does. A folder next to the code, one paragraph per non-obvious tradeoff, linked from the commit, works better than a heavier process that never gets started.
Bottom Line: AI assistance unbundled reasoning from authorship, so intent now has to be captured on purpose or it disappears entirely.
Enjoy this article?
Listen to the Claude Code Conversations radio show or join the community.