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).
169 lines
5.3 KiB
Markdown
169 lines
5.3 KiB
Markdown
# Nextcraft — PERSONAS.md
|
|
|
|
## Persona Roster
|
|
|
|
### lead-developer
|
|
```yaml
|
|
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
|
|
```yaml
|
|
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
|
|
```yaml
|
|
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
|
|
```yaml
|
|
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
|
|
```yaml
|
|
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
|
|
```yaml
|
|
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
|
|
```yaml
|
|
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. | |