Files
CIAgent 2c68b44c1a merge: milestone/v0.4-distribution → main (v0.4 Distribution & Bootstrap CLI complete)
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---
2026-09-12 23:17:43 +00:00

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