fbd6602814
---ci--- phase: 0 milestone: v0.1 status: complete ---/ci---
147 lines
5.5 KiB
Markdown
147 lines
5.5 KiB
Markdown
# 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)
|
|
|
|
```yaml
|
|
---
|
|
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: []
|
|
---
|
|
```
|
|
|
|
```yaml
|
|
---
|
|
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/**"
|
|
---
|
|
```
|
|
|
|
```yaml
|
|
---
|
|
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/**"
|
|
---
|
|
```
|
|
|
|
```yaml
|
|
---
|
|
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)
|
|
|
|
```yaml
|
|
---
|
|
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: []
|
|
---
|
|
```
|
|
|
|
```yaml
|
|
---
|
|
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.json `personas.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) |