The adapter reads env.state_backend.bucket from the env JSON when present
(fallback to the computed nova-tfstate-{account_id}-{region} pattern for
backwards compat). dev.json bound to the real account 581513795199 +
bucket nova-tfstate-581513795199-us-east-1 (D-203). qa/prod/dr stay
placeholder (account_id 000000000000 — the pilot-readiness policy blocks
apply on placeholder, D-208). dynamodb added to the adapter test
EXPECTED_L1_KEYS + a resolution/emission test.
---ci---
project: acdl
phase: 3
milestone: v1.26
status: execute
wave: W3
---
---ci---
project: acdl
phase: 21
milestone: v1.6
status: execute
---/ci---
Introduce platform-managed environments: a consumer does not provide an
AWS account, VPC, subnet, S3 state bucket, or runner key. A named
environment is a platform-owned bundle of account + network + state
backend + IAM role (surfaced via ABAC), selected by name in the contract.
Scaffold:
- core/environments/dev.json (sample dev env definition)
- core/environments/README.md (how envs are used + how to add one)
- core/environment_check.py (reads a contract's environment field,
looks up core/environments/<name>.json, prints a friendly onboarding
prompt when none exists, exits non-zero)
- scripts/run_platform.sh: Step 0 calls environment_check.py before
contract validation; a missing env halts the pipeline with the
onboarding prompt
- tests/test_environment_check.py: 12 tests (dev bound, missing env ->
onboarding prompt, onboarding message lists provisions, contract
paths, wire-in, check-only still passes)
Tests: 166 pass (154 + 12 new).