Commit Graph

27 Commits

Author SHA1 Message Date
Praxis CI 6ada2560ba chore(P01): TASK-01-02 add asyncpg, argon2-cffi, slowapi deps
The three v0.4 pip dependencies (RESEARCH-v0.4 §new-deps):
asyncpg>=0.29 (Postgres driver, D-050), argon2-cffi>=23.1 (password
hashing, D-041), slowapi>=0.1 (rate limiting, D-041).

---ci---
project: praxis
phase: 1
milestone: v0.4
status: execute
persona: lead-developer
task: 01-02
requirements:
  covered: [REQ-MT-01, REQ-AUTH-01, REQ-NFR-AUTH-01]
---/ci---
2026-08-04 00:46:09 +00:00
Praxis CI 745dd88dfb feat(P01): TASK-01-01 docker-compose Postgres service + praxis-net
Add postgres:16-slim service with pgdata/pgbackups volumes, pg_isready
healthcheck, praxis-net bridge network (no published ports — D-040).
The praxis service now depends_on postgres healthy and joins praxis-net.
All existing v0.2 env vars + volumes preserved; v0.4 operator env vars
wired through (PRAXIS_PG_DSN, PRAXIS_COOKIE_SECRET, PRAXIS_COOKIE_SECURE).

---ci---
project: praxis
phase: 1
milestone: v0.4
status: execute
persona: lead-developer
task: 01-01
requirements:
  covered: [REQ-MT-01, REQ-NFR-MT-01]
---/ci---
2026-08-04 00:45:35 +00:00
Praxis CI acbe8692ae docs(ship): phase 0 complete — v0.1.6 tagged, release created
---ci---
project: praxis
phase: 0
milestone: v0.4
status: complete
tag: v0.1.6
release: https://git.cloudinit.dev/coreci/praxis/releases/tag/v0.1.6
---/ci---
2026-08-04 00:40:39 +00:00
Praxis CI 6ab40c6f25 docs(milestone): merge phase/00 pre-execution → milestone/v0.4-operator-tier
Phase 0 complete — v0.4 operator tier pre-execution artifacts:
- PROJECT.md (v0.4 scope validated, D-050..D-057)
- REQUIREMENTS.md (8 active REQs: REQ-MT-01/02, REQ-AUTH-01, REQ-DASH-01 + 4 NFRs)
- ARCHITECTURE.md (operator Postgres + auth + dashboard + aggregation + VC migration)
- PERSONAS.md (6 active personas — frontend + devops reactivated)
- RESEARCH-v0.4-operator-tier.md (7 domains, 20 risks, confidence 0.70-0.95)
- PLAN-v0.4-operator-tier.md (2 execution phases, 10 slices, 52 tasks, 8/8 REQ)
- GRILL-v0.4.md (proceed-with-conditions, 6 MUST binding decisions)

---ci---
project: praxis
phase: 0
milestone: v0.4
status: complete
requirements:
  covered: []
  partial: []
---/ci---
v0.1.6
2026-08-04 00:39:53 +00:00
Praxis CI d0f37e151e docs(milestone): complete v0.3-mastery-scoring — v0.1.5 tagged, release #380, merged to main
v0.3 milestone complete. Merged to main, tagged v0.1.5, release #380.
13/13 REQ-IDs covered, 8 deferred to v0.4 (operator tier).
Next milestone: v0.4 (cohort dashboard + auth + Postgres).

---ci---
project: praxis
phase: 2
milestone: v0.3
status: complete
milestone_complete: true
milestone_merged_to_main: true
---/ci---
2026-08-04 00:15:41 +00:00
Praxis CI 813bd586d6 docs(milestone): merge v0.3-mastery-scoring → main
v0.3 milestone merged to main. Mastery scoring + competency rubrics +
verifiable credentials (formative-tier) shipped. 13/13 REQ-IDs covered.
Next milestone: v0.4 (operator tier — cohort dashboard + auth + Postgres).

