Revision history for TPSGI 0.001 2026-10-23 TEODESIAN - Initial Release - Route by an OpenAPI 3 document: a router exports %openapi in place of @routes, and a router that still has @routes dies as it loads. Templates take {name} and a final {name+}, the most concrete template wins, and parameters are validated and coerced by JSON::Validator. A path with a method that it has no route for is a 405, not a 400. - Every name in a request must be declared, or the request is a 400: each key of the query, and each field and file of the body, unless a body schema says additionalProperties. An operation in CGI mode is not validated. - A callback finds the input of a request in $query->{input}: the query string, the body, the path and x-tpsgi-data. The rest of the query is what tPSGI knows of the request, which the input cannot replace. A router dies as it loads when an operation gives one name to two of them.