While I was splitting the Sellavie backend into modules, an endpoint used by a consent setting was removed. Nothing failed. The frontend compiled, the backend started and the tests passed. The settings screen simply stopped working properly and stayed that way.
Why nothing caught it
Each side was valid on its own. To the frontend, an API call is a string. The type checker has no idea whether a server will answer it. To the backend, a route that no longer exists is not an error, it is just absent. The break lived in the space between them, and nothing was looking there.
The check
I added a static test that collects every API call the frontend makes and resolves each one against the routes the backend registers. If a call does not resolve, the test fails.
It currently checks 188 frontend calls against 295 backend routes, and it runs without starting either side.
What it does not do
It does not check payloads or behaviour. A route can exist and still return the wrong thing, and integration tests are still needed for that. This test answers one narrow question cheaply: does the thing being called still exist?
Why it earns its place
Unit tests look inside modules. End-to-end tests follow a few chosen journeys. Neither covers every connection between a large frontend and an API that is being reorganised. Silent drift during a refactor is exactly the failure a codebase in that state produces, and this is a cheap way to make it loud.