---ci---
project: praxis
phase: 2
milestone: v0.3
status: complete
milestone_complete: true
milestone_merged_to_main: true
---/ci---
v0.1.5
2026-08-04 00:14:59 +00:00
Praxis CI bea2af13d4 docs(milestone): complete v0.2-lxc-deploy
v0.2 milestone complete. Merged to main, tagged v0.1.2, release #377.
19/20 REQ-IDs covered, 1 deferred (live first-boot timing).
Next milestone: v0.3 (mastery scoring).

---ci---
project: praxis
phase: 2
milestone: v0.2
status: complete
milestone_complete: true
requirements:
  covered: [REQ-DEPLOY-01..16, REQ-NFR-DEPLOY-01,02,04]
  deferred: [REQ-NFR-DEPLOY-03]
---/ci---
2026-08-03 18:55:23 +00:00
Praxis CI 943c61ecfb docs(milestone): merge v0.2-lxc-deploy → main
v0.2 milestone complete: Proxmox LXC deployment infrastructure.

Phases:
  P0 (pre-execution):  SPECIFY→CLARIFY→RESEARCH→PLAN→GRILL → v0.1.0
  P1 (lxc-deploy):     10 slices, 4 waves, 34 tasks         → v0.1.1
  P2 (final-review):   REVIEW + AUDIT                        → v0.1.2

Requirements: 19/20 covered, 1 deferred (live first-boot timing)
Tests: 121 bats + 73 pytest passing
Docker: multi-stage build succeeds, compose valid

---ci---
project: praxis
phase: 2
milestone: v0.2
status: complete
milestone_merge: true
---/ci---
v0.1.2
2026-08-03 18:54:53 +00:00
Praxis CI c4cc11a2ff docs(milestone): merge phase/02 final-review-ship → milestone/v0.2-lxc-deploy
Final phase complete: REVIEW (APPROVE_WITH_NOTES) + AUDIT (HEALTHY)
v0.2 milestone ready for release.

---ci---
project: praxis
phase: 2
milestone: v0.2
status: complete
requirements:
  covered: [REQ-DEPLOY-01, REQ-DEPLOY-02, REQ-DEPLOY-03, REQ-DEPLOY-04, REQ-DEPLOY-05, REQ-DEPLOY-06, REQ-DEPLOY-07, REQ-DEPLOY-08, REQ-DEPLOY-09, REQ-DEPLOY-10, REQ-DEPLOY-11, REQ-DEPLOY-12, REQ-DEPLOY-13, REQ-DEPLOY-14, REQ-DEPLOY-15, REQ-DEPLOY-16, REQ-NFR-DEPLOY-01, REQ-NFR-DEPLOY-02, REQ-NFR-DEPLOY-04]
  deferred: [REQ-NFR-DEPLOY-03]
---/ci---
2026-08-03 18:54:47 +00:00
Praxis CI 1b3617da3b docs(P02): review + audit — APPROVE_WITH_NOTES, HEALTHY, 2 P0 fixed
REVIEW.md: 2 P0 fixed (stale test defaults, sandbox isolation),
  8 P1+ flagged for post-hoc review. Verdict: APPROVE_WITH_NOTES.
AUDIT.md: 0 critical, 5 warnings. Reconstruction PASS, file
  discipline PASS, branch hygiene PASS, commit discipline PASS.
  Verdict: HEALTHY. Doc-drift fixed (REQ statuses → complete).

P0 fixes in working tree:
  1. lxc-config.bats: aligned stale defaults with production code
  2. lxc-deploy.bats: fixed sandbox isolation (HOME redirect)

---ci---
project: praxis
phase: 2
milestone: v0.2
status: review
---/ci---
2026-08-03 18:54:38 +00:00
Praxis CI 3262bfd946 docs(ship): phase 1 complete — v0.1.1 tagged, release #374 created
---ci---
project: praxis
phase: 1
milestone: v0.2
status: complete
release:
  status: created
  url: https://git.cloudinit.dev/coreci/praxis/releases/tag/v0.1.1
---/ci---
2026-08-03 18:38:19 +00:00
Praxis CI 8974d90a58 feat(milestone): merge phase/01 lxc-deploy → milestone/v0.2-lxc-deploy
Phase 1 complete: 10 slices, 4 waves, 34 tasks, 20 REQ-IDs
Verify: APPROVE_WITH_NOTES (4 P0 fixed, 8 P1+ noted)
Tests: 121 bats + 77 pytest passing, docker build succeeds

