P1 W1: verified STATE.md 32 CAP rows against regression_verify.py (fixed CAP-025 omission — was missing from Domain 9; CAP-031 renumbered to cover the live-apply evidence row). P1 W2: archived 7 platform-root files to .ciagent/archive/ with milestone-suffix names (lossless git mv preserves history): - CAPABILITY_INVENTORY.md → CAPABILITY_INVENTORY-v1.10.md - REVIEW-AUDIT-P05.md → REVIEW-AUDIT-P05.md - VERIFY-P03.md → VERIFY-P03.md - VERIFY-P04.md → VERIFY-P04.md - P4-PILOT-RUN-EVIDENCE.md → P4-PILOT-RUN-EVIDENCE-v1.26.md - AUTONOMY_THESIS.md → AUTONOMY_THESIS-v1.21.md - COST.md → COST-v1.14.md P1 W3: archived 1 consumer file to new .ciagent/nova-blockchain-exchange/archive/ (D-221: consumer archives land in per-project subdir): - nova-blockchain-exchange/ROADMAP.md → archive/ROADMAP-v1.26.md The 4 pre-execution files (CLARIFY/GRILL/IDEATE/RESEARCH) stay active through v1.27 — they hold the v1.27 P0 content (D-219 refinement, G-Q2); the v1.26-era content is in git history. They archive at v1.28 P1 if v1.28 happens. Dangling references to archived files found in PROJECT.md, ARCHITECTURE.md, IAM_POLICY.md, nova-blockchain-exchange/README.md — fixed in P2. ---ci--- project: acdl phase: 1 milestone: v1.27 status: execute wave: W4 ---ci---
7.2 KiB
Nova Capability Inventory — v1.1→v1.8 Re-Verification Sweep
Generated: 2026-07-27. Phase 54 (D-093). Milestone v1.10. Source: PROJECT.md + ROADMAP.md v1.1→v1.8 advertised capabilities. v1.0 demo excluded (archived/superseded). Tier: local = runs via emulating adapters (no AWS); live-aws = runs against the live AWS account. Status: Verified / Decayed / Broken.
Summary
| Status | Count |
|---|---|
| Verified | 22 |
| Decayed | 0 |
| Broken | 0 |
| Total | 22 |
All 22 advertised capabilities are Verified (16 original + 6 added in
v1.11 via lifecycle pipeline evidence). The sweep found and fixed
7 adapter defects (the terraform adapter emitted duplicate outputs,
duplicate args, missing required args, and used deprecated AWS provider
v5 arg names). The fixes are in adapters/terraform/adapter.py. The
headline E2E now passes at both tiers: local emulating tier (no AWS)
and live-AWS tier (terraform init+validate+plan against account
581513795199).
Inventory
| ID | Capability | Source | Tier | Status | Evidence |
|---|---|---|---|---|---|
| CAP-001 | contract.schema.json validates sample contracts | v1.1 P10 | local | Verified | regression CAP-001 |
| CAP-002 | environment.schema.json validates env files | v1.9 P40 | local | Verified | regression CAP-002 |
| CAP-003 | contract_resolver resolves static-assets | v1.1 P10 | local | Verified | regression CAP-003 |
| CAP-004 | contract_resolver resolves microservice | v1.2 P14 | local | Verified | regression CAP-004 |
| CAP-005 | terraform adapter emits .tf files | v1.1 P09 | local | Verified | regression CAP-005 |
| CAP-006 | contract interpolation expands env/contract tokens | v1.9 P40 | local | Verified | regression CAP-006 |
| CAP-007 | confidence_signal.compute returns a band | v1.1 P10 | local | Verified | regression CAP-007 |
| CAP-008 | outbox_writer builds a hash-chained item | v1.1 P10 | local | Verified | regression CAP-008 |
| CAP-009 | offline pytest suite passes | v1.1 P10 | local | Verified | regression CAP-009; 513 fast tests |
| CAP-010 | run_ci.sh reproduces CI pipeline locally | v1.4 P19 | local | Verified | regression CAP-010 |
| CAP-011 | headline E2E — local tier (microservice) | v1.2 P16 | local | Verified | regression CAP-011; run_local_e2e |
| CAP-012 | local E2E — static-assets (no ECS) | v1.1 P10 | local | Verified | regression CAP-012 |
| CAP-013 | terraform init+validate+plan live AWS (microservice) | v1.2 P16 | live-aws | Verified | regression CAP-013; 14 resources to add, plan saved |
| CAP-014 | terraform init+validate+plan live AWS (static-assets) | v1.7 P22 | live-aws | Verified | regression CAP-014; CloudFront+WAF+S3 plan OK |
| CAP-015 | DynamoDB outbox table exists + describable | v1.1 P10 | live-aws | Verified | regression CAP-015; acdl-outbox exists, 9 items |
| CAP-016 | S3 state bucket exists + readable | v1.1 P08 | live-aws | Verified | regression CAP-016; keys=[spike/l2-microservice/terraform.tfstate] |
Defects found and fixed in-sweep (D-090: no cap)
The sweep found 7 adapter defects in adapters/terraform/adapter.py
that prevented terraform init/validate/plan from succeeding against
live AWS. All were fixed in-sweep:
- Duplicate output definitions — per-resource outputs and
stack-level outputs both emitted the same name (e.g.
service_arn,kms_key_arn). Fix: track emitted output names; skip per-resource emission when a stack output shares the name. - Duplicate
desired_count/launch_typeon ECS service — the generic input loop emitted them, then the ECS-specific block emitted them again. Fix: skip them in the generic loop for ECS services. - Duplicate
target_type/family/load_balancer_type— same pattern for target groups, task definitions, load balancers. Fix: skip in the generic loop; emit in the type-specific block. - Missing
assume_role_policy/role_nameon IAM role — the L2 composition referencediam-role@1.0.0without supplying the required trust policy. Fix: emit a sensible ECS task execution trust policy + default role name. - Missing
cidr_block/vpc_id/namedefaults — VPC, subnet, route table, ECS cluster, ECR repository all lacked required args the L2 composition didn't supply. Fix: emit sensible defaults (10.0.0.0/16, 10.0.1.0/24, vpc-vpc.id refs, "acdl-microservice"). - ECR
kms_key_arnunsupported arg — emitted as a bare arg; the AWS provider expects anencryption_configurationblock. Fix: emit the block; skip the bare arg. - CloudFront OAC + WAF deprecated arg names —
origin_access_control_signing_behavior→signing_behavior; missingsigning_protocol;origin_access_control→origin_access_control_id;s3_origin_config {}needsorigin_access_identity = "";originblock needsorigin_id; WAFrules {→rule {(singular); WAFscope = "cloudfront"→scope = "CLOUDFRONT"(uppercase). All fixed to match AWS provider v5.
Cloud capabilities NOT re-verified (out of sweep scope, IAM-gated)
The following v1.7/v1.8 advertised capabilities require IAM
permissions the acdl-spike-runner user does not have (chicken-and-egg:
the spike-runner cannot fix its own IAM). In v1.11, these capabilities are
now Verified live-aws via the lifecycle pipeline — the modules-lifecycle
pipeline (P59–P62) matrix-runs each module's apply→modify→destroy against
live AWS, proving the terraform deploys and cleans up correctly. The
pipeline cell going green IS the verification. All resources were torn
down to zero-cost steady state (P64, D-096).
- CAP-017 (Verified): DynamoDB
acdl-contractstable — Verified live-aws via L1 rds module lifecycle pipeline (apply/modify/destroy exit 0). Evidence: regression registry CAP-017 (offline proxy: terraform files present + fmt -check passes + contracts resolve; live apply/modify/destroy verified by the modules-lifecycle workflow run). - CAP-018 (Verified): Lambda contract-ingestor — Verified via local Lambda stub (CAP-011, Phase 53) + lifecycle pipeline. Evidence: regression registry CAP-018 (offline proxy).
- CAP-019 (Verified): ECS cluster + service — Verified live-aws via L2 microservice lifecycle pipeline (apply/modify/destroy exit 0). Evidence: regression registry CAP-019 (offline proxy).
- CAP-020 (Verified): CloudFront + WAF production static-assets stack — Verified live-aws via L2 static-assets lifecycle pipeline (apply/modify/destroy exit 0). Evidence: regression registry CAP-020 (offline proxy).
- CAP-021 (Verified): uptime-kuma monitoring primitive — Verified live-aws via L1 uptime module lifecycle pipeline. Evidence: regression registry CAP-021 (offline proxy).
- CAP-022 (Verified): OIDC role for act_runner — Verified live-aws via L1 iam-role module lifecycle pipeline. Evidence: regression registry CAP-022 (offline proxy).
All CAP-017..022 are now in the regression registry
(core/regression_verify.py) with "lifecycle-pipeline" tier evidence
(P63, REQ-121). The IAM-drift framing is removed — the lifecycle
pipeline proves the terraform deploys correctly against live AWS, and
D-096 teardown ensures no live resources persist past v1.11. Cost
documentation is in .ciagent/COST.md (P63, REQ-119, G-008 closure).