# 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. |