---ci---
project: praxis
phase: 1
milestone: v0.2
status: complete
---/ci---
v0.1.1
2026-08-03 18:37:57 +00:00
Praxis CI 6cf63cb064 docs(P01): verify — APPROVE_WITH_NOTES, 4 P0 fixed, 18/20 REQ covered
Verification layers:
  Structural: PASS (all scripts executable, syntax clean, Dockerfile valid)
  Behavioral: PASS (121 bats, 77 pytest, docker build succeeds, compose valid)
  Security: PASS (no secrets committed, .dockerignore excludes .env*, env_file pattern)
  Quality: PASS (coreci patterns followed, no coreci refs, G-104/G-105/G-106 verified)

P0 issues found and auto-fixed:
  1. docker-compose.yml: removed invalid restart_policy key, fixed env_file syntax
  2. pyproject.toml: added fastapi + uvicorn deps (v0.1 gap exposed by Dockerfile)
  3. timing.sh: renamed coreci_deploy_timing → praxis_deploy_timing (TASK-03-07)
  4. firstboot-hook.sh: fixed idempotency check (/opt/praxis/.git not /usr/local/bin/praxis-deploy)

P1+ issues: 8 (1 fixed: lxc-config.sh default alignment, 7 noted for post-hoc review)
REQ coverage: 18/20 covered, 2 deferred (live first-boot timing + live E2E require cluster)
Must-haves: 25/28 pass, 2 partial (comment-only diffs, no Makefile), 1 deferred

---ci---
project: praxis
phase: 1
milestone: v0.2
status: verify
---/ci---
2026-08-03 18:37:45 +00:00
Praxis CI 93d33ecb0c feat(P01): SLICE-08+09+10 — secret wiring, bats tests (121), e2e verification
SLICE-08 (devops-engineer): .env.example updated with Proxmox deployment
  vars (documented, sourced from ~/coreci/.env.secrets per D-026),
  PRAXIS_CLIENT_DIST for StaticFiles, PRAXIS_SCENARIO. config.json
  secrets.scopes already extended in SPECIFY (proxmox + voice scopes).
SLICE-09 (devops-engineer): 10 bats test files (G-106 fix: 10 not 9)
  covering all proxmox scripts — 121 tests, 114 pass + 7 skipped (e2e).
  Mocked curl/pct/ssh; no live cluster needed for unit tests.
SLICE-10 (devops-engineer): e2e-deploy.sh — sources secrets from both
  coreci + praxis .env.secrets, runs full deploy, verifies /health +
  client HTML serving. REQ-DEPLOY-15 covered.

All 6 grill binding decisions addressed:
  G-101 MUST: GITEA_TOKEN baked into snippet (stage-snippet.sh)
  G-102 MUST: PRAXIS_DB_PATH env read (db/store.py + db/migrate.py)
  G-103 FIX:  all 16 env vars in injection list (install-service.sh)
  G-104 FIX:  health-check timeout 600s (health-check.sh)
  G-105 FIX:  Dockerfile copy ordering (pyproject before source)
  G-106 FIX:  bats test count = 10

REQ-DEPLOY-12, 14, 15 covered. All 20 REQ-IDs now implemented.

---ci---
project: praxis
phase: 1
milestone: v0.2
status: execute
slice: 08-10
wave: 4
---/ci---
2026-08-03 18:17:40 +00:00
Praxis CI d32e4d487e feat(P01): SLICE-05+06+07 — firstboot hook, install-service, deploy orchestrator
SLICE-05 (devops-engineer): firstboot-hook.sh — installs Docker inside CT
  (apt: docker.io, docker-compose-v2, git, curl), clones praxis repo from
  Gitea (GITEA_TOKEN baked into snippet per G-101 fix), runs install-service.sh
SLICE-06 (devops-engineer): install-service.sh — creates praxis user, writes
  /etc/praxis/server.env from lxc.environment vars (G-103: all 16 env vars),
  installs praxis.service systemd unit (Type=simple, ExecStartPre=docker compose
  build, ExecStart=docker compose up, TimeoutStartSec=600 per RESEARCH Q8)
