B-VUX2-ontogen-http-transport-all-errors-500
ontogen’s axum servers emitter hardcodes INTERNAL_SERVER_ERROR for every handler in
platform-core’s generated http/generated.rs: AppError::NotFound / Invalid / Upstream all
surface as HTTP 500, with the semantic distinction riding only on the body-string prefix (“not
found: …”, “invalid request: …”). Observed during QC of the vault openers surface (dev PR 1169): a
curl of an unregistered vault returned the NotFound body with a 500 status. This is a pre-existing
generated-transport convention, not specific to that PR. Fix direction: per-variant status mapping
in the emitter (NotFound → 404, Invalid → 400, Upstream → 502, else 500) so HTTP clients can
rely on status codes; today only the generated TS client (which parses bodies) is safe.