6691974445
---ci---
phase: 1
milestone: v1.0
status: research
research:
gitea_capabilities:
pages: not_supported
environments_api: not_supported
repository_dispatch: not_supported
workflow_call: supported
workflow_dispatch: supported
issues_opened: supported
workarounds:
- D-012 raw file URLs in place of Pages
- D-013 workflow_dispatch approval inputs in place of environments
- D-014 workflow_dispatch API in place of repository_dispatch
verification_toolchain:
typecheck: bash -n + python -m py_compile (no package.json)
test: per-phase scripts/verify_phaseNN.sh
build: no-op
---/ci---
ARCHITECTURE.md gains a Gitea API surface table and a branch-pinning rule.
PERSONAS.md is the canonical project-level persona roster: lead-developer
and backend-engineer always active; infra-stub-engineer custom persona owns
L1 stubs; data-engineer deactivated (no DB); frontend-engineer deactivated
until Phase 05.
91 lines
4.9 KiB
Markdown
91 lines
4.9 KiB
Markdown
---
|
|
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:** false
|
|
- **Reason:** No UI in Phases 01-04. The single UI artifact (`index.html`, vanilla JS) is built in Phase 05. frontend-engineer is reactivated for Phase 05 only (see Phase-specific overrides below).
|
|
- **Phase-specific:** true (reactivates in Phase 05)
|
|
- **Frameworks:** vanilla-js, dom-api, fetch-api
|
|
- **Constraints:** no-frameworks, single-file, fetch-from-same-origin-raw-url
|
|
- **Territory:** `acdl-evidence/index.html` (Phase 05)
|
|
|
|
## 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. |