# Nova — The New Dawn of DevSecOps > **Compressed.** The full v1.0–v1.24 milestone-by-milestone narrative is > preserved verbatim at `.ciagent/archive/PROJECT-v1.0-v1.24.md`. This file > retains only the durable vision/tenets/scope, the still-load-bearing > decisions (D-034..D-072, W1.A..BA.F, Q1.3), the capability status, and > the active milestone (v1.26) + its immediate predecessor (v1.25). > > **Rebrand complete (milestone v1.15 — Nova, tag v1.15.4).** The project > was rebranded from **ACDL** / "Agentic Cloud Delivery Platform" → > **Nova** / "The New Dawn of DevSecOps — security as a seamless enabler > of fast deployments." ## Vision / Core Value Consumers declare intent; the platform delivers safe production deployment through an agentic stack. The platform absorbs two frictions: the cognitive load of getting the infrastructure right, and the operational work of getting the change to production safely. Source of truth for **why**: `docs/vision.md`. Source of truth for **how**: `docs/architecture.md` + `.ciagent/ARCHITECTURE.md`. Where the two conflict, the vision wins. ## North Star A merged change progresses through lower environments end-to-end without a platform engineer joining a thread, approving a ticket, or manually triggering a stage gate. A non-technical consumer ships a production deployment by declaring intent — without authoring a workflow, a configuration file, or a Terraform module. Every production change is traceable to a human attestation and an immutable evidence stream. ## Core Tenets (from `docs/vision.md`) 1. **Operations are Declared, Not Executed.** Consumers define what they need; the platform reconciles, provisions, and progresses. 2. **The Delivery Lifecycle is a Sovereign Boundary.** The platform governs infra and delivery; it does not reach into upstream product/SDLC. Integration is only through validated, published contracts. 3. **Lower Environments are Autonomous; Higher Environments are Attested.** Dev = zero-touch agentic. QA/prod/dr = deliberate human attestation, not rubber stamps. 4. **Safety is Computed, Not Assumed.** Every action produces a measurable, explainable confidence signal. 5. **Infrastructure is Consumed, Not Maintained.** No node/OS/bare-metal lifecycle. 6. **Two Consumer Surfaces, One Platform.** Technical developers (L3A) and non-technical consumers (L3B) converge on the same contract schema, the same policy envelope, and the same evidence stream. ## Domain Boundaries - **In scope:** environment progression; cloud resource lifecycle; operational security and observability NFRs; policy enforcement; immutable audit lineage; confidence frameworks; two consumer surfaces (developer + agentic). - **Out of scope:** application business logic; IDE workflows; product backlog / sprint planning; compute requiring node-level or OS-level management. - **Interface:** upstream systems integrate through a strict contract boundary. The platform validates, enriches with operational standards, and reconciles the target state. ## Scope: Nova is Downstream of PDLC > Promoted from Core Tenet #2 + Anti-Goal #1 (v1.18, REQ-216). The **Product Development Lifecycle (PDLC)** — product backlog, code authorship, IDE workflows, sprint planning, application business logic — is **upstream** of Nova. Nova never reaches into the PDLC. Nova's domain is **infrastructure + delivery only**: environment progression, cloud resource lifecycle, operational security/observability NFRs, policy enforcement, immutable audit lineage, and the two consumer surfaces. Integration between the PDLC and Nova is **only** through the validated, published contract boundary (`schemas/contract.schema.json` + `schemas/submission-readiness.schema.json`). The citizen developer's AI coding agent, an upstream agentic SDLC platform, or any upstream development platform may all produce submissions — the source does not matter because all are subject to the same compliance standards (the submission-readiness gate, D-133). ``` PDLC (upstream) Nova (downstream) ───────────────── ───────────────── product backlog contract ingestion code authorship (AI agent / IDE / SDLC) → submission-readiness gate sprint planning → policy enforcement application business logic → cloud resource lifecycle → environment progression (dev→qa→prod→dr) → immutable audit + attestation ``` ## RACI Matrix > Source of truth (v1.18, REQ-215, D-139). ### Roles - **Citizen Developer (CD)** — the consumer (technical developer L3A or non-technical L3B). Responsible for all **Functional Requirements (FRs)** and **User Acceptance Testing (UAT)**. The FRs + UAT may originate from any upstream source — all subject to the same compliance standards (the submission-readiness gate, D-133). - **Platform** — Nova. Responsible for all **Non-Functional Requirements (NFRs)**, **Infrastructure** (cloud resource lifecycle, state, IAM), **QA** (platform-side quality checks: policy, confidence, schema), and **Production deployments to cloud**. - **Release Management (RM)** — **co-owned**. QA + SRE attestations are required by the actual release. The platform performs the checks agentically; the citizen developer authorizes (the human attestation at the stage gate, D-042, `hitl_gates.py`). ### Matrix | Work Category | Citizen Developer | Platform | Release Management | |---|---|---|---| | **Functional Requirements (FRs)** | **R/A** | C | I | | **User Acceptance Testing (UAT)** | **R/A** | C | I | | **Non-Functional Requirements (NFRs)** | I | **R/A** | C | | **Infrastructure (cloud, state, IAM)** | I | **R/A** | C | | **QA (policy, confidence, schema checks)** | C | **R/A** | I | | **Production deployment to cloud** | I | **R/A** | C | | **Release attestation (QA + SRE sign-off)** | **A** | R | **R** | **Key: R** = Responsible · **A** = Accountable · **C** = Consulted · **I** = Informed. The release is co-owned: the platform runs the checks; the citizen developer authorizes the promotion. This is the "autonomy in operations, human at stage gates" model from the NORTH_STAR. ## Capability Status (Re-Verified 2026-07-27) > Source of truth: `.ciagent/CAPABILITY_INVENTORY.md` (Phase 54, D-093). > Tier: **local** = runs via emulating adapters (no AWS); **live-aws** = > runs against the live AWS account (581513795199). **Decay disclosure.** Capabilities marked complete in v1.1–v1.8 were not reproducible as of 2026-07-27 (7 adapter defects). The v1.10 milestone (Phases 52–55) re-verified every advertised capability and fixed all 7 defects in-sweep (D-090: no cap). The headline E2E now passes at both tiers. **Auto-verified capabilities (16/16 Verified):** | ID | Capability | Tier | Status | |----|-----------|------|--------| | CAP-001..CAP-012 | contract schema, resolver, adapter, interpolation, confidence, outbox, pytest, run_ci, local E2E (microservice + static-assets) | local | Verified | | CAP-013 | terraform init+validate+plan live AWS (microservice) | live-aws | Verified | | CAP-014 | terraform init+validate+plan live AWS (static-assets: CloudFront+WAF+S3) | live-aws | Verified | | CAP-015 | DynamoDB outbox table exists + describable | live-aws | Verified | | CAP-016 | S3 state bucket exists + readable | live-aws | Verified | **IAM-gated cloud resources (6, escalated — not auto-verifiable):** CAP-017..CAP-022 (DynamoDB contracts table, Lambda contract-ingestor, ECS service live, CloudFront production stack, uptime-kuma, OIDC role). The `acdl-spike-runner` IAM user lacks the permissions to verify these (chicken-and-egg). The terraform plan path (CAP-013, CAP-014) proves the code would deploy them; the local emulators (Phase 53) prove the runtime behavior. Re-bootstrap of the OIDC role + IAM re-grant requires an admin principal — escalated, not silently skipped. See `CAPABILITY_INVENTORY.md` §"Cloud capabilities NOT re-verified". **Regression gate.** `bash scripts/run_regression.sh` re-runs all 16 auto-verifiable capabilities and fails closed on any non-Verified result. ## Constraints - **Forge:** Gitea at `https://git.cloudinit.dev`, org `continuous-intelligence`. - **CI runtime:** act_runner / Gitea Actions (reuses GitHub Actions workflow YAML). - **Cloud:** AWS via OIDC federation. **Long-lived credentials are forbidden** (§12.5). The v1.1 spike uses a temporary long-lived key **once** to bootstrap OIDC (waiver D-034), then rotates it. - **Engine:** Terraform adapter (the only adapter). L1/L2 are engine-agnostic in shape; the adapter is the only engine-specific code. - **State:** S3 (state files) + DynamoDB (locking), single-region in v1. - **Environments:** dev (autonomous) → qa (QA HITL) → prod (SRE HITL) → dr (SRE HITL). **Staging does not exist** (Path A locked). - **Compute:** abstract / containerized / serverless. No VMs, bare metal, OS lifecycle. - **Autonomy:** Full. Escalation hooks: deploy, delete_data, merge_to_main. ## Anti-Goals (from `docs/vision.md` §7) - Not an upstream development platform (no product backlogs, IDE, code authorship). - Not a general-purpose AI (autonomy is narrow, bounded by policy envelopes). - Not a legacy infrastructure bridge (no VMs/bare metal/OS). - Not a permissive delivery highway (no escape hatches past confidence or HITL). - Not a mutable audit log (VCS history ≠ regulatory evidence). ## Context - The `acdl` repo exists at the org root. `acdl-contracts` and `acdl-evidence` exist from the v1.0 demo and continue as the developer surface and the audit-timeline host respectively. - `docs/vision.md` and `docs/architecture.md` (v0.2) are the upstream vision/architecture sources. - The v1.0 demo (tag `v1.1.0`) is the reference of intent — it proved the shape (L1/L2/contract/confidence/evidence/HITL) on stubs. v1.1+ replaces the stubs with the real platform engine. ## Key Decisions (still load-bearing) > The full decision history (D-001..D-213) is preserved across the v1.0–v1.24 > archive snapshot + the active-milestone CLARIFY/GRILL files. The decisions > below remain load-bearing for v1.26 and are retained to avoid > cross-file pointer-chasing on every read. ### v1.1 (D-034..D-047) — spike bootstrap, OIDC waiver, confidence inputs | ID | Decision | Rationale | Outcome | |----|----------|-----------|---------| | D-034 | Temporary long-lived AWS key (waiver) used once in Phase 08 to bootstrap the state backend + IAM user; rotated/deactivated immediately after | §12.5 forbids long-lived creds; the bootstrap needed one `aws iam` call before the spike user + rotated key could take over | Spike achieves real `terraform plan` against AWS without violating the locked target after bootstrap. **CLOSED 2026-07-21: root key deactivated; the spike uses the rotated `acdl-spike-runner` key per D-039. Key ID redacted in v1.2 Phase 12 (P1-1).** | | D-036 | Spike picks `l1-s3` + `l2-static-assets` | Simplest real AWS resource; smallest real `terraform plan`; proves the IR + adapter end-to-end | Spike scope fixed | | D-039 | Spike-only waiver: per-run-rotated long-lived AWS key. OIDC federation deferred (Gitea Actions does NOT support `id-token: write` — go-gitea/gitea#36988). `scripts/rotate_spike_key.sh` rotates after each run. | §12.5 forbids long-lived creds; the waiver satisfies its *intent* (no *persistently* long-lived key). | Spike achieves real `terraform plan` without a persistently long-lived key; real OIDC is a v1.3+ deliverable. | | D-040 | The 6 confidence-signal inputs are: policy (0.30), validation (0.25), freshness (0.10), source (0.15), history (0.10), nfrs (0.10). Weights frozen for v1. | Architecture §8 locks "six canonical inputs" but does not enumerate them. | Confidence signal has a concrete input enumeration. | | D-042 | HITL approver identity in Gitea = `gitea.actor` of the `workflow_dispatch` run that sets `approve_{qa,prod,dr}=true`. Separation-of-duties reads `approver_qa` from the DynamoDB outbox and compares to the prod-dispatch `gitea.actor`. | Gitea has no Environments API; `gitea.actor` is the only approval-identity signal. | SoD design is concrete for the Gitea forge. | | D-047 | v1.2 carries forward the D-039 per-run-rotated-key waiver. Real OIDC federation remains deferred (go-gitea/gitea#36988 still open). | §12.5 forbids long-lived creds; rotation hygiene satisfies the intent. | v1.2 achieves `terraform apply` without a persistently long-lived key. | ### v1.7 (D-048..D-060) — rename, production static-assets, contract ingestion, error reporting, module examples | ID | Decision | Rationale | Outcome | |----|----------|-----------|---------| | D-049 | Production static-assets stack = S3 + CloudFront (OAC) + WAF. | Self-contained, domain-free production edge. Route53/ACM are domain-dependent and deferred. | Authors `cloudfront` + `waf` primitives. | | D-050 | Deploy outputs: SSM Parameter Store (`SecureString`, KMS-encrypted, `/acdl/{env}/{contractId}/{output_name}`) + GitHub PR comment / job summary. | Two canonical mechanisms: SSM for runtime reads; PR comment for developers. No raw secrets in logs. | Implements `core/output_publisher.py` + two new pipeline stages. | | D-051 | Contract ingestion storage = DynamoDB table `acdl-contracts` (PK `consumerRepo`, SK `contractId#submittedAt`, SSE via customer-managed CMK, PITR). | Enables historical queries, impact analysis, CMDB-style application-state queries. | Defines the table + Lambda. | | D-053 | Kyverno adapter = K8s-native policy adapter translating `PolicyReport` results → `PolicyCheckResult`. Inactive for Terraform-only stacks. | The platform emits Terraform, not K8s manifests. The adapter activates when the GitOps reconciler emits K8s manifests. | Authors `adapters/kyverno/kyverno_adapter.py` + sample policies. | | D-054 | Tagging standard = required-tag set (`acdl:owner`, `acdl:contract`, `acdl:environment`, `acdl:cost-center`) enforced by a Checkov custom YAML rule. | Closes the D-043 deferral (the SKIPPED `ACDL_TAG_NAMING` placeholder becomes a real check). | Authors `schemas/tagging-standard.json` + `adapters/terraform/policy/custom_rules/acdl_tagging.yaml`. | | D-055 | Error reporting = the platform Lambda `report_error` action creates a GitHub issue on the platform repo (`acdl/acdl`). Gitea is excluded. | Unifies requirements around one mechanism. The Lambda holds a GitHub token (Secrets Manager) scoped to the platform repo. Idempotent (comments on existing open issue). | Implements the action + wires the `if: failure()` workflow step. | | D-058 | Module examples = separate validated files in `modules//examples/` (`simple.yaml` + `complex.yaml` + variation files), validated against `schemas/contract.schema.json`. | Examples cannot drift from the schema silently. | Authors the example files; the platform-test pipeline validates them. | | D-059 | Add an RDS primitive (`modules/l1/rds/`) with an `engine` input (enum: postgres, mysql, etc.) + a multi-engine example. | Concrete demonstration of multi-engine variation. | Authors the primitive + adapter expansion + examples. | ### v1.8 (D-061..D-072) — P1 remediation, encryption + deletion-protection by default, uptime, decommission | ID | Decision | Rationale | Outcome | |----|----------|-----------|---------| | D-062 | SSM publisher fails loud (`RuntimeError`) when `ACDL_KMS_KEY_ID` unset. `ACDL_ALLOW_DEFAULT_KMS=1` escape hatch for local testing. | Silent AWS-managed-key use is the security gap; callers must set the env. | Implements fail-loud + escape hatch. | | D-064 | Remove committed `terraform/spike/*.tf` entirely; adapter emits to per-run temp dir. | Cleaner; no stale fixtures. | Removes files + changes `run_platform.sh` target. | | D-066 | Uptime deployment target: ECS Fargate (reuse existing `ecs-cluster` + `ecs-service` + `alb` primitives). | Most consistent with current platform; ALB gives a stable URL. | Authors uptime primitive on ECS Fargate. | | D-068 | CMDB = DynamoDB `acdl-change-requests` table (PK `changeRequestId`, SK `submittedAt`). | Consistent with existing platform Lambda + DynamoDB pattern. | Adds the table + `validate_change_request` Lambda action. | | D-069 | Encryption key granularity: per-stack CMK (one key per L2 deployment, tagged with `acdl:owner` + `acdl:environment`). | No shared keys across stacks; 90-day rotation at creation. | Authors `kms-key` primitive + L2 wiring. | | D-070 | Decommission: new mode on the existing deploy pipeline (`mode: decommission`). 2-step with HITL SRE gates. | User chose existing pipeline with different behavior. | Adds decommission mode + HITL gates. | | D-072 | Managed KMS fallback for standalone L1 deployments (no L2 CMK): adapter uses `alias/aws/` with a stderr warning. `kms_key_arn` input is optional everywhere; `encryption_enabled` NFR defaults to true. | Requirement says "prioritize CMKs, fallback to managed KMS". | Implements fallback + warning. | ### Phase 07 open-decision resolutions (still load-bearing for the contract/confidence/HITL substrate) | ID | Question | Resolution | |---|---|---| | W1.A | AI-refinement trigger | Joint condition: N ≥ 50 consecutive changes with zero rollbacks AND no L1/L2 incident in last 6 months AND Infra & Ops unilateral override. | | W1.B | Multi-stack edge case rule | Permitted only for (a) DR-region mirror, (b) time-boxed experimental stack with TTL ≤ 30d, (c) explicit Infra & Ops approval with `multiStack.justification`. | | W2.A | Tag mutability for prod | Tag for dev/qa, SHA for prod. Platform CLI resolves tag→SHA for prod-bound workflows. | | BA.A | Initial L3B skill catalog | 5 skills: web API, worker, scheduled job, static asset, basic observability bootstrap. **Extended v1.18 (REQ-221/222):** 9 Atelier-derived production-grade engineering skills under `skills/` (api, security, data, testing, observability, errors, devops, infrastructure-as-code, compliance), indexed by `docs/skills.md`. | | W3.D | L1/L2 standard versioning | Semver: interface → MAJOR, behavior → MINOR, lifecycle → PATCH. Pin model: L2 contracts pin L1 by `name@semver`; the resolver picks the highest compatible. MAJOR bumps require a new registry entry (immutable publication); old entry enters a 12-month deprecation window. | | W3.E | Schema mandatory vs optional inputs | Per-env mandatory table: dev requires `stack` + `environment`; qa adds `validation.e2eSuite` + `validation.loadTest`; prod adds `runbook` + `dashboard` + `oncall`; dr adds `drDrillRef`. `inputs` map is always optional. `profile: agentic` fields optional everywhere. | | BA.B | Confidence threshold tuning | Starting thresholds frozen for v1. Tuning begins in v1.2: track FP/FN per environment quarterly; override authority = Infra & Ops + SRE joint sign-off; any override is itself a confidence-event in the audit stream. | | BA.C | On-call / operational ownership | Platform on-call = Infra & Ops rotation. Escalation: L3A/L3B halt → platform on-call pager (Sev2); consumer-visible outage → consumer on-call (Sev1) with platform on-call support. | | BA.D | Cost / capacity governance | Cloud cost owner = Infra & Ops FinOps. Per-contract consumption reported monthly. Runaway spend: hard halt at 120% of contract-declared budget envelope via the confidence signal; override = FinOps + SRE joint sign-off. | | BA.E | Consumer onboarding | Two paths: developer (L3A) — `getting-started` walks through contract schema + central pipeline template; citizen developer (L3B) — onboarding grants a scoped agent + skill catalog, no workflow authoring. Both end in a sandbox dev submission that must pass the confidence gate. | | BA.F | Cross-platform evolution | The contract schema, IR, PolicyCheckResult, confidence signal, and audit stream are portable (engine- and forge-agnostic). Forge-specific code: workflow YAML, OIDC trust, CODEOWNERS, Environments. | | Q1.3 | OpenTofu timing | **Deferred.** Not in v1 or v1.1. The engine abstraction (§12) makes OpenTofu a future adapter, not an architecture change. | > **Prior milestone (v1.0 demo) decisions.** D-001..D-033 governed the > stub-driven executive demo and remain valid **for the archived demo > under `demo/`**. They are superseded by the v1.1+ decisions above for > the real platform. Full text preserved in git history at tag `v1.1.0` > and in `.ciagent/archive/PROJECT-v1.0-v1.24.md`. > **v1.14–v1.24 decisions.** D-073..D-199 are preserved verbatim in > `.ciagent/archive/PROJECT-v1.0-v1.24.md`. They remain valid for the > milestones they governed; the active v1.26 milestone does not > re-decide them. > **v1.25 + v1.26 decisions.** D-200..D-213 (v1.26 CLARIFY) live in > `.ciagent/CLARIFY.md`; v1.25 binding decisions live in the archive > snapshot. Both sets are load-bearing for v1.26 execution. ## v1.25 — kyverno-json Unified Policy Engine (immediate predecessor, complete) > Complete. Feature milestone — the primary compliance/policy tool becomes > kyverno-json, implemented behind a swappable adapter. Tag `v1.24.5` > (milestone release on the v1.24.x line). Branch `milestone/v1.25-kyverno-json`. > **Full narrative preserved in `.ciagent/archive/PROJECT-v1.0-v1.24.md`.** `kyverno-json` is a runtime from the Kyverno ecosystem that applies Kyverno policies to **any JSON or YAML payload** — not just Kubernetes manifests. v1.25 makes it the **primary tool of choice for compliance / policy checks** in Nova, implemented as an **adapter** (the `PolicyEngine` protocol) so the platform may one day replace it (e.g. OPA) without touching the confidence signal or the pipeline. ### What v1.25 delivered (still load-bearing for v1.26) - **Swappable `PolicyEngine` protocol** (`core/policy_engine.py`) — a Python Protocol + registry selected from `config.json` (`policy.engine`, default `"kyverno-json"`). `KyvernoJsonEngine` implements it (shells to the `kyverno-json` CLI); a future `OpaEngine` implements the same protocol. The confidence signal and pipeline never import the engine directly — they go through the registry. - **`KyvernoJsonEngine` adapter** (`adapters/kyverno-json/`) — `evaluate(payload, policies) -> list[PolicyCheckResult]` translates kyverno-json native output to the existing PCR schema. `is_configured()` guard skips gracefully when the `kyverno-json` binary is absent (emits `SKIPPED`, never breaks the pipeline). - **Policies over all four Nova artifacts** under `adapters/kyverno-json/policies/`: `contract/`, `stack-ir/`, `plan-json/`, `meta/`. - **`run_platform.sh` Step 5 wiring** — Checkov/Wiz still run and emit raw PCRs; `KyvernoJsonEngine.evaluate()` runs plan-JSON policies in parallel; both PCR lists merge into the confidence signal's `policy` input. No change to `core/confidence_signal.py`. - **Regression-gate-as-policy** — the capability checks in `core/regression_verify.py` (CAP-013, CAP-023, CAP-024) became declarative kyverno-json policies over the capability-inventory JSON frontmatter. - **`policy-engineer` persona** (custom, added in RESEARCH) — owns the policy territory; declarative-policies constraint; kyverno-json + JMESPath frameworks. ### v1.25 hard constraints (carried into v1.26) - DO NOT change `schemas/policy_check_result.schema.json` shape in a way that breaks existing adapters — the contract is the moat. The `engine` enum already includes `"kyverno"` and `"opa"`; v1.25 records carry `engine: "kyverno"` (no new enum value). - DO NOT remove Checkov or Wiz adapters — they remain as raw-finding sources feeding into kyverno-json meta-policies. - DO NOT remove the `confidence_signal.py` `PENALTY["critical"]: None` hard-override — it stays as defense-in-depth behind the declarative `block-on-any-critical` meta-policy. - DO NOT change `core/confidence_signal.py`'s input contract — it already consumes `list[PolicyCheckResult]`; v1.25 only changed *who produces* that list, not *what* the list is. - The platform must function with `kyverno-json` absent — `is_configured()` returns false → `SKIPPED` records → confidence signal proceeds. ### v1.25 Requirements New requirements REQ-291..REQ-309 — full text in `.ciagent/archive/REQUIREMENTS-v1.0-v1.24.md` §v1.25. Summary: engine protocol + registry (REQ-291,292), kyverno-json engine impl (REQ-293,294), contract policies (REQ-295,296), stack-IR policies (REQ-297,298,299), plan-JSON policies + pipeline wiring (REQ-300,301,302), meta-policies (REQ-303), regression-gate policies (REQ-304,305), docs + adapter README (REQ-306,307), tests (REQ-308,309). ## v1.26 — Live Pilot Estate Activation (active) > **Active milestone.** Feature milestone — the first real consumer estate > (a stock exchange on a homegrown PoA blockchain, equities only) is > activated against live AWS account `581513795199`, lifting D-096. > Branch: `milestone/v1.26-pilot-activation`. Tags run on the **v1.25.x** > patch line: `v1.25.0` (P0) → `v1.25.1..v1.25.4` (P1–P4) → `v1.25.5` > (P5 final = milestone release). > > **Multi-project mode:** this milestone introduces a 2nd tracked project — > `nova-blockchain-exchange` (Gitea repo > `continuous-intelligence/nova-blockchain-exchange`, local clone > `/root/nova-blockchain-exchange`). The platform repo (`acdl`) remains > the platform source; the consumer repo owns the app code + > `contract.yaml`. Both projects share the v1.26 milestone; the > consumer's `.ciagent/` files live in `.ciagent/nova-blockchain-exchange/`. ### Why NORTH_STAR.md has three Post-Pilot targets (Touchless Resolution ≥99%, Human Escalation <0.1%, AI Decision Accuracy ≥99.5%) whose measurement *pipeline* is grounded but whose *denominator* is zero — no consumer estate has ever run. v1.25 shipped the swappable policy engine; v1.26 ships the first real consumer. The D-096 deferral (live AWS re-provisioning) is the single blocker; the pre-run (Workstream A) re-created the state bucket + outbox table, so the platform components exist. The milestone grounds the metrics (outcome backfill + escalation reason), wires the env JSON to the real account, and runs the pilot end-to-end. ### What the milestone delivers - **Homegrown PoA blockchain** (`nova-blockchain-exchange` repo) — append-only blocks, single validator (pilot), deterministic block production, T+1 settlement finality = block commit. Equities only. - **Order-matching engine** — limit order book, price-time priority. - **Settlement service** — T+1, idempotent, finality = block commit. - **Consumer `contract.yaml`** — declares the exchange stack; validated against `schemas/contract.schema.json`; per-env variants. - **Consumer deploy via `deploy.yml@v1.25`** — the reusable workflow applies the contract, runs the policy engine, computes the confidence signal, gates qa/prod/dr with HITL attestation, and records every decision in the Decision Ledger. - **3 Post-Pilot metrics grounded** — outcome backfill (AI Decision Accuracy), `reason='confidence'` escalation tag (Human Escalation Frequency), and the pilot run itself (Touchless Resolution Rate denominator activates). - **3 kyverno-json policies extending v1.25** — settlement-finality (securities-specific), pilot-readiness (no placeholder account), and the existing meta-policies (block-on-any-critical, tagging-rules-agree) apply over the pilot's PCRs. - **Env-JSON `state_backend` wiring reconciliation** — the adapter reads `state_backend.bucket` from the env JSON (closing the wiring gap); the env JSONs are bound to account `581513795199`. ### v1.26 Requirements New requirements REQ-310..REQ-322 — full text in `.ciagent/REQUIREMENTS.md` §v1.26 + `.ciagent/nova-blockchain-exchange/REQUIREMENTS.md`. Summary: blockchain core (REQ-310), order engine (REQ-311), settlement (REQ-312), consumer contract (REQ-313), deploy invocation (REQ-314), settlement-finality policy (REQ-315), pilot regression CAP (REQ-316), outcome backfill (REQ-317), escalation reason (REQ-318), env-JSON wiring (REQ-319), pilot-readiness policy (REQ-320), docs (REQ-321), DynamoDB L1 primitive (REQ-322 — the single platform-side module build-out; ECS + S3 already exist). ### v1.26 Hard constraints - DO NOT lift D-083 (S3 Object Lock/JWS) — stays deferred; the SQLite hash-chain + DynamoDB outbox is the pilot's audit record. - DO NOT lift D-126 (hot path) — cold-only metrics are sufficient for the pilot. - DO NOT add multi-cloud (Azure/GCP) — Nova is AWS-only this milestone. - DO NOT add ML forecasting — the Predictive/Reactive metric stays deferred. - DO NOT add bonds/derivatives/options — equities only (D-200). - DO NOT add multi-validator BFT — single validator PoA (D-201). - The consumer deploy MUST go through `deploy.yml@v1.25` — no direct `terraform apply` bypassing the platform's gates. ### v1.26 phase status (live — see CHECKPOINT.json for the authoritative state) - **P0** pre-execution (SPECIFY→CLARIFY→RESEARCH→IDEATE→PLAN→GRILL) — complete, tag `v1.25.0`. - **P1** blockchain-core (REQ-310,311,312) — complete, tag `v1.25.1`. - **P2** consumer-contract-and-deploy (REQ-313,314,322) — complete, tag `v1.25.2`. - **P3** pilot-metrics-and-policies (REQ-315,316,317,318,319,320) — pending. - **P4** pilot-run-and-docs (REQ-316,321) — pending. - **P5** final review + audit + milestone ship — pending. Tag `v1.25.5` = the v1.26 release. > Phase-by-phase task breakdown, wave ordering, and persona assignments > live in `.ciagent/PLAN.md` (the active phase plan, retained in full).