88a1dab810
---ci--- phase: 7 milestone: v0.2 status: complete requirements: covered: [REQ-2-001, REQ-2-002, REQ-2-003, REQ-2-004, REQ-2-005, REQ-2-006, REQ-2-007, REQ-2-008, REQ-2-009, REQ-2-010, REQ-2-011, REQ-2-012] partial: [] ---/ci--- Milestone v0.2 (ai-tutor-architecture) merged to main. Escalation record (audit remediation, durable): P1 executor delegation failed twice (empty subagent results, zero files created); auto-resolved at full autonomy to inline execution with identical plan fidelity (commit 3271373, reflog-only after phase branch squash-delete).
5.3 KiB
5.3 KiB
Nextcraft — PERSONAS.md
Persona Roster
lead-developer
active: true
phase_specific: false
reason: Coordinates task decomposition across web, AI service, and data territories; resolves conflicts between frontend, backend, and AI personas
domain: coordination
frameworks:
- next.js
- turborepo
- pnpm
- fastapi
constraints:
- pragmatic
- battle-tested defaults
- monorepo-architecture
territory:
- "**/package.json"
- "**/turbo.json"
- "**/pnpm-workspace.yaml"
- "**/tsconfig.json"
- "apps/ai-service/pyproject.toml"
frontend-engineer
active: true
phase_specific: false
reason: Phase 6 learner-surface integration — useChatStream hook, agent switcher, streaming/error/loading states, Lab/Assessor/Proctor output panels. Owns all page components, layouts, and surface-specific UI.
domain: frontend
frameworks:
- react
- next.js
- tailwindcss
- lucide-react
- recharts
- react-flow
constraints:
- component-first
- server-components-default
- minimal-client-js
- sse-client-buffering (buffer bytes, split frames on \n\n, join data: lines)
- abortcontroller-cleanup (idempotent abort in effect cleanup)
- responsive-all-breakpoints
- dark-mode-support
territory:
- "apps/web/**"
- "packages/ui/**"
- "packages/mock-data/**"
- "packages/types/**"
data-engineer
active: true
phase_specific: false
reason: Owns TS mock data layer schema and typed definitions. Does NOT own the Python corpus (that is ai-engineer territory) — the two are aligned by documented convention (D-021).
domain: data
frameworks:
- typescript
constraints:
- schema-first
- type-safe
- migration-ready
- mock-data-only
territory:
- "packages/types/**"
- "packages/mock-data/**"
backend-engineer
active: true
phase_specific: false
reason: Reactivated for v0.2 — owns apps/ai-service infrastructure: FastAPI app, settings, SSE plumbing, endpoints, monorepo/turbo integration, test harness.
domain: backend
frameworks:
- fastapi
- uvicorn
- pydantic
- httpx
- pytest
constraints:
- provider-agnostic-boundaries (llm/ imports nothing from agents/ or api/)
- streaming-first
- no-database-v0.2
- secrets-via-env-only
- mock-provider-in-tests
territory:
- "apps/ai-service/ai_service/main.py"
- "apps/ai-service/ai_service/config.py"
- "apps/ai-service/ai_service/api/**"
- "apps/ai-service/scripts/**"
- "apps/ai-service/package.json"
- "apps/ai-service/tests/api/**"
- "turbo.json"
ai-engineer
active: true
phase_specific: false
reason: Custom persona for v0.2 — owns the LLM provider layer, agent framework, prompt library, structured outputs, and mock corpora for the six tutor agents.
domain: ai
frameworks:
- pydantic
- httpx
- pytest
constraints:
- provider-agnostic-protocol
- prompts-are-code
- json-defensive-parsing
- never-call-cloud-in-tests
- delta-passthrough
territory:
- "apps/ai-service/ai_service/llm/**"
- "apps/ai-service/ai_service/agents/**"
- "apps/ai-service/ai_service/prompts/**"
- "apps/ai-service/ai_service/corpus/**"
- "apps/ai-service/tests/llm/**"
- "apps/ai-service/tests/agents/**"
design-system-engineer
active: true
phase_specific: false
reason: Owns the shared component library, design tokens, and visual consistency. Light duty in v0.2: Phase 6 may need new primitives (agent-switcher control, stream-status indicator, error toast variant).
domain: frontend
frameworks:
- tailwindcss
- storybook
- lucide-react
constraints:
- design-token-driven
- wcag-aa-contrast
- dark-mode-required
- consistent-across-surfaces
territory:
- "packages/ui/**"
security-auditor
active: false
phase_specific: false
reason: No auth in v0.2 (A-008); CORS is localhost-only; no real user data. Security review handled by verifier's STRIDE analysis layer plus a Phase 7 checklist item: secrets hygiene (key absent from code/logs/commits/errors), localhost-only CORS, no PII in prompts.
domain: security
frameworks: []
constraints: []
territory: []
Phase-Specific Personas
None for v0.2. All active personas span the entire milestone. data-engineer and design-system-engineer are light-touch after Phase 1.
Territory Conflict Resolution
| Conflict | Resolution |
|---|---|
| frontend-engineer vs data-engineer (packages/types, packages/mock-data) | data-engineer owns type definitions and mock data schema; frontend-engineer consumes them. If changes needed, data-engineer updates types first. |
| frontend-engineer vs design-system-engineer (packages/ui) | design-system-engineer owns design tokens and primitive components; frontend-engineer owns composite components and page-level UI. |
| ai-engineer vs data-engineer (mock data duplication) | ai-engineer owns ai_service/corpus/ (Python); data-engineer owns packages/mock-data (TS). Shared entity IDs and shapes kept aligned by documented convention (D-021): cross-referencing file headers, identical comp-* ID strings. |
| backend-engineer vs ai-engineer (apps/ai-service) | backend-engineer owns app shell, config, API endpoints, scripts, and test harness; ai-engineer owns llm/, agents/, prompts/, corpus/. Boundary: ai_service/api/ (backend) composes ai_service/agents/ (AI) via DI — agents never import api/. |
| lead-developer vs any | lead-developer coordinates only, does not directly modify code files. |