Reconcile o11y/openapi.yaml to the live cloud routes in
hanzoai/cloud/clients/o11y (scope.go + query.go + vmproxy.go + event_ingest.go).
The prior spec modelled a fictional Loki/Tempo/Grafana surface (logs/query,
logs/push, logs/tail, series, labels, traces, dependencies, channels,
dashboard/rule CRUD) never served at these flat paths; the o11y subsystem also
collapsed 5 registrations to one o11y concept.
Now exactly the live public surface (12 flat, version-less paths — no nested
/v1/o11y/api/vN/* or /v1/o11y/vN/*):
- POST /v1/o11y/query, /v1/o11y/query_range (composite builder query; was GET PromQL)
- GET /v1/o11y/logs, /metrics, /status (tenant-scoped, org-pinned reads)
- GET /v1/o11y/vm/query, /vm/query_range NEW — SuperAdmin VictoriaMetrics
proxy (query allowlisted to up/sum(up)/count(up); Prometheus envelope verbatim)
- GET /v1/o11y/services, /dashboards, /rules, /health (o11y runtime)
- POST /v1/o11y/ingestion (LLM-obs event ingest)
Schemas grounded in the Go response structs. hanzo.yaml regenerated via
merge.py: 68 services, 1797 paths (-10 fictional o11y paths).
Co-authored-by: Hanzo Dev <[email protected]>