Code that looks separated into clean modules — but is secretly bound together by assumptions no boundary actually enforces.
This is what a generated codebase usually looks like on the surface — tidy, separated, each box doing its own job. Flip the switch to see what's actually connecting them underneath.
You usually don't spot a modular mirage by reading the code. You spot it by watching what happens when someone touches one piece of it.
A team ships a checkout flow. The agent produces four clean-looking modules: cart/, pricing/, tax/, receipt/. Each has its own folder, its own types, its own tests. Code review takes ten minutes. It looks like good architecture.
The two modules were never actually independent. They were generated in the same session, against the same example numbers, and both quietly assumed prices round the same way. The folder structure said "separate." The behavior said otherwise. That gap is the mirage — and it's invisible until something moves.