Realtime de styx: canal WebSocket de señales de transporte, sólo servidor→cliente, autenticado con Bearer y con admisión por Origin y topes de conexiones. ## Errores Todo error es un Problem Details (RFC 9457) servido como `application/problem+json`, con `type`, `title`, `status` y un `code` estable. Los errores de dominio añaden `retryable` y `category` (`transient`, `permanent` o `recoverable`). Los de framework son `400 parse` (JSON roto), `404 not-found` (ruta inexistente) y `422 validation` (con `on`; `property` y `detail` sólo fuera de producción). Las denegaciones del Bearer son `401 unauthenticated` o `reauth-required`, `403 forbidden` y `429 rate-limited` (con `Retry-After`). Ningún problem repite el valor recibido y un recurso de otro actor responde 404, sin oráculo.
Responde 200 mientras el proceso atiende peticiones; no comprueba dependencias. La usan el HEALTHCHECK de la imagen y el compose (con GET: HEAD es opt-in en Elysia 2).
application/json
curl -X GET "https://example.com/health"{ "status": "ok", "timestamp": 0, "uptime": 0, "version": "string", "wsClients": 0}curl -X GET "https://example.com/version"{ "commit": "string", "component": "string", "train": "string", "version": "string"}Puerta del upgrade a WebSocket: exige Bearer y la admisión comprueba Origin y los topes de conexiones. El upgrade lo hace el transporte WS sólo si esta ruta dejó pase.
Acceso: Bearer de identity con policy authenticated.
bearerAuth Access token de identity-svc (JWT EdDSA, caducidad corta). Se verifica en local y después contra la sesión viva (revocation-aware).
In: header
application/json
application/problem+json
application/problem+json
application/problem+json
curl -X GET "https://example.com/ws"{ "upgrade": "websocket"}