Read-analytics endpoints over the consolidated core read layer
(GoodAnalytics.Core.Audience and GoodAnalytics.Core.Analytics).
All actions are workspace-scoped via conn.assigns.workspace_id (set by
GoodAnalytics.Api.AuthPlug) and validate query params with
OpenApiSpex.Plug.CastAndValidate, which casts the from/to RFC3339
parameters to DateTime structs and rejects malformed or missing values
with 422 before an action runs.