Well-known OpenAPI descriptors
`GET /.well-known/openapi.json` and `GET /.well-known/openapi.yaml` serve the curated public OpenAPI 3.1 contract at the RFC 8615 well-known path. Both are unauthenticated, return strong ETags derived from a content hash, and honour `If-None-Match` with `304 Not Modified` so tooling can cache aggressively. The descriptor is filtered against the public denylist sourced from `app/core/public_contract_filter.py`, which mirrors the `denylist` array on the website contract: internal, admin, and platform-only routes never appear in the response. Both formats are byte-for-byte equivalent in semantic content; only the serialisation differs.