[Web]RouterPer-verb route tables with most-specific-wins dispatch. The router is pure data + matching — the [Web]App (and anyone else) drives it.
Register handler for verb (e.g. 'GET') and pattern. A duplicate shape under the same verb throws ValueError at registration.
The verbs whose tables match path (for a 405's Allow header).
Dispatch verb + path (query already stripped). Returns a tagged list: #( #ok handler paramsMap ) — the most specific match #( #methodNotAllowed allowList ) — other verbs match this path (-> 405) #( #notFound ) — nothing matches anywhere (-> 404) HEAD falls back to the GET table (the transport suppresses the body).
Internal: an empty verb -> route-table map.