--- project: acdl milestone: v1.0 generated_at: 2026-07-21 generator: lead-developer verification_toolchain: typecheck: "bash -n scripts/**/*.sh modules/**/*.sh && python3 -m py_compile scripts/**/*.py" test: "scripts/verify_phaseNN.sh" build: "no-op (no build step; bash + python stubs)" note: | ACDL has no package.json. The execute/verify/ship workflows substitute bash -n and python -m py_compile for npm run typecheck, a per-phase verify script for npm test, and treat npm run build as a no-op. This override is documented here as the single source of truth; the ci-* agents read PERSONAS.md before running verification commands. --- # ACDL — Persona Roster (project-level) ## Active personas ### lead-developer - **Domain:** coordination - **Active:** true - **Phase-specific:** false - **Frameworks:** (none) - **Constraints:** pragmatic, battle-tested defaults, no-cross-territory-edits - **Territory:** `.ciagent/**`, `scripts/verify_phase*.sh`, `README.md`, `.gitignore` - **Reason:** Owns CIAgent metadata and cross-phase verification scripts. ### backend-engineer - **Domain:** backend - **Active:** true - **Phase-specific:** false - **Frameworks:** gitea-actions, act_runner, bash, python, yaml - **Constraints:** no-cloud, no-ai, stub-only, hash-chain-must-be-deterministic, max-depth-5 - **Territory:** `.gitea/workflows/**`, `scripts/**` (except `scripts/verify_phase*.sh`), `modules/l2/**/manifest.yaml` - **Reason:** Owns workflow YAML, core scripts (mock_executor, policy_checker, confidence_signal, evidence_writer, l3b_agent_stub), and L2 composition manifests. ### infra-stub-engineer (custom) - **Domain:** backend - **Active:** true - **Phase-specific:** false - **Frameworks:** bash, yaml - **Constraints:** mock-only, echo-contract-from-D-007, sleep-1s-exit-0, substrate-agnostic, single-purpose - **Territory:** `modules/l1/**` - **Reason:** Created to own L1 stub modules (Phase 02) and their uniform mock_apply.sh behavior per D-007. Domain is backend (bash stubs) but territory is strictly L1 modules to keep L1/L2 concerns separated from workflow YAML. ## Deactivated personas ### data-engineer - **Domain:** data - **Active:** false - **Reason:** No persistence layer. ACDL state is flat JSON files (`audit.json`, `state.json`) written by bash/python scripts; no ORM, no migrations, no DB. Schema contracts live in `manifest.yaml` (owned by backend-engineer / infra-stub-engineer). - **Phase-specific:** false - **Frameworks:** (would have been: drizzle, prisma) - **Constraints:** (would have been: schema-first, type-safe-orm) - **Territory:** (would have been: `**/db/**`, `**/migrations/**`) ### frontend-engineer - **Domain:** frontend - **Active:** true # REACTIVATED for Phase 05 (evidence UI + dry run) - **Reason:** Phase 05 builds the vanilla-JS `index.html` timeline UI (REQ-14) and runs the 4 demo acts end-to-end dry run (REQ-15). Inactive for Phases 01-04 (no UI). - **Phase-specific:** true (this reactivation is for Phase 05 only; will be deactivated again after the milestone ships if the project continues) - **Frameworks:** vanilla-js, dom-api, fetch-api - **Constraints:** no-frameworks, single-file, fetch-from-same-origin-raw-url, relative-url-for-audit-json - **Territory:** `evidence-ui/**` (the source-of-truth `index.html` in the `acdl` repo; pushed to `acdl-evidence` by `run_demo.sh`) ## Phase-specific overrides | Phase | Personas active | Reactivations / notes | |-------|-----------------|----------------------| | 01 repo-scaffolding | lead-developer, backend-engineer | infra-stub-engineer idle (no L1 work this phase) | | 02 l1-modules | lead-developer, backend-engineer, infra-stub-engineer | infra-stub-engineer owns L1 stubs | | 03 l2-modules-and-core-scripts | lead-developer, backend-engineer, infra-stub-engineer | backend-engineer owns core scripts + L2 manifests; infra-stub-engineer only updates L1 manifests if referenced | | 04 pipeline-and-approval-gates | lead-developer, backend-engineer | infra-stub-engineer idle; frontend-engineer still off | | 05 evidence-ui-and-demo-dry-run | lead-developer, backend-engineer, frontend-engineer | frontend-engineer REACTIVATED for `index.html` only; backend-engineer owns the dry-run script and audit.json wiring | ## Domain priority (used by TaskDecomposer) `coordination -> backend -> infra-stub-engineer -> frontend-engineer (Phase 05 only)` ## Conflict resolutions (lead-developer arbitration) - `backend-engineer` vs `infra-stub-engineer` over `modules/l2/**/manifest.yaml`: backend-engineer owns L2 manifests; infra-stub-engineer owns L1 manifests. No overlap. - `backend-engineer` vs `frontend-engineer` over `acdl-evidence/index.html`: frontend-engineer owns the file in Phase 05; backend-engineer provides the `audit.json` schema contract (event shape) via `evidence_writer.py` and a `SCHEMA.md` note in ARCHITECTURE.md. - `lead-developer` vs any: lead-developer owns `.ciagent/**` and verification scripts; persona engineers do not edit CIAgent metadata. ## Territory enforcement mode `warn` — config.json has no `personas.territory_enforcement` field, so the default per execute.md is `warn`. Cross-territory edits are logged in the commit message but do not fail the task.