The nextcraft bootstrap CLI ships: doctor/bootstrap/verify/dev commands, a one-liner install script with checksum + version integrity gates, and linux x64 SEA binaries published on every release going forward (v0.3.2 onward). Fresh-clone E2E proven; 34 CLI tests + full monorepo gates green. Escalation note: merge_to_main hook — proceeding per full autonomy + founder directive D-016 (streamlined install + bootstrap CLI + ongoing binaries, recorded at P0 SPECIFY). ---ci--- phase: 4 milestone: v0.4 status: complete requirements: covered: [REQ-4-001, REQ-4-002, REQ-4-003, REQ-4-004, REQ-4-005] partial: [] ---/ci---
7.4 KiB
Nextcraft — PERSONAS.md
Persona Roster
v0.4 update (RESEARCH, lead-developer assessment): milestone pivoted to Distribution & Bootstrap CLI (founder directive D-016). New custom persona cli-engineer (domain
cli) owns apps/cli end-to-end: doctor/bootstrap/verify/dev commands, checks, spawn wrappers, the SEA binary build, the one-liner install script, and the release-asset pipeline. backend-engineer retains the scripts/ + turbo/root-package integration surface. sandbox-engineer and voice-engineer deactivated (their v0.3 code is complete and untouched this milestone — reason fields below). ai-engineer light-touch (no model-facing work in v0.4). security-auditor re-activated (phase-specific) for the install pipeline: curl|bash attack surface, checksum trust, PATH writes, secrets handling in the release flow. frontend-engineer/design-system-engineer/data-engineer inactive (zero UI/data-scope tasks in v0.4 — retained below with reasons).
lead-developer
active: true
phase_specific: false
reason: Coordinates task decomposition across CLI, scripts, release-pipeline, and docs territories; resolves cli-engineer/backend-engineer boundary (scripts vs CLI)
domain: coordination
frameworks:
- next.js
- turborepo
- pnpm
- node
constraints:
- pragmatic
- battle-tested defaults
- monorepo-architecture
territory:
- "**/package.json"
- "**/turbo.json"
- "**/pnpm-workspace.yaml"
- "**/tsconfig.json"
- "apps/ai-service/pyproject.toml"
cli-engineer
active: true
phase_specific: false
reason: v0.4 custom persona (RESEARCH) — owns the distribution milestone core: nextcraft CLI (doctor/bootstrap/verify/dev), pure check logic, spawn wrappers with timeouts, Node SEA binary build (D-033), one-liner install.sh (D-035), checksum sidecar, and Gitea release-asset upload (D-036)
domain: cli
frameworks:
- node
- typescript
- node:test
- esbuild
- node-sea
- posix-sh
constraints:
- stdlib-only-runtime (no runtime npm deps; esbuild dev-only)
- thin-wrapper (never re-implement scripts/bootstrap.sh or dev.sh — compose via spawn, A-202/A-209)
- timeout-every-spawn (no unbounded subprocess)
- actionable-errors (every failed check tells the user how to fix it)
- graceful-degradation (install never hard-fails; source-bootstrap fallback, A-206)
- checksum-before-install (sha256 verify before chmod+install, A-207)
- secrets-never-in-cli (no key generation; .env.example -> .env copy only, A-210)
- fail-loud-exit-codes (0 ok / 1 failure / 2 usage)
territory:
- "apps/cli/**"
- "scripts/install.sh"
- "scripts/release-assets.sh"
backend-engineer
active: true
phase_specific: false
reason: Owns the script + monorepo integration surface the CLI composes: apps/ai-service/scripts/*, root package.json cli:* passthrough scripts, turbo task wiring (D-037/D-022). Python ai-service itself is untouched this milestone (v0.3 complete).
domain: backend
frameworks:
- fastapi
- bash
- turborepo
- pnpm
constraints:
- scripts-are-truth (bootstrap.sh/dev.sh stay the single source of bootstrap orchestration; CLI only wraps)
- idempotent-scripts (re-runnable without side effects)
- secrets-via-env-only (D-014; dev.sh exports from .ciagent/.env.secrets)
territory:
- "apps/ai-service/scripts/**"
- "apps/ai-service/package.json"
- "package.json"
- "turbo.json"
- ".gitignore"
security-auditor
active: true
phase_specific: true
reason: v0.4 re-activated (phase-specific) — the install pipeline is the first externally-consumed attack surface: curl|bash piping, latest-release resolution, checksum trust root, PATH writes to ~/.local/bin, download tempdir hygiene, release-asset upload token handling. No KYC/PII work (still v0.5).
domain: security
frameworks:
- posix-sh
- curl
- sha256sum
constraints:
- STRIDE-classified
- no-pipe-to-shell-without-checksum (download -> verify -> install order)
- tmpdir-safe (mktemp, no predictable paths, trap cleanup)
- token-never-echoed (release upload resolves .env* only, never logs)
territory:
- "scripts/install.sh"
- "scripts/release-assets.sh"
- "apps/cli/src/lib/spawn.ts"
ai-engineer
active: true
phase_specific: false
reason: Light-touch v0.4 — no model-facing work in the distribution milestone; retained to guard the CLI against touching agent/engine boundaries and to keep territory mappings accurate for v0.5 (voice real-path, seq-lease).
domain: ai
frameworks:
- pydantic
- httpx
- pytest
constraints:
- provider-agnostic-protocol
- never-call-cloud-in-tests
territory:
- "apps/ai-service/ai_service/llm/**"
- "apps/ai-service/ai_service/agents/**"
- "apps/ai-service/ai_service/prompts/**"
frontend-engineer
active: false
phase_specific: false
reason: v0.4 has zero UI-scope work (no web/pages/components changes planned in the distribution milestone); v0.3 surfaces are complete. Reactivated at v0.5 when deferred UX work resumes.
domain: frontend
frameworks:
- react
- next.js
- tailwindcss
constraints:
- component-first
- server-components-default
territory:
- "apps/web/**"
- "packages/ui/**"
design-system-engineer
active: false
phase_specific: false
reason: No design-token or primitive work in v0.4; roster retained for v0.5.
domain: frontend
frameworks:
- tailwindcss
- storybook
constraints:
- design-token-driven
- wcag-aa-contrast
territory:
- "packages/ui/**"
data-engineer
active: false
phase_specific: false
reason: No schema/mock-data work in v0.4; types packages untouched. Reactivated if CLI surfaces need shared types (not planned — CLI is self-contained).
domain: data
frameworks:
- typescript
constraints:
- schema-first
- type-safe
territory:
- "packages/types/**"
- "packages/mock-data/**"
sandbox-engineer
active: false
phase_specific: false
reason: v0.3 persona — sandbox fabric shipped complete (v0.2.x series); v0.4 touches no sandbox code. doctor only *checks* unshare availability; no sandbox logic changes. Reactivated at v0.5 (design/sim environments).
domain: infra
frameworks:
- python
- linux-namespaces
constraints: []
territory:
- "apps/ai-service/ai_service/sandbox/**"
voice-engineer
active: false
phase_specific: false
reason: v0.3 persona — voice defense shipped complete (mock-first, CUT-1); real server STT/TTS moved to v0.5 per D-016. No v0.4 voice work.
domain: ai-media
frameworks: []
constraints: []
territory:
- "apps/ai-service/ai_service/voice/**"
Phase-Specific Personas
| Persona | Phases | Removed After |
|---|---|---|
| security-auditor | 2 (primary: install pipeline), 3, 4 (final review) | milestone complete |
All other personas span the milestone. Deactivated personas receive no tasks.
Territory Conflict Resolution
| Conflict | Resolution |
|---|---|
| cli-engineer vs backend-engineer (scripts/) | backend-engineer owns apps/ai-service/scripts/** + root package.json/turbo.json wiring; cli-engineer owns apps/cli/** + top-level scripts/install.sh + scripts/release-assets.sh and consumes backend scripts via spawn — never edits them |
| cli-engineer vs security-auditor (install.sh) | cli-engineer implements; security-auditor reviews + may patch security defects directly in install.sh/spawn.ts (its territory) |
| lead-developer vs any | lead-developer coordinates only, does not directly modify code files |