docs(P66): v1.12 init + research — presentation refinement drift audit
--- ci--- project: acdl phase: 66 milestone: v1.12 status: specify --- /ci--- --- ci--- project: acdl phase: 66 milestone: v1.12 status: research --- /ci--- Spec: validate v1.12 specification (presentation refinement, decks-only surface + one adapter fix + two probe fixes). REQUIREMENTS.md gains REQ-129..REQ-133. config.json milestone v1.11 -> v1.12, branch milestone/v1.12-presentation. Research: drift audit (9 items) comparing docs/presentations/* against v1.11-verified reality. Regression gate (D-091) re-run surfaced 3 Broken capabilities: CAP-013 (real adapter dedup defect, Class A), CAP-017 (probe over-strict re locals.tf, Class B/C), CAP-018 (probe stale LocalLambdaStub signature, Class B/C). PRE_MORTEM.md FM-3 requires decks to match verified reality; the inventory's 22/22 claim is overstated until CAP-013 is fixed. Decisions D-108 (fix defect inside v1.12), D-109 (deck version refs @v1.11 -> @v1.12 at Phase 70).
This commit is contained in:
@@ -1,14 +1,14 @@
|
|||||||
{
|
{
|
||||||
"run_id": "regr-1785177468",
|
"run_id": "regr-1785329069",
|
||||||
"run_at_utc": "2026-07-27T18:37:48Z",
|
"run_at_utc": "2026-07-29T12:44:29Z",
|
||||||
"milestone": "v1.10",
|
"milestone": "v1.10",
|
||||||
"phase": 52,
|
"phase": 52,
|
||||||
"summary": {
|
"summary": {
|
||||||
"Verified": 16,
|
"Verified": 19,
|
||||||
"Decayed": 0,
|
"Decayed": 0,
|
||||||
"Broken": 0
|
"Broken": 3
|
||||||
},
|
},
|
||||||
"passed": true,
|
"passed": false,
|
||||||
"results": [
|
"results": [
|
||||||
{
|
{
|
||||||
"capability_id": "CAP-001",
|
"capability_id": "CAP-001",
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
"status": "Verified",
|
"status": "Verified",
|
||||||
"detail": "exit 0; 2 sample contracts validate",
|
"detail": "exit 0; 2 sample contracts validate",
|
||||||
"tier": "local",
|
"tier": "local",
|
||||||
"duration_ms": 245
|
"duration_ms": 275
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"capability_id": "CAP-002",
|
"capability_id": "CAP-002",
|
||||||
@@ -24,7 +24,7 @@
|
|||||||
"status": "Verified",
|
"status": "Verified",
|
||||||
"detail": "exit 0; env schema validates",
|
"detail": "exit 0; env schema validates",
|
||||||
"tier": "local",
|
"tier": "local",
|
||||||
"duration_ms": 195
|
"duration_ms": 207
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"capability_id": "CAP-003",
|
"capability_id": "CAP-003",
|
||||||
@@ -32,7 +32,7 @@
|
|||||||
"status": "Verified",
|
"status": "Verified",
|
||||||
"detail": "exit 0; ",
|
"detail": "exit 0; ",
|
||||||
"tier": "local",
|
"tier": "local",
|
||||||
"duration_ms": 260
|
"duration_ms": 266
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"capability_id": "CAP-004",
|
"capability_id": "CAP-004",
|
||||||
@@ -40,7 +40,7 @@
|
|||||||
"status": "Verified",
|
"status": "Verified",
|
||||||
"detail": "exit 0; ",
|
"detail": "exit 0; ",
|
||||||
"tier": "local",
|
"tier": "local",
|
||||||
"duration_ms": 264
|
"duration_ms": 271
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"capability_id": "CAP-005",
|
"capability_id": "CAP-005",
|
||||||
@@ -48,7 +48,7 @@
|
|||||||
"status": "Verified",
|
"status": "Verified",
|
||||||
"detail": "exit 0; ",
|
"detail": "exit 0; ",
|
||||||
"tier": "local",
|
"tier": "local",
|
||||||
"duration_ms": 332
|
"duration_ms": 333
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"capability_id": "CAP-006",
|
"capability_id": "CAP-006",
|
||||||
@@ -56,7 +56,7 @@
|
|||||||
"status": "Verified",
|
"status": "Verified",
|
||||||
"detail": "exit 0; interpolation ok",
|
"detail": "exit 0; interpolation ok",
|
||||||
"tier": "local",
|
"tier": "local",
|
||||||
"duration_ms": 216
|
"duration_ms": 246
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"capability_id": "CAP-007",
|
"capability_id": "CAP-007",
|
||||||
@@ -64,7 +64,7 @@
|
|||||||
"status": "Verified",
|
"status": "Verified",
|
||||||
"detail": "exit 0; confidence band=pass",
|
"detail": "exit 0; confidence band=pass",
|
||||||
"tier": "local",
|
"tier": "local",
|
||||||
"duration_ms": 90
|
"duration_ms": 98
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"capability_id": "CAP-008",
|
"capability_id": "CAP-008",
|
||||||
@@ -72,15 +72,15 @@
|
|||||||
"status": "Verified",
|
"status": "Verified",
|
||||||
"detail": "exit 0; outbox hash chain ok",
|
"detail": "exit 0; outbox hash chain ok",
|
||||||
"tier": "local",
|
"tier": "local",
|
||||||
"duration_ms": 326
|
"duration_ms": 391
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"capability_id": "CAP-009",
|
"capability_id": "CAP-009",
|
||||||
"name": "offline pytest suite passes",
|
"name": "offline pytest suite passes",
|
||||||
"status": "Verified",
|
"status": "Verified",
|
||||||
"detail": "exit 0; [ 98%]\ntests/test_wiz_adapter_real_client.py ......... [100%]\n\n====================== 475 passed, 2 deselected in 14.26s ======================",
|
"detail": "exit 0; [ 98%]\ntests/test_wiz_adapter_real_client.py ......... [100%]\n\n====================== 462 passed, 2 deselected in 35.18s ======================",
|
||||||
"tier": "local",
|
"tier": "local",
|
||||||
"duration_ms": 15683
|
"duration_ms": 36643
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"capability_id": "CAP-010",
|
"capability_id": "CAP-010",
|
||||||
@@ -88,31 +88,31 @@
|
|||||||
"status": "Verified",
|
"status": "Verified",
|
||||||
"detail": "exit 0; resource(s))\n\n=== PLATFORM CHECK OK ===\ncontract -> resolver -> stack -> adapter -> structure validated (offline, no AWS)\ncheck-only: OK\n\n=== CI PIPELINE OK ===\n3 stages passed: lint, test, check-only",
|
"detail": "exit 0; resource(s))\n\n=== PLATFORM CHECK OK ===\ncontract -> resolver -> stack -> adapter -> structure validated (offline, no AWS)\ncheck-only: OK\n\n=== CI PIPELINE OK ===\n3 stages passed: lint, test, check-only",
|
||||||
"tier": "local",
|
"tier": "local",
|
||||||
"duration_ms": 19489
|
"duration_ms": 45233
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"capability_id": "CAP-011",
|
"capability_id": "CAP-011",
|
||||||
"name": "headline E2E runs against the local emulating tier (microservice)",
|
"name": "headline E2E runs against the local emulating tier (microservice)",
|
||||||
"status": "Verified",
|
"status": "Verified",
|
||||||
"detail": "exit 0; al-emulator\",\n \"desired_count\": 1,\n \"running_count\": 1\n },\n \"outbox_dir\": \"/tmp/acdl_local_e2e_92qknwvi/outbox\",\n \"outbox_events\": 2,\n \"outbox_chain_verified\": true,\n \"lambda_status\": 200\n}",
|
"detail": "exit 0; al-emulator\",\n \"desired_count\": 1,\n \"running_count\": 1\n },\n \"outbox_dir\": \"/tmp/acdl_local_e2e__k613cky/outbox\",\n \"outbox_events\": 2,\n \"outbox_chain_verified\": true,\n \"lambda_status\": 200\n}",
|
||||||
"tier": "local",
|
"tier": "local",
|
||||||
"duration_ms": 1076
|
"duration_ms": 608
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"capability_id": "CAP-012",
|
"capability_id": "CAP-012",
|
||||||
"name": "local E2E on the static-assets stack (no ECS)",
|
"name": "local E2E on the static-assets stack (no ECS)",
|
||||||
"status": "Verified",
|
"status": "Verified",
|
||||||
"detail": "exit 0; acdl_local_e2e_ntp1b581/tf\",\n \"backend\": \"local\",\n \"ecs\": null,\n \"outbox_dir\": \"/tmp/acdl_local_e2e_ntp1b581/outbox\",\n \"outbox_events\": 2,\n \"outbox_chain_verified\": true,\n \"lambda_status\": 200\n}",
|
"detail": "exit 0; acdl_local_e2e_o8nxabsg/tf\",\n \"backend\": \"local\",\n \"ecs\": null,\n \"outbox_dir\": \"/tmp/acdl_local_e2e_o8nxabsg/outbox\",\n \"outbox_events\": 2,\n \"outbox_chain_verified\": true,\n \"lambda_status\": 200\n}",
|
||||||
"tier": "local",
|
"tier": "local",
|
||||||
"duration_ms": 500
|
"duration_ms": 490
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"capability_id": "CAP-013",
|
"capability_id": "CAP-013",
|
||||||
"name": "terraform init+validate+plan live AWS (microservice)",
|
"name": "terraform init+validate+plan live AWS (microservice)",
|
||||||
"status": "Verified",
|
"status": "Broken",
|
||||||
"detail": "terraform init+validate+plan OK (live AWS, microservice)",
|
"detail": "terraform validate failed: arn\":\n\u001b[31m\u2502\u001b[0m \u001b[0m 56: value = \u001b[4mmodule.service-service.service_arn\u001b[0m\u001b[0m\n\u001b[31m\u2502\u001b[0m \u001b[0m\n\u001b[31m\u2502\u001b[0m \u001b[0mNo module call named \"service-service\" is declared in the root module.\n\u001b[31m\u2575\u001b[0m\u001b[0m",
|
||||||
"tier": "live-aws",
|
"tier": "live-aws",
|
||||||
"duration_ms": 28354
|
"duration_ms": 21198
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"capability_id": "CAP-014",
|
"capability_id": "CAP-014",
|
||||||
@@ -120,7 +120,7 @@
|
|||||||
"status": "Verified",
|
"status": "Verified",
|
||||||
"detail": "terraform init+validate+plan OK (live AWS, static-assets)",
|
"detail": "terraform init+validate+plan OK (live AWS, static-assets)",
|
||||||
"tier": "live-aws",
|
"tier": "live-aws",
|
||||||
"duration_ms": 32121
|
"duration_ms": 32042
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"capability_id": "CAP-015",
|
"capability_id": "CAP-015",
|
||||||
@@ -128,15 +128,63 @@
|
|||||||
"status": "Verified",
|
"status": "Verified",
|
||||||
"detail": "acdl-outbox exists, item_count=9",
|
"detail": "acdl-outbox exists, item_count=9",
|
||||||
"tier": "live-aws",
|
"tier": "live-aws",
|
||||||
"duration_ms": 564
|
"duration_ms": 506
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"capability_id": "CAP-016",
|
"capability_id": "CAP-016",
|
||||||
"name": "S3 state bucket exists + readable (live AWS)",
|
"name": "S3 state bucket exists + readable (live AWS)",
|
||||||
"status": "Verified",
|
"status": "Verified",
|
||||||
"detail": "state bucket exists, keys=['spike/l2-microservice/terraform.tfstate']",
|
"detail": "state bucket exists, keys=['platform/terraform.tfstate', 'spike/alb/dev/terraform.tfstate', 'spike/cdn/dev/terraform.tfstate', 'spike/ci-vpc/terraform.tfstate', 'spike/clus/dev/terraform.tfstate']",
|
||||||
"tier": "live-aws",
|
"tier": "live-aws",
|
||||||
"duration_ms": 434
|
"duration_ms": 393
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"capability_id": "CAP-017",
|
||||||
|
"name": "DynamoDB acdl-contracts table (lifecycle pipeline evidence)",
|
||||||
|
"status": "Broken",
|
||||||
|
"detail": "missing terraform files: ['locals.tf']",
|
||||||
|
"tier": "lifecycle-pipeline",
|
||||||
|
"duration_ms": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"capability_id": "CAP-018",
|
||||||
|
"name": "Lambda contract-ingestor (local stub + lifecycle evidence)",
|
||||||
|
"status": "Broken",
|
||||||
|
"detail": "LocalLambdaStub check failed: Traceback (most recent call last):\n File \"<string>\", line 1, in <module>\nTypeError: LocalLambdaStub.__init__() missing 1 required positional argument: 'outbox'",
|
||||||
|
"tier": "lifecycle-pipeline",
|
||||||
|
"duration_ms": 149
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"capability_id": "CAP-019",
|
||||||
|
"name": "ECS cluster + service (L2 microservice lifecycle evidence)",
|
||||||
|
"status": "Verified",
|
||||||
|
"detail": "L2 composition resolves (simple + complex contracts)",
|
||||||
|
"tier": "lifecycle-pipeline",
|
||||||
|
"duration_ms": 595
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"capability_id": "CAP-020",
|
||||||
|
"name": "CloudFront + WAF (L2 static-assets lifecycle evidence)",
|
||||||
|
"status": "Verified",
|
||||||
|
"detail": "L2 composition resolves (simple + complex contracts)",
|
||||||
|
"tier": "lifecycle-pipeline",
|
||||||
|
"duration_ms": 525
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"capability_id": "CAP-021",
|
||||||
|
"name": "uptime-kuma (L1 uptime lifecycle evidence)",
|
||||||
|
"status": "Verified",
|
||||||
|
"detail": "terraform files present + simple/complex contracts resolve",
|
||||||
|
"tier": "lifecycle-pipeline",
|
||||||
|
"duration_ms": 566
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"capability_id": "CAP-022",
|
||||||
|
"name": "OIDC role (L1 iam-role lifecycle evidence)",
|
||||||
|
"status": "Verified",
|
||||||
|
"detail": "terraform files present + simple/complex contracts resolve",
|
||||||
|
"tier": "lifecycle-pipeline",
|
||||||
|
"duration_ms": 600
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -1,45 +1,56 @@
|
|||||||
# Regression Report — v1.10 Phase 52
|
# Regression Report — v1.10 Phase 52
|
||||||
|
|
||||||
- **Run ID:** `regr-1785177468`
|
- **Run ID:** `regr-1785329069`
|
||||||
- **Run at (UTC):** 2026-07-27T18:37:48Z
|
- **Run at (UTC):** 2026-07-29T12:44:29Z
|
||||||
- **Summary:** {'Verified': 16, 'Decayed': 0, 'Broken': 0}
|
- **Summary:** {'Verified': 19, 'Decayed': 0, 'Broken': 3}
|
||||||
- **Passed (milestone gate):** True
|
- **Passed (milestone gate):** False
|
||||||
|
|
||||||
| Capability | Name | Tier | Status | Duration (ms) | Detail |
|
| Capability | Name | Tier | Status | Duration (ms) | Detail |
|
||||||
|-----------|------|------|--------|--------------|--------|
|
|-----------|------|------|--------|--------------|--------|
|
||||||
| CAP-001 | contract.schema.json validates sample contracts | local | **Verified** | 245 | exit 0; 2 sample contracts validate |
|
| CAP-001 | contract.schema.json validates sample contracts | local | **Verified** | 275 | exit 0; 2 sample contracts validate |
|
||||||
| CAP-002 | environment.schema.json validates env files | local | **Verified** | 195 | exit 0; env schema validates |
|
| CAP-002 | environment.schema.json validates env files | local | **Verified** | 207 | exit 0; env schema validates |
|
||||||
| CAP-003 | contract_resolver resolves static-assets | local | **Verified** | 260 | exit 0; |
|
| CAP-003 | contract_resolver resolves static-assets | local | **Verified** | 266 | exit 0; |
|
||||||
| CAP-004 | contract_resolver resolves microservice | local | **Verified** | 264 | exit 0; |
|
| CAP-004 | contract_resolver resolves microservice | local | **Verified** | 271 | exit 0; |
|
||||||
| CAP-005 | terraform adapter emits .tf files | local | **Verified** | 332 | exit 0; |
|
| CAP-005 | terraform adapter emits .tf files | local | **Verified** | 333 | exit 0; |
|
||||||
| CAP-006 | contract interpolation expands env/contract tokens | local | **Verified** | 216 | exit 0; interpolation ok |
|
| CAP-006 | contract interpolation expands env/contract tokens | local | **Verified** | 246 | exit 0; interpolation ok |
|
||||||
| CAP-007 | confidence_signal.compute returns a band | local | **Verified** | 90 | exit 0; confidence band=pass |
|
| CAP-007 | confidence_signal.compute returns a band | local | **Verified** | 98 | exit 0; confidence band=pass |
|
||||||
| CAP-008 | outbox_writer builds a hash-chained item | local | **Verified** | 326 | exit 0; outbox hash chain ok |
|
| CAP-008 | outbox_writer builds a hash-chained item | local | **Verified** | 391 | exit 0; outbox hash chain ok |
|
||||||
| CAP-009 | offline pytest suite passes | local | **Verified** | 15683 | exit 0; [ 98%]
|
| CAP-009 | offline pytest suite passes | local | **Verified** | 36643 | exit 0; [ 98%]
|
||||||
tests/test_wiz_adapter_real_client.py ......... [100%]
|
tests/test_wiz_adapter_real_client.py ......... [100%]
|
||||||
|
|
||||||
====================== 475 passe |
|
====================== 462 passe |
|
||||||
| CAP-010 | run_ci.sh reproduces CI pipeline locally | local | **Verified** | 19489 | exit 0; resource(s))
|
| CAP-010 | run_ci.sh reproduces CI pipeline locally | local | **Verified** | 45233 | exit 0; resource(s))
|
||||||
|
|
||||||
=== PLATFORM CHECK OK ===
|
=== PLATFORM CHECK OK ===
|
||||||
contract -> resolver -> stack -> adapter -> structure validated (offline, no AWS)
|
contract -> resolver -> stack -> adapter -> structure validated (offline, no AWS)
|
||||||
check-only: OK
|
check-only: OK
|
||||||
|
|
||||||
=== CI PIPELIN |
|
=== CI PIPELIN |
|
||||||
| CAP-011 | headline E2E runs against the local emulating tier (microservice) | local | **Verified** | 1076 | exit 0; al-emulator",
|
| CAP-011 | headline E2E runs against the local emulating tier (microservice) | local | **Verified** | 608 | exit 0; al-emulator",
|
||||||
"desired_count": 1,
|
"desired_count": 1,
|
||||||
"running_count": 1
|
"running_count": 1
|
||||||
},
|
},
|
||||||
"outbox_dir": "/tmp/acdl_local_e2e_92qknwvi/outbox",
|
"outbox_dir": "/tmp/acdl_local_e2e__k613cky/outbox",
|
||||||
"outbox_events": 2,
|
"outbox_events": 2,
|
||||||
"outbox |
|
"outbox |
|
||||||
| CAP-012 | local E2E on the static-assets stack (no ECS) | local | **Verified** | 500 | exit 0; acdl_local_e2e_ntp1b581/tf",
|
| CAP-012 | local E2E on the static-assets stack (no ECS) | local | **Verified** | 490 | exit 0; acdl_local_e2e_o8nxabsg/tf",
|
||||||
"backend": "local",
|
"backend": "local",
|
||||||
"ecs": null,
|
"ecs": null,
|
||||||
"outbox_dir": "/tmp/acdl_local_e2e_ntp1b581/outbox",
|
"outbox_dir": "/tmp/acdl_local_e2e_o8nxabsg/outbox",
|
||||||
"outbox_events": 2,
|
"outbox_events": 2,
|
||||||
"outbox |
|
"outbox |
|
||||||
| CAP-013 | terraform init+validate+plan live AWS (microservice) | live-aws | **Verified** | 28354 | terraform init+validate+plan OK (live AWS, microservice) |
|
| CAP-013 | terraform init+validate+plan live AWS (microservice) | live-aws | **Broken** | 21198 | terraform validate failed: arn":
|
||||||
| CAP-014 | terraform init+validate+plan live AWS (static-assets) | live-aws | **Verified** | 32121 | terraform init+validate+plan OK (live AWS, static-assets) |
|
[31m│[0m [0m 56: value = [4mmodule.service-service.service_arn[0m[0m
|
||||||
| CAP-015 | DynamoDB outbox table exists (live AWS) | live-aws | **Verified** | 564 | acdl-outbox exists, item_count=9 |
|
[31m│[0m [0m
|
||||||
| CAP-016 | S3 state bucket exists + readable (live AWS) | live-aws | **Verified** | 434 | state bucket exists, keys=['spike/l2-microservice/terraform.tfstate'] |
|
[31m│[0m [0mNo module call nam |
|
||||||
|
| CAP-014 | terraform init+validate+plan live AWS (static-assets) | live-aws | **Verified** | 32042 | terraform init+validate+plan OK (live AWS, static-assets) |
|
||||||
|
| CAP-015 | DynamoDB outbox table exists (live AWS) | live-aws | **Verified** | 506 | acdl-outbox exists, item_count=9 |
|
||||||
|
| CAP-016 | S3 state bucket exists + readable (live AWS) | live-aws | **Verified** | 393 | state bucket exists, keys=['platform/terraform.tfstate', 'spike/alb/dev/terraform.tfstate', 'spike/cdn/dev/terraform.tfstate', 'spike/ci-vpc/terraform.tfstate', |
|
||||||
|
| CAP-017 | DynamoDB acdl-contracts table (lifecycle pipeline evidence) | lifecycle-pipeline | **Broken** | 0 | missing terraform files: ['locals.tf'] |
|
||||||
|
| CAP-018 | Lambda contract-ingestor (local stub + lifecycle evidence) | lifecycle-pipeline | **Broken** | 149 | LocalLambdaStub check failed: Traceback (most recent call last):
|
||||||
|
File "<string>", line 1, in <module>
|
||||||
|
TypeError: LocalLambdaStub.__init__() missing 1 required |
|
||||||
|
| CAP-019 | ECS cluster + service (L2 microservice lifecycle evidence) | lifecycle-pipeline | **Verified** | 595 | L2 composition resolves (simple + complex contracts) |
|
||||||
|
| CAP-020 | CloudFront + WAF (L2 static-assets lifecycle evidence) | lifecycle-pipeline | **Verified** | 525 | L2 composition resolves (simple + complex contracts) |
|
||||||
|
| CAP-021 | uptime-kuma (L1 uptime lifecycle evidence) | lifecycle-pipeline | **Verified** | 566 | terraform files present + simple/complex contracts resolve |
|
||||||
|
| CAP-022 | OIDC role (L1 iam-role lifecycle evidence) | lifecycle-pipeline | **Verified** | 600 | terraform files present + simple/complex contracts resolve |
|
||||||
|
|||||||
@@ -513,3 +513,84 @@ the restart branches off `v1.10.2`.
|
|||||||
- Operator-supplied evidence.
|
- Operator-supplied evidence.
|
||||||
- Pilot onboarding (G-001).
|
- Pilot onboarding (G-001).
|
||||||
- Boto3 post-deploy verification probes (CAP-017..022 live-verify via boto3) — deferred to a future QA milestone. The lifecycle pipeline apply→destroy IS the verification for v1.11.
|
- Boto3 post-deploy verification probes (CAP-017..022 live-verify via boto3) — deferred to a future QA milestone. The lifecycle pipeline apply→destroy IS the verification for v1.11.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Milestone v1.12 — Presentation Refinement (REQ-129..REQ-133)
|
||||||
|
|
||||||
|
**Objective:** Refine the leadership presentation decks to reflect the
|
||||||
|
verified reality after v1.11 — the stateless adapter, pipeline-driven
|
||||||
|
lifecycle testing, the cost operating model, the pre-mortem, and the
|
||||||
|
teardown to zero-cost. The v1.11 P65 deck-rewrite task did not fully land
|
||||||
|
on the deck artifacts: the rendered HTML still claims 6 cloud
|
||||||
|
capabilities are "deploy-unverified (IAM drift)", the road-to-north-star
|
||||||
|
diagram still shows v1.10 as "NEXT", and the v1.11 architecture stories
|
||||||
|
are absent. The v1.10 decay lesson (PRE_MORTEM.md FM-3) requires decks
|
||||||
|
to match verified reality exactly, not outrun it. The v1.12 regression
|
||||||
|
gate run (Phase 66) surfaced 3 Broken capabilities — one real adapter
|
||||||
|
defect (CAP-013) and two regression-probe bugs (CAP-017, CAP-018) — that
|
||||||
|
must be fixed before the decks can honestly claim 22/22 Verified.
|
||||||
|
|
||||||
|
**Surface:** leadership decks only (`docs/presentations/`) — both decks
|
||||||
|
across all four layers (source markdown, Marp deck, rendered HTML,
|
||||||
|
talking points) + diagrams + README. Plus the one real adapter fix and
|
||||||
|
two probe fixes required to make the deck claims true.
|
||||||
|
|
||||||
|
### Requirements
|
||||||
|
|
||||||
|
- **REQ-129** — The adapter's module-call dedup logic
|
||||||
|
(`adapters/terraform/adapter.py`) is fixed so multi-resource L1s with
|
||||||
|
stack outputs (e.g. `ecs-service`, `alb`) produce valid Terraform:
|
||||||
|
`terraform validate` succeeds for the microservice stack (CAP-013
|
||||||
|
Verified live-aws). The regression gate re-runs and confirms 22/22
|
||||||
|
Verified. (Phase 67)
|
||||||
|
- **REQ-130** — The two regression-probe bugs are fixed: CAP-017's
|
||||||
|
probe no longer requires `locals.tf` for modules that legitimately
|
||||||
|
omit it (`core/regression_verify.py`); CAP-018's probe instantiates
|
||||||
|
`LocalLambdaStub` with the required `outbox` arg. The regression gate
|
||||||
|
re-runs clean (19 Verified + 3 fixed → 22/22 Verified). (Phase 67)
|
||||||
|
- **REQ-131** — Both leadership decks' capability claims match
|
||||||
|
`CAPABILITY_INVENTORY.md` exactly: 22/22 Verified, no
|
||||||
|
"deploy-unverified" / "IAM drift" / "design-verified" framing. The
|
||||||
|
decks reflect "Verified live-aws via lifecycle pipeline; torn down to
|
||||||
|
zero-cost." A grep-based doc verification (successor to the planned
|
||||||
|
`ci-doc-verifier`) confirms zero stale claims across
|
||||||
|
`docs/presentations/`. (Phase 68, Phase 70)
|
||||||
|
- **REQ-132** — Both decks reflect v1.11's architecture as
|
||||||
|
leadership-relevant stories: (a) the stateless adapter
|
||||||
|
(918→~80 lines, defaults centralized in per-module `terraform/`
|
||||||
|
dirs, the adapter is an assembler); (b) pipeline-driven lifecycle
|
||||||
|
testing (a `modules-lifecycle` pipeline matrix-runs each module
|
||||||
|
apply→modify→destroy against live AWS — the green cell IS the
|
||||||
|
verification). The `road-to-north-star` diagram + both decks' roadmap
|
||||||
|
appendix slides reflect v1.11 complete (v1.10 no longer "NEXT").
|
||||||
|
Version refs in deck examples bump from `@v1.10` → `@v1.11` (and
|
||||||
|
`@v1.12` at Phase 70 complete after the tag exists). (Phase 68)
|
||||||
|
- **REQ-133** — Both decks' "Operating Model & Cost" appendix slide
|
||||||
|
carries the real `COST.md` figures ($0.001883 / 8 days, ~$0.007/mo,
|
||||||
|
S3-dominated, zero BAU compute) + the zero-cost-steady-state /
|
||||||
|
D-096 teardown claim, and references the pre-mortem
|
||||||
|
(`PRE_MORTEM.md`: v1.10 decay root cause + four forward failure modes
|
||||||
|
+ structural mitigations). Both rendered HTML decks re-rendered and
|
||||||
|
committed; both talking-points files re-distilled to match the updated
|
||||||
|
Marp structure (including the A6 Operating Model & Cost section that
|
||||||
|
was missing from the talking points). PPTX exported to the v1.12.0
|
||||||
|
release. (Phase 69, Phase 70)
|
||||||
|
|
||||||
|
### v1.12 Traceability
|
||||||
|
|
||||||
|
| Requirement | Phase | Status |
|
||||||
|
|-------------|-------|--------|
|
||||||
|
| REQ-129 | P67 | planned |
|
||||||
|
| REQ-130 | P67 | planned |
|
||||||
|
| REQ-131 | P68, P70 | planned |
|
||||||
|
| REQ-132 | P68 | planned |
|
||||||
|
| REQ-133 | P69, P70 | planned |
|
||||||
|
|
||||||
|
### Out of Scope (v1.12)
|
||||||
|
- docs/ site, README.md, consumer-guide, module READMEs (decks only).
|
||||||
|
- Structural deck rework (re-ordering, adding/removing main slides) —
|
||||||
|
v1.12 keeps the 10 main + 6 appendix structure to avoid the
|
||||||
|
backwards-sequencing failure mode (PRE_MORTEM.md FM-3).
|
||||||
|
- New capability claims beyond what v1.11 verified.
|
||||||
|
- Per-phase regression hardening (G-007, unchanged).
|
||||||
|
|||||||
+155
-1
@@ -538,4 +538,158 @@ All v1.11 binding decisions (D-097..D-107) were committed in the CLARIFY
|
|||||||
stage (`80b7286`) before this research ran. This research *grounds* those
|
stage (`80b7286`) before this research ran. This research *grounds* those
|
||||||
decisions with codebase evidence; it does not surface new binding
|
decisions with codebase evidence; it does not surface new binding
|
||||||
decisions. The decisions are summarized in §Background above and
|
decisions. The decisions are summarized in §Background above and
|
||||||
documented in full in the CLARIFY commit.
|
documented in full in the CLARIFY commit.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# v1.12 Addendum — Presentation Refinement Research
|
||||||
|
|
||||||
|
> Generated: 2026-07-29. Phase 66. Milestone v1.12.
|
||||||
|
> Mode: docs-only NFR milestone focused on the leadership decks.
|
||||||
|
> Surface: `docs/presentations/` (PW + DX, all four layers) + one real
|
||||||
|
> adapter fix + two probe fixes required to make deck claims true.
|
||||||
|
|
||||||
|
## Background — why v1.12 exists
|
||||||
|
|
||||||
|
v1.11 (P56a–P65) landed the stateless adapter, pipeline-driven
|
||||||
|
lifecycle testing, single platform VPC, `COST.md`, `PRE_MORTEM.md`, and
|
||||||
|
a teardown to zero-cost. P65's plan (REQ-118) required the decks to be
|
||||||
|
rewritten to "Verified live-aws via lifecycle pipeline; torn down to
|
||||||
|
zero-cost." That rewrite did not fully land on the deck artifacts. This
|
||||||
|
research is a drift audit: a systematic comparison of the deck artifacts
|
||||||
|
against the v1.11-verified reality.
|
||||||
|
|
||||||
|
## FINDING 1 — Drift audit (9 items)
|
||||||
|
|
||||||
|
Systematic comparison of `docs/presentations/*` against
|
||||||
|
`.ciagent/CAPABILITY_INVENTORY.md`, `.ciagent/COST.md`,
|
||||||
|
`.ciagent/PRE_MORTEM.md`, `.ciagent/ROADMAP.md`, and `git log`.
|
||||||
|
|
||||||
|
1. **Wrong verification status.** Both rendered HTML decks still say
|
||||||
|
"6 cloud capabilities are design-verified + locally emulated,
|
||||||
|
deploy-unverified (IAM drift)" (PW "Testing vs. Planned" slide;
|
||||||
|
DX slide A6). `CAPABILITY_INVENTORY.md` says 22/22 Verified and the
|
||||||
|
IAM-drift framing was *removed* in P65. The decks contradict the
|
||||||
|
inventory. Verified: `grep -c "deploy-unverified\|IAM drift\|design-verified"
|
||||||
|
docs/presentations/*.html` → 3 hits per deck.
|
||||||
|
2. **Re-verification header stale.** Both source `.md` headers say
|
||||||
|
"Re-verification (2026-07-27)… v1.10 Phase 54… 16/16… 6 IAM-gated
|
||||||
|
escalated." Should reflect v1.11: 22/22 Verified, torn down.
|
||||||
|
3. **Road to the North Star diagram stale.**
|
||||||
|
`docs/presentations/assets/mmd/road-to-north-star.mmd` shows v1.10 as
|
||||||
|
"NEXT" with "HITL wiring / all-runner OIDC / regulatory ledger". v1.11
|
||||||
|
is complete; the diagram must advance.
|
||||||
|
4. **Rendered HTML not re-rendered.** `git log` shows the HTML was last
|
||||||
|
touched at `10b87a6` (P57), *before* v1.11. P65's "re-render HTML"
|
||||||
|
task did not reach the rendered artifacts.
|
||||||
|
5. **Version refs stale.** Decks reference `@v1.10` in deploy.yml `uses:`
|
||||||
|
snippets (Safe Promotion Path, Safe Decommission). Ship tag is now
|
||||||
|
`v1.11.0`; will be `v1.12.0` at Phase 70 complete.
|
||||||
|
6. **Cost story has no real numbers.** `COST.md` exists ($0.001883 over
|
||||||
|
8 days, ~$0.007/mo, S3-dominated, zero BAU compute) but the decks' A6
|
||||||
|
"Operating Model & Cost" slide is generic prose with no figures.
|
||||||
|
7. **Pre-mortem unreferenced.** P65 planned to add a pre-mortem
|
||||||
|
reference; `PRE_MORTEM.md` exists (v1.10 decay root cause + four
|
||||||
|
forward failure modes) but no deck slide references it.
|
||||||
|
8. **Two v1.11 stories absent.** (a) Architectural simplicity: adapter
|
||||||
|
918→~80 lines, defaults centralized in per-module `terraform/` dirs.
|
||||||
|
(b) Verifiable deploys: a `modules-lifecycle` pipeline matrix-runs
|
||||||
|
each module apply→modify→destroy against live AWS. Neither is in the
|
||||||
|
decks.
|
||||||
|
9. **Duplicated story-beat lines.** `how-the-platform-works.md` slides
|
||||||
|
3–10 each repeat their intro line twice (a copy-paste artifact).
|
||||||
|
|
||||||
|
## FINDING 2 — Regression gate surfaces real decay (D-091)
|
||||||
|
|
||||||
|
The v1.12 regression gate run (Phase 66) re-ran the D-091 regression
|
||||||
|
gate to back every deck claim. It found **3 Broken capabilities**:
|
||||||
|
`{'Verified': 19, 'Decayed': 0, 'Broken': 3}`.
|
||||||
|
|
||||||
|
### CAP-013 — live-aws — REAL platform defect (Class A)
|
||||||
|
|
||||||
|
`adapters/terraform/adapter.py:159-172` (the `seen` dedup loop)
|
||||||
|
collapses the two `ecs-service` sub-resources (`service-task-definition`
|
||||||
|
+ `service-service`, both module `ecs-service@1.0.0`) into ONE
|
||||||
|
`module "service-task-definition"` block. But the stack output
|
||||||
|
`service_arn` (resolver `from: "service-service"`) is emitted as
|
||||||
|
`value = module.service-service.service_arn` — referencing a module
|
||||||
|
call that was never emitted. `terraform validate` fails: "No module
|
||||||
|
call name." The same defect silently breaks the `alb` L1 too. Static-
|
||||||
|
assets (CAP-014) doesn't hit it because its L1s are single-resource.
|
||||||
|
**Classification A — real platform defect.** The adapter produces
|
||||||
|
invalid Terraform for any multi-resource L1 with stack-level outputs.
|
||||||
|
**Fix required before decks can claim 22/22 Verified.**
|
||||||
|
|
||||||
|
### CAP-017 — lifecycle-pipeline — regression-probe bug (Class B/C)
|
||||||
|
|
||||||
|
`core/regression_verify.py:444` hardcodes
|
||||||
|
`required = ["versions.tf", "variables.tf", "locals.tf", "main.tf",
|
||||||
|
"outputs.tf"]`. The CAP-017 probe targets the `rds` L1 module, whose
|
||||||
|
`main.tf` uses only `var.*` and `aws_db_subnet_group.this` — no `local.*`
|
||||||
|
references, so `locals.tf` is legitimately absent. The probe is over-
|
||||||
|
strict. The rds module is correctly structured; the capability works.
|
||||||
|
**Classification B/C — trivial probe fix.** Drop `locals.tf` from the
|
||||||
|
required list, or make it conditional on `local.` usage.
|
||||||
|
|
||||||
|
### CAP-018 — lifecycle-pipeline — regression-probe bug (Class B/C)
|
||||||
|
|
||||||
|
`core/local_emulators.py:273` defines `LocalLambdaStub` as a dataclass
|
||||||
|
with one required field `outbox: FlatFileOutbox`. Every real caller
|
||||||
|
passes it (`core/local_emulators.py:464`, the tests). The CAP-018 probe
|
||||||
|
at `core/regression_verify.py:486-491` is the *only* caller that
|
||||||
|
instantiates it bare: `LocalLambdaStub()` → `TypeError`. The probe was
|
||||||
|
added in P63 and never aligned with the real signature. The capability
|
||||||
|
is exercised green by CAP-011. **Classification B/C — trivial probe
|
||||||
|
fix.** Pass an `outbox` to the constructor.
|
||||||
|
|
||||||
|
### Implication for the decks
|
||||||
|
|
||||||
|
`CAPABILITY_INVENTORY.md` claims 22/22 Verified, but the regression
|
||||||
|
gate (D-091 — the exact mechanism PRE_MORTEM.md FM-3 says backs every
|
||||||
|
deck claim) shows CAP-013 is genuinely broken. **The inventory
|
||||||
|
overstates.** v1.12 cannot ship decks claiming 22/22 until CAP-013 is
|
||||||
|
fixed and the gate re-runs clean. This is the structural mitigation the
|
||||||
|
pre-mortem requires (verified-only claims; decks unfrozen only after
|
||||||
|
re-verification). The user decision: fix the defect inside v1.12
|
||||||
|
(Phase 67), then the decks can honestly claim 22/22.
|
||||||
|
|
||||||
|
## FINDING 3 — Talking points structure gap
|
||||||
|
|
||||||
|
Both talking-points files have only 5 appendix sections (A1–A5) while
|
||||||
|
the Marp decks have 6 (A6 = "Operating Model & Cost"). The A6 content
|
||||||
|
exists in the Marp deck and source markdown but was never distilled
|
||||||
|
into the talking points. The re-distill step (Phase 69) must add the
|
||||||
|
A6 section to both talking-points files.
|
||||||
|
|
||||||
|
## FINDING 4 — Versioning facts
|
||||||
|
|
||||||
|
- Current ship tag: `v1.11.0` (v1.11 complete).
|
||||||
|
- `deploy.yml` still references `v1.9` in comments + `ref: v1.9` —
|
||||||
|
v1.11 apparently did not bump the deploy workflow `uses:` tag (the
|
||||||
|
bump is a separate concern; decks use the current ship tag).
|
||||||
|
- Decks should show `@v1.11` in examples (current state); Phase 70
|
||||||
|
bumps to `@v1.12` after the tag exists.
|
||||||
|
|
||||||
|
## Assumptions logged
|
||||||
|
|
||||||
|
- No automated `ci-doc-verifier` script exists in the repo. The plan's
|
||||||
|
"ci-doc-verifier confirms" is satisfied by a manual grep-based
|
||||||
|
verification recorded in the Phase 70 VERIFY step (consistent with how
|
||||||
|
prior NFR-patch phases handled it). Confidence 0.90 — verified by
|
||||||
|
`ls scripts/ | grep doc` and `grep -rl deck tests/`.
|
||||||
|
- PPTX export requires Chromium + Marp CLI; the environment has it
|
||||||
|
(`/root/.cache/ms-playwright/chromium-1217/chrome-linux64/chrome`).
|
||||||
|
PPTX is uploaded to the Gitea release, not committed. Confidence
|
||||||
|
0.85 — README documents the path; the chromium binary exists.
|
||||||
|
|
||||||
|
## Decisions surfaced (research → bound in CLARIFY-equivalent)
|
||||||
|
|
||||||
|
- **D-108** — v1.12 includes one real adapter fix (CAP-013) and two
|
||||||
|
probe fixes (CAP-017, CAP-018) as Phase 67 prerequisites, so the decks
|
||||||
|
can honestly claim 22/22 Verified. The milestone is "presentation
|
||||||
|
refinement" but the verified-only-claims pre-mortem mitigation makes
|
||||||
|
the fixes mandatory. The user confirmed this scope (interactive
|
||||||
|
decision, 2026-07-29).
|
||||||
|
- **D-109** — Decks use `@v1.11` in examples during Phase 68 (current
|
||||||
|
state), bumped to `@v1.12` at Phase 70 complete after the tag exists.
|
||||||
|
Avoids a dangling reference to a tag that doesn't exist yet.
|
||||||
@@ -4,11 +4,11 @@
|
|||||||
{
|
{
|
||||||
"slug": "acdl",
|
"slug": "acdl",
|
||||||
"name": "Agentic Cloud Delivery Platform",
|
"name": "Agentic Cloud Delivery Platform",
|
||||||
"milestone": "v1.11",
|
"milestone": "v1.12",
|
||||||
"status": "active",
|
"status": "active",
|
||||||
"restart": true,
|
"restart": false,
|
||||||
"restart_branch": "milestone/v1.11-restart",
|
"milestone_branch": "milestone/v1.12-presentation",
|
||||||
"restart_base": "v1.10.2"
|
"milestone_base": "v1.11.0"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"active_project": "acdl",
|
"active_project": "acdl",
|
||||||
|
|||||||
Reference in New Issue
Block a user