--- project: acdl milestone: v1.24 generated_at: 2026-08-12 generator: lead-developer verification_toolchain: typecheck: "python3 -m py_compile core/env_transition.py tests/test_env_transition.py tests/test_run_platform_env_transition.py" test: "pytest tests/test_env_transition.py tests/test_run_platform_env_transition.py tests/test_consumer_guide_per_env_section.py tests/test_adapter.py tests/test_contract_resolver.py tests/test_deploy_workflow_env_input.py tests/test_pipeline.py -v" lint: "ruff check core/env_transition.py tests/test_env_transition.py tests/test_run_platform_env_transition.py 2>/dev/null || python3 -m py_compile core/env_transition.py" note: | v1.24 is the Consumer Guide Accuracy & Env-Promotion Lifecycle Enforcement milestone — a mixed docs+feat+test milestone. Two active personas: lead-developer (consumer-guide.md edits + guide test updates), backend-engineer (core/env_transition.py + run_platform.sh Step 0b + deploy.yml + adapter doc comment + env_transition tests + pipeline tests). frontend-engineer stays deactivated (no UI). No data-engineer (no schema changes — the nova-contracts table already exists). No new personas. --- # ACDL — Persona Roster (v1.24 Consumer Guide Accuracy & Env-Promotion Lifecycle Enforcement) > v1.24 roster. Two active personas + two deactivated. This is a mixed > docs+feat+test milestone: the work is consumer-guide accuracy fixes > (lead-developer), a new env-transition detect-and-destroy platform > feature (backend-engineer), and test coverage for both (split). ## Active personas ### lead-developer - **Domain:** coordination + docs - **Frameworks:** [] - **Constraints:** ["pragmatic", "battle-tested defaults", "docs match code"] - **Territory:** - `docs/consumer-guide.md` - `tests/test_consumer_guide_per_env_section.py` - `.ciagent/*.md` (PLAN.md, RESEARCH.md, etc.) - **Reason:** Owns the consumer guide narrative — the 5 accuracy fixes (stale fields table, inconsistent caller, "dev only" phrasing, Step 8 rewrite with destroy semantics, reference table wording) and the consumer-guide test updates (rename + new destroy-on-env-change test). No UI work (frontend-engineer deactivated). No Python/bash platform code (backend-engineer territory). ### backend-engineer - **Domain:** backend (Python + bash + YAML) - **Frameworks:** ["boto3", "terraform"] - **Constraints:** ["api-first", "fail-closed", "no orphan paths", "state-key determinism"] - **Territory:** - `core/env_transition.py` (NEW) - `scripts/run_platform.sh` (Step 0b insert + record-applied-env) - `.github/workflows/deploy.yml` (NOVA_CONSUMER_REPO env) - `adapters/terraform/adapter.py` (doc comment only) - `tests/test_env_transition.py` (NEW) - `tests/test_run_platform_env_transition.py` (NEW) - **Reason:** Owns the env-transition detect-and-destroy feature: the new `core/env_transition.py` module (DynamoDB query + record), the `run_platform.sh` Step 0b orchestrator (re-resolve + terraform destroy + evidence event + fail-closed), the deploy.yml env var passthrough, and the two new test files. Uses boto3 (DynamoDB) + terraform (destroy) + bash (pipeline orchestration). ## Deactivated personas ### frontend-engineer - **Active:** false - **Reason:** No UI work in v1.24. The consumer guide is markdown docs (lead-developer territory). Deactivated per v1.17/v1.18/v1.22/v1.23 precedent. ### data-engineer - **Active:** false - **Reason:** No schema changes in v1.24. The `nova-contracts` DynamoDB table already exists with the right shape (PK `consumerRepo`, SK `contractId#submittedAt`). The env-transition module only adds a new `#LAST_APPLIED` SK suffix — no schema migration, no ORM, no new tables. The backend-engineer handles the boto3 queries. ## Phase-specific notes - No phase-specific personas. Both active personas span P1-P3. - P4 (final review + audit + ship) is lead-developer territory (orchestration + docs completion).