---ci--- project: nova-platform milestone: v1.0 status: complete requirements: covered: [REQ-01,REQ-02,REQ-03,REQ-04,REQ-05,REQ-06,REQ-07,REQ-08,REQ-09,REQ-10,REQ-11,REQ-12,REQ-13,REQ-14,REQ-15,REQ-16,REQ-17,REQ-18,REQ-19,REQ-20,REQ-21,REQ-22,REQ-23,REQ-24,REQ-25,REQ-26,REQ-27,REQ-28,REQ-29,REQ-30,REQ-31,REQ-32,REQ-33,REQ-34,REQ-35,REQ-36,REQ-37,REQ-38] partial: [] ---/ci--- v1.0 milestone complete: simplified infrastructure-delivery platform derived from Nova (acdl). 6 phases (P0-P5 + P6 final). 38 REQ-IDs. 38 decisions (D-001..D-038). 76 tests pass. Engine boundary holds. Happy paths green (check-only + CI). 13 L1 + 2 L2 modules. 5 terraform roots. Shell reproducibility. Zero OOS files. Tags: v0.1.0 (P0) → v0.1.1..v0.1.5 (P1..P5) → v0.1.6 (P6 = milestone release on v0.1 patch line).
3.9 KiB
Environments
A consumer does not provide an AWS account, a VPC, a subnet, or an S3 state bucket. The platform manages environments.
What an environment is
A named environment is a platform-owned bundle of:
- An AWS account (or a scoped partition of one).
- A network (VPC + subnets / AZs).
- A state backend (an S3 bucket + DynamoDB lock table for Terraform state).
A consumer selects an environment by name in their contract:
environment: dev
The platform resolves the name to the underlying account/network/state backend at run time. The consumer never sees the raw credentials.
Environment definition shape (D-018)
Each environment is a JSON file in core/environments/. The field set is
reduced from the reference — the IAM role, autonomy, and confidence
threshold fields are out of scope for v1.0.
core/environments/dev.json (the sample):
{
"name": "dev",
"description": "Sample dev environment for offline/local testing. account_id placeholder (000000000000) for offline mode.",
"account_id": "000000000000",
"region": "us-east-1",
"state_backend": {
"bucket": "nova-tfstate-dev-us-east-1",
"lock_table": "nova-tfstate-locks"
},
"network": {
"vpc_cidr": "10.0.0.0/16",
"azs": ["us-east-1a", "us-east-1b"]
}
}
Fields
| Field | Type | Required | Description |
|---|---|---|---|
name |
string | yes | The environment name (dev/qa/prod/dr). |
description |
string | no | Human-readable description. |
account_id |
string | yes | The AWS account id (placeholder 000000000000 for offline dev). |
region |
string | yes | The AWS region. |
state_backend.bucket |
string | yes | The S3 state bucket name. |
state_backend.lock_table |
string | yes | The DynamoDB lock table name (nova-tfstate-locks per D-022). |
network.vpc_cidr |
string | yes | The VPC CIDR block. |
network.azs |
array | yes | The availability zones. |
Dropped from the reference (D-018)
runner_role_arn— identity/authorization is out of scope.autonomy— human-in-the-loop gates are out of scope.confidence_threshold— the confidence signal is out of scope.
State backend (D-022)
The Terraform state backend uses a dedicated DynamoDB lock table named
nova-tfstate-locks (NOT nova-outbox — the audit outbox is out of scope
for v1.0). The S3 state bucket is named nova-tfstate-<account>-<region>
with versioning enabled. See
terraform/bootstrap/README.md for
the bootstrap runbook that creates both.
Autonomy by environment
| Environment | Autonomy | Operator action |
|---|---|---|
| dev | Fully autonomous | None — terraform apply -auto-approve runs automatically. |
| qa | Manual | An operator runs run_platform.sh against the qa contract. |
| prod | Manual | An operator runs run_platform.sh against the prod contract. |
| dr | Manual | An operator runs run_platform.sh against the dr contract. |
dev is the only autonomous environment. Higher environments require a
human operator to invoke the pipeline against the environment's contract
variant. There are no automated gates or attestation steps — those are out
of scope for v1.0. Staging does not exist.
Onboarding scaffold (current state)
The platform repo ships a minimal onboarding scaffold:
core/environments/— environment definitions (a sampledev.json).core/environment_check.py— checks whether an environment is defined for a given contract's environment name; raisesEnvironmentNotFoundErrorwhen none is defined (D-019).scripts/run_platform.shcalls the check before contract validation.
The scaffold is minimal: provisioning a new environment is a platform-team action today (bootstrap the state backend + network). Self-service environment provisioning is a future milestone.