Why agents drift architecture faster than humans
A human engineer carries a model of the system in their head — they know logic lives in services, that components don't talk to the database, that this is how errors propagate — and they (usually) write the new code to fit. An agent doesn't carry that model across a session; it works from the context it's given and the most direct path to a working result. Asked to fetch some data, it writes a fetch wherever it's standing, not necessarily through the layer your architecture routes everything through. The result runs perfectly and quietly violates the shape of the system.
Speed makes it worse. The same productivity that makes agents valuable means more changes per week, and every change is another chance to deviate. Drift that used to accrue over a year of human commits can accrue over a month of agent-assisted ones — and because each individual deviation is small and the code works, none of it trips the alarms that catch outright bugs. It just makes the codebase a little less coherent, a little harder to reason about, a little more expensive to change, every single PR.
Drift is invisible to the tools that check correctness
Tests pass on architecturally-drifted code, because the code is correct — it does the right thing, just in the wrong place. Linters pass, because a misplaced data call breaks no syntactic rule. Type checkers pass, because the types line up. Every automated gate you have for catching mistakes is blind to drift, because drift isn't a mistake in the local sense; it's a mismatch with a system-level intent that none of those tools were given.
That leaves human review as the only line of defense, and human review is exactly where drift slips through — a reviewer reading a 30-file PR to check that it works has neither the time nor the held-in-memory map to notice that one new file ignores the layering the other 29 respect. The deviation looks like normal code because it is normal code, locally. Catching it requires comparing the change against the codebase's established patterns, deliberately, which is more than a tired reviewer at the bottom of a queue reliably does.
Catch structural deviations on the diff
The defense has two halves. First, make your intended architecture legible: document the layers, the boundaries, the conventions, and put them where both your agents and your reviewers can see them — drift thrives in the absence of a stated structure to drift from. Second, check for deviations at the moment they enter, on the diff, while the fix is still one file. That's the half quality·vibes automates: basic structural and architectural deviations are one of the slop patterns it reads each PR's diff for, flagged in place alongside the duplication, naming drift, and non-idiomatic usage that tend to travel with them.
Two honest boundaries keep this useful rather than overclaiming. quality·vibes catches basic structural deviations — a change that visibly cuts against the repo's established patterns — not deep architectural-fit judgments about whether your overall design is the right one; that conversation stays human. And like everything it does, it suggests rather than enforces: it flags the deviation with an accept/dismiss control and lets a person decide, never auto-applying a fix or auto-merging. The value is timing. Caught on the diff, drift is a quick correction; caught six months later, it's a refactor nobody has budget for.
frequently asked
What exactly is architectural drift?
It's the slow divergence between the architecture you intended and the one your codebase actually has, caused by many small changes that are each locally reasonable but ignore the system's structure — logic creeping into the wrong layer, boundaries getting crossed, a third pattern added where two already existed. No single PR causes it; it accumulates, and it's only obvious in aggregate, which is what makes it dangerous.
Why don't tests or linters catch drift?
Because drifted code is correct and valid — it does the right thing in the wrong place. Tests check behavior, linters check syntax and rules, type checkers check types; drift is a mismatch with system-level intent that none of those tools were given. That's why it falls to review, and why catching it benefits from a tool that explicitly compares the diff against the repo's established patterns.
Can quality·vibes judge whether my overall architecture is good?
No, and it doesn't claim to. It flags basic structural and architectural deviations — changes that visibly cut against the patterns your repo already follows — at the diff level. Whether your overall design is the right design for the problem is a human architectural decision; quality·vibes helps you hold the line on the structure you've chosen, not choose it for you.
How does this fit with making my conventions explicit?
The two reinforce each other. A documented architecture gives both your agents and quality·vibes a clear reference for what "fits," which reduces drift at generation time and sharpens what gets flagged at review time. Stating the structure prevents some deviations; flagging deviations on the diff catches the rest before they compound. quality·vibes suggests; you and your team decide.
Last updated June 19, 2026