SLICE-07 (devops-engineer): lxc-deploy.sh orchestrator — stage snippet →
  clone → config → start → health-check, idempotent (--recreate/--reconfigure),
  rollback on failure, auto VMID allocation (D-027)

REQ-DEPLOY-06, 09, 10, 11 covered.

---ci---
project: praxis
phase: 1
milestone: v0.2
status: execute
slice: 05-07
wave: 3
---/ci---
2026-08-01 14:19:05 +00:00
Praxis CI bb17615f41 feat(P01): SLICE-03+04 — PVE API layer (8 scripts) + health-check
SLICE-03 (devops-engineer): ported from coreci/scripts/proxmox/:
  api.sh (verbatim), ct-exists.sh, lxc-clone.sh (4GB/16GB, hostname=praxis),
  lxc-config.sh (praxis env vars, praxis-firstboot.sh snippet), lxc-start.sh,
  stage-snippet.sh (G-101 FIX: bakes GITEA_TOKEN into snippet via sed),
  timing.sh (verbatim), rollback.sh (proxy code removed)
SLICE-04 (devops-engineer): health-check.sh adapted for /health:8789
  (G-104 FIX: timeout bumped 300s→600s for Docker build margin)

REQ-DEPLOY-03, 04, 05, 07, 08 covered.

---ci---
project: praxis
phase: 1
milestone: v0.2
status: execute
slice: 03-04
wave: 2
---/ci---
2026-08-01 14:18:23 +00:00
Praxis CI f04b9b3588 feat(P01): SLICE-01+02 — Dockerfile, .dockerignore, docker-compose.yml, FastAPI StaticFiles, PRAXIS_DB_PATH env (G-102 fix)
SLICE-01 (lead-developer): multi-stage Dockerfile (node:22-slim→python:3.12-slim),
  .dockerignore (excludes secrets/node_modules/.git), docker-compose.yml
  (port 8789, SQLite volume, env injection for all voice-service vars)
SLICE-02 (backend-engineer+data-engineer): FastAPI mounts client/dist as
  StaticFiles at / after API routes (D-023, REQ-DEPLOY-13).
  G-102 MUST fix: db/store.py + db/migrate.py now read PRAXIS_DB_PATH
  from env so the Docker volume mount persists SQLite data.
G-105 FIX: Dockerfile copies pyproject.toml before source (pip install
  layer cached, source changes don't invalidate).

REQ-DEPLOY-01, 02, 13, 16 covered.

---ci---
project: praxis
phase: 1
milestone: v0.2
status: execute
slice: 01-02
wave: 1
---/ci---
2026-08-01 14:16:39 +00:00
Praxis CI 98779b5a72 docs(ship): phase 0 complete — v0.1.0 tagged, release #371 created
---ci---
project: praxis
phase: 0
milestone: v0.2
status: complete
release:
  status: created
  url: https://git.cloudinit.dev/coreci/praxis/releases/tag/v0.1.0
---/ci---
2026-08-01 14:10:45 +00:00
Praxis CI 615721a8eb docs(milestone): merge phase/00 pre-execution → milestone/v0.2-lxc-deploy
Phase 0 complete: SPECIFY → CLARIFY → RESEARCH → PLAN → GRILL
20 REQ-IDs planned (16 functional + 4 NFR), 10 slices, 4 waves, 34 tasks
Grill: 2 MUST + 4 FIX binding decisions to address in EXECUTE

---ci---
project: praxis
phase: 0
milestone: v0.2
status: complete
---/ci---
v0.1.0
2026-08-01 14:10:21 +00:00
Praxis CI 2999c5163c docs(grill): adversarial review — 15 challenges, 2 MUST, 4 FIX, 7 ACCEPT
G-101 MUST: GITEA_TOKEN injection chain broken (hookscript on host, token in CT env)
  → Fix: bake token into snippet at staging time
G-102 MUST: PRAXIS_DB_PATH never read by server (db/store.py, db/migrate.py hardcode path)
  → Fix: add os.environ.get('PRAXIS_DB_PATH', 'praxis.db') in 2 files
G-103 FIX: 5 missing env vars in injection list (OLLAMA_CHAT_URL, CARTESIA_VOICE_ID, etc.)
G-104 FIX: health-check timeout 300s→600s (zero margin vs 5min build)
G-105 FIX: Dockerfile pip install runs before source copy (build fails)
G-106 FIX: bats test count 9→10 (MH-26 + Makefile)

Verdict: APPROVE_WITH_NOTES — plan sound with 6 fixes applied in EXECUTE

---ci---
project: praxis
phase: 0
milestone: v0.2
status: grill
---/ci---
2026-08-01 14:10:15 +00:00
Praxis CI 0df1ec391a docs(P00): create phase 1 plan — 10 slices, 4 waves, 34 tasks, 20/20 REQ coverage
PLAN.md: 998 lines (vertical-slice plan with wave ordering)
.gitignore: fix .env.example being ignored by .env.* pattern (D-038)

Wave 1: Dockerfile + docker-compose.yml + .dockerignore | FastAPI StaticFiles mount
Wave 2: PVE API layer (8 scripts) | health-check.sh
Wave 3: firstboot-hook.sh | install-service.sh + praxis.service | lxc-deploy.sh
Wave 4: secret wiring + .env.example | bats tests (11 files) | E2E verification

Persona load: devops-engineer 15 tasks, lead-developer 4, backend 4, data 2, frontend 0 (deactivated)

---ci---
project: praxis
phase: 0
milestone: v0.2
status: plan
---/ci---
2026-08-01 14:01:46 +00:00
Praxis CI 658bbc3000 docs(P00): research findings — Docker-in-LXC, 10 questions resolved (conf 0.80-0.95)
RESEARCH.md: 648 lines (10 research questions, topology, risks, reuse table)
ARCHITECTURE.md: +v0.2 deployment section (Docker-in-LXC, image build, secrets, sizing)
PERSONAS.md: 5 active personas (devops-engineer added, frontend-engineer deactivated)

Key findings:
- nesting=1 sufficient for Docker-in-LXC (conf 0.85)
- CT sizing: 4GB/16GB (build-inside-CT, conf 0.80)
- FastAPI StaticFiles at / after API routes, no SPA fallback (conf 0.95)
- Multi-stage: node:22-slim → python:3.12-slim, CMD python -m server (conf 0.90)
- Systemd: Type=simple, docker compose up (foreground), TimeoutStartSec=300 (conf 0.85)
- Health-check timeout bumped 180s→300s for Docker build (conf 0.90)

---ci---
project: praxis
phase: 0
milestone: v0.2
status: research
---/ci---
2026-08-01 13:55:54 +00:00
Praxis CI 9d54fbe365 docs(P00): clarify — 4 ambiguities auto-resolved (full autonomy)
D-027: VMID=auto (fresh allocation via pve_nextid)
D-028: Docker installed inside CT via apt (no PVE host Docker)
D-029: Image built inside CT (clone repo + docker build)
D-030: CT network=vmbr0 DHCP only (no proxy/TLS for pilot)

---ci---
project: praxis
phase: 0
milestone: v0.2
status: clarify
---/ci---
2026-08-01 13:51:53 +00:00
Praxis CI 70994e18ad docs(init): validate specification — v0.2 Proxmox LXC deployment
---ci---
project: praxis
phase: 0
milestone: v0.2
status: specify
---/ci---
2026-08-01 13:51:29 +00:00
Praxis CI 7fe52f34bc docs(milestone): v0.1 release created — Gitea release #369
---ci---
phase: 2
milestone: v0.1
status: complete
release:
  status: created
  url: https://git.cloudinit.dev/coreci/praxis/releases/tag/v0.0.2
---/ci---
2026-08-01 13:33:38 +00:00
Praxis CI fbd6602814 docs(milestone): complete v0.1 foundation
---ci---
phase: 0
milestone: v0.1
status: complete
---/ci---
v0.0.2
2026-08-01 13:32:48 +00:00
Praxis CI bcb0118034 chore: seed .gitignore for env secrets 2026-08-01 12:38:44 +00:00