v0.4 (Operator Tier — Cohort Dashboard + Auth + Postgres) milestone complete. Phases: ✓ P0 pre-execution (planning) → v0.1.6 ✓ P1 operator foundation (Postgres+auth+VC migration) → v0.1.7 ✓ P2 cohort dashboard + aggregation → v0.1.8 ✓ P3 final review + ship → v0.1.9 (= v0.4 milestone release) Requirements covered (8/8): REQ-MT-01 (Postgres store), REQ-MT-02 (aggregation pipeline), REQ-AUTH-01 (operator auth), REQ-DASH-01 (cohort dashboard), REQ-NFR-AUTH-01 (auth NFRs), REQ-NFR-MT-01 (Postgres-in-LXC), REQ-NFR-DASH-01 (k-anonymity ≥10), REQ-NFR-DASH-02 (freshness ≤24h) Grill MUSTs honored (6/6): G-008, G-011, G-027, G-031, G-038, G-041 Tests: 317 pytest pass, 36 skip (Postgres-requiring), 0 fail; 17/17 vitest pass Review: APPROVE_WITH_NOTES (6/6 personas, 0 P0, 8 P1+ carry-forward) Audit: HEALTHY (reconstruction PASS, 8/8 REQ, 6/6 grill) ---ci--- project: praxis phase: 3 milestone: v0.4 status: complete phase_role: final milestone_complete: true milestone_merged_to_main: true tag: v0.1.9 requirements: covered: [REQ-MT-01, REQ-MT-02, REQ-AUTH-01, REQ-DASH-01, REQ-NFR-AUTH-01, REQ-NFR-MT-01, REQ-NFR-DASH-01, REQ-NFR-DASH-02] partial: [] ---/ci---
9.4 KiB
Praxis — Roadmap
Milestone: v0.4 (Operator tier — cohort dashboard, auth, Postgres) — active Status: phase 3 — final review (active milestone); P0-P2 complete (v0.1.6/v0.1.7/v0.1.8 tagged) Previous milestone: v0.3 (Mastery scoring + competency rubrics + verifiable credentials) — complete, tagged v0.1.5, release #380, merged to main
Milestone Philosophy
v0.4 activates the operator tier deferred from v0.3 per the grill's binding verdict (GRILL-v0.3.md Axis 2 — the operator tier was originally v0.8 on this roadmap; pulling it into v0.3 created a 2-milestone program disguised as one). v0.4 layers the operator surface on top of the v0.3 mastery/VC/scenario work: a Postgres store in the existing LXC CT, operator auth (argon2id session cookies), a cohort aggregation pipeline (k-anonymity ≥ 10, 7-day windows), and a React cohort dashboard served by the same FastAPI server. The learner-facing surface carries forward unchanged (SQLite, voice loop, mastery gates, VC issuance). The VC issuer key store migrates from SQLite to operator-tier Postgres + secrets (D-042).
v0.4 Phases
Phase 0 — Pre-Execution (complete — tagged v0.1.6, release created)
Branch: phase/00-pre-execution → merged to milestone/v0.4-operator-tier
Ship target: v0.1.6 (patch release on v0.3's v0.1.x line — NFR/docs milestone type)
Status: complete (v0.1.6 tagged, Gitea release created)
Pipeline stages: SPECIFY → CLARIFY → RESEARCH → PLAN → GRILL → SHIP
Goal: Produce all .ciagent/ planning artifacts for v0.4: activated requirements (REQ-MT-01/02, REQ-AUTH-01, REQ-DASH-01 + 4 NFRs), research-grounded Postgres-in-LXC + k-anonymity + argon2id + React-dashboard architecture, persona roster (frontend-engineer + data-engineer reactivated, security-engineer retained), vertical-slice plan for P1/P2.
Deliverables:
- PROJECT.md (v0.4 scope validated; operator tier activated)
- REQUIREMENTS.md (v0.4 active REQ-IDs = 8; v0.3 marked complete)
- ARCHITECTURE.md (operator Postgres + auth + cohort dashboard + aggregation pipeline added to v0.3 topology)
- PERSONAS.md (v0.4 roster — frontend-engineer + data-engineer reactivated for dashboard + Postgres; security-engineer retained for auth/crypto; devops-engineer for Postgres-in-LXC)
- GRILL-v0.4.md (adversarial review — auth + PII surface warrants grill)
- Phase 1 + Phase 2 plans (vertical slices with wave ordering)
Phase 1 — Operator Foundation (Postgres + Auth) (complete — tagged v0.1.7, release created)
Branch: phase/01-operator-foundation → merged to milestone/v0.4-operator-tier
Ship target: v0.1.7 (patch release, feature milestone type)
Status: complete (v0.1.7 tagged, Gitea release created; 272 pass, 33 skip, 0 fail; 5/5 REQ covered; APPROVE_WITH_NOTES, 4 P1+ flagged)
Goal: Operator-tier Postgres 16 running as a second Docker service in the existing LXC CT (internal network only), operator auth (argon2id session cookies, single operator role, login rate-limited), VC issuer key store migrated to Postgres + secrets. Foundation for the cohort dashboard in P2. No UI yet — API + DB + auth only.
Phase 2 — Cohort Dashboard + Aggregation (complete — tagged v0.1.8, release created)
Branch: phase/02-cohort-dashboard → merged to milestone/v0.4-operator-tier
Ship target: v0.1.8 (patch release, feature milestone type)
Status: complete (v0.1.8 tagged, Gitea release created; 317 pass, 36 skip, 0 fail; 4/4 REQ covered; APPROVE_WITH_NOTES, 4 P1+ flagged)
Goal: Cohort aggregation pipeline (on-session-end hook + nightly reconciliation, k-anonymity ≥ 10, 7-day windows) + React cohort dashboard under /operator/* (served by same FastAPI, reuses v0.2 StaticFiles) + /api/operator/* endpoints (auth-gated). Dashboard shows anonymized practice/mastery/failure-pattern views with cells < 10 learners suppressed.
Final Phase (P3) — Review + Ship (planned)
Branch: phase/03-final-review-ship → merged to milestone/v0.4-operator-tier → merged to main
Ship target: final patch = v0.4 milestone release
Status: planned
Goal: Multi-persona code review, project audit, milestone merge to main, milestone release.
v0.3 Milestone (complete — released as v0.1.5, reference)
Phase 0 — Pre-Execution (complete — tagged v0.1.3, release #378)
Branch: phase/00-pre-execution → merged to milestone/v0.3-mastery-scoring
Ship target: v0.1.3 (patch release, NFR milestone type — docs/planning only)
Status: complete (v0.1.3 tagged, Gitea release #378 created)
Pipeline stages: SPECIFY → CLARIFY → RESEARCH → PLAN → GRILL → SHIP
Goal: Produce all .ciagent/ planning artifacts for v0.3: activated requirements (REQ-MAST-01/02/03, REQ-SCEN-02/03/04, REQ-PATH-02 + 6 NFRs), research-grounded rubric/VC/IRT/architecture, persona roster, vertical-slice plan for P1. Operator tier (REQ-DASH-01, REQ-AUTH-01, REQ-MT-01/02 + 4 NFRs) deferred to v0.4 per grill.
Deliverables:
- PROJECT.md (v0.3 scope validated, D-031..D-049 recorded; operator tier deferred)
- REQUIREMENTS.md (v0.3 active REQ-IDs = 13; 8 deferred to v0.4)
- ARCHITECTURE.md (mastery engine + VC issuer + IRT added to v0.2 topology; operator-tier Postgres deferred to v0.4)
- PERSONAS.md (v0.3 roster — security-engineer added for VC crypto; frontend + devops deactivated)
- GRILL-v0.3.md (4 MUST conditions resolved, 5 FIX tracked)
- Phase 1 plan (9 slices, 5 waves, ~40 tasks, 13/13 REQ coverage)
Phase 1 — Mastery Core + VC Issuance (complete — tagged v0.1.4, release #379)
Branch: phase/01-mastery-core → merged to milestone/v0.3-mastery-scoring
Ship target: v0.1.4 (patch release, feature milestone type)
Status: complete (v0.1.4 tagged, Gitea release #379 created; 13/13 REQ covered, 4/4 grill MUSTs satisfied)
Goal: Competency rubric engine + Mastery Score computation + scenario library (≥6 CS scenarios) + dynamic difficulty (IRT) + Customer Service path (6 weeks) + verifiable-credential issuer (W3C VC 2.0, Ed25519, SQLite-backed, formative-tier, public verification). All learner-facing. 9 slices, 5 waves, ~40 tasks.
Final Phase (P2) — Review + Ship (complete — tagged v0.1.5, release #380, merged to main)
Branch: phase/02-final-review-ship → merged to milestone/v0.3-mastery-scoring → merged to main
Ship target: final patch = v0.3 milestone release
Status: complete (v0.1.5 tagged, Gitea release #380 created, merged to main; review APPROVE_WITH_NOTES, audit HEALTHY)
Goal: Multi-persona code review, project audit, milestone merge to main, milestone release.
v0.2 Milestone (complete — reference)
Phase 0 — Pre-Execution (complete — tagged v0.1.0, release #371)
Branch: phase/00-pre-execution → merged to milestone/v0.2-lxc-deploy
Ship target: v0.1.0 (patch release, NFR milestone type — docs/planning only)
Status: complete (v0.1.0 tagged, Gitea release #371 created)
Pipeline stages: SPECIFY → CLARIFY → RESEARCH → PLAN → GRILL
Goal: Produce all .ciagent/ planning artifacts for v0.2: validated requirements (REQ-DEPLOY-01..16), research-grounded Docker-in-LXC architecture, persona-assigned vertical-slice plans for Phase 1.
Deliverables:
- PROJECT.md (v0.2 scope validated)
- REQUIREMENTS.md (16 REQ-DEPLOY IDs + 4 NFR-DEPLOY IDs)
- ARCHITECTURE.md (deployment topology: Docker-in-LXC, image distribution, secret injection)
- PERSONAS.md (updated roster for deploy-heavy milestone)
- Phase 1 plan (vertical slices with wave ordering)
Phase 1 — LXC Deploy Implementation (complete — tagged v0.1.1, release #374)
Branch: phase/01-lxc-deploy → merged to milestone/v0.2-lxc-deploy
Ship target: v0.1.1 (patch release, feature milestone type)
Status: complete (v0.1.1 tagged, Gitea release #374 created; 121 bats + 77 pytest passing; 18/20 REQ covered, 2 deferred live-E2E)
Goal: A working lxc-deploy.sh orchestrator that clones a Debian template from the Proxmox cluster, configures the CT with Docker + nesting, builds/loads the praxis Docker image on first boot, starts the service via systemd, and health-checks /health :8789 — all idempotent with rollback on failure.
Final Phase (P2) — Review + Ship (complete — tagged v0.1.2, release #377, merged to main)
Branch: phase/02-final-review-ship → merged to milestone/v0.2-lxc-deploy → merged to main
Ship target: final patch = v0.2 milestone release
Status: complete (v0.1.2 tagged, Gitea release #377 created, merged to main)
Goal: Multi-persona code review, project audit, milestone merge to main, milestone release.
v0.1 Milestone (complete — reference)
v0.1 was the foundation milestone — minimal viable voice loop (one persona, one scenario, ASR+TTS+LLM round-trip, single learner state). Shipped as v0.0.0 (phase 0) → v0.0.1 (phase 1) → v0.0.2 (final/milestone release).
Future Milestones (post-v0.4, indicative)
| Milestone | Scope (indicative) |
|---|---|
| v0.5 | Live Assist on-the-job companion |
| v0.6 | Low-bandwidth surfaces (WhatsApp, offline cache) |
| v0.7 | Multi-language (French-Canadian, then PRD's 10-language list) |
| v0.8 | Full operator-suite dashboard (REQ-DASH-02 — beyond v0.4's foundational cohort view) |
| v0.9 | Credentialing (third-party verifiable, shareable) |
| v1.0 | Working, tested product — multiple paths, multi-market, production-ready |
These are indicative and will be refined by ci-roadmapper at the start of each milestone.