From aebc63127ddddee28169910ccfe270cc2b3f0ea3 Mon Sep 17 00:00:00 2001 From: Jon Chery Date: Wed, 29 Jul 2026 12:51:13 +0000 Subject: [PATCH] =?UTF-8?q?docs(P66):=20v1.12=20init=20+=20research=20?= =?UTF-8?q?=E2=80=94=20presentation=20refinement=20drift=20audit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 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). --- .ciagent/REGRESSION_REPORT.json | 102 +++++++++++++++------ .ciagent/REGRESSION_REPORT.md | 57 +++++++----- .ciagent/REQUIREMENTS.md | 81 +++++++++++++++++ .ciagent/RESEARCH.md | 156 +++++++++++++++++++++++++++++++- .ciagent/config.json | 8 +- 5 files changed, 349 insertions(+), 55 deletions(-) diff --git a/.ciagent/REGRESSION_REPORT.json b/.ciagent/REGRESSION_REPORT.json index 3d50317..34b5983 100644 --- a/.ciagent/REGRESSION_REPORT.json +++ b/.ciagent/REGRESSION_REPORT.json @@ -1,14 +1,14 @@ { - "run_id": "regr-1785177468", - "run_at_utc": "2026-07-27T18:37:48Z", + "run_id": "regr-1785329069", + "run_at_utc": "2026-07-29T12:44:29Z", "milestone": "v1.10", "phase": 52, "summary": { - "Verified": 16, + "Verified": 19, "Decayed": 0, - "Broken": 0 + "Broken": 3 }, - "passed": true, + "passed": false, "results": [ { "capability_id": "CAP-001", @@ -16,7 +16,7 @@ "status": "Verified", "detail": "exit 0; 2 sample contracts validate", "tier": "local", - "duration_ms": 245 + "duration_ms": 275 }, { "capability_id": "CAP-002", @@ -24,7 +24,7 @@ "status": "Verified", "detail": "exit 0; env schema validates", "tier": "local", - "duration_ms": 195 + "duration_ms": 207 }, { "capability_id": "CAP-003", @@ -32,7 +32,7 @@ "status": "Verified", "detail": "exit 0; ", "tier": "local", - "duration_ms": 260 + "duration_ms": 266 }, { "capability_id": "CAP-004", @@ -40,7 +40,7 @@ "status": "Verified", "detail": "exit 0; ", "tier": "local", - "duration_ms": 264 + "duration_ms": 271 }, { "capability_id": "CAP-005", @@ -48,7 +48,7 @@ "status": "Verified", "detail": "exit 0; ", "tier": "local", - "duration_ms": 332 + "duration_ms": 333 }, { "capability_id": "CAP-006", @@ -56,7 +56,7 @@ "status": "Verified", "detail": "exit 0; interpolation ok", "tier": "local", - "duration_ms": 216 + "duration_ms": 246 }, { "capability_id": "CAP-007", @@ -64,7 +64,7 @@ "status": "Verified", "detail": "exit 0; confidence band=pass", "tier": "local", - "duration_ms": 90 + "duration_ms": 98 }, { "capability_id": "CAP-008", @@ -72,15 +72,15 @@ "status": "Verified", "detail": "exit 0; outbox hash chain ok", "tier": "local", - "duration_ms": 326 + "duration_ms": 391 }, { "capability_id": "CAP-009", "name": "offline pytest suite passes", "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", - "duration_ms": 15683 + "duration_ms": 36643 }, { "capability_id": "CAP-010", @@ -88,31 +88,31 @@ "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", "tier": "local", - "duration_ms": 19489 + "duration_ms": 45233 }, { "capability_id": "CAP-011", "name": "headline E2E runs against the local emulating tier (microservice)", "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", - "duration_ms": 1076 + "duration_ms": 608 }, { "capability_id": "CAP-012", "name": "local E2E on the static-assets stack (no ECS)", "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", - "duration_ms": 500 + "duration_ms": 490 }, { "capability_id": "CAP-013", "name": "terraform init+validate+plan live AWS (microservice)", - "status": "Verified", - "detail": "terraform init+validate+plan OK (live AWS, microservice)", + "status": "Broken", + "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", - "duration_ms": 28354 + "duration_ms": 21198 }, { "capability_id": "CAP-014", @@ -120,7 +120,7 @@ "status": "Verified", "detail": "terraform init+validate+plan OK (live AWS, static-assets)", "tier": "live-aws", - "duration_ms": 32121 + "duration_ms": 32042 }, { "capability_id": "CAP-015", @@ -128,15 +128,63 @@ "status": "Verified", "detail": "acdl-outbox exists, item_count=9", "tier": "live-aws", - "duration_ms": 564 + "duration_ms": 506 }, { "capability_id": "CAP-016", "name": "S3 state bucket exists + readable (live AWS)", "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", - "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 \"\", line 1, in \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 } ] } \ No newline at end of file diff --git a/.ciagent/REGRESSION_REPORT.md b/.ciagent/REGRESSION_REPORT.md index 427d862..5fdbcc9 100644 --- a/.ciagent/REGRESSION_REPORT.md +++ b/.ciagent/REGRESSION_REPORT.md @@ -1,45 +1,56 @@ # Regression Report — v1.10 Phase 52 -- **Run ID:** `regr-1785177468` -- **Run at (UTC):** 2026-07-27T18:37:48Z -- **Summary:** {'Verified': 16, 'Decayed': 0, 'Broken': 0} -- **Passed (milestone gate):** True +- **Run ID:** `regr-1785329069` +- **Run at (UTC):** 2026-07-29T12:44:29Z +- **Summary:** {'Verified': 19, 'Decayed': 0, 'Broken': 3} +- **Passed (milestone gate):** False | 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-002 | environment.schema.json validates env files | local | **Verified** | 195 | exit 0; env schema validates | -| CAP-003 | contract_resolver resolves static-assets | local | **Verified** | 260 | exit 0; | -| CAP-004 | contract_resolver resolves microservice | local | **Verified** | 264 | exit 0; | -| CAP-005 | terraform adapter emits .tf files | local | **Verified** | 332 | exit 0; | -| CAP-006 | contract interpolation expands env/contract tokens | local | **Verified** | 216 | exit 0; interpolation ok | -| CAP-007 | confidence_signal.compute returns a band | local | **Verified** | 90 | exit 0; confidence band=pass | -| CAP-008 | outbox_writer builds a hash-chained item | local | **Verified** | 326 | exit 0; outbox hash chain ok | -| CAP-009 | offline pytest suite passes | local | **Verified** | 15683 | exit 0; [ 98%] +| 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** | 207 | exit 0; env schema validates | +| CAP-003 | contract_resolver resolves static-assets | local | **Verified** | 266 | exit 0; | +| CAP-004 | contract_resolver resolves microservice | local | **Verified** | 271 | exit 0; | +| CAP-005 | terraform adapter emits .tf files | local | **Verified** | 333 | exit 0; | +| 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** | 98 | exit 0; confidence band=pass | +| 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** | 36643 | exit 0; [ 98%] tests/test_wiz_adapter_real_client.py ......... [100%] -====================== 475 passe | -| CAP-010 | run_ci.sh reproduces CI pipeline locally | local | **Verified** | 19489 | exit 0; resource(s)) +====================== 462 passe | +| CAP-010 | run_ci.sh reproduces CI pipeline locally | local | **Verified** | 45233 | exit 0; resource(s)) === PLATFORM CHECK OK === contract -> resolver -> stack -> adapter -> structure validated (offline, no AWS) check-only: OK === 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, "running_count": 1 }, - "outbox_dir": "/tmp/acdl_local_e2e_92qknwvi/outbox", + "outbox_dir": "/tmp/acdl_local_e2e__k613cky/outbox", "outbox_events": 2, "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", "ecs": null, - "outbox_dir": "/tmp/acdl_local_e2e_ntp1b581/outbox", + "outbox_dir": "/tmp/acdl_local_e2e_o8nxabsg/outbox", "outbox_events": 2, "outbox | -| CAP-013 | terraform init+validate+plan live AWS (microservice) | live-aws | **Verified** | 28354 | terraform init+validate+plan OK (live AWS, microservice) | -| CAP-014 | terraform init+validate+plan live AWS (static-assets) | live-aws | **Verified** | 32121 | terraform init+validate+plan OK (live AWS, static-assets) | -| 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'] | +| CAP-013 | terraform init+validate+plan live AWS (microservice) | live-aws | **Broken** | 21198 | terraform validate failed: arn": +│  56: value = module.service-service.service_arn +│  +│ 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 "", line 1, in +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 | diff --git a/.ciagent/REQUIREMENTS.md b/.ciagent/REQUIREMENTS.md index b3906d6..58c9946 100644 --- a/.ciagent/REQUIREMENTS.md +++ b/.ciagent/REQUIREMENTS.md @@ -513,3 +513,84 @@ the restart branches off `v1.10.2`. - Operator-supplied evidence. - 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. + +--- + +## 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). diff --git a/.ciagent/RESEARCH.md b/.ciagent/RESEARCH.md index 39e431a..f20ab38 100644 --- a/.ciagent/RESEARCH.md +++ b/.ciagent/RESEARCH.md @@ -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 decisions with codebase evidence; it does not surface new binding decisions. The decisions are summarized in §Background above and -documented in full in the CLARIFY commit. \ No newline at end of file +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. \ No newline at end of file diff --git a/.ciagent/config.json b/.ciagent/config.json index ce3213a..a3df770 100644 --- a/.ciagent/config.json +++ b/.ciagent/config.json @@ -4,11 +4,11 @@ { "slug": "acdl", "name": "Agentic Cloud Delivery Platform", - "milestone": "v1.11", + "milestone": "v1.12", "status": "active", - "restart": true, - "restart_branch": "milestone/v1.11-restart", - "restart_base": "v1.10.2" + "restart": false, + "milestone_branch": "milestone/v1.12-presentation", + "milestone_base": "v1.11.0" } ], "active_project": "acdl",