Files
nextcraft/.ciagent/PERSONAS.md
T
CIAgent 88a1dab810 docs(milestone): complete v0.2-ai-tutor-architecture
---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).
2026-09-11 17:34:50 +00:00

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.