Code that creates a precondition stops being exercised on the machine where that precondition already holds. The development machine ran the setup path once and never runs it again, so the setup path can break completely and stay green.
Why it holds
A test asserts behaviour given a state. The state on a working machine is the state after setup succeeded. Every branch that runs only when setup has not happened is therefore unreachable from that machine, and unreachable code is untested code no matter what the coverage report says.
Coverage measures whether a line executed, not whether it executed in the configuration where it fails. A schema string is “covered” the moment any test imports it. It is not exercised until something opens a database that does not exist yet.
Both common test styles miss it for different reasons. A unit test mocks the thing that would have failed. An integration test runs against a fixture the harness set up correctly. Neither makes the program build its own world.
Where it breaks
The inverse class is just as real, and the same fixture does not solve it: bugs that need accumulated state. A migration that fails on two years of rows, a log rotation that fails at a size boundary, a cache that corrupts only when full. A fresh directory hides those exactly as a warm machine hides the first-run bugs. The two need opposite fixtures, and a project needs both.
A probe that starts from nothing is also single-use. Once it has been written to, it is a warm machine like any other.
