Gate: route-declared
A screen spec declares its route and names its neighbour screens.
| Property | Value |
|---|---|
| Checker | route-declared |
| Confronts | spec |
| Blocking by default — new project | yes |
| Blocking by default — existing project | no — informs |
How it measures
Section titled “How it measures”Confronts a SCREEN spec against the navigation graph it belongs to: is there a named route that reaches this screen, and do its edges point at concrete screens?
It is the navigation traceability ruler. Without the route the screen is a loose node — something exists that nobody can reach. With generic terms in the navigation tables (“Next screen”, “Main menu”) the edge points nowhere: it reads like a link and connects to no node at all, which is worse than an absent edge, because an absent edge is visible and a vague one passes for a declared one.
Jurisdiction is the whole design. Only layer: screen is charged. Hooks, business
logic, stores and DAOs have no route, and charging them was the vice of the legacy
validator this gate replaces — it knew only screen and component, so it treated every
non-component as a screen and produced a false positive for every unit that legitimately
has no route. A gate that cries over what cannot be fixed teaches the team to ignore it.
That is also why the Skip carries a stated REASON. A bare indeterminate count leaves the reader wondering whether the silence is their problem; saying “this is not a screen” closes the question in one line.
Declaring it
Section titled “Declaring it”gates: - name: route-declared on: [spec] check: route-declared