# Gateway rail adapter lifecycle (DI policy) **Gap:** PG-GW-W01 (singleton vs per-request). **Policy (until superseded by performance review):** 1. **HTTP (`/api/v1/gateway/rails/*`)** — `createGatewayRailAdapter(id)` returns a **new instance per request** after `registry` lookup. Do **not** cache adapter instances on the Express router. 2. **Long-lived workers** — if a worker holds a connector with sockets or session state, that worker process owns **one** instance per `adapterId`; document in the worker module. 3. **Secrets** — `initialize(config, secretsRef)` is the hook for KMS/HSM-backed config; REST routes still pass `{}` until per-rail secrets routing is implemented. **Related:** `gateway-adapter-registry.ts`, `gateway.routes.ts`.