Canonical success envelope: { "data": T, "ts": <unix millis i64> }.
ts is chrono::Utc::now().timestamp_millis(), set in the webserver handler
via [ApiEnvelope::now] (the contract carries only the type + the clock
helper, not a hard dependency on when the handler reads the clock).
rename_all = "camelCase" is a no-op for the single-word fields here but is
declared for forward-compat.
IMPORTANT (utoipa v4): every concrete ApiEnvelope<X> that needs a named
OpenAPI component is declared in the #[aliases(...)] block below. Add a new
alias line whenever a new payload type needs enveloping. NEVER register the
bare ApiEnvelope in components(schemas(...)) — utoipa errors on a bare
generic, and an un-aliased generic inlines an anonymous schema.