feat(P1): Nova rebrand — docs/decks/prose/schema-$id/release-titles (REQ-155/156/157)

Rebrand ACDL/Agentic Cloud Delivery Platform → Nova across README, docs/,
decks (markdown + mermaid .mmd + HTML), pyproject.toml name/description,
schema $id URLs (acdl.cloudinit.dev→nova.cloudinit.dev), release.yml
title/workflow-name. Nova tagline added to README header + both deck title
slides + docs/vision.md (alongside existing North Star, D-106). S&P theme
untouched (D-107). New docs/NOVA_MIGRATION.md consumer guide. Data values
(env vars, resource names, tag keys, SSM/consumer paths) left for P2-P4.

---ci---
project: acdl
phase: 1
milestone: v1.15
status: execute
---/ci---
This commit is contained in:
Jon Chery
2026-07-30 00:56:19 +00:00
parent 1ff942684e
commit 63f3a2b66c
57 changed files with 338 additions and 151 deletions
+3 -3
View File
@@ -1,4 +1,4 @@
# ACDL Release Pipeline — GitHub Actions (production) # Nova Release Pipeline — GitHub Actions (production)
# #
# Runs on push to main. Computes the next semver tag from the latest tag + # Runs on push to main. Computes the next semver tag from the latest tag +
# commit history, creates the tag, updates floating MAJOR.MINOR and MAJOR tags, # commit history, creates the tag, updates floating MAJOR.MINOR and MAJOR tags,
@@ -8,7 +8,7 @@
# - Regular phase commit -> bump PATCH (v1.6.0 -> v1.6.1) # - Regular phase commit -> bump PATCH (v1.6.0 -> v1.6.1)
# - Milestone completion ("docs(milestone): complete") -> bump MINOR (v1.6.1 -> v1.7.0) # - Milestone completion ("docs(milestone): complete") -> bump MINOR (v1.6.1 -> v1.7.0)
# - Major bumps are manual (not implemented here). # - Major bumps are manual (not implemented here).
name: acdl-release name: nova-release
on: on:
push: push:
@@ -87,6 +87,6 @@ jobs:
BODY=$(git log --format='- %s' HEAD) BODY=$(git log --format='- %s' HEAD)
fi fi
gh release create ${{ steps.version.outputs.new_tag }} \ gh release create ${{ steps.version.outputs.new_tag }} \
--title "ACDL ${{ steps.version.outputs.new_tag }}" \ --title "Nova ${{ steps.version.outputs.new_tag }}" \
--notes "$BODY" \ --notes "$BODY" \
--generate-notes || true --generate-notes || true
+7 -5
View File
@@ -1,4 +1,6 @@
# ACDL — Agentic Cloud Delivery Platform # Nova
> **Nova — The New Dawn of DevSecOps.** Security as a seamless enabler of fast deployments — not a bottleneck, not a "no" department.
Consumers declare intent; the platform delivers safe production deployment Consumers declare intent; the platform delivers safe production deployment
through an agentic stack — automatically, safely, and with a complete audit through an agentic stack — automatically, safely, and with a complete audit
@@ -18,7 +20,7 @@ a configuration file, or an infrastructure module.
## Repository roles ## Repository roles
There are two kinds of repository in the ACDL model: There are two kinds of repository in the Nova model:
- **Platform repo (this one).** This is the **source code of the platform**. - **Platform repo (this one).** This is the **source code of the platform**.
It owns `modules/`, `adapters/`, `core/`, `schemas/`, `pipelines/`, It owns `modules/`, `adapters/`, `core/`, `schemas/`, `pipelines/`,
@@ -93,7 +95,7 @@ intent via a contract; the platform delivers the deployment through the
same contract schema, the same policy envelope, and the same evidence same contract schema, the same policy envelope, and the same evidence
stream. stream.
Consumers have their own repos and consume ACDL by writing a contract that Consumers have their own repos and consume Nova by writing a contract that
declares infrastructure. A consumer declares a contract (id + name + declares infrastructure. A consumer declares a contract (id + name +
environment + infrastructure); the platform resolves it to a stack instance, environment + infrastructure); the platform resolves it to a stack instance,
compiles it, runs security + policy checks, computes a confidence signal, compiles it, runs security + policy checks, computes a confidence signal,
@@ -223,7 +225,7 @@ The workflow implements the same stages as `pipelines/contract.yml`
→ policy checks → confidence → evidence event → apply). A consumer repo → policy checks → confidence → evidence event → apply). A consumer repo
invokes the reusable workflow via a **versioned tag** (floating MAJOR + invokes the reusable workflow via a **versioned tag** (floating MAJOR +
MINOR, e.g. `acdl/.github/workflows/deploy.yml@v1.13`). The workflow checks MINOR, e.g. `acdl/.github/workflows/deploy.yml@v1.13`). The workflow checks
out the consumer repo, then checks out the ACDL platform repo into the out the consumer repo, then checks out the Nova platform repo into the
runner workspace, and runs `scripts/run_platform.sh` against the consumer's runner workspace, and runs `scripts/run_platform.sh` against the consumer's
contract — the consumer never clones the platform repo or invokes its contract — the consumer never clones the platform repo or invokes its
scripts locally. See the [Consumer guide](docs/consumer-guide.md) for the scripts locally. See the [Consumer guide](docs/consumer-guide.md) for the
@@ -247,7 +249,7 @@ backwards-compatible log-only mode.
## Consumer guide ## Consumer guide
A step-by-step guide for a consumer to create their pipeline and define a A step-by-step guide for a consumer to create their pipeline and define a
contract that deploys any ACDL module to AWS is at contract that deploys any Nova module to AWS is at
[`docs/consumer-guide.md`](docs/consumer-guide.md). The guide is generic [`docs/consumer-guide.md`](docs/consumer-guide.md). The guide is generic
across all modules; `static-assets` is the worked example. across all modules; `static-assets` is the worked example.
+1 -1
View File
@@ -1,4 +1,4 @@
# ACDL sample consumer contract — microservice module (dev) # Nova sample consumer contract — microservice module (dev)
# Per-environment contract (REQ-105). Promotion = running the dev job; # Per-environment contract (REQ-105). Promotion = running the dev job;
# no environment field editing. Interpolation resolves against dev.json. # no environment field editing. Interpolation resolves against dev.json.
id: msvc id: msvc
+1 -1
View File
@@ -1,4 +1,4 @@
# ACDL sample consumer contract — microservice module (dr) # Nova sample consumer contract — microservice module (dr)
# Per-environment contract (REQ-105). Promotion = running the dr job; # Per-environment contract (REQ-105). Promotion = running the dr job;
# no environment field editing. Interpolation resolves against dr.json. # no environment field editing. Interpolation resolves against dr.json.
id: msvc id: msvc
+1 -1
View File
@@ -1,4 +1,4 @@
# ACDL sample consumer contract — microservice module (prod) # Nova sample consumer contract — microservice module (prod)
# Per-environment contract (REQ-105). Promotion = running the prod job; # Per-environment contract (REQ-105). Promotion = running the prod job;
# no environment field editing. Interpolation resolves against prod.json. # no environment field editing. Interpolation resolves against prod.json.
id: msvc id: msvc
+1 -1
View File
@@ -1,4 +1,4 @@
# ACDL sample consumer contract — microservice module (qa) # Nova sample consumer contract — microservice module (qa)
# Per-environment contract (REQ-105). Promotion = running the qa job; # Per-environment contract (REQ-105). Promotion = running the qa job;
# no environment field editing. Interpolation resolves against qa.json. # no environment field editing. Interpolation resolves against qa.json.
id: msvc id: msvc
+1 -1
View File
@@ -1,4 +1,4 @@
# ACDL sample consumer contract — microservice module (dev) # Nova sample consumer contract — microservice module (dev)
# #
# Reference example for an ECS Fargate microservice deployment. # Reference example for an ECS Fargate microservice deployment.
# Interpolation (D-081): bucket_name uses the naming pattern that includes # Interpolation (D-081): bucket_name uses the naming pattern that includes
+1 -1
View File
@@ -1,4 +1,4 @@
# ACDL sample consumer contract — static-assets module (dev) # Nova sample consumer contract — static-assets module (dev)
# Per-environment contract (REQ-105). The dev default # Per-environment contract (REQ-105). The dev default
# (contracts/static-assets.yml) remains for backwards compat; this file # (contracts/static-assets.yml) remains for backwards compat; this file
# is the explicit per-env dev contract. Interpolation resolves against dev.json. # is the explicit per-env dev contract. Interpolation resolves against dev.json.
+1 -1
View File
@@ -1,4 +1,4 @@
# ACDL sample consumer contract — static-assets module (dr) # Nova sample consumer contract — static-assets module (dr)
# Per-environment contract (REQ-105). Promotion = running the dr job; # Per-environment contract (REQ-105). Promotion = running the dr job;
# no environment field editing. Interpolation resolves against dr.json. # no environment field editing. Interpolation resolves against dr.json.
id: assets id: assets
+1 -1
View File
@@ -1,4 +1,4 @@
# ACDL sample consumer contract — static-assets module (prod) # Nova sample consumer contract — static-assets module (prod)
# Per-environment contract (REQ-105). Promotion = running the prod job; # Per-environment contract (REQ-105). Promotion = running the prod job;
# no environment field editing. Interpolation resolves against prod.json. # no environment field editing. Interpolation resolves against prod.json.
id: assets id: assets
+1 -1
View File
@@ -1,4 +1,4 @@
# ACDL sample consumer contract — static-assets module (qa) # Nova sample consumer contract — static-assets module (qa)
# Per-environment contract (REQ-105). Promotion = running the qa job; # Per-environment contract (REQ-105). Promotion = running the qa job;
# no environment field editing. Interpolation resolves against qa.json. # no environment field editing. Interpolation resolves against qa.json.
id: assets id: assets
+1 -1
View File
@@ -1,4 +1,4 @@
# ACDL sample consumer contract — static-assets module (dev) # Nova sample consumer contract — static-assets module (dev)
# #
# This is the reference example for a consumer contract. It declares: # This is the reference example for a consumer contract. It declares:
# id: short operational acronym (becomes stack.name for state, tags, evidence) # id: short operational acronym (becomes stack.name for state, tags, evidence)
+170
View File
@@ -0,0 +1,170 @@
# Nova Migration Guide — What Consumers Must Know
> **Nova** is the new product brand for the platform formerly known as
> **ACDL** (Agentic Cloud Delivery Platform). This guide announces the
> scheduled breaking changes coming in the rebrand rollout (Phases P2P4)
> and tells you exactly what to do, when, and how long you have.
The product is being rebranded **A C D L → Nova**. The rebrand is staged
across phases so that **no consumer deployment breaks during the
transition**. Phases P2P4 ship the breaking changes behind a **dual-read
/ parallel-write grace period**; Phase P5 removes the fallback and the old
names stop working. This document is the consumer-facing contract for that
rollout.
## What is NOT changing
- **The Gitea repository name** (`continuous-intelligence/acdl`) is **not**
changing. Only the product brand is changing. The `uses:` reference
(`acdl/.github/workflows/deploy.yml@vX.Y`) and the GitHub `acdl/acdl` repo
path are unchanged for the duration of the rebrand; the workflow
`uses:` reference will be migrated in a later, separately-announced step.
- **The platform behavior** is unchanged. Same pipeline stages, same
contract schema, same confidence model, same evidence stream, same
modules. Only the brand, the on-disk path, the env var names, the SSM
path, the AWS tag keys, and the AWS resource names are changing.
## The 5 breaking changes
Five things that consumers may reference are being renamed. Each is
scheduled into a phase, ships with a grace period, and has a cutoff.
### 1. Consumer contract path — Phase P2
- **Old:** `.acdl/contract.yml`
- **New:** `.nova/contract.yml`
- **Phase:** P2 (env vars + consumer path)
- **Grace period:** during P2P4 the deploy workflow reads **both** paths
(`.nova/contract.yml` first, falling back to `.acdl/contract.yml` if the
new path is absent). Your existing contracts keep working until P5.
- **Cutoff:** P5 removes the `.acdl/` fallback. Move your contract file
before P5.
- **What you must do:** rename the directory in your consumer repo from
`.acdl/` to `.nova/` and update any `contract:` workflow input that
points at the old path. Nothing else changes in the contract content.
### 2. Environment variables — Phase P2
- **Old:** `ACDL_*` (e.g. `ACDL_LIFECYCLE_MODE`, `ACDL_AWS_ACCOUNT_ID`,
`ACDL_BOOTSTRAP_AWS_ACCESS_KEY_ID`, …)
- **New:** `NOVA_*` (e.g. `NOVA_LIFECYCLE_MODE`, `NOVA_AWS_ACCOUNT_ID`,
`NOVA_BOOTSTRAP_AWS_ACCESS_KEY_ID`, …)
- **Phase:** P2 (env vars + consumer path)
- **Grace period — dual-read fallback:** during P2P4 the platform reads
**`NOVA_*` first, then falls back to `ACDL_*`** if the Nova variable is
unset. This means your CI secrets, workflow env blocks, and local
`.env.secrets` keep working unchanged through P4. You do not need to
rename everything in one shot — rename a variable and the dual-read picks
it up; leave one old and it still resolves.
- **Cutoff:** P5 removes the `ACDL_*` fallback. After P5, only `NOVA_*`
is read.
- **What you must do:** rename your `ACDL_*` CI secrets, workflow `env:`
blocks, and any local `.env.secrets` entries to `NOVA_*`. Because of the
dual-read, you can do this incrementally across P2P4 — but it must be
complete before P5.
### 3. SSM parameter path — Phase P3
- **Old:** `/acdl/{env}/{contractId}/{output}`
- **New:** `/nova/{env}/{contractId}/{output}`
- **Phase:** P3 (SSM paths + tag keys)
- **Grace period — parallel-write:** during P3P4 the platform **writes
every output to both** the `/acdl/…` and `/nova/…` SSM paths, and reads
from `/nova/…` first (falling back to `/acdl/…`). Any hardcoded SSM path
reads in your application code keep resolving through P4.
- **Cutoff:** P5 stops writing to `/acdl/…` and removes the read fallback.
After P5 only `/nova/…` exists.
- **What you must do:** if your application code or runbooks read deploy
outputs from SSM by hardcoded path, update the path prefix from `/acdl/`
to `/nova/`. If you consume outputs only via the PR-comment / GitHub
issue surface, you do nothing — the platform republishes under the new
path automatically.
### 4. AWS tag keys — Phase P3
- **Old:** `acdl:owner`, `acdl:environment`, `acdl:contract`,
`acdl:cost-center`, `acdl:ref`
- **New:** `nova:owner`, `nova:environment`, `nova:contract`,
`nova:cost-center`, `nova:ref`
- **Phase:** P3 (SSM paths + tag keys)
- **Grace period — parallel-tag period:** during P3P4 the platform
**tags every resource with both** the `acdl:*` and `nova:*` keys (same
values). The ABAC session policy matches on **either** key set, so your
existing scoped permissions keep working. The default cost-center value
moves from `acdl-default` to `nova-default` (both written during the
parallel-tag period).
- **Cutoff:** P5 stops writing the `acdl:*` keys and the ABAC policy matches
only on `nova:*`. After P5, resources created before P5 still carry the
old `acdl:*` tags (tags are not retroactively rewritten) but **new**
resources are tagged `nova:*` only, and the policy no longer grants
access via `acdl:*`.
- **What you must do:** if you have IAM policies, Cost Explorer filters,
or billing groupings that key off `acdl:*` tag keys, add a parallel
`nova:*` condition (or migrate to `nova:*`) before P5. The platform
handles the dual-tagging; you only need to update your own tag-key
references.
### 5. AWS resource names — Phase P4
- **Old:** `acdl-*` (DynamoDB tables `acdl-contracts`,
`acdl-change-requests`; Lambda `acdl-contract-ingestor`; SNS
`acdl-sod-halt`; security group `acdl-ecs-sg`; KMS alias
`alias/acdl-platform`; ECS services, ECR repos, IAM user
`acdl-spike-runner`, state bucket `acdl-tfstate-*`, ALB `acdl-alb`,
`acdl-deploy-*`)
- **New:** `nova-*` (the same resources, prefixed `nova-`)
- **Phase:** P4 (resource names) — **maintenance window**
- **Grace period:** P4 is a **planned maintenance window**. AWS resources
cannot be renamed in place, so P4 provisions the `nova-*` resources,
migrates data (DynamoDB tables, S3 state), repoints the platform, and
tears down the `acdl-*` resources. The platform team schedules and
announces the window; consumers do not provision or rename anything
themselves.
- **Cutoff:** the `acdl-*` resources are decommissioned at the end of the
P4 maintenance window. After P4, only `nova-*` resources exist.
- **What you must do:** nothing for the resource names themselves — the
platform owns the rename. If your application code or runbooks reference
a specific `acdl-*` resource by name (e.g. a hardcoded DynamoDB table
name or ECR URI), update it to the `nova-*` name during P4. The platform
publishes the exact old → new name mapping with the P4 announcement.
## Timeline at a glance
| Phase | What ships | Grace period | Cutoff |
|-------|------------|--------------|--------|
| **P1** (this phase) | Brand prose, docs, decks, schema `$id`, release titles | n/a (prose only) | n/a |
| **P2** | `.nova/` contract path + `NOVA_*` env vars | dual-read: `.nova/``.acdl/`, `NOVA_*``ACDL_*` | **P5** removes fallback |
| **P3** | `/nova/` SSM path + `nova:*` tag keys | parallel-write (SSM) + parallel-tag (ABAC matches either) | **P5** removes old path/tags |
| **P4** | `nova-*` AWS resource names | maintenance window (platform-owned migration) | end of P4 window |
| **P5** | Fallback removal | — | `ACDL_*` env vars, `.acdl/` path, `/acdl/` SSM, `acdl:*` tags stop working |
## What consumers must do (checklist)
1. **Before P5 — contract path:** move `.acdl/contract.yml`
`.nova/contract.yml` in your consumer repo; update the `contract:`
workflow input. *(Can be done any time in P2P4.)*
2. **Before P5 — env vars:** rename `ACDL_*` CI secrets / workflow `env:`
blocks / local `.env.secrets` to `NOVA_*`. *(Incremental during P2P4;
dual-read keeps you green.)*
3. **Before P5 — SSM reads:** if you read deploy outputs from SSM by
hardcoded `/acdl/…` path, update to `/nova/…`. *(Skip if you consume
outputs via PR comments only.)*
4. **Before P5 — tag-key references:** if you have IAM policies, Cost
Explorer filters, or billing groupings keyed off `acdl:*`, add or
migrate to `nova:*`. *(Platform handles dual-tagging.)*
5. **During P4 — resource-name references:** if your code or runbooks
reference a specific `acdl-*` AWS resource by name, update to the
`nova-*` name per the P4 mapping announcement. *(Platform owns the
rename itself.)*
## Questions
If anything in this guide is unclear, or you are unsure whether your
consumer repo references a renamed value, open an issue on the platform
repo. The platform team will confirm what you need to change and when.
> **Note:** the real Gitea repository name (`continuous-intelligence/acdl`)
> is **not** changing — only the product brand. The `uses:` workflow
> reference and repo path are migrated in a separately-announced later step;
> until then, keep your `uses: acdl/.github/workflows/deploy.yml@vX.Y`
> reference as-is.
+2 -2
View File
@@ -1,5 +1,5 @@
title: ACDL — Agentic Cloud Delivery Platform title: Nova
description: Consumer + platform-engineer documentation for the ACDL platform. description: Consumer + platform-engineer documentation for the Nova platform (formerly ACDL — Agentic Cloud Delivery Platform).
remote_theme: mmistakes/minimal-mistakes@9.0.4 remote_theme: mmistakes/minimal-mistakes@9.0.4
exclude: exclude:
+8 -8
View File
@@ -1,15 +1,15 @@
# Consumer Guide — Declare intent, deploy to AWS # Consumer Guide — Declare intent, deploy to AWS
This guide walks a consumer through creating their pipeline and defining a This guide walks a consumer through creating their pipeline and defining a
contract that deploys any ACDL module to AWS. It is **generic** across all contract that deploys any Nova module to AWS. It is **generic** across all
modules in the registry; `static-assets` is the worked example, but every modules in the registry; `static-assets` is the worked example, but every
step applies to `microservice` and any future module. step applies to `microservice` and any future module.
## The model ## The model
Consumers have their own repos and consume ACDL by writing a contract Consumers have their own repos and consume Nova by writing a contract
that declares infrastructure (one or more modules), an environment, and inputs. The consumer declares a **contract** (which infrastructure, which that declares infrastructure (one or more modules), an environment, and inputs. The consumer declares a **contract** (which infrastructure, which
environment, which inputs); the ACDL platform owns the pipelines, modules, environment, which inputs); the Nova platform owns the pipelines, modules,
engine adapter, and evidence stream. engine adapter, and evidence stream.
You do not write infrastructure modules, workflow YAML, or adapter code. You do not write infrastructure modules, workflow YAML, or adapter code.
@@ -89,7 +89,7 @@ definition lives at `.github/workflows/deploy.yml`.
## Step 2 — Reference the central pipeline ## Step 2 — Reference the central pipeline
In your CI workflow (`.github/workflows/deploy.yml`), reference the central In your CI workflow (`.github/workflows/deploy.yml`), reference the central
ACDL deployment workflow with a **versioned tag** (floating MAJOR + MINOR): Nova deployment workflow with a **versioned tag** (floating MAJOR + MINOR):
```yaml ```yaml
jobs: jobs:
@@ -167,7 +167,7 @@ and execute for you.
### The consumer CI definition ### The consumer CI definition
Add a thin workflow file to **your** repo that invokes the reusable ACDL Add a thin workflow file to **your** repo that invokes the reusable Nova
deploy workflow with a **versioned tag** (`.github/workflows/deploy.yml`): deploy workflow with a **versioned tag** (`.github/workflows/deploy.yml`):
```yaml ```yaml
@@ -187,7 +187,7 @@ That is the entire consumer-side workflow. When you push to `main`:
1. The platform runner resolves `uses: acdl/.github/workflows/deploy.yml@v1.13` 1. The platform runner resolves `uses: acdl/.github/workflows/deploy.yml@v1.13`
to the reusable workflow **at the pinned tag**. to the reusable workflow **at the pinned tag**.
2. A **platform-provided runner** checks out **your** repo. 2. A **platform-provided runner** checks out **your** repo.
3. The runner checks out the **ACDL platform repo** into the workspace — 3. The runner checks out the **Nova platform repo** into the workspace —
this is how the pipeline fetches the platform code at run time. You this is how the pipeline fetches the platform code at run time. You
never clone the platform repo yourself. never clone the platform repo yourself.
4. The runner installs the runtime dependencies the platform requires. 4. The runner installs the runtime dependencies the platform requires.
@@ -203,7 +203,7 @@ hold for attestation).
### Local validation (optional) ### Local validation (optional)
A consumer *may* clone the ACDL platform repo to run `--check-only` against A consumer *may* clone the Nova platform repo to run `--check-only` against
their contract before pushing — this is optional and not required for the their contract before pushing — this is optional and not required for the
happy path. If you do this, the runtime dependencies must be installed happy path. If you do this, the runtime dependencies must be installed
locally, and any AWS credentials follow the locally, and any AWS credentials follow the
@@ -395,7 +395,7 @@ separately (or left running to monitor the decommissioned stack's
endpoints going dark). endpoints going dark).
## Per-environment deployment ## Per-environment deployment
ACDL supports a **promotion-without-editing** model: you do not edit the Nova supports a **promotion-without-editing** model: you do not edit the
`environment:` field in a contract to promote dev → qa → prod → dr. `environment:` field in a contract to promote dev → qa → prod → dr.
Instead, there is **one CI job per environment**, each pointing at its Instead, there is **one CI job per environment**, each pointing at its
respective contract (or the same contract + the `environment` workflow respective contract (or the same contract + the `environment` workflow
+3 -3
View File
@@ -57,7 +57,7 @@ infrastructure:
## Validation ## Validation
The contract is validated against The contract is validated against
[`schemas/contract.schema.json`](https://github.com/acdl/acdl/blob/main/schemas/contract.schema.json). [`schemas/contract.schema.json`](https://github.com/nova/nova/blob/main/schemas/contract.schema.json).
An invalid contract (missing field, unknown module, wrong type) fails at the An invalid contract (missing field, unknown module, wrong type) fails at the
validate-contract stage with a clear error. validate-contract stage with a clear error.
@@ -65,9 +65,9 @@ validate-contract stage with a clear error.
Two reference examples exist in `contracts/`: Two reference examples exist in `contracts/`:
- [`contracts/static-assets.yml`](https://github.com/acdl/acdl/blob/main/contracts/static-assets.yml) - [`contracts/static-assets.yml`](https://github.com/nova/nova/blob/main/contracts/static-assets.yml)
— the `static-assets` module. — the `static-assets` module.
- [`contracts/microservice.yml`](https://github.com/acdl/acdl/blob/main/contracts/microservice.yml) - [`contracts/microservice.yml`](https://github.com/nova/nova/blob/main/contracts/microservice.yml)
— the `microservice` module. — the `microservice` module.
Additionally, every module has a `modules/<name>/examples/` directory with Additionally, every module has a `modules/<name>/examples/` directory with
+4 -4
View File
@@ -60,7 +60,7 @@ invoke the **platform Lambda** — `acdl-contract-ingestor` — across
accounts. The Lambda is invoked via a Function URL with IAM auth, so the accounts. The Lambda is invoked via a Function URL with IAM auth, so the
grant is an inline IAM policy applied to the consumer's deploy role. The grant is an inline IAM policy applied to the consumer's deploy role. The
policy template lives at policy template lives at
[`terraform/platform/consumer_invoke_policy.json`](https://github.com/acdl/acdl/blob/main/terraform/platform/consumer_invoke_policy.json) [`terraform/platform/consumer_invoke_policy.json`](https://github.com/nova/nova/blob/main/terraform/platform/consumer_invoke_policy.json)
and is scoped via **ABAC**: the condition and is scoped via **ABAC**: the condition
`aws:PrincipalTag/acdl:owner == ${consumerRepo}` ensures a repo can only `aws:PrincipalTag/acdl:owner == ${consumerRepo}` ensures a repo can only
invoke the Lambda when its principal tag matches its claimed identity. invoke the Lambda when its principal tag matches its claimed identity.
@@ -83,16 +83,16 @@ is used for two purposes:
prepared-status stub until then). prepared-status stub until then).
The Lambda handler and the Terraform that deploys it live in The Lambda handler and the Terraform that deploys it live in
[`core/lambda/contract_ingestor.py`](https://github.com/acdl/acdl/blob/main/core/lambda/contract_ingestor.py) [`core/lambda/contract_ingestor.py`](https://github.com/nova/nova/blob/main/core/lambda/contract_ingestor.py)
and and
[`terraform/platform/main.tf`](https://github.com/acdl/acdl/blob/main/terraform/platform/main.tf) [`terraform/platform/main.tf`](https://github.com/nova/nova/blob/main/terraform/platform/main.tf)
respectively. respectively.
## Onboarding scaffold (current state) ## Onboarding scaffold (current state)
The platform repo ships a minimal onboarding scaffold: The platform repo ships a minimal onboarding scaffold:
- [`core/environments/`](https://github.com/acdl/acdl/blob/main/core/environments/) - [`core/environments/`](https://github.com/nova/nova/blob/main/core/environments/)
— environment definitions (a sample `dev.json`). — environment definitions (a sample `dev.json`).
- `core/environment_check.py` — checks whether an environment is defined for - `core/environment_check.py` — checks whether an environment is defined for
a given contract's repo + environment name; prints the friendly onboarding a given contract's repo + environment name; prints the friendly onboarding
+12 -3
View File
@@ -1,4 +1,6 @@
# ACDL — Agentic Cloud Delivery Platform # Nova
> **Nova — The New Dawn of DevSecOps.** Security as a seamless enabler of fast deployments — not a bottleneck, not a "no" department.
Consumers declare intent; the platform delivers safe production deployment Consumers declare intent; the platform delivers safe production deployment
through an agentic stack — automatically, safely, and with a complete audit through an agentic stack — automatically, safely, and with a complete audit
@@ -9,7 +11,7 @@ a configuration file, or an infrastructure module.
## Two repositories ## Two repositories
There are two kinds of repository in the ACDL model: There are two kinds of repository in the Nova model:
- **Platform repo (this one).** The source code of the platform. It owns - **Platform repo (this one).** The source code of the platform. It owns
`modules/`, `adapters/`, `core/`, `schemas/`, `pipelines/`, `scripts/`, `modules/`, `adapters/`, `core/`, `schemas/`, `pipelines/`, `scripts/`,
@@ -75,4 +77,11 @@ Planned future features (no dates; tracked in the internal roadmap):
- [Consumer Guide](consumer-guide) — start here if you are a consumer. - [Consumer Guide](consumer-guide) — start here if you are a consumer.
- [Architecture](architecture) — start here if you are a platform engineer. - [Architecture](architecture) — start here if you are a platform engineer.
- The [README](https://github.com/acdl/acdl) describes the platform repo. - The [README](https://github.com/nova/nova) describes the platform repo.
> **Note:** The product brand is **Nova** (formerly ACDL — Agentic Cloud
> Delivery Platform). The Gitea repository name (`continuous-intelligence/acdl`)
> and the GitHub `uses:` reference (`acdl/.github/workflows/deploy.yml@…`)
> are unchanged during the rebrand transition; only the product name is
> changing. See the [Nova migration guide](NOVA_MIGRATION) for the
> scheduled breaking changes.
+14 -14
View File
@@ -16,28 +16,28 @@ module's README documents which resources it creates.
| Module | What it creates | Source | | Module | What it creates | Source |
|--------|----------------|--------| |--------|----------------|--------|
| `s3` | `aws_s3_bucket` — a single S3 bucket | [modules/l1/s3/README.md](https://github.com/acdl/acdl/blob/main/modules/l1/s3/README.md) | | `s3` | `aws_s3_bucket` — a single S3 bucket | [modules/l1/s3/README.md](https://github.com/nova/nova/blob/main/modules/l1/s3/README.md) |
| `vpc` | `aws_vpc` + `aws_subnet` + `aws_route_table` + `aws_internet_gateway` — VPC with subnets and routing | [modules/l1/vpc/README.md](https://github.com/acdl/acdl/blob/main/modules/l1/vpc/README.md) | | `vpc` | `aws_vpc` + `aws_subnet` + `aws_route_table` + `aws_internet_gateway` — VPC with subnets and routing | [modules/l1/vpc/README.md](https://github.com/nova/nova/blob/main/modules/l1/vpc/README.md) |
| `ecs-cluster` | `aws_ecs_cluster` — ECS Fargate cluster | [modules/l1/ecs-cluster/README.md](https://github.com/acdl/acdl/blob/main/modules/l1/ecs-cluster/README.md) | | `ecs-cluster` | `aws_ecs_cluster` — ECS Fargate cluster | [modules/l1/ecs-cluster/README.md](https://github.com/nova/nova/blob/main/modules/l1/ecs-cluster/README.md) |
| `ecs-service` | `aws_ecs_task_definition` + `aws_ecs_service` — Fargate service with task definition | [modules/l1/ecs-service/README.md](https://github.com/acdl/acdl/blob/main/modules/l1/ecs-service/README.md) | | `ecs-service` | `aws_ecs_task_definition` + `aws_ecs_service` — Fargate service with task definition | [modules/l1/ecs-service/README.md](https://github.com/nova/nova/blob/main/modules/l1/ecs-service/README.md) |
| `iam-role` | `aws_iam_role` — IAM role with assume-role policy | [modules/l1/iam-role/README.md](https://github.com/acdl/acdl/blob/main/modules/l1/iam-role/README.md) | | `iam-role` | `aws_iam_role` — IAM role with assume-role policy | [modules/l1/iam-role/README.md](https://github.com/nova/nova/blob/main/modules/l1/iam-role/README.md) |
| `alb` | `aws_lb` + `aws_lb_target_group` + `aws_lb_listener` — Application Load Balancer | [modules/l1/alb/README.md](https://github.com/acdl/acdl/blob/main/modules/l1/alb/README.md) | | `alb` | `aws_lb` + `aws_lb_target_group` + `aws_lb_listener` — Application Load Balancer | [modules/l1/alb/README.md](https://github.com/nova/nova/blob/main/modules/l1/alb/README.md) |
| `ecr` | `aws_ecr_repository` — ECR container image repository | [modules/l1/ecr/README.md](https://github.com/acdl/acdl/blob/main/modules/l1/ecr/README.md) | | `ecr` | `aws_ecr_repository` — ECR container image repository | [modules/l1/ecr/README.md](https://github.com/nova/nova/blob/main/modules/l1/ecr/README.md) |
| `cloudfront` | `aws_cloudfront_distribution` + `aws_cloudfront_origin_access_control` — CloudFront distribution with S3 origin via OAC | [modules/l1/cloudfront/README.md](https://github.com/acdl/acdl/blob/main/modules/l1/cloudfront/README.md) | | `cloudfront` | `aws_cloudfront_distribution` + `aws_cloudfront_origin_access_control` — CloudFront distribution with S3 origin via OAC | [modules/l1/cloudfront/README.md](https://github.com/nova/nova/blob/main/modules/l1/cloudfront/README.md) |
| `waf` | `aws_wafv2_web_acl` — WAFv2 Web ACL (CloudFront-scoped) | [modules/l1/waf/README.md](https://github.com/acdl/acdl/blob/main/modules/l1/waf/README.md) | | `waf` | `aws_wafv2_web_acl` — WAFv2 Web ACL (CloudFront-scoped) | [modules/l1/waf/README.md](https://github.com/nova/nova/blob/main/modules/l1/waf/README.md) |
| `rds` | `aws_db_instance` — RDS database instance (multi-engine: postgres, mysql, etc.) | [modules/l1/rds/README.md](https://github.com/acdl/acdl/blob/main/modules/l1/rds/README.md) | | `rds` | `aws_db_instance` — RDS database instance (multi-engine: postgres, mysql, etc.) | [modules/l1/rds/README.md](https://github.com/nova/nova/blob/main/modules/l1/rds/README.md) |
## Modules ## Modules
| Module | What it references | Source | | Module | What it references | Source |
|--------|--------------------|--------| |--------|--------------------|--------|
| `static-assets` | 3 primitives (s3, cloudfront, waf) — a production static asset stack | [modules/l2/static-assets/README.md](https://github.com/acdl/acdl/blob/main/modules/l2/static-assets/README.md) | | `static-assets` | 3 primitives (s3, cloudfront, waf) — a production static asset stack | [modules/l2/static-assets/README.md](https://github.com/nova/nova/blob/main/modules/l2/static-assets/README.md) |
| `microservice` | 6 primitives (vpc, cluster, ecr, iam-role, alb, ecs-service) — an ECS Fargate microservice | [modules/l2/microservice/README.md](https://github.com/acdl/acdl/blob/main/modules/l2/microservice/README.md) | | `microservice` | 6 primitives (vpc, cluster, ecr, iam-role, alb, ecs-service) — an ECS Fargate microservice | [modules/l2/microservice/README.md](https://github.com/nova/nova/blob/main/modules/l2/microservice/README.md) |
## Registry ## Registry
Module versions are tracked in Module versions are tracked in
[`registry.json`](https://github.com/acdl/acdl/blob/main/modules/registry.json). [`registry.json`](https://github.com/nova/nova/blob/main/modules/registry.json).
Both primitives and modules are registered. Both primitives and modules are registered.
## Examples ## Examples
@@ -45,7 +45,7 @@ Both primitives and modules are registered.
Each module has a `examples/` directory containing validated consumer Each module has a `examples/` directory containing validated consumer
contract examples (`simple.yaml` + `complex.yaml` + variation files). The contract examples (`simple.yaml` + `complex.yaml` + variation files). The
platform-test pipeline validates them against platform-test pipeline validates them against
[`schemas/contract.schema.json`](https://github.com/acdl/acdl/blob/main/schemas/contract.schema.json). [`schemas/contract.schema.json`](https://github.com/nova/nova/blob/main/schemas/contract.schema.json).
See each module's `## Examples` section for the excerpts. See each module's `## Examples` section for the excerpts.
## Versioning ## Versioning
+5 -5
View File
@@ -6,9 +6,9 @@ are the single source of truth for the workflow files.
## CI pipeline ## CI pipeline
The CI pipeline runs on every push and pull request to `main`. It is defined The CI pipeline runs on every push and pull request to `main`. It is defined
by [`pipelines/ci.yml`](https://github.com/acdl/acdl/blob/main/pipelines/ci.yml), by [`pipelines/ci.yml`](https://github.com/nova/nova/blob/main/pipelines/ci.yml),
validated against validated against
[`schemas/pipeline.schema.json`](https://github.com/acdl/acdl/blob/main/schemas/pipeline.schema.json). [`schemas/pipeline.schema.json`](https://github.com/nova/nova/blob/main/schemas/pipeline.schema.json).
Both platform-runner workflow files implement the same contract and are Both platform-runner workflow files implement the same contract and are
byte-identical: byte-identical:
@@ -31,16 +31,16 @@ bash scripts/run_ci.sh --quiet # suppress per-stage banners
## Deployment pipeline ## Deployment pipeline
The deployment pipeline runs when a consumer submits a contract. It is The deployment pipeline runs when a consumer submits a contract. It is
defined by [`pipelines/contract.yml`](https://github.com/acdl/acdl/blob/main/pipelines/contract.yml), defined by [`pipelines/contract.yml`](https://github.com/nova/nova/blob/main/pipelines/contract.yml),
validated against validated against
[`schemas/deploy-pipeline.schema.json`](https://github.com/acdl/acdl/blob/main/schemas/deploy-pipeline.schema.json). [`schemas/deploy-pipeline.schema.json`](https://github.com/nova/nova/blob/main/schemas/deploy-pipeline.schema.json).
It is exposed to consumer repos as a **reusable workflow**: It is exposed to consumer repos as a **reusable workflow**:
- `.github/workflows/deploy.yml` — GitHub Actions (production) - `.github/workflows/deploy.yml` — GitHub Actions (production)
A consumer repo invokes the reusable workflow via a **versioned tag** A consumer repo invokes the reusable workflow via a **versioned tag**
(floating MAJOR + MINOR, e.g. `acdl/.github/workflows/deploy.yml@v1.13`). (floating MAJOR + MINOR, e.g. `acdl/.github/workflows/deploy.yml@v1.13`).
The workflow checks out the consumer repo, then checks out the ACDL platform The workflow checks out the consumer repo, then checks out the Nova platform
repo into the runner workspace, and runs `scripts/run_platform.sh` against repo into the runner workspace, and runs `scripts/run_platform.sh` against
the consumer's contract. The consumer never clones the platform repo or the consumer's contract. The consumer never clones the platform repo or
invokes its scripts locally. See the [Consumer Guide](../consumer-guide/) invokes its scripts locally. See the [Consumer Guide](../consumer-guide/)
+2 -2
View File
@@ -1,6 +1,6 @@
# Versioning # Versioning
ACDL uses two versioning schemes: one for modules, one for the deploy Nova uses two versioning schemes: one for modules, one for the deploy
pipeline. Both matter to a consumer. pipeline. Both matter to a consumer.
## Module versioning ## Module versioning
@@ -16,7 +16,7 @@ old entry enters a **12-month deprecation window**. A module pins its
primitives by `name@semver`; the resolver picks the highest compatible. primitives by `name@semver`; the resolver picks the highest compatible.
Module versions are tracked in Module versions are tracked in
[`registry.json`](https://github.com/acdl/acdl/blob/main/modules/registry.json). [`registry.json`](https://github.com/nova/nova/blob/main/modules/registry.json).
## Deploy-pipeline versioning (the CI workflow `uses:` tag) ## Deploy-pipeline versioning (the CI workflow `uses:` tag)
+1 -1
View File
@@ -1,6 +1,6 @@
# Presentations # Presentations
Leadership-facing presentation decks for the ACDL platform. Leadership-facing presentation decks for the Nova platform.
## The 4-step slide creation process ## The 4-step slide creation process
@@ -6,7 +6,7 @@ flowchart LR
A["Technical dev\n(app code + contract)"] A["Technical dev\n(app code + contract)"]
B["Citizen dev\n(intent → AI agent\n→ contract)"] B["Citizen dev\n(intent → AI agent\n→ contract)"]
end end
subgraph ACDL ["ACDL — infrastructure only"] subgraph ACDL ["Nova — infrastructure only"]
C["Same contract\nSame pipeline\nSame safety"] C["Same contract\nSame pipeline\nSame safety"]
D["Provision\nAWS resources"] D["Provision\nAWS resources"]
E["Evidence\nhash-chained"] E["Evidence\nhash-chained"]
@@ -3,7 +3,7 @@
flowchart LR flowchart LR
A["Consumer repo<br/>app + contract + 'uses:'"] -->|triggers on push to main| B["Platform runner"] A["Consumer repo<br/>app + contract + 'uses:'"] -->|triggers on push to main| B["Platform runner"]
B -->|checks out the consumer repo| A B -->|checks out the consumer repo| A
B -->|checks out the ACDL platform repo<br/>into the workspace| C["Platform code<br/>(modules, adapters, schemas)"] B -->|checks out the Nova platform repo<br/>into the workspace| C["Platform code<br/>(modules, adapters, schemas)"]
C --> B C --> B
B -->|runs the pipeline against<br/>the consumer's contract| D["Consumer's resources in AWS"] B -->|runs the pipeline against<br/>the consumer's contract| D["Consumer's resources in AWS"]
classDef accent fill:#1B1B1B,color:#fff,stroke:#D6002A,stroke-width:2px classDef accent fill:#1B1B1B,color:#fff,stroke:#D6002A,stroke-width:2px
@@ -7,7 +7,7 @@ flowchart TD
U2["Citizen dev\nintent → AI agent → contract"] U2["Citizen dev\nintent → AI agent → contract"]
end end
subgraph ACDL ["ACDL — infrastructure only"] subgraph ACDL ["Nova — infrastructure only"]
direction TB direction TB
CS["Contract schema\n(validate + fail-fast)"] CS["Contract schema\n(validate + fail-fast)"]
subgraph PIPE ["Central pipeline — fixed stages, every deployment"] subgraph PIPE ["Central pipeline — fixed stages, every deployment"]
@@ -9,7 +9,7 @@ flowchart LR
D["Manual promotion"] D["Manual promotion"]
A --> B --> C --> D A --> B --> C --> D
end end
subgraph ACDL ["With ACDL"] subgraph ACDL ["With Nova"]
direction TB direction TB
E["Declare intent\n(one YAML contract)"] E["Declare intent\n(one YAML contract)"]
F["Platform delivers\nsafely, autonomously"] F["Platform delivers\nsafely, autonomously"]
@@ -7,7 +7,7 @@ flowchart LR
B["Agentic SDLC\n(agent writes contract)"] B["Agentic SDLC\n(agent writes contract)"]
C["Citizen dev\n(vibe codes → AI agent\n→ contract)"] C["Citizen dev\n(vibe codes → AI agent\n→ contract)"]
end end
subgraph ACDL ["ACDL — infrastructure only"] subgraph ACDL ["Nova — infrastructure only"]
D["Contract\nvalidated"] D["Contract\nvalidated"]
E["Resolve → Plan\nSecurity + Policy checks\nConfidence signal"] E["Resolve → Plan\nSecurity + Policy checks\nConfidence signal"]
F["Provision\nAWS resources"] F["Provision\nAWS resources"]
Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 76 KiB

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 30 KiB

@@ -31,7 +31,7 @@ style: |
# How The Platform Works # How The Platform Works
### Agentic Cloud Delivery Platform ### Nova — The New Dawn of DevSecOps
<style> <style>
section.title h1 { font-size: 44px; margin-bottom: 0.1em; } section.title h1 { font-size: 44px; margin-bottom: 0.1em; }
@@ -72,12 +72,12 @@ section.title h3 { color: #F0F0F0; font-weight: 400; font-size: 22px; margin-top
--- ---
# ACDL owns infrastructure, not your app # Nova owns infrastructure, not your app
![w:1100](assets/png/platform-works-03-scope-boundary.png) ![w:1100](assets/png/platform-works-03-scope-boundary.png)
- **Upstream is anything** — IDE, agentic SDLC, or vibe coding - **Upstream is anything** — IDE, agentic SDLC, or vibe coding
- **ACDL is infrastructure only** — provisions and governs AWS resources - **Nova is infrastructure only** — provisions and governs AWS resources
- **Not a general-purpose AI** — autonomy is narrow, policy-bounded - **Not a general-purpose AI** — autonomy is narrow, policy-bounded
- **Not a permissive highway** — no escape hatches - **Not a permissive highway** — no escape hatches
@@ -299,7 +299,7 @@ section { font-size: 20px; }
table { font-size: 18px; } table { font-size: 18px; }
</style> </style>
ACDL runs at **zero cloud cost** for day-to-day development. AWS spend was measured via Cost Explorer (`COST.md`, 2026-07-28): Nova runs at **zero cloud cost** for day-to-day development. AWS spend was measured via Cost Explorer (`COST.md`, 2026-07-28):
| Metric | Value | | Metric | Value |
|--------|-------| |--------|-------|
@@ -36,7 +36,7 @@
- One-slide map of the whole platform — use it to orient the audience before diving into any single component - One-slide map of the whole platform — use it to orient the audience before diving into any single component
- The leadership-relevant beats: (1) two surfaces, one pipeline, one evidence stream — the convergence is the design; (2) the pipeline stages are fixed and identical for every consumer; (3) the engine adapter is the only engine-specific code, which makes the catalog and confidence model portable - The leadership-relevant beats: (1) two surfaces, one pipeline, one evidence stream — the convergence is the design; (2) the pipeline stages are fixed and identical for every consumer; (3) the engine adapter is the only engine-specific code, which makes the catalog and confidence model portable
- Don't walk every node — point to the boundaries and say "the rest of this deck zooms into each of these" - Don't walk every node — point to the boundaries and say "the rest of this deck zooms into each of these"
- The contract schema is the boundary between upstream and ACDL; everything left of it is the consumer's, everything right of it is the platform's - The contract schema is the boundary between upstream and Nova; everything left of it is the consumer's, everything right of it is the platform's
**Key takeaway:** Two surfaces, one pipeline, one evidence stream. The rest of the deck zooms in. **Key takeaway:** Two surfaces, one pipeline, one evidence stream. The rest of the deck zooms in.
@@ -45,7 +45,7 @@
## Slide 4 — Declare intent; the platform delivers safe production ## Slide 4 — Declare intent; the platform delivers safe production
**Talking points:** **Talking points:**
- Land the before/after contrast: today's queue vs. ACDL's autonomous flow - Land the before/after contrast: today's queue vs. Nova's autonomous flow
- The litmus test: if a platform engineer still has to touch a ticket for a dev→qa promotion, we haven't delivered the vision - The litmus test: if a platform engineer still has to touch a ticket for a dev→qa promotion, we haven't delivered the vision
- The North Star is one sentence: "declare intent → safe production deployment" - The North Star is one sentence: "declare intent → safe production deployment"
- A non-technical consumer ships by declaring intent — no workflow, no config file, no module - A non-technical consumer ships by declaring intent — no workflow, no config file, no module
@@ -54,15 +54,15 @@
--- ---
## Slide 5 — ACDL owns infrastructure, not your app ## Slide 5 — Nova owns infrastructure, not your app
**Talking points:** **Talking points:**
- The platform is deliberately scoped — it is not trying to be everything - The platform is deliberately scoped — it is not trying to be everything
- The sovereign boundary: the platform team owns delivery and infrastructure, not the upstream development process - The sovereign boundary: the platform team owns delivery and infrastructure, not the upstream development process
- The anti-goals are as important as the goals — they tell leadership what not to expect - The anti-goals are as important as the goals — they tell leadership what not to expect
- Upstream is anything: IDE, agentic SDLC, or vibe coding — ACDL doesn't care how the contract was produced - Upstream is anything: IDE, agentic SDLC, or vibe coding — Nova doesn't care how the contract was produced
**Key takeaway:** ACDL is infrastructure only. App build/test/deploy is upstream. **Key takeaway:** Nova is infrastructure only. App build/test/deploy is upstream.
--- ---
@@ -48,7 +48,7 @@ img { display: block; margin: 0 auto; max-height: 300px; }
<header>How The Platform Works</header> <header>How The Platform Works</header>
<h1 id="how-the-platform-works">How The Platform Works</h1> <h1 id="how-the-platform-works">How The Platform Works</h1>
<h3 id="agentic-cloud-delivery-platform">Agentic Cloud Delivery Platform</h3> <h3 id="nova-the-new-dawn-of-devsecops">Nova — The New Dawn of DevSecOps</h3>
<footer>Internal</footer> <footer>Internal</footer>
</section> </section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="2" data-paginate="true" data-header="How The Platform Works" data-footer="Internal" data-theme="default" data-style="section { </foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="2" data-paginate="true" data-header="How The Platform Works" data-footer="Internal" data-theme="default" data-style="section {
@@ -232,11 +232,11 @@ img { display: block; margin: 0 auto; max-height: 300px; }
.planned { background: #fef3c7; color: #78350f; } .planned { background: #fef3c7; color: #78350f; }
;" data-marpit-pagination-total="20"> ;" data-marpit-pagination-total="20">
<header>How The Platform Works</header> <header>How The Platform Works</header>
<h1 id="acdl-owns-infrastructure-not-your-app">ACDL owns infrastructure, not your app</h1> <h1 id="nova-owns-infrastructure-not-your-app">Nova owns infrastructure, not your app</h1>
<p><img src="assets/png/platform-works-03-scope-boundary.png" alt="" style="width:1100px;" /></p> <p><img src="assets/png/platform-works-03-scope-boundary.png" alt="" style="width:1100px;" /></p>
<ul> <ul>
<li><strong>Upstream is anything</strong> — IDE, agentic SDLC, or vibe coding</li> <li><strong>Upstream is anything</strong> — IDE, agentic SDLC, or vibe coding</li>
<li><strong>ACDL is infrastructure only</strong> — provisions and governs AWS resources</li> <li><strong>Nova is infrastructure only</strong> — provisions and governs AWS resources</li>
<li><strong>Not a general-purpose AI</strong> — autonomy is narrow, policy-bounded</li> <li><strong>Not a general-purpose AI</strong> — autonomy is narrow, policy-bounded</li>
<li><strong>Not a permissive highway</strong> — no escape hatches</li> <li><strong>Not a permissive highway</strong> — no escape hatches</li>
</ul> </ul>
@@ -1005,7 +1005,7 @@ img { display: block; margin: 0 auto; max-height: 300px; }
<header>How The Platform Works</header> <header>How The Platform Works</header>
<h1 id="a7--operating-model--cost">A7 — Operating Model &amp; Cost</h1> <h1 id="a7--operating-model--cost">A7 — Operating Model &amp; Cost</h1>
<p>ACDL runs at <strong>zero cloud cost</strong> for day-to-day development. AWS spend was measured via Cost Explorer (<code>COST.md</code>, 2026-07-28):</p> <p>Nova runs at <strong>zero cloud cost</strong> for day-to-day development. AWS spend was measured via Cost Explorer (<code>COST.md</code>, 2026-07-28):</p>
<table> <table>
<thead> <thead>
<tr> <tr>
+14 -12
View File
@@ -1,6 +1,6 @@
# How The Platform Works # How The Platform Works
> **Subtitle:** Agentic Cloud Delivery Platform > **Subtitle:** Nova — The New Dawn of DevSecOps
> **Audience:** Senior Leadership, CTO, Head of Cloud, Head of Infrastructure, Head of DevOps > **Audience:** Senior Leadership, CTO, Head of Cloud, Head of Infrastructure, Head of DevOps
> **Length:** ~16 minutes · 11 main + Appendix TOC + 8 appendix = 20 slides > **Length:** ~16 minutes · 11 main + Appendix TOC + 8 appendix = 20 slides
> **Purpose:** Sell the platform's value to tech leadership — zero-trust, security, observability, auditability, and the shift from "operators guess" to "the platform computes safety." > **Purpose:** Sell the platform's value to tech leadership — zero-trust, security, observability, auditability, and the shift from "operators guess" to "the platform computes safety."
@@ -13,7 +13,9 @@
# How The Platform Works # How The Platform Works
### Agentic Cloud Delivery Platform ### Nova — The New Dawn of DevSecOps
**Security as a seamless enabler of fast deployments — not a bottleneck, not a "no" department.**
> **Speaker notes:** Brief introduction — this deck explains *how* the platform works internally, not what the developer experience is (that's the companion deck). Set the frame: the platform is not a CI/CD tool — it's the organizational lever for shipping safely at the pace the business demands. > **Speaker notes:** Brief introduction — this deck explains *how* the platform works internally, not what the developer experience is (that's the companion deck). Set the frame: the platform is not a CI/CD tool — it's the organizational lever for shipping safely at the pace the business demands.
@@ -62,7 +64,7 @@ flowchart TD
U2["Citizen dev\nintent → AI agent → contract"] U2["Citizen dev\nintent → AI agent → contract"]
end end
subgraph ACDL ["ACDL — infrastructure only"] subgraph ACDL ["Nova — infrastructure only"]
direction TB direction TB
CS["Contract schema\n(validate + fail-fast)"] CS["Contract schema\n(validate + fail-fast)"]
subgraph PIPE ["Central pipeline — fixed stages, every deployment"] subgraph PIPE ["Central pipeline — fixed stages, every deployment"]
@@ -97,7 +99,7 @@ flowchart TD
``` ```
- **Consumer surfaces** — technical dev or citizen dev; both produce a contract. Upstream is anything. - **Consumer surfaces** — technical dev or citizen dev; both produce a contract. Upstream is anything.
- **Contract schema** — the boundary between upstream and ACDL; validated fail-fast. - **Contract schema** — the boundary between upstream and Nova; validated fail-fast.
- **Central pipeline** — fixed stages, identical for every deployment: validate → resolve → security → plan → policy → confidence → evidence → apply. - **Central pipeline** — fixed stages, identical for every deployment: validate → resolve → security → plan → policy → confidence → evidence → apply.
- **Module catalog** — security-reviewed primitives + modules the resolver expands against. - **Module catalog** — security-reviewed primitives + modules the resolver expands against.
- **Engine adapter** — stateless; the only engine-specific code (Terraform today). - **Engine adapter** — stateless; the only engine-specific code (Terraform today).
@@ -123,7 +125,7 @@ flowchart LR
D["Manual promotion"] D["Manual promotion"]
A --> B --> C --> D A --> B --> C --> D
end end
subgraph ACDL ["With ACDL"] subgraph ACDL ["With Nova"]
direction TB direction TB
E["Declare intent\n(one YAML contract)"] E["Declare intent\n(one YAML contract)"]
F["Platform delivers\nsafely, autonomously"] F["Platform delivers\nsafely, autonomously"]
@@ -137,11 +139,11 @@ flowchart LR
- A **non-technical consumer** ships by declaring intent — no workflow, no config file, no module. - A **non-technical consumer** ships by declaring intent — no workflow, no config file, no module.
- Every production change is **traceable to a human attestation** and an immutable evidence stream. - Every production change is **traceable to a human attestation** and an immutable evidence stream.
> **Speaker notes:** Land the before/after contrast: today's queue vs. ACDL's autonomous flow. The litmus test: if a platform engineer still has to touch a ticket for a dev→qa promotion, we haven't delivered the vision. The North Star is "declare intent → safe production deployment." > **Speaker notes:** Land the before/after contrast: today's queue vs. Nova's autonomous flow. The litmus test: if a platform engineer still has to touch a ticket for a dev→qa promotion, we haven't delivered the vision. The North Star is "declare intent → safe production deployment."
--- ---
## Slide 5 — ACDL owns infrastructure, not your app ## Slide 5 — Nova owns infrastructure, not your app
The platform is deliberately scoped — it is not trying to be everything. The platform is deliberately scoped — it is not trying to be everything.
@@ -153,7 +155,7 @@ flowchart LR
B["Agentic SDLC\n(agent writes contract)"] B["Agentic SDLC\n(agent writes contract)"]
C["Citizen dev\n(vibe codes → AI agent\n→ contract)"] C["Citizen dev\n(vibe codes → AI agent\n→ contract)"]
end end
subgraph ACDL ["ACDL — infrastructure only"] subgraph ACDL ["Nova — infrastructure only"]
D["Contract\nvalidated"] D["Contract\nvalidated"]
E["Resolve → Plan\nSecurity + Policy checks\nConfidence signal"] E["Resolve → Plan\nSecurity + Policy checks\nConfidence signal"]
F["Provision\nAWS resources"] F["Provision\nAWS resources"]
@@ -173,8 +175,8 @@ flowchart LR
H --> I H --> I
``` ```
- **Upstream is anything** — IDE, agentic SDLC, or vibe coding. ACDL doesn't care how the contract was produced. - **Upstream is anything** — IDE, agentic SDLC, or vibe coding. Nova doesn't care how the contract was produced.
- **ACDL is infrastructure only** — it provisions and governs AWS resources. App build/test/deploy is upstream. - **Nova is infrastructure only** — it provisions and governs AWS resources. App build/test/deploy is upstream.
- **Not a general-purpose AI** — autonomy is narrow, scoped to delivery, bounded by strict policy. - **Not a general-purpose AI** — autonomy is narrow, scoped to delivery, bounded by strict policy.
- **Not a permissive highway** — no escape hatches to bypass the confidence framework. - **Not a permissive highway** — no escape hatches to bypass the confidence framework.
@@ -184,7 +186,7 @@ flowchart LR
## Slide 6 — One YAML file. The platform owns everything else. ## Slide 6 — One YAML file. The platform owns everything else.
The contract is the boundary between upstream and ACDL. It's all a consumer writes. The contract is the boundary between upstream and Nova. It's all a consumer writes.
```mermaid ```mermaid
flowchart LR flowchart LR
@@ -456,7 +458,7 @@ A phased roadmap from the current Testing baseline to the full North Star:
## A7 — Operating Model & Cost (real AWS spend + pre-mortem) ## A7 — Operating Model & Cost (real AWS spend + pre-mortem)
ACDL runs at **zero cloud cost** for day-to-day development. The v1.0→v1.10 AWS spend was measured directly via Cost Explorer (`COST.md`, 2026-07-28): Nova runs at **zero cloud cost** for day-to-day development. The v1.0→v1.10 AWS spend was measured directly via Cost Explorer (`COST.md`, 2026-07-28):
| Metric | Value | | Metric | Value |
|--------|-------| |--------|-------|
@@ -33,7 +33,7 @@ style: |
# The Developer Experience # The Developer Experience
### Agentic Cloud Delivery Platform ### Nova — The New Dawn of DevSecOps
<style> <style>
section.title h1 { font-size: 44px; margin-bottom: 0.1em; } section.title h1 { font-size: 44px; margin-bottom: 0.1em; }
@@ -48,8 +48,8 @@ section.title h3 { color: #F0F0F0; font-weight: 400; font-size: 22px; margin-top
- **Technical developer** — owns app code + a contract + a thin CI definition - **Technical developer** — owns app code + a contract + a thin CI definition
- **Citizen developer** — declares intent; an AI agent produces a contract that passes the **same** safety envelope - **Citizen developer** — declares intent; an AI agent produces a contract that passes the **same** safety envelope
- **Upstream is anything** — IDE, agentic SDLC, or vibe coding. ACDL doesn't care how the contract was produced - **Upstream is anything** — IDE, agentic SDLC, or vibe coding. Nova doesn't care how the contract was produced
- **ACDL is infrastructure only** — provisions and governs AWS resources. Application deployment is upstream - **Nova is infrastructure only** — provisions and governs AWS resources. Application deployment is upstream
--- ---
@@ -287,7 +287,7 @@ section { font-size: 20px; }
table { font-size: 18px; } table { font-size: 18px; }
</style> </style>
ACDL runs at **zero cloud cost** for day-to-day development. AWS spend was measured via Cost Explorer (`COST.md`, 2026-07-28): Nova runs at **zero cloud cost** for day-to-day development. AWS spend was measured via Cost Explorer (`COST.md`, 2026-07-28):
| Metric | Value | | Metric | Value |
|--------|-------| |--------|-------|
@@ -21,13 +21,13 @@
## Slide 2 — Two consumer paths, one safety envelope ## Slide 2 — Two consumer paths, one safety envelope
**Talking points:** **Talking points:**
- This is the scope-boundary slide — here's who uses the platform, and here's where ACDL's responsibility starts and stops - This is the scope-boundary slide — here's who uses the platform, and here's where Nova's responsibility starts and stops
- Two consumer paths converge on the same contract: **technical** developer writes the contract directly; **citizen** developer declares intent and an AI agent produces a contract that passes the same safety envelope - Two consumer paths converge on the same contract: **technical** developer writes the contract directly; **citizen** developer declares intent and an AI agent produces a contract that passes the same safety envelope
- Upstream is anything — your IDE, an agentic SDLC, or vibe coding on a laptop. ACDL doesn't care how the contract was produced - Upstream is anything — your IDE, an agentic SDLC, or vibe coding on a laptop. Nova doesn't care how the contract was produced
- ACDL is infrastructure only — it provisions and governs AWS resources. Application deployment is upstream of the contract - Nova is infrastructure only — it provisions and governs AWS resources. Application deployment is upstream of the contract
- The two surfaces are *parallel*, not a progression. A citizen developer doesn't "graduate" to the developer surface. There is no "citizen developer mode" with weaker checks - The two surfaces are *parallel*, not a progression. A citizen developer doesn't "graduate" to the developer surface. There is no "citizen developer mode" with weaker checks
**Key takeaway:** Two consumer paths, one safety envelope. ACDL is infra only — anything upstream is fair game. **Key takeaway:** Two consumer paths, one safety envelope. Nova is infra only — anything upstream is fair game.
--- ---
@@ -52,7 +52,7 @@ img { display: block; margin: 0 auto; max-height: 280px; }
<header>The Developer Experience</header> <header>The Developer Experience</header>
<h1 id="the-developer-experience">The Developer Experience</h1> <h1 id="the-developer-experience">The Developer Experience</h1>
<h3 id="agentic-cloud-delivery-platform">Agentic Cloud Delivery Platform</h3> <h3 id="nova-the-new-dawn-of-devsecops">Nova — The New Dawn of DevSecOps</h3>
<footer>Internal</footer> <footer>Internal</footer>
</section> </section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="2" data-paginate="true" data-header="The Developer Experience" data-footer="Internal" data-theme="default" data-style="section { </foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="2" data-paginate="true" data-header="The Developer Experience" data-footer="Internal" data-theme="default" data-style="section {
@@ -102,8 +102,8 @@ img { display: block; margin: 0 auto; max-height: 280px; }
<ul> <ul>
<li><strong>Technical developer</strong> — owns app code + a contract + a thin CI definition</li> <li><strong>Technical developer</strong> — owns app code + a contract + a thin CI definition</li>
<li><strong>Citizen developer</strong> — declares intent; an AI agent produces a contract that passes the <strong>same</strong> safety envelope</li> <li><strong>Citizen developer</strong> — declares intent; an AI agent produces a contract that passes the <strong>same</strong> safety envelope</li>
<li><strong>Upstream is anything</strong> — IDE, agentic SDLC, or vibe coding. ACDL doesn't care how the contract was produced</li> <li><strong>Upstream is anything</strong> — IDE, agentic SDLC, or vibe coding. Nova doesn't care how the contract was produced</li>
<li><strong>ACDL is infrastructure only</strong> — provisions and governs AWS resources. Application deployment is upstream</li> <li><strong>Nova is infrastructure only</strong> — provisions and governs AWS resources. Application deployment is upstream</li>
</ul> </ul>
<footer>Internal</footer> <footer>Internal</footer>
</section> </section>
@@ -1028,7 +1028,7 @@ img { display: block; margin: 0 auto; max-height: 280px; }
<header>The Developer Experience</header> <header>The Developer Experience</header>
<h1 id="a6--operating-model--cost">A6 — Operating Model &amp; Cost</h1> <h1 id="a6--operating-model--cost">A6 — Operating Model &amp; Cost</h1>
<p>ACDL runs at <strong>zero cloud cost</strong> for day-to-day development. AWS spend was measured via Cost Explorer (<code>COST.md</code>, 2026-07-28):</p> <p>Nova runs at <strong>zero cloud cost</strong> for day-to-day development. AWS spend was measured via Cost Explorer (<code>COST.md</code>, 2026-07-28):</p>
<table> <table>
<thead> <thead>
<tr> <tr>
+10 -8
View File
@@ -1,6 +1,6 @@
# The Developer Experience # The Developer Experience
> **Subtitle:** Agentic Cloud Delivery Platform > **Subtitle:** Nova — The New Dawn of DevSecOps
> **Audience:** Senior Leadership, CTO, Head of Cloud, Head of Infrastructure, Head of DevOps > **Audience:** Senior Leadership, CTO, Head of Cloud, Head of Infrastructure, Head of DevOps
> **Length:** ~16 minutes · 11 main + Appendix TOC + 7 appendix = 19 slides > **Length:** ~16 minutes · 11 main + Appendix TOC + 7 appendix = 19 slides
> **Purpose:** Sell the developer experience and the citizen developer experience to tech leadership — velocity without sacrificing safety, and security/observability/compliance as platform defaults rather than per-team effort. > **Purpose:** Sell the developer experience and the citizen developer experience to tech leadership — velocity without sacrificing safety, and security/observability/compliance as platform defaults rather than per-team effort.
@@ -11,6 +11,8 @@
## Slide 1 — Title ## Slide 1 — Title
**Nova — The New Dawn of DevSecOps.** Security as a seamless enabler of fast deployments — not a bottleneck, not a "no" department.
The consumer surface is intentionally tiny. The platform's surface is large and opinionated. The consumer surface is intentionally tiny. The platform's surface is large and opinionated.
> **Speaker notes:** Brief introduction — this deck covers *who uses the platform and how fast/safe they ship*, not the internal mechanics (that's the companion deck). Set the frame: velocity without sacrificing safety, and security/observability/compliance as platform defaults rather than per-team effort. > **Speaker notes:** Brief introduction — this deck covers *who uses the platform and how fast/safe they ship*, not the internal mechanics (that's the companion deck). Set the frame: velocity without sacrificing safety, and security/observability/compliance as platform defaults rather than per-team effort.
@@ -28,7 +30,7 @@ flowchart LR
A["Technical dev\n(app code + contract)"] A["Technical dev\n(app code + contract)"]
B["Citizen dev\n(intent → AI agent\n→ contract)"] B["Citizen dev\n(intent → AI agent\n→ contract)"]
end end
subgraph ACDL ["ACDL — infrastructure only"] subgraph ACDL ["Nova — infrastructure only"]
C["Same contract\nSame pipeline\nSame safety"] C["Same contract\nSame pipeline\nSame safety"]
D["Provision\nAWS resources"] D["Provision\nAWS resources"]
E["Evidence\nhash-chained"] E["Evidence\nhash-chained"]
@@ -47,10 +49,10 @@ flowchart LR
- **Technical developer** — owns app code + a contract + a thin CI definition. - **Technical developer** — owns app code + a contract + a thin CI definition.
- **Citizen developer** — declares intent in plain language; an AI agent produces a contract that passes the **same** safety envelope. - **Citizen developer** — declares intent in plain language; an AI agent produces a contract that passes the **same** safety envelope.
- **Upstream is anything** — IDE, agentic SDLC, or vibe coding. ACDL doesn't care how the contract was produced. - **Upstream is anything** — IDE, agentic SDLC, or vibe coding. Nova doesn't care how the contract was produced.
- **ACDL is infrastructure only** — it provisions and governs AWS resources. Application deployment is upstream. - **Nova is infrastructure only** — it provisions and governs AWS resources. Application deployment is upstream.
> **Speaker notes:** This is the thesis of the deck. The two surfaces are *parallel*, not a progression — a citizen developer doesn't "graduate" to the developer surface. Both produce a contract; both get the same treatment. The scope boundary matters: anything upstream of the contract is out of ACDL's concern. The leadership takeaway: we expand who can ship safely without lowering the bar. > **Speaker notes:** This is the thesis of the deck. The two surfaces are *parallel*, not a progression — a citizen developer doesn't "graduate" to the developer surface. Both produce a contract; both get the same treatment. The scope boundary matters: anything upstream of the contract is out of Nova's concern. The leadership takeaway: we expand who can ship safely without lowering the bar.
--- ---
@@ -66,7 +68,7 @@ flowchart TD
U2["Citizen dev\nintent → AI agent → contract"] U2["Citizen dev\nintent → AI agent → contract"]
end end
subgraph ACDL ["ACDL — infrastructure only"] subgraph ACDL ["Nova — infrastructure only"]
direction TB direction TB
CS["Contract schema\n(validate + fail-fast)"] CS["Contract schema\n(validate + fail-fast)"]
subgraph PIPE ["Central pipeline — fixed stages, every deployment"] subgraph PIPE ["Central pipeline — fixed stages, every deployment"]
@@ -364,7 +366,7 @@ Consumers `uses:` a **versioned** central workflow. The platform fetches itself
flowchart LR flowchart LR
A["Consumer repo<br/>app + contract + 'uses:'"] -->|triggers on push to main| B["Platform runner"] A["Consumer repo<br/>app + contract + 'uses:'"] -->|triggers on push to main| B["Platform runner"]
B -->|checks out the consumer repo| A B -->|checks out the consumer repo| A
B -->|checks out the ACDL platform repo<br/>into the workspace| C["Platform code<br/>(modules, adapters, schemas)"] B -->|checks out the Nova platform repo<br/>into the workspace| C["Platform code<br/>(modules, adapters, schemas)"]
C --> B C --> B
B -->|runs the pipeline against<br/>the consumer's contract| D["Consumer's resources in AWS"] B -->|runs the pipeline against<br/>the consumer's contract| D["Consumer's resources in AWS"]
``` ```
@@ -426,7 +428,7 @@ flowchart LR
## A6 — Operating Model & Cost ## A6 — Operating Model & Cost
ACDL runs at **zero cloud cost** for day-to-day development. The v1.0→v1.10 AWS spend was measured directly via Cost Explorer (`COST.md`, 2026-07-28): Nova runs at **zero cloud cost** for day-to-day development. The v1.0→v1.10 AWS spend was measured directly via Cost Explorer (`COST.md`, 2026-07-28):
| Metric | Value | | Metric | Value |
|--------|-------| |--------|-------|
+3 -1
View File
@@ -1,4 +1,6 @@
# Agentic Cloud Delivery Vision # Nova Vision
> **Nova — The New Dawn of DevSecOps.** Security as a seamless enabler of fast deployments — not a bottleneck, not a "no" department.
## 1. The Friction ## 1. The Friction
+1 -1
View File
@@ -1,4 +1,4 @@
# ACDL Modules # Nova Modules
Reusable building blocks for cloud infrastructure. Each module is Reusable building blocks for cloud infrastructure. Each module is
self-documented with a `README.md` following the self-documented with a `README.md` following the
+2 -2
View File
@@ -1,6 +1,6 @@
# ACDL Module Engineering Standards # Nova Module Engineering Standards
Standards for authoring and reviewing ACDL modules. These standards Standards for authoring and reviewing Nova modules. These standards
govern the two module tiers — **L1 primitives** (single cloud resource govern the two module tiers — **L1 primitives** (single cloud resource
or small group of related resources) and **L2 modules** (compositions or small group of related resources) and **L2 modules** (compositions
that reference L1 primitives to deploy a complete stack) — and the that reference L1 primitives to deploy a complete stack) — and the
+1 -1
View File
@@ -42,7 +42,7 @@ rotation enabled. One key per L2 deployment (no shared keys).
"type": "aws:kms:key", "type": "aws:kms:key",
"module": "kms-key@1.0.0", "module": "kms-key@1.0.0",
"inputs": { "inputs": {
"description": "ACDL per-stack CMK", "description": "Nova per-stack CMK",
"region": "us-east-1" "region": "us-east-1"
} }
} }
+5 -5
View File
@@ -1,16 +1,16 @@
# ACDL Pipelines # Nova Pipelines
## Overview ## Overview
ACDL uses declarative pipeline contracts (YAML) as the single source of truth. Both Gitea and GitHub workflows implement the same contract (byte-identical). The shell runner (`scripts/run_ci.sh`) mirrors the CI pipeline locally so that every stage that runs in CI can be reproduced on a developer machine without a forge. Nova uses declarative pipeline contracts (YAML) as the single source of truth. Both Gitea and GitHub workflows implement the same contract (byte-identical). The shell runner (`scripts/run_ci.sh`) mirrors the CI pipeline locally so that every stage that runs in CI can be reproduced on a developer machine without a forge.
## Existing Pipelines ## Existing Pipelines
| Pipeline | File | Stages | Triggers | | Pipeline | File | Stages | Triggers |
| --- | --- | --- | --- | | --- | --- | --- | --- |
| ACDL CI | `ci.yml` | `lint`, `test`, `check-only` | push/PR to `main` | | Nova CI | `ci.yml` | `lint`, `test`, `check-only` | push/PR to `main` |
| ACDL Deploy | `contract.yml` | `validate-contract`, `resolve-stack`, `terraform-plan`, `checkov`, `confidence`, `apply`, `publish-outputs`, `deploy-uptime`, `comment-outputs` | push/PR to `main` (consumer repos via `workflow_call`) | | Nova Deploy | `contract.yml` | `validate-contract`, `resolve-stack`, `terraform-plan`, `checkov`, `confidence`, `apply`, `publish-outputs`, `deploy-uptime`, `comment-outputs` | push/PR to `main` (consumer repos via `workflow_call`) |
| ACDL Modules Lifecycle | `modules-lifecycle.yml` | `platform-vpc-apply`, `lifecycle-apply`, `lifecycle-modify`, `lifecycle-destroy`, `l2-lifecycle-apply`, `l2-lifecycle-modify`, `l2-lifecycle-destroy`, `platform-vpc-destroy` | PR to `main` + `workflow_dispatch` | | Nova Modules Lifecycle | `modules-lifecycle.yml` | `platform-vpc-apply`, `lifecycle-apply`, `lifecycle-modify`, `lifecycle-destroy`, `l2-lifecycle-apply`, `l2-lifecycle-modify`, `l2-lifecycle-destroy`, `platform-vpc-destroy` | PR to `main` + `workflow_dispatch` |
## How to Write a Pipeline ## How to Write a Pipeline
+1 -1
View File
@@ -1,4 +1,4 @@
# ACDL Central CI Pipeline Contract (v1.5) # Nova Central CI Pipeline Contract (v1.5)
# #
# This is the single source of truth for the CI/CD pipeline. Both # This is the single source of truth for the CI/CD pipeline. Both
# .gitea/workflows/ci.yml (Gitea Actions, dev) and # .gitea/workflows/ci.yml (Gitea Actions, dev) and
+1 -1
View File
@@ -1,4 +1,4 @@
# ACDL Central Deployment Pipeline Contract (v1.8) # Nova Central Deployment Pipeline Contract (v1.8)
# #
# This is the single source of truth for the deployment pipeline. It # This is the single source of truth for the deployment pipeline. It
# declares the stages that run when a consumer submits a contract: # declares the stages that run when a consumer submits a contract:
+1 -1
View File
@@ -1,6 +1,6 @@
name: acdl-modules-lifecycle name: acdl-modules-lifecycle
# ACDL Modules Lifecycle Pipeline — apply→modify→destroy against live AWS. # Nova Modules Lifecycle Pipeline — apply→modify→destroy against live AWS.
# #
# Matrix-runs each L1 module's examples/{simple,complex}.yml contracts: # Matrix-runs each L1 module's examples/{simple,complex}.yml contracts:
# 1. --apply simple.yml (terraform apply — creates resources) # 1. --apply simple.yml (terraform apply — creates resources)
+2 -2
View File
@@ -1,7 +1,7 @@
[project] [project]
name = "acdl" name = "nova"
version = "1.14.0" version = "1.14.0"
description = "Agentic Cloud Delivery Platform — consumers declare intent; the platform delivers safe production deployment." description = "Nova — consumers declare intent; the platform delivers safe production deployment."
requires-python = ">=3.10" requires-python = ">=3.10"
dependencies = [ dependencies = [
"boto3>=1.34", "boto3>=1.34",
+9 -9
View File
@@ -1,24 +1,24 @@
# ACDL Schemas # Nova Schemas
## Overview ## Overview
ACDL uses JSON Schema draft 2020-12 for all declarative contracts. Schemas are the single source of truth for validation. Every contract, stack instance, pipeline, and policy result in the platform is validated against a schema in this directory before it is consumed by any downstream code path. The resolver, the pipeline runner, the CI workflows, and the test suite all load these schemas directly. Nova uses JSON Schema draft 2020-12 for all declarative contracts. Schemas are the single source of truth for validation. Every contract, stack instance, pipeline, and policy result in the platform is validated against a schema in this directory before it is consumed by any downstream code path. The resolver, the pipeline runner, the CI workflows, and the test suite all load these schemas directly.
## Existing Schemas ## Existing Schemas
| Schema | File | Purpose | Where Validated | | Schema | File | Purpose | Where Validated |
| --- | --- | --- | --- | | --- | --- | --- | --- |
| ACDL Consumer Contract | `contract.schema.json` | Consumer contract validation (id, name, environment, infrastructure map with module versions + inputs) | `core/contract_resolver.py`, `scripts/run_platform.sh` Step 1, CI `schema-validation` job | | Nova Consumer Contract | `contract.schema.json` | Consumer contract validation (id, name, environment, infrastructure map with module versions + inputs) | `core/contract_resolver.py`, `scripts/run_platform.sh` Step 1, CI `schema-validation` job |
| ACDL Target Stack | `stack.schema.json` | Target Stack instance validation (resources, relationships, composition tree, NFRs) | `core/contract_resolver.py` (post-resolution), `tests/conftest.py` | | Nova Target Stack | `stack.schema.json` | Target Stack instance validation (resources, relationships, composition tree, NFRs) | `core/contract_resolver.py` (post-resolution), `tests/conftest.py` |
| ACDL Central Pipeline Contract | `pipeline.schema.json` | Central CI pipeline contract (stages, commands, triggers, runner) | `tests/test_pipeline_contract.py` | | Nova Central Pipeline Contract | `pipeline.schema.json` | Central CI pipeline contract (stages, commands, triggers, runner) | `tests/test_pipeline_contract.py` |
| ACDL Central Deployment Pipeline Contract | `deploy-pipeline.schema.json` | Central deploy pipeline contract (validate → resolve → plan → checkov → confidence → apply → publish → uptime → comment) | `tests/test_pipeline_contract.py` | | Nova Central Deployment Pipeline Contract | `deploy-pipeline.schema.json` | Central deploy pipeline contract (validate → resolve → plan → checkov → confidence → apply → publish → uptime → comment) | `tests/test_pipeline_contract.py` |
| ACDL PolicyCheckResult | `policy_check_result.schema.json` | Normalized policy check result schema (the contract between policy engines and the confidence signal) | `tests/conftest.py`, all adapter tests | | Nova PolicyCheckResult | `policy_check_result.schema.json` | Normalized policy check result schema (the contract between policy engines and the confidence signal) | `tests/conftest.py`, all adapter tests |
| ACDL Tagging Standard | `tagging-standard.json` | Required tag set for all taggable AWS resources | `adapters/terraform/policy/custom_rules/acdl_tagging.py` | | Nova Tagging Standard | `tagging-standard.json` | Required tag set for all taggable AWS resources | `adapters/terraform/policy/custom_rules/acdl_tagging.py` |
## How to Write a Schema ## How to Write a Schema
1. Use JSON Schema draft 2020-12: `"$schema": "https://json-schema.org/draft/2020-12/schema"`. 1. Use JSON Schema draft 2020-12: `"$schema": "https://json-schema.org/draft/2020-12/schema"`.
2. Set `$id` to `https://acdl.cloudinit.dev/schemas/<name>.schema.json`. 2. Set `$id` to `https://nova.cloudinit.dev/schemas/<name>.schema.json`.
3. Include `title` and `description` at the document root. 3. Include `title` and `description` at the document root.
4. Set `type: object` at the document root. 4. Set `type: object` at the document root.
5. Declare a `required` array listing the mandatory top-level property names. 5. Declare a `required` array listing the mandatory top-level property names.
+2 -2
View File
@@ -1,7 +1,7 @@
{ {
"$schema": "https://json-schema.org/draft/2020-12/schema", "$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://acdl.cloudinit.dev/schemas/contract.schema.json", "$id": "https://nova.cloudinit.dev/schemas/contract.schema.json",
"title": "ACDL Consumer Contract", "title": "Nova Consumer Contract",
"description": "A consumer contract declares intent: which infrastructure to deploy, in which environment, with which inputs. The contract is keyed by an operational id (3-6 char acronym, becomes the stack name for state keys, tags, and outbox events) and a human-readable name (becomes the stack title for display and evidence). The infrastructure map is keyed by module name; each entry carries an optional version (defaults to the latest published version from the module registry) and per-module inputs. The contract resolver resolves each infrastructure entry against modules/registry.json, then merges them into a single Target Stack instance.", "description": "A consumer contract declares intent: which infrastructure to deploy, in which environment, with which inputs. The contract is keyed by an operational id (3-6 char acronym, becomes the stack name for state keys, tags, and outbox events) and a human-readable name (becomes the stack title for display and evidence). The infrastructure map is keyed by module name; each entry carries an optional version (defaults to the latest published version from the module registry) and per-module inputs. The contract resolver resolves each infrastructure entry against modules/registry.json, then merges them into a single Target Stack instance.",
"type": "object", "type": "object",
"required": ["id", "name", "environment", "infrastructure"], "required": ["id", "name", "environment", "infrastructure"],
+3 -3
View File
@@ -1,8 +1,8 @@
{ {
"$schema": "https://json-schema.org/draft/2020-12/schema", "$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://acdl.cloudinit.dev/schemas/deploy-pipeline.schema.json", "$id": "https://nova.cloudinit.dev/schemas/deploy-pipeline.schema.json",
"title": "ACDL Central Deployment Pipeline Contract", "title": "Nova Central Deployment Pipeline Contract",
"description": "Declarative contract for the ACDL deployment pipeline. Declares the stages that run when a consumer submits a contract: validate-contract, resolve-stack, terraform-plan, checkov, confidence, apply. The platform (scripts/run_platform.sh) implements these stages. This is the declarative pipeline spec; the executable workflow is .github/workflows/deploy.yml which invokes scripts/run_platform.sh.", "description": "Declarative contract for the Nova deployment pipeline. Declares the stages that run when a consumer submits a contract: validate-contract, resolve-stack, terraform-plan, checkov, confidence, apply. The platform (scripts/run_platform.sh) implements these stages. This is the declarative pipeline spec; the executable workflow is .github/workflows/deploy.yml which invokes scripts/run_platform.sh.",
"type": "object", "type": "object",
"required": ["name", "triggers", "runner", "stages"], "required": ["name", "triggers", "runner", "stages"],
"properties": { "properties": {
+2 -2
View File
@@ -1,7 +1,7 @@
{ {
"$schema": "https://json-schema.org/draft/2020-12/schema", "$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://acdl.cloudinit.dev/schemas/environment.schema.json", "$id": "https://nova.cloudinit.dev/schemas/environment.schema.json",
"title": "ACDL Platform-Managed Environment", "title": "Nova Platform-Managed Environment",
"description": "A named environment the platform owns (an AWS account or scoped partition, a network, a state backend, an IAM role surfaced to the consumer via ABAC). Selected by name in the contract's 'environment' field. The environment onboarding check (core/environment_check.py) loads the matching <name>.json; the contract resolver (core/contract_resolver.py) uses it as the 'env' context for ${env.<field>} interpolation.", "description": "A named environment the platform owns (an AWS account or scoped partition, a network, a state backend, an IAM role surfaced to the consumer via ABAC). Selected by name in the contract's 'environment' field. The environment onboarding check (core/environment_check.py) loads the matching <name>.json; the contract resolver (core/contract_resolver.py) uses it as the 'env' context for ${env.<field>} interpolation.",
"type": "object", "type": "object",
"required": ["name", "account_id", "region", "state_backend", "network", "runner_role_arn", "autonomy", "confidence_threshold"], "required": ["name", "account_id", "region", "state_backend", "network", "runner_role_arn", "autonomy", "confidence_threshold"],
@@ -1,7 +1,7 @@
{ {
"$schema": "https://json-schema.org/draft/2020-12/schema", "$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://acdl.cloudinit.dev/schemas/modules-lifecycle-pipeline.schema.json", "$id": "https://nova.cloudinit.dev/schemas/modules-lifecycle-pipeline.schema.json",
"title": "ACDL Modules Lifecycle Pipeline Contract", "title": "Nova Modules Lifecycle Pipeline Contract",
"description": "Declarative contract for the modules-lifecycle pipeline. Matrix-runs each L1 module's examples/{simple,complex}.yml contracts through apply→modify→destroy against live AWS. Both Gitea Actions (.gitea/workflows/modules-lifecycle.yml) and GitHub Actions (.github/workflows/modules-lifecycle.yml) implement this contract byte-identically.", "description": "Declarative contract for the modules-lifecycle pipeline. Matrix-runs each L1 module's examples/{simple,complex}.yml contracts through apply→modify→destroy against live AWS. Both Gitea Actions (.gitea/workflows/modules-lifecycle.yml) and GitHub Actions (.github/workflows/modules-lifecycle.yml) implement this contract byte-identically.",
"type": "object", "type": "object",
"required": ["name", "triggers", "runner", "python_version", "terraform_version", "stages", "matrix"], "required": ["name", "triggers", "runner", "python_version", "terraform_version", "stages", "matrix"],
+2 -2
View File
@@ -1,7 +1,7 @@
{ {
"$schema": "https://json-schema.org/draft/2020-12/schema", "$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://acdl.cloudinit.dev/schemas/pipeline.schema.json", "$id": "https://nova.cloudinit.dev/schemas/pipeline.schema.json",
"title": "ACDL Central Pipeline Contract", "title": "Nova Central Pipeline Contract",
"description": "Declarative contract for a CI/CD pipeline. Both Gitea Actions (.gitea/workflows/ci.yml, dev) and GitHub Actions (.github/workflows/ci.yml, production) implement the stages, commands, triggers, and runner declared here. The shell script scripts/run_ci.sh mirrors the same stages for local reproducibility. The contract is the single source of truth; the workflow YAMLs and run_ci.sh are generated/validated against it.", "description": "Declarative contract for a CI/CD pipeline. Both Gitea Actions (.gitea/workflows/ci.yml, dev) and GitHub Actions (.github/workflows/ci.yml, production) implement the stages, commands, triggers, and runner declared here. The shell script scripts/run_ci.sh mirrors the same stages for local reproducibility. The contract is the single source of truth; the workflow YAMLs and run_ci.sh are generated/validated against it.",
"$comment": "The pipeline contract does not replace workflow YAML syntax — it declares the *intent* (stages, commands, triggers, runner) that both Gitea and GitHub workflows implement. A test (tests/test_pipeline_contract.py) validates conformance: the workflow YAMLs must declare the same jobs/stages/commands as the contract, and run_ci.sh must run the same commands in the same order.", "$comment": "The pipeline contract does not replace workflow YAML syntax — it declares the *intent* (stages, commands, triggers, runner) that both Gitea and GitHub workflows implement. A test (tests/test_pipeline_contract.py) validates conformance: the workflow YAMLs must declare the same jobs/stages/commands as the contract, and run_ci.sh must run the same commands in the same order.",
"type": "object", "type": "object",
+2 -2
View File
@@ -1,7 +1,7 @@
{ {
"$schema": "https://json-schema.org/draft/2020-12/schema", "$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://acdl.cloudinit.dev/schemas/policy_check_result.schema.json", "$id": "https://nova.cloudinit.dev/schemas/policy_check_result.schema.json",
"title": "ACDL PolicyCheckResult", "title": "Nova PolicyCheckResult",
"description": "Normalized policy check result — the contract between policy engines and the confidence signal. Engine-specific adapters (checkov_adapter.py, future kyverno_adapter) translate native engine output to this shape. The confidence signal consumes a list of these as its policy input; it is engine-agnostic. The severity enum drives the severity->penalty mapping (critical hard-override, high -0.2, medium -0.05, low -0.01, info 0.0).", "description": "Normalized policy check result — the contract between policy engines and the confidence signal. Engine-specific adapters (checkov_adapter.py, future kyverno_adapter) translate native engine output to this shape. The confidence signal consumes a list of these as its policy input; it is engine-agnostic. The severity enum drives the severity->penalty mapping (critical hard-override, high -0.2, medium -0.05, low -0.01, info 0.0).",
"$comment": "Canonical PolicyCheckResult (ARCHITECTURE.md §12.6). The confidence signal (platform/confidence_signal.py) consumes a list of these as its policy input; it is engine-agnostic. Adapters translate native output to this shape; the signal never reads engine-specific evidence.", "$comment": "Canonical PolicyCheckResult (ARCHITECTURE.md §12.6). The confidence signal (platform/confidence_signal.py) consumes a list of these as its policy input; it is engine-agnostic. Adapters translate native output to this shape; the signal never reads engine-specific evidence.",
"type": "object", "type": "object",
+2 -2
View File
@@ -1,7 +1,7 @@
{ {
"$schema": "https://json-schema.org/draft/2020-12/schema", "$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://acdl.cloudinit.dev/schemas/stack.schema.json", "$id": "https://nova.cloudinit.dev/schemas/stack.schema.json",
"title": "ACDL Target Stack", "title": "Nova Target Stack",
"description": "Angine-neutral description of a target stack: resources with typed inputs/outputs/NFRs, relationships (single parent per child), composition tree (max depth 5), and policy hooks. The L1 registry, L2 composition tree, contract YML, and PolicyCheckResult schema are all defined against this stack schema. Angine adapters (the Terraform adapter in v1) are the only engine-specific code.", "description": "Angine-neutral description of a target stack: resources with typed inputs/outputs/NFRs, relationships (single parent per child), composition tree (max depth 5), and policy hooks. The L1 registry, L2 composition tree, contract YML, and PolicyCheckResult schema are all defined against this stack schema. Angine adapters (the Terraform adapter in v1) are the only engine-specific code.",
"$comment": "v1 ships one adapter (Terraform). The stack is nearly isomorphic to Terraform in v1 (ARCHITECTURE.md §12.1); the adapter compiles resource.module -> module block, resource.inputs -> variable + arg, resource.outputs -> output, relationship.kind=uses_output -> interpolation, relationship.kind=parent -> composition ordering hint. As more adapters appear (v2+), the stack gains expressiveness; the L1 content + contract YML + composition tree do not change. The schema body is engine-agnostic: no Terraform block keywords (variable/output/resource as blocks) and no aws_ provider prefixes in the schema keywords; type values are stack types (aws:s3:bucket), not Terraform resource types (aws_s3_bucket).", "$comment": "v1 ships one adapter (Terraform). The stack is nearly isomorphic to Terraform in v1 (ARCHITECTURE.md §12.1); the adapter compiles resource.module -> module block, resource.inputs -> variable + arg, resource.outputs -> output, relationship.kind=uses_output -> interpolation, relationship.kind=parent -> composition ordering hint. As more adapters appear (v2+), the stack gains expressiveness; the L1 content + contract YML + composition tree do not change. The schema body is engine-agnostic: no Terraform block keywords (variable/output/resource as blocks) and no aws_ provider prefixes in the schema keywords; type values are stack types (aws:s3:bucket), not Terraform resource types (aws_s3_bucket).",
"type": "object", "type": "object",
+2 -2
View File
@@ -1,7 +1,7 @@
{ {
"$schema": "https://json-schema.org/draft/2020-12/schema", "$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://acdl.dev/schemas/tagging-standard.json", "$id": "https://nova.dev/schemas/tagging-standard.json",
"title": "ACDL Tagging Standard", "title": "Nova Tagging Standard",
"description": "Required tags for all taggable AWS resources created by the platform. Enforced by a Checkov custom Python rule (adapters/terraform/policy/custom_rules/acdl_tagging.py). The checkov adapter maps ACDL_TAG_NAMING as a real rule (D-054, D-043 closure).", "description": "Required tags for all taggable AWS resources created by the platform. Enforced by a Checkov custom Python rule (adapters/terraform/policy/custom_rules/acdl_tagging.py). The checkov adapter maps ACDL_TAG_NAMING as a real rule (D-054, D-043 closure).",
"type": "object", "type": "object",
"properties": { "properties": {