Adoption readiness — hygiene, PITCH re-sync, flagship Phase 3 demo - #33
Merged
Conversation
…n readiness - README: latest-release is now a dynamic shields.io badge pinned to releases/latest (was hardcoded v0.9.3 — three releases stale); feature bullets include the Phase 3 differentiators (isolation modes, canary, key lifecycle API, per-key usage) - delay_proxy.py → scripts/ (root was the only committed home for a dev tool); dual_backend.yaml comment updated to the new module path - .gitignore: graphify-out/ (agent tooling output)
- Header basis v0.9.3 -> v0.12.0 with the Phase 3 safe-to-pitch list - Stakeholder pitches: isolation pools (CISO), canary + key lifecycle API (platform lead), per-key budgets/usage + fleet/model rate limits (CFO) - Demo script 15 -> 18 min, adds isolation, key lifecycle, canary steps - Fixed section 9: it still forbade pitching Milestones J/L/M/N which shipped by v0.9.3; now lists only genuinely unshipped items (SSO, multi-provider, disaggregation, shared-state HA) - PII objection row now reflects the shipped India pack (was pre-L text)
The non-root image (uid 10001) cannot write ./meridian_requests.jsonl into a root-owned /app, so every 'docker compose up --build' crashed at startup with PermissionError before serving a single request. Verified: gateway now boots and serves the demo stack. CI didn't catch it because gateway-smoke runs uvicorn directly, not the container. Affects the published non-root images; quickstart compose paths were broken on them. Fixed going forward.
…ollback Validated end-to-end (three full clean runs) against the mock stack: scripts/demo_phase3.sh # seeds keys, recreation-safe, port 8181 - acme pinned to a dedicated pool; globex (unlisted) can never land on it - POST/DELETE /meridian/keys against the mounted writable keys_file: create → instantly usable → redacted list → delete → 401 - canary 15% split, time-based promotion to 100%, then a mock-fail burst trips the error-rate rollback (weight → 0, counter=1, traffic on stable) Showalong fixes discovered while validating: - mock_backend: ERROR_RATE env + deterministic mock_fail body flag (demo/testing of failover, rollback, circuit breakers) - docker-compose.phase3.yaml: 4 mock pools + gateway; DEMO_PORT env, default 8181 to avoid colliding with the :8080 quickstart - configs/phase3_demo.yaml: health.fail_threshold 30 (documented why — chat 5xx count cumulatively toward passive ejection between sweeps and would eject the canary before its error window fills in a demo burst) - CONFIGURATION.md: the rollback↔passive-ejection interplay (flaky rollouts are the rollback's case; dead backends are the health check's case) - QUICKSTART.md: flagship-row links the walkthrough - .gitignore: .phase3_demo_keys/
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.
Summary
Adoption-readiness pass (no product features): fixes what a new user or a sales demo hits in the first 10 minutes.
29513f0): README latest-release is now a dynamic badge pinned toreleases/latest(was hardcoded v0.9.3, three releases stale); feature bullets include Phase 3 differentiators;delay_proxy.py→scripts/;.gitignorecovers agent tooling output.8430970): shipped basis v0.9.3 → v0.12.0; demo script gains isolation / key lifecycle / canary steps; fixed §9 which still forbade pitching Milestones J/L/M/N that shipped by v0.9.3.b923f6c): runtime user now owns/app— the non-root image crashed at startup writingmeridian_requests.jsonl, so everydocker compose up --buildquickstart was broken on the published image. Verified fixed. (CI missed it: gateway-smoke runs uvicorn, not the container.)36c230e):scripts/demo_phase3.sh— four mock backends walk isolation pinning, key lifecycle API, canary 15%→100% promotion, and error-rate auto-rollback. Validated end-to-end in three clean runs, including rollback firing (weight → 0, counter = 1).Validation
scripts/demo_phase3.shrun ×3 clean (all beats pass deterministically, incl. rollback)ruff check .+mypy meridian+ 537 tests — unchanged ✓Follow-ups discovered (tracked, not in this PR)
0.12.0image carries the/apppermission bug — worth a0.12.1image rebuild after merge.