feat: v0.11.0 — observability, packaging & elasticity (Phase 2) - #30
Merged
Conversation
- 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
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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)
backends[].idle_timeout_min: quiet backend → markedidle(excluded from routing, health pings paused),meridian_backend_idle{backend}=1; first matching request wakes it (gauge → 0). KEDA wiring documented in DEPLOY.mddeploy/grafana/: Gateway Overview (rate/latency p50-p95/inflight/errors/retries/circuits/idle) + Governance & Cost (budgets, PII, tokens);DS_PROMETHEUSimport variable;grafana.enabledships them as sidecar ConfigMapScaledObject(off by default) on gateway inflight; plain-HPA equivalent documentedTests
deploy/grafana/) and chart-embedded copies.helm templateverified 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.4on the RBAC commit (had never been tagged),v0.10.0on main; release workflow publishing images for both.resilience.max_retries+timeouts.connect(0.10.0) smooth that window; documented in DEPLOY.