Day 07 — Production wrapper + tests + ops dashboard + sprint close (Sentinel PROJECT COMPLETE) - #28
Merged
Merged
Conversation
…ay 7 Phase 6+7) — full docker-compose stack (Postgres + MLflow + Redis + FastAPI), pages/4_Ops.py Streamlit MLOps dashboard, .github/workflows/ci.yml, 31/31 tests passing (PROJECT COMPLETE)
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 was done
Phase 6 + Phase 7 production wrap for the Sentinel 21-day sprint. Single repo that boots from
docker compose up, gates regressions in CI, and exposes the full MLOps surface (drift PSI, retrain timeline, registry rollback, throughput) on an ops dashboard a non-author can read at a glance. No edits tosrc/— Day 7 is additive on top of the Day 4 production refactor and the Day 5 modelling closure.Files touched
docker-compose.yml— extended Day-4 file from Postgres-only to a 4-service stack (Postgres dual-database + MLflow + Redis + FastAPI). Single command brings up the whole runtime.scripts/postgres-init.sh(new) — bootstraps themlflowlogical database alongsidesentinel_telemetry..github/workflows/ci.yml(new) — Python 3.11 + pip-cached requirements;dvc dagvalidates the DAG;pytest tests/on every push tomain/dev.pages/4_Ops.py(new, 295 lines) — Streamlit MLOps dashboard. KPI row, drift PSI per day with injection annotation, retrain event table, registry rollback latency, Pandas/Dask throughput, end-of-sprint scoreboard. Reads from committedresults/*so it works offline.tests/test_features_determinism.py(new, 90 lines) — Pandas == Dask bit-exact on a 1K-row synthetic frame.tests/test_temporal_split.py(new, 87 lines) — regression guard:max(train_timestamp) < min(test_timestamp)per source.tests/test_drift_detector.py(new, 108 lines) — PSI = 0 on identical inputs, ≫ 0.25 on 2σ shift; KS-only and PSI-only fire paths.tests/test_registry.py(new, 122 lines) — hermetic sqlite-backed MLflow; promote → rollback end-to-end; assert post-rollback alias resolves to v1 and v2 carriesrolled_back_attag.tests/test_retrain_trigger.py(new, 75 lines) —TriggerState.step()debounce policy.scripts/demo.sh(new, 80 lines) — 60-second reproducible asciinema-friendly walk-through.Readme.md— added ~250 lines of Day 3-7 sections, sprint final scorecard, architecture diagram, docker-compose run instructions; updated repository structure block.reports/day07_phase6_report.md(new) — daily report with Phase 6 + 7 wrap-up sections.Resume gap progress
Gap: MLOps discipline at scale — drift response, registry rollback, distributed feature throughput, audit-trailed retrain decisions.
Today's contribution: Every Day 1-6 claim now ships behind one repository that boots with
docker compose up, gates regressions in CI on every push, and exposes the full surface on an ops dashboard. The story stops being "trust the day-by-day reports" and becomes "pull the repo, run the demo."Experiments run
bash scripts/demo.shreproduces headlinesKey finding
The sprint's MLOps gap is closed and visible from a single
docker compose upcommand. Concrete claims a hiring manager can verify in under a minute (each backed by a committed artifact + a test):results/drift_replay_summary.json)results/registry_rollback_times.csv)tests/test_features_determinism.pyruns in CI)results/day05/day05_leaderboard.csv)results/day06/frontier_comparison.csv)Phase wrap-up: Phase 6 (production wrapper) + Phase 7 (project complete)
Final approach (locked in):
Final canonical metrics:
What carries to the next day: Sentinel is closed. Next session is DiagraMine Day 1 (May 25): audit + 15-diagram public benchmark + baseline measurement with
_known_connections()enabled vs disabled. That hardcoded function is to DiagraMine what the temporal-split fix was to Sentinel.Sample outputs
No new artifacts — all Day-1-to-Day-6 results files are unchanged. New deliverables are code (
pages/4_Ops.py, 5 test files,scripts/demo.sh), infra (docker-compose.yml,.github/workflows/ci.yml,scripts/postgres-init.sh), and docs (Readme.mdrewrite,reports/day07_phase6_report.md).Next session
DiagraMine Day 1 — Phase 1: audit the 1257-line
diagram_analysis.pymonolith and collect a 15-diagram public benchmark from AWS Well-Architected / Kubernetes / microservices.io reference architectures. Day 1 baseline must report metrics WITH_known_connections()enabled vs DISABLED — the gap quantifies how much perceived performance was hardcoded.