Skip to content

Adoption readiness — hygiene, PITCH re-sync, flagship Phase 3 demo - #33

Merged
Lothnic merged 4 commits into
mainfrom
milestone/adoption-readiness
Jul 29, 2026
Merged

Adoption readiness — hygiene, PITCH re-sync, flagship Phase 3 demo#33
Lothnic merged 4 commits into
mainfrom
milestone/adoption-readiness

Conversation

@Lothnic

@Lothnic Lothnic commented Jul 29, 2026

Copy link
Copy Markdown
Collaborator

Summary

Adoption-readiness pass (no product features): fixes what a new user or a sales demo hits in the first 10 minutes.

  • Hygiene (29513f0): README latest-release is now a dynamic badge pinned to releases/latest (was hardcoded v0.9.3, three releases stale); feature bullets include Phase 3 differentiators; delay_proxy.pyscripts/; .gitignore covers agent tooling output.
  • PITCH re-sync (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.
  • Dockerfile non-root fix (b923f6c): runtime user now owns /app — the non-root image crashed at startup writing meridian_requests.jsonl, so every docker compose up --build quickstart was broken on the published image. Verified fixed. (CI missed it: gateway-smoke runs uvicorn, not the container.)
  • Flagship demo (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.sh run ×3 clean (all beats pass deterministically, incl. rollback)
  • ruff check . + mypy meridian + 537 tests — unchanged ✓

Follow-ups discovered (tracked, not in this PR)

  • The published 0.12.0 image carries the /app permission bug — worth a 0.12.1 image rebuild after merge.
  • Next phases: mkdocs site on GitHub Pages, real-engine release validation, refreshed benchmarks, deploy recipes.

Lothnic added 4 commits July 30, 2026 02:09
…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/
Copilot AI review requested due to automatic review settings July 29, 2026 21:19

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 4404cf5 into main Jul 29, 2026
5 checks passed
@Lothnic
Lothnic deleted the milestone/adoption-readiness branch July 29, 2026 21:21
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