---ci--- phase: 0 milestone: v0.1 status: complete requirements: covered: [REQ-VOICE-01, REQ-VOICE-02, REQ-VOICE-03, REQ-VOICE-04, REQ-SCEN-01, REQ-STATE-01, REQ-LLM-01, REQ-LLM-02, REQ-DEBRIEF-01, REQ-ORCH-01, REQ-ORCH-02, REQ-SCEN-FMT-01, REQ-NFR-LAT-01, REQ-NFR-SAFE-01, REQ-NFR-COST-01] partial: [] ---/ci---
5.5 KiB
Praxis — Persona Assessment
Generated: Phase 0 RESEARCH stage Project: Praxis (v0.1 foundation) Source: Research findings (
.ciagent/RESEARCH.md) + config.json personas
Persona Roster
Active personas (4)
---
name: lead-developer
active: true
phase_specific: false
reason: Coordinates task decomposition across the voice-loop pipeline; resolves conflicts between backend/frontend/data personas. Required for every milestone.
domain: coordination
frameworks: [pipecat, react]
constraints: [pragmatic, latency-budget-aware (<600ms), voice-first-architecture]
territory: []
---
---
name: backend-engineer
active: true
phase_specific: false
reason: Owns the Pipecat server, Ollama Cloud direct API integration, Deepgram ASR service, guardrail layer, and scenario runtime (Pipecat Flows + YAML→Pydantic). Core of the v0.1 voice loop.
domain: backend
frameworks: [pipecat, pydantic, ollama, deepgram, cartesia, piper, sqlite]
constraints: [api-first, type-safe, latency-budget-aware, streaming-first, pluggable-interfaces-for-swap]
territory:
- "**/server/**"
- "**/pipecat/**"
- "**/services/**"
- "**/scenarios/**"
- "**/guardrails/**"
- "**/db/**"
- "**/llm/**"
- "**/asr/**"
- "**/tts/**"
---
---
name: frontend-engineer
active: true
phase_specific: false
reason: Owns the React + WebRTC client via Pipecat client SDK — audio capture/playback, interruptibility UI, session display, debrief rendering. Voice-first UI constraints differ from typical web frontend.
domain: frontend
frameworks: [react, pipecat-client-sdk, webrtc]
constraints: [component-first, voice-first-ui, minimal-client-javascript, webRTC-audio-pipeline]
territory:
- "**/client/**"
- "**/ui/**"
- "**/components/**"
- "**/web/**"
---
---
name: data-engineer
active: true
phase_specific: false
reason: Owns SQLite schema (praxis.db), session-log migrations, scenario YAML→Pydantic schema definitions, and learner-state access layer. v0.1 data surface is small but schema-first discipline is still required.
domain: data
frameworks: [sqlite, pydantic, pydantic-ai]
constraints: [schema-first, type-safe, migration-driven, single-learner-no-auth]
territory:
- "**/migrations/**"
- "**/schema/**"
- "**/models/**"
- "**/db/**"
- "**/scenarios/*.yaml"
---
Deactivated personas (0)
No default personas are deactivated for v0.1. All four default personas have relevant territory.
Custom personas (proposed for later milestones — NOT v0.1)
---
name: voice-engineer
active: false
phase_specific: false
reason: PROPOSED for v0.2+ when latency tuning, accent modeling, and multi-voice personas become central. v0.1 uses Pipecat's built-in voice pipeline (Silero VAD + Deepgram + Cartesia/Piper), so a dedicated voice-engineer is not warranted yet.
domain: voice
frameworks: [webrtc, silero-vad, audio-codecs]
constraints: [sub-600ms-latency, accent-robustness, audio-quality-vs-latency-tradeoff]
territory: []
---
---
name: ml-engineer
active: false
phase_specific: false
reason: PROPOSED for v0.3+ when fine-tuning Ollama models on Canadian English / role-play data becomes relevant. v0.1 uses off-the-shelf cloud models — no ML training in scope.
domain: ml
frameworks: [ollama, pytorch, axolotl]
constraints: [open-weights, cost-bounded-fine-tuning]
territory: []
---
Framework Alignment (overrides from config.json defaults)
The default config.json personas had empty frameworks[]. Research identified the actual v0.1 stack, so frameworks are now populated above:
| Persona | Frameworks (research-aligned) |
|---|---|
| lead-developer | pipecat, react |
| backend-engineer | pipecat, pydantic, ollama, deepgram, cartesia, piper, sqlite |
| frontend-engineer | react, pipecat-client-sdk, webrtc |
| data-engineer | sqlite, pydantic, pydantic-ai |
Territory Alignment
Default config.json territory globs were generic (**/server/**, **/client/**, etc.). Research refined them to match the v0.1 Pipecat-based architecture — see territory: fields above. Notable additions:
- backend-engineer now owns
**/pipecat/**,**/scenarios/**,**/guardrails/**,**/llm/**,**/asr/**,**/tts/**(voice-loop service boundaries) - data-engineer now owns
**/scenarios/*.yaml(scenario schema authorship)
Constraint Alignment
Default config.json constraints were generic. Research added project-specific constraints:
- All personas:
latency-budget-aware (<600ms)— the binding v0.1 NFR - backend-engineer:
streaming-first,pluggable-interfaces-for-swap(D-014/D-019/D-020 require swappable TTS/LLM/guardrail layers) - frontend-engineer:
voice-first-ui,webRTC-audio-pipeline,minimal-client-javascript - data-engineer:
single-learner-no-auth(D-007)
Phase-Specific Personas
None for v0.1. No personas are created for a specific phase and removed after — the four active personas span the whole milestone. The proposed voice-engineer and ml-engineer are for later milestones, not phase-specific.
Notes for EXECUTE stage
- Territory enforcement mode:
warn(per config.jsonpersonas.territory_enforcement) - The backend-engineer owns the majority of v0.1 task surface (Pipecat server + all service integrations)
- The frontend-engineer's surface is smaller but has the R2/R4 latency risk (WebRTC audio pipeline + TTS playback)
- The data-engineer's surface is the smallest (one SQLite schema + one YAML scenario) but is on the critical path (scenario definition blocks scenario runtime)