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:
Jon Chery
2026-07-29 12:51:13 +00:00
parent 3e11b0fafd
commit aebc63127d
5 changed files with 349 additions and 55 deletions
+75 -27
View File
@@ -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
} }
] ]
} }
+34 -23
View File
@@ -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) | │  56: value = module.service-service.service_arn
| CAP-015 | DynamoDB outbox table exists (live AWS) | live-aws | **Verified** | 564 | acdl-outbox exists, item_count=9 | │ 
| CAP-016 | S3 state bucket exists + readable (live AWS) | live-aws | **Verified** | 434 | state bucket exists, keys=['spike/l2-microservice/terraform.tfstate'] | │ No 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 |
+81
View File
@@ -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).
+154
View File
@@ -539,3 +539,157 @@ 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 (P56aP65) 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
310 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 (A1A5) 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 -4
View File
@@ -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",