Skip to content

feat: v0.11.0 — observability, packaging & elasticity (Phase 2) - #30

Merged
Lothnic merged 3 commits into
mainfrom
milestone/phase2-observability-elasticity
Jul 28, 2026
Merged

feat: v0.11.0 — observability, packaging & elasticity (Phase 2)#30
Lothnic merged 3 commits into
mainfrom
milestone/phase2-observability-elasticity

Conversation

@Lothnic

@Lothnic Lothnic commented Jul 28, 2026

Copy link
Copy Markdown
Collaborator

What / why

Phase 2 of the complete-product track (docs/FULL.md): observability, packaging & elasticity. Closes P1-1, P1-2, P1-4 (and P2-6); P1-3 (canary/traffic management) remains for Phase 3.

Deliverables (all FULL.md Phase 2 tracks)

Track Acceptance Status
Scale-to-zero backends[].idle_timeout_min: quiet backend → marked idle (excluded from routing, health pings paused), meridian_backend_idle{backend}=1; first matching request wakes it (gauge → 0). KEDA wiring documented in DEPLOY.md
Grafana dashboards deploy/grafana/: Gateway Overview (rate/latency p50-p95/inflight/errors/retries/circuits/idle) + Governance & Cost (budgets, PII, tokens); DS_PROMETHEUS import variable; grafana.enabled ships them as sidecar ConfigMap
Helm hardening PDB, topologySpreadConstraints, least-privilege ServiceAccount (automount off), optional Ingress + TLS w/ cert-manager example
Autoscaling scaffolding KEDA ScaledObject (off by default) on gateway inflight; plain-HPA equivalent documented

Tests

  • +15 tests → suite at 425 passed; ruff + mypy clean.
  • Idle signal: marking cadence, traffic resets, wake routing preference, health-sweep skip, gauge, status surface.
  • Dashboard guards: parse/panel-count/every PromQL expr references a real metric + byte-drift between canonical (deploy/grafana/) and chart-embedded copies.
  • helm template verified locally (v3.14.4 = CI version): default + fully-enabled render (9 manifests: SA, PDB, Ingress/TLS, ScaledObject, 2 ConfigMaps, Deployment, Service, PVC); embedded dashboard JSON re-parsed from the render.

Docs

CHANGELOG [0.11.0] · CONFIGURATION (idle_timeout_min) · DEPLOY (Autoscaling both layers, TLS via chart Ingress, Dashboards) · ROADMAP/ship/FULL flips · version 0.11.0 consistent (pyproject/init/app/Chart).

Notes

  • v0.9.4 and v0.10.0 were tagged todayv0.9.4 on the RBAC commit (had never been tagged), v0.10.0 on main; release workflow publishing images for both.
  • Scale-to-zero wake story: the first request may 502 during engine cold-start — resilience.max_retries + timeouts.connect (0.10.0) smooth that window; documented in DEPLOY.
  • No K8s RBAC roles are granted — Meridian needs no API access; the ServiceAccount is least-privilege by default (documented).

Lothnic added 3 commits July 28, 2026 12:55
- backends[].idle_timeout_min: backend with no request traffic for N min
  is marked idle by the health sweep — excluded from routing, health
  pings paused (a scaled-to-zero pod SHOULD fail them), status idle=true
- first request matching its model/tags wakes it (strategy picks among
  idle candidates; affinity pins to idle backends remap)
- meridian_backend_idle{backend} gauge for external scalers (KEDA)
- 11 tests: marking cadence, traffic resets, routing wake preference,
  health-sweep skip, gauge, status surface

421 tests green; ruff + mypy clean
- Grafana dashboards: deploy/grafana/{overview,governance}.json —
  request/latency/inflight, resilience (retries/circuit/idle), budgets,
  PII, attributed tokens; DS_PROMETHEUS import variable
- Helm: grafana.enabled ships dashboards as labeled ConfigMap (sidecar)
- Helm hardening: ServiceAccount (automount off, least-privilege), PDB,
  topologySpreadConstraints, optional Ingress + TLS
- KEDA scaffolding: ScaledObject template (off by default) on inflight
- chart 0.11.0; values image tag 0.10.0 (latest published)
- tests: dashboard parse/panel/metric-reference guards + chart drift check;
  helm template validated locally across feature combos (v3.14.4)
- CHANGELOG [0.11.0]: scale-to-zero idle marker, Grafana dashboards,
  Helm hardening (PDB/topology/SA/Ingress+TLS), KEDA scaffolding
- CONFIGURATION: idle_timeout_min; DEPLOY: autoscaling (gateway KEDA/HPA,
  backend scale-to-zero wiring), TLS via chart Ingress, Grafana section
- ROADMAP/ship/FULL status flips; version 0.11.0 (pyproject/__init__/app)

425 tests, ruff + mypy clean, helm template default OK
Copilot AI review requested due to automatic review settings July 28, 2026 07:31

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@Lothnic
Lothnic merged commit b4aedef into main Jul 28, 2026
5 checks passed
Lothnic added a commit that referenced this pull request Jul 28, 2026
…sticity

Follow-up to #30 — fixes from Phase 2 code review. All 7 critical + 4 moderate issues addressed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants