Files
CIAgent 2443909362 docs(milestone): complete v1.0-nova-platform (release v0.1.6)
---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).
2026-08-25 02:18:35 +00:00

127 lines
5.9 KiB
Markdown

# Nova Platform
> Nova Platform — infrastructure delivery, simplified. A consumer declares
> intent in a YAML contract; the platform resolves it to a stack, compiles
> it through the Terraform adapter, and applies it. Every deployment is
> reproducible from the shell, not just in CI.
Nova Platform is the **infrastructure-delivery core** of the Nova model.
The DevSecOps, identity, audit-ledger, and central CI-pipeline-contract
machinery of the reference are intentionally removed. What remains: a
consumer writes a small YAML contract that names one or more modules by
name + version, selects an environment, and supplies module-specific
inputs. The platform resolves the contract to a stack instance, compiles
it through the Terraform adapter, and applies it.
- **Consumer guide:** [`docs/consumer-guide.md`](docs/consumer-guide.md)
- **Contracts:** [`docs/contracts/`](docs/contracts/index.md)
- **Environments:** [`docs/environments/`](docs/environments/index.md)
- **Architecture:** [`docs/architecture.md`](docs/architecture.md)
- **Modules:** [`docs/modules/`](docs/modules/index.md)
## How to run
### Quick start (offline, no AWS required)
The fastest way to verify the platform works — no AWS credentials, no
bootstrap, no cost.
```bash
# Install test dependencies
pip install -r requirements-test.txt
# 1. Run the test suite (all offline)
python3 -m pytest tests/ -q
# 2. Run the platform in check-only mode (offline — contract -> resolve ->
# adapter -> structure validation). Uses the default sample contract.
bash scripts/run_platform.sh --check-only contracts/static-assets.yml
# Expected: "=== PLATFORM CHECK OK ==="
# 3. Reproduce the full CI pipeline locally (lint -> test -> check-only)
bash scripts/run_ci.sh
# Expected: "=== CI PIPELINE OK ==="
# Show all run_platform.sh flags:
bash scripts/run_platform.sh --help
```
### Run against live AWS (requires credentials + bootstrap)
> Prerequisites: a platform-managed environment (see
> [docs/environments/](docs/environments/index.md); `core/environments/dev.json`
> is the sample), AWS credentials for dev (in `.ciagent/.env.secrets`,
> gitignored; see [Credentials](#credentials)), `terraform` (pin `>= 1.9, < 1.10`),
> `python3` + `boto3` + `jsonschema` + `pyyaml`.
```bash
# 1. Bootstrap the AWS state backend + runner IAM user (one-time, idempotent)
# See terraform/bootstrap/README.md for the full runbook.
export NOVA_BOOTSTRAP_AWS_ACCESS_KEY_ID="<root key>"
export NOVA_BOOTSTRAP_AWS_SECRET_ACCESS_KEY="<root secret>"
export AWS_DEFAULT_REGION="us-east-1"
python3 terraform/bootstrap/create_state_backend.py
python3 terraform/bootstrap/create_iam_user.py # prints the initial key
bash scripts/rotate_spike_key.sh # writes .ciagent/.env.secrets
# 2. Run the full platform pipeline (contract -> environment check -> stack ->
# adapter -> terraform init/validate/plan -> apply).
bash scripts/run_platform.sh contracts/microservice.yml
# Expected: "=== PLATFORM APPLY OK ==="
# Or plan-only (contract -> stack -> adapter -> terraform plan; no apply):
bash scripts/run_platform.sh --plan-only contracts/static-assets.yml
# Add --quiet to suppress streaming (output to log files only):
bash scripts/run_platform.sh --quiet contracts/static-assets.yml
```
### run_platform.sh flags (D-031)
| Flag | Mode | AWS required | Description |
|------|------|--------------|-------------|
| `--check-only` | offline | no | contract → resolve → adapter → structure validation |
| `--plan-only` | AWS | yes | above + `terraform init`/`validate`/`plan` (no apply) |
| `--quiet` | any | — | suppress streaming output |
| `-h`, `--help` | — | — | show usage |
| *(none)* | apply | yes | full path: above + `terraform apply -auto-approve` |
## Repository layout
| Path | Purpose | Status |
|------|---------|--------|
| `core/` | Platform code: contract resolver, environment check, environments | active |
| `schemas/` | JSON Schemas (draft 2020-12): contract, stack, environment | active |
| `adapters/terraform/` | The Terraform adapter — the only engine-specific code | active |
| `terraform/` | State backend (S3 + DynamoDB) + bootstrap scripts + platform/onboarding/ci-vpc | active |
| `modules/` | L1 primitives (13) + L2 patterns (2) + `registry.json`. Each module has `interface.json` + `terraform/` | active |
| `contracts/` | Sample consumer contracts (`static-assets.yml`, `microservice.yml`) + per-env variants | active |
| `scripts/` | `run_platform.sh` (pipeline runner), `run_ci.sh` (local CI mirror), `rotate_spike_key.sh` | active |
| `tests/` | Pytest suite (all offline — resolver, adapter, schemas, engine boundary, environment check) | active |
| `docs/` | Documentation: consumer guide, contracts, environments, architecture, modules | active |
| `.ciagent/` | CIAgent config + locked decisions (`ARCHITECTURE.md`, `PROJECT.md`, `CLARIFY.md`) | active |
## Credentials
Nova Platform uses a **static AWS key** for dev/local operation. There is no
zero-trust federation layer in v1.0 — that is out of scope.
- The runner key is stored in **`.ciagent/.env.secrets`** (gitignored,
`chmod 600`) using the `NOVA_AWS_*` prefix (D-032):
`NOVA_AWS_ACCESS_KEY_ID`, `NOVA_AWS_SECRET_ACCESS_KEY`.
- `scripts/run_platform.sh` copies `NOVA_AWS_*` to the standard `AWS_*`
env vars before invoking Terraform, then unsets the `NOVA_*` copies.
- Bootstrap uses a one-shot root key via `NOVA_BOOTSTRAP_AWS_*` env vars
(never committed, never echoed). See
[`terraform/bootstrap/README.md`](terraform/bootstrap/README.md) for the
full bootstrap runbook (state backend + runner IAM user + key rotation).
- Onboarding creates a per-consumer IAM **role** (cross-account assume-role
pattern, D-025) — not a user, not federation. See
`terraform/onboarding/main.tf`.
## Consumer guide
A step-by-step guide for a consumer to create a repo, write a contract,
validate it offline, and run it against AWS is at
[`docs/consumer-guide.md`](docs/consumer-guide.md). The guide is generic
across all modules; `static-assets` is the worked example.