From ec7406066444a148bfaaf463d4c09ea49f3ea362 Mon Sep 17 00:00:00 2001 From: Jon Chery Date: Wed, 29 Jul 2026 13:22:56 +0000 Subject: [PATCH] docs(P68): sync decks source .md to v1.11/v1.12 reality (9 drift items + plan-only-default story) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ci--- project: acdl phase: 68 milestone: v1.12 status: execute --- /ci--- Source-of-truth markdown for both decks synced to verified reality: - Re-verification headers -> 22/22 Verified (v1.11 lifecycle + v1.12 P67 fix), v1.10 '6 deploy-unverified (IAM drift)' disclosed as closed. - A4 (PW) verification status: '11 capabilities testing' -> '22/22 Verified via lifecycle pipeline + regression gate'. - De-duplicated repeated story-beat intro lines (PW slides 3-10, A1). - Version refs @v1.10 -> @v1.11 in deck examples. - road-to-north-star.mmd re-rendered: v1.10 no longer 'NEXT'; v1.11-v1.12 lifecycle testing + presentation refine (22/22 Verified + torn down to zero-cost) is the current phase; v2.0 is NEXT. - New A6 'Operating Model & Cost' in both decks: real COST.md figures (/usr/bin/bash.001883/8d, ~/usr/bin/bash.007/mo, S3-dominated), zero-cost steady state, D-096 teardown, + pre-mortem reference (PRE_MORTEM.md: 4 failure modes + structural mitigations). - New A7 'Verified by Construction' in both decks: the two v1.11 architectural pillars (stateless adapter 918->~80 lines; pipeline-driven lifecycle testing — the green cell IS verification) + the v1.12 plan-only default (ACDL_LIFECYCLE_MODE flag, REQ-134). - Appendix TOCs updated (5 -> 7 sections). Marp + HTML + talking points re-synthesized in P69 (next). --- .../assets/mmd/road-to-north-star.mmd | 15 ++-- .../assets/png/road-to-north-star.png | Bin 42575 -> 40218 bytes docs/presentations/how-the-platform-works.md | 67 +++++++++++------- .../presentations/the-developer-experience.md | 54 +++++++++++--- 4 files changed, 95 insertions(+), 41 deletions(-) diff --git a/docs/presentations/assets/mmd/road-to-north-star.mmd b/docs/presentations/assets/mmd/road-to-north-star.mmd index 0a1ce70..cc71559 100644 --- a/docs/presentations/assets/mmd/road-to-north-star.mmd +++ b/docs/presentations/assets/mmd/road-to-north-star.mmd @@ -3,15 +3,16 @@ flowchart LR A["v1.0\nDEMO\ncomplete"] --> B["v1.1–v1.8\nPLATFORM BUILD\ncomplete"] B --> C["v1.9\nPRESENTATIONS + PATCHES\ncomplete"] - C --> D["v1.10\nNEXT\nHITL wiring\nall-runner OIDC\nregulatory ledger"] - D --> E["v2.0\nFUTURE\ncompliance milestone\nself-service\ndynamic modules\nengine adapters"] - E --> F["North Star\nREALIZED\nfull autonomy (lower)\nattested (higher)\ncitizen dev live\nevidence regulatory-grade"] + C --> D["v1.10\nREGRESSION GATE\n+ verified reality\ncomplete"] + D --> E["v1.11–v1.12\nLIFECYCLE TESTING\n+ presentation refine\n22/22 Verified\n+ torn down to zero-cost"] + E --> F["v2.0\nFUTURE\ncompliance milestone\nself-service\ndynamic modules\nengine adapters"] + F --> G["North Star\nREALIZED\nfull autonomy (lower)\nattested (higher)\ncitizen dev live\nevidence regulatory-grade"] A -.->|"stub-driven proof"| A B -.->|"IR + OIDC + ABAC +\nmodule catalog +\nencryption + decommission"| B C -.->|"10-slide decks +\ntalking points +\nS&P theme"| C - D -.->|"proposed phasing\nnot formally planned"| D - E -.->|"proposed phasing\nnot formally planned"| E + D -.->|"regression gate (D-091)\nlocal emulating tier\nverified-reality rewrite"| D + E -.->|"stateless adapter (918→~80 lines)\npipeline-driven lifecycle\nplan-only default (REQ-134)\ntorn down to zero-cost"| E + F -.->|"proposed phasing\nnot formally planned"| F classDef accent fill:#1B1B1B,color:#fff,stroke:#D6002A,stroke-width:2px classDef supporting fill:#fff,color:#1B1B1B,stroke:#D6002A,stroke-width:1px -class F accent - +class G accent \ No newline at end of file diff --git a/docs/presentations/assets/png/road-to-north-star.png b/docs/presentations/assets/png/road-to-north-star.png index ffcda6027e8fb8c62a892865c77ddecbf163e79a..378c17ed581163273647e527778315be4ff661c9 100644 GIT binary patch literal 40218 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 V{gW`Fs!TrO=t1=ZiTjPc{vY|Wn&1Ec literal 42575 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 diff --git a/docs/presentations/how-the-platform-works.md b/docs/presentations/how-the-platform-works.md index 4b298db..0369032 100644 --- a/docs/presentations/how-the-platform-works.md +++ b/docs/presentations/how-the-platform-works.md @@ -5,7 +5,7 @@ > **Length:** ~15 minutes · 10 main + 6 appendix = 16 slides > **Purpose:** Sell the platform's value to tech leadership — zero-trust, security, observability, auditability, and the shift from "operators guess" to "the platform computes safety." > **Maturity framing:** "Testing" = works internally, dev pilot-ready. "Planned" = on the roadmap, not yet implemented. "Agentic" = involves AI agents or autonomous decision-making. -> **Re-verification (2026-07-27):** Every "Testing" claim in this deck was re-verified in v1.10 Phase 54 (D-093). The headline E2E (contract → resolver → adapter → terraform init/validate/plan) passes against the live AWS account; the local emulating tier (Phase 53) runs the full E2E with no cloud credentials. 16/16 auto-verifiable capabilities Verified; 6 IAM-gated cloud resources are escalated (require an admin principal the spike-runner lacks). See `.ciagent/CAPABILITY_INVENTORY.md`. +> **Re-verification (2026-07-29):** Every "Testing" claim in this deck was re-verified in v1.10 Phase 54 (D-093) and again in v1.11 via the pipeline-driven lifecycle tests (P59–P62). The headline E2E (contract → resolver → adapter → terraform init/validate/plan) passes against the live AWS account; the local emulating tier (Phase 53) runs the full E2E with no cloud credentials. **22/22 auto-verifiable capabilities Verified** (CAP-013 fixed in v1.12 P67 — the adapter's multi-resource L1 dedup defect is closed; CAP-017/018 probe bugs fixed). The v1.11 lifecycle pipeline ran apply→modify→destroy against live AWS and was then torn down to zero-cost (D-096). See `.ciagent/CAPABILITY_INVENTORY.md` and `.ciagent/PRE_MORTEM.md`. --- @@ -46,8 +46,6 @@ Four frictions slow every team: Now that we know the problem, here's where ACDL fits — and where it doesn't. -Now that we know the problem, here's where ACDL fits — and where it doesn't. - - **Upstream is anything** — your IDE, an agentic SDLC, or a citizen developer vibe coding on a laptop. ACDL doesn't care how the contract was produced. - **ACDL is infrastructure only** — it provisions and governs AWS resources. It does not build, test, or deploy your application code. That's upstream. - **Not a general-purpose AI** — autonomy is narrow, scoped to delivery, bounded by strict policy envelopes. @@ -61,8 +59,6 @@ Now that we know the problem, here's where ACDL fits — and where it doesn't. The contract is the boundary between upstream and ACDL. It's all a consumer writes. -The contract is the boundary between upstream and ACDL. It's all a consumer writes. - A single YAML contract — **module, environment, inputs**. The platform owns everything else. ```mermaid @@ -88,8 +84,6 @@ The consumer does **not** write infrastructure modules, workflow logic, or adapt Once the contract is written, here's what the platform does with it — every time. -Once the contract is written, here's what the platform does with it — every time. - Every deployment runs the same stages, in the same order, with the same checks — no team-specific pipelines, no tribal runbooks. ```mermaid @@ -117,8 +111,6 @@ Two properties matter to leadership: Before any infrastructure is created, here's how access is scoped. -Before any infrastructure is created, here's how access is scoped. - Consumer repositories hold **no long-lived cloud credentials.** Ever. - **Authentication is OIDC federation** between the platform runners and the cloud provider. Each job mints a short-lived token; no credential is stored in the consumer repo or in a runner secret. *(Testing on GitHub Actions runners; planned for all platform runners.)* @@ -136,8 +128,6 @@ Consumer repositories hold **no long-lived cloud credentials.** Ever. Now let's look at how the platform decides whether a deployment is safe. -Now let's look at how the platform decides whether a deployment is safe. - Every delivery action produces a **measurable, explainable confidence signal** — a weighted sum of observable facts, not a black box. *(Agentic.)* - **Six weighted inputs** — policy conformance, validation, freshness, source provenance, history, and non-functional requirements (NFRs). The weights are **manually tuned**, the inputs are **observable**, and the breakdown is **auditable** — if a consumer asks "why 0.62?", the platform answers with a per-input breakdown. @@ -161,8 +151,6 @@ Every delivery action produces a **measurable, explainable confidence signal** Beyond the confidence signal, security defaults are on by construction — not by opt-in. -Beyond the confidence signal, security defaults are on by construction — not by opt-in. - Security defaults that **do not require a team to opt in.** Checks run on **every** deployment, normalized to a single schema regardless of which engine produced them. *(Testing.)* - **Infrastructure-as-code policy** (Checkov) — secrets in plaintext, public ingress, IAM wildcards, KMS key references, **required tagging standards** (`acdl:owner`, `acdl:contract`, `acdl:environment`, `acdl:cost-center`). All run *before* infra is created. @@ -182,8 +170,6 @@ Security defaults that **do not require a team to opt in.** Checks run on **ever Computed safety handles the gate. But humans still matter — here's how accountability works. -Computed safety handles the gate. But humans still matter — here's how accountability works. - - **Dev is fully autonomous.** The confidence signal (≥ 0.50) is the only gate. Queue-based handoffs are eliminated from lower environments. *(Testing, Agentic.)* - **qa, prod, and dr require deliberate human attestation** — not rubber stamps, but policy-mandated acts of accountability via protected deployment approvals. The approver reviews the contract, the planned Terraform changes, and the accumulated evidence. *(Planned.)* - **QA attests to infrastructure readiness — the contract, the planned Terraform changes, and the accumulated evidence. QA does not review application code (that's upstream).** @@ -205,8 +191,6 @@ Version control is a **coordination tool, not an evidentiary fortress.** True co Here's what success looks like when the North Star is reached. -Here's what success looks like when the North Star is reached. - - **Velocity without sacrificing safety.** Speed is in the ergonomics (a simple contract, a one-line `uses:`); safety is in the gates the consumer cannot bypass. - **Security, observability, and compliance as platform defaults** — not per-team effort, not post-hoc remediation. - **Auditability as a byproduct, not a project.** Every production change is traceable to a human attestation and a tamper-evident evidence event. @@ -229,6 +213,8 @@ For deep dives — these slides cover details omitted from the main 10. 3. The Road to the North Star (phased roadmap) 4. Testing vs. Planned (full inventory) 5. Glossary +6. Operating Model & Cost (real AWS spend + pre-mortem) +7. Verified by Construction — the v1.11 architecture (stateless adapter + lifecycle pipeline) > **Speaker notes:** These are deep-dive slides for follow-up questions. Don't walk them in the main 15-minute talk — pull them up when an audience member wants detail on a specific topic. @@ -236,8 +222,6 @@ For deep dives — these slides cover details omitted from the main 10. ## A1 — Platform-Managed Environments -For deep dives — these slides cover details omitted from the main 10. - A consumer provides **no AWS account, no VPC, no subnet, no state backend, no runner key.** The platform owns the blast radius. A named environment is a platform-owned bundle of: @@ -275,18 +259,20 @@ Monitoring is **a platform default, not a per-team project.** *(Testing.)* A phased roadmap from the current Testing baseline to the full North Star: -- **Phase 1 — Testing baseline (current):** contract-driven deploys, zero-trust OIDC + ABAC on GitHub Actions, confidence signal gating, hash-chained evidence, encryption by default, deletion protection + safe decommission, uptime monitoring, platform-managed environments. +- **Phase 1 — Testing baseline (current, v1.12):** contract-driven deploys, zero-trust OIDC + ABAC on GitHub Actions, confidence signal gating, hash-chained evidence, encryption by default, deletion protection + safe decommission, uptime monitoring, platform-managed environments. **22/22 capabilities Verified** via the v1.11 lifecycle pipeline (apply→modify→destroy against live AWS, then torn down to zero-cost). The stateless adapter + lifecycle pipeline are the structural verification (see A7). - **Phase 2 — Production readiness:** HITL wiring for qa/prod/dr, all-runner OIDC, full regulatory ledger (S3 Object Lock + JWS signatures + daily checkpoints), environment self-service. - **Phase 3 — Compliance & expansion:** compliance milestone (GDPR, SOX, SOC2, DORA extension points), additional engine adapters (OpenTofu, Pulumi, Kubernetes CRDs), deeper observability bootstrap. - **Phase 4 — Agentic frontier:** dynamic module creation from a contract (the agentic citizen-developer composition mechanism), pattern recognition that compounds value over time. -> **Speaker notes:** Be clear with leadership: this is a proposed phasing, not a formally committed plan. The phases are sequenced by dependency, not by calendar — each phase's items are gated on the prior phase's maturity. Invite questions on any phase boundary. +> **Speaker notes:** Be clear with leadership: this is a proposed phasing, not a formally committed plan. The phases are sequenced by dependency, not by calendar — each phase's items are gated on the prior phase's maturity. Phase 1 is now fully Verified (22/22) and torn down to zero-cost — it is no longer aspirational. Invite questions on any phase boundary. --- ## A4 — Testing vs. Planned (Full Inventory) -**Testing** (works internally, dev pilot-ready) — 11 capabilities: +> **Verification status (v1.12, 2026-07-29):** 22/22 auto-verifiable capabilities **Verified** — the v1.11 lifecycle pipeline ran apply→modify→destroy against live AWS for every L1 + L2 module, then tore down to zero-cost (D-096). The v1.10 "6 deploy-unverified (IAM drift)" status is closed (CAP-013 fixed in P67). See `CAPABILITY_INVENTORY.md`. + +**Testing** (works internally, dev pilot-ready — 22/22 Verified via lifecycle pipeline + regression gate): - Contract-driven deploys with a versioned reusable workflow. - Module catalog (primitives + modules) with validated examples. @@ -312,7 +298,7 @@ A phased roadmap from the current Testing baseline to the full North Star: - Additional engine adapters (OpenTofu, Pulumi, Kubernetes CRDs). - Deeper observability bootstrap (dashboards, runbooks, on-call bindings). -> **Speaker notes:** Close on honesty. The platform delivers real, verifiable value today — 11 capabilities that work internally. The roadmap is concrete, not aspirational hand-waving — 9 planned items, each with a defined milestone and a clear reason it isn't shipped yet (usually an upstream dependency, not an engineering gap). Emphasize: 0 consumer adoption today — "Testing" means it works internally and is dev pilot-ready, not that it's released. +> **Speaker notes:** Close on honesty. The platform delivers real, verifiable value today — 22/22 auto-verifiable capabilities are Verified via the v1.11 lifecycle pipeline (apply→modify→destroy against live AWS) + the D-091 regression gate. The roadmap is concrete, not aspirational hand-waving — 9 planned items, each with a defined milestone and a clear reason it isn't shipped yet (usually an upstream dependency, not an engineering gap). Emphasize: 0 consumer adoption today — "Testing" means it works internally and is dev pilot-ready, not that it's released. The lifecycle pipeline defaults to **plan-only** on every PR (fast, no AWS mutation, no cost); a CI variable (`ACDL_LIFECYCLE_MODE=full`) overrides to the real apply→destroy for milestone verification (REQ-134, v1.12). --- @@ -330,4 +316,37 @@ A phased roadmap from the current Testing baseline to the full North Star: | **NFR** | Non-Functional Requirement — encryption, tagging, observability standards | | **IR** | Intermediate Representation — the engine-agnostic stack definition between contract and Terraform | -> **Speaker notes:** Use this slide as a reference when the audience asks for term definitions. Don't read it aloud — point to it as a takeaway reference. \ No newline at end of file +> **Speaker notes:** Use this slide as a reference when the audience asks for term definitions. Don't read it aloud — point to it as a takeaway reference. + +--- + +## A6 — Operating Model & Cost (real AWS spend + pre-mortem) + +ACDL runs at **zero cloud cost** for day-to-day development. The v1.0→v1.10 AWS spend was measured directly via Cost Explorer (`COST.md`, 2026-07-28): + +| Metric | Value | +|--------|-------| +| Total spend (8 days) | **$0.001883** | +| Daily average | $0.000235 | +| Projected monthly | ~$0.007 | +| Peak day | 2026-07-27 ($0.000867 — v1.10 regression + verify run) | + +- **S3 dominates** (98.8%, terraform state bucket) — no compute (ECS/Lambda) ran because v1.0→v1.10 was plan-only for IAM-gated capabilities. +- **Local emulators are the primary tier** — the full pipeline runs in-process, no AWS credentials, no Checkov, no DynamoDB. *(Testing.)* +- **Live-AWS verification is milestone-scoped, then torn down.** The v1.11 lifecycle pipeline ran apply→modify→destroy for every module, then tore down to zero-cost steady state (D-096 — teardown mandatory before milestone COMPLETE; no merge to main until `terraform show` confirms no resources). The lifecycle pipeline now **defaults to plan-only** on every PR (fast, no AWS mutation, no cost); a CI variable (`ACDL_LIFECYCLE_MODE=full`) overrides to the real apply→destroy for milestone verification (REQ-134, v1.12). +- **Cost drivers** are spike-scoped: Terraform plan reads (free), S3 state storage (cents), DynamoDB outbox (cents). Any cost spike > $1/day is an anomaly. + +**Pre-mortem (`PRE_MORTEM.md`):** the project's failure modes were pre-mortemed before the leadership pitch. The v1.10 decay incident (diff-scoped VERIFY missed 7 adapter defects across 8 NFR-patch phases — decks advertised capability that wasn't reproducible) is the root pattern: *a claim outruns the verification that backs it.* Four forward failure modes + structural mitigations: (FM-1) IAM-drift recurrence → IAM policy baseline is regression-tested; (FM-2) cost spike from un-torn-down stacks → D-096 mandatory teardown; (FM-3) deck overstates capability → verified-only claims + decks unfrozen only after re-verification; (FM-4) pilot contract gap → honest scope (microservice + static-assets today; the L2 pattern is extensible). All mitigations are structural, not procedural. + +> **Speaker notes:** This is the slide for the Head of Cloud / Finance. The headline: less than one cent over 8 days of active development; zero BAU cloud spend; the lifecycle pipeline defaults to plan-only so the PR-time cost is zero. The pre-mortem is the credibility slide — we have already asked "how does this fail?" and the mitigations are structural (regression-tested baselines, mandatory teardown, verified-only deck claims). The v1.10 decay incident is disclosed honestly, not hidden — that disclosure IS the mitigation. + +--- + +## A7 — Verified by Construction (the v1.11 architecture) + +v1.11 rebuilt the platform on two architectural pillars that make "Verified" a structural property, not a claim: + +- **The stateless adapter (REQ-123, 918 → ~80 lines).** The Terraform adapter was a 918-line monolith with 3 constant tables and 39 type-specific branches. It is now a ~80-line **stateless assembler**: it owns no module content — no resource shape, no nested HCL blocks, no defaults, no type-specific logic. Each L1 module ships a real `terraform/` module dir owning its resource shape, nested blocks, and defaults (centralized in `locals.tf`). The adapter reads the registry and emits `module "x" { source = ... }` blocks. No type-specific logic in the adapter means a new module is a new terraform dir, not a code change. *(The v1.12 P67 fix closed a dedup defect where multi-resource L1s — ecs-service, alb — produced invalid Terraform; CAP-013 now Verified.)* +- **Pipeline-driven lifecycle testing (REQ-127/128).** A `modules-lifecycle` pipeline matrix-runs each L1 and L2 module's `examples/{simple,complex}.yml` contracts through apply→modify→destroy against live AWS. No per-module Python. **The "test" = the pipeline cell going green.** Defaults to **plan-only** on every PR (fast, no AWS mutation, no cost); `ACDL_LIFECYCLE_MODE=full` runs the real apply→destroy for milestone verification (REQ-134, v1.12). The regression gate (D-091) re-runs all 22 capabilities at milestone completion — 22/22 Verified as of v1.12. + +> **Speaker notes:** This is the deep-dive slide for the Head of Engineering / Architecture. The two pillars are the answer to "how do you keep the decks honest?" The adapter is simple enough to reason about (a stateless assembler), and the lifecycle pipeline is the automated verification that backs every "Testing" claim. The v1.10 lesson is the negative space: a 918-line adapter with type-specific branches decayed silently because the VERIFY gate was diff-scoped. The ~80-line stateless adapter + the milestone regression gate are the structural fix. The plan-only default (v1.12) means this verification runs on every PR at zero cost, with the full apply→destroy gated behind a CI variable override. \ No newline at end of file diff --git a/docs/presentations/the-developer-experience.md b/docs/presentations/the-developer-experience.md index 1c4f214..7e74f3f 100644 --- a/docs/presentations/the-developer-experience.md +++ b/docs/presentations/the-developer-experience.md @@ -5,7 +5,7 @@ > **Length:** ~15 minutes · 10 main + 6 appendix = 16 slides > **Purpose:** Sell the developer experience and the citizen developer experience to tech leadership — velocity without sacrificing safety, and security/observability/compliance as platform defaults rather than per-team effort. > **Maturity framing:** "Testing" = works internally, dev pilot-ready. "Planned" = on the roadmap. "Agentic" = involves AI agents or autonomous decision-making. -> **Re-verification (2026-07-27):** Every "Testing" claim in this deck was re-verified in v1.10 Phase 54 (D-093). The headline E2E (contract → resolver → adapter → terraform init/validate/plan) passes against the live AWS account; the local emulating tier (Phase 53) runs the full E2E with no cloud credentials. 16/16 auto-verifiable capabilities Verified; 6 IAM-gated cloud resources are escalated (require an admin principal the spike-runner lacks). See `.ciagent/CAPABILITY_INVENTORY.md`. +> **Re-verification (2026-07-29):** Every "Testing" claim in this deck was re-verified in v1.10 Phase 54 (D-093) and again in v1.11 via the pipeline-driven lifecycle tests (P59–P62). The headline E2E (contract → resolver → adapter → terraform init/validate/plan) passes against the live AWS account; the local emulating tier (Phase 53) runs the full E2E with no cloud credentials. **22/22 auto-verifiable capabilities Verified** (CAP-013 fixed in v1.12 P67 — the adapter's multi-resource L1 dedup defect is closed). The v1.11 lifecycle pipeline ran apply→modify→destroy against live AWS and was then torn down to zero-cost (D-096). See `.ciagent/CAPABILITY_INVENTORY.md` and `.ciagent/PRE_MORTEM.md`. --- @@ -118,7 +118,7 @@ You control when you absorb platform improvements — no surprise upgrades. Consumers control **when** they absorb platform improvements. Testing -- **Floating MAJOR + MINOR tags** (e.g. `@v1.10`) — a consumer automatically receives patch updates within the line. +- **Floating MAJOR + MINOR tags** (e.g. `@v1.11`) — a consumer automatically receives patch updates within the line. - **Semantic versioning with a clear contract:** interface → MAJOR, behavior → MINOR, lifecycle → PATCH. - **A consumer can pin to an exact version** for maximum stability, or float on MAJOR only (`@v1`) to absorb new features on their own cadence. - **Unversioned references (`@main`, bare) are discouraged** — the versioned tag is the only immutability lever a consumer has. @@ -167,11 +167,11 @@ flowchart LR ```yaml jobs: dev: - uses: acdl/.github/workflows/deploy.yml@v1.10 + uses: acdl/.github/workflows/deploy.yml@v1.11 with: { contract: .acdl/contract.yml, environment: dev } qa: needs: dev - uses: acdl/.github/workflows/deploy.yml@v1.10 + uses: acdl/.github/workflows/deploy.yml@v1.11 with: { contract: .acdl/contract.yml, environment: qa } ``` @@ -180,11 +180,11 @@ jobs: ```yaml jobs: dev: - uses: acdl/.github/workflows/deploy.yml@v1.10 + uses: acdl/.github/workflows/deploy.yml@v1.11 with: { contract: .acdl/contract-dev.yaml } qa: needs: dev - uses: acdl/.github/workflows/deploy.yml@v1.10 + uses: acdl/.github/workflows/deploy.yml@v1.11 with: { contract: .acdl/contract-qa.yaml } ``` @@ -212,7 +212,7 @@ Tearing down is as deliberate as deploying — and just as gated. Tearing down a stack is **as deliberate as deploying one.** Testing ```yaml -uses: acdl/.github/workflows/deploy.yml@v1.10 +uses: acdl/.github/workflows/deploy.yml@v1.11 with: contract: .acdl/contract.yml mode: decommission @@ -271,6 +271,8 @@ For deep dives — these slides cover details omitted from the main 10. 3. **A3 — Local Reproducibility** (detail) 4. **A4 — The Road to the North Star** (phased roadmap) 5. **A5 — Glossary** +6. **A6 — Operating Model & Cost** (real AWS spend + pre-mortem) +7. **A7 — Verified by Construction** (the v1.11 architecture) > **Speaker notes:** These are backup slides for Q&A. Use them when the audience asks for the detail behind a main-slide claim. Don't walk through them in the main talk unless time permits. @@ -339,12 +341,12 @@ The entire CI pipeline runs **from the shell**, not just in CI. Core platform
(contract, catalog, evidence)"] --> P2["Phase 2
Safe promotion
qa/prod/dr wiring"] + P1["Phase 1
Core platform
(22/22 Verified)"] --> P2["Phase 2
Safe promotion
qa/prod/dr wiring"] P2 --> P3["Phase 3
Agentic surface
(skill catalog + agents)"] P3 --> P4["Phase 4
North star
citizen developer GA"] ``` -> **Speaker notes:** This is a proposed phasing, not a formally committed plan — call that out explicitly. Phase 1 is what's tested today. Phase 2 is the next milestone (qa/prod/dr wiring). Phase 3 introduces the agentic surface. Phase 4 is the north star: citizen developer GA on the same safety envelope. Use this only when an audience member asks "how do you get from here to there." +> **Speaker notes:** This is a proposed phasing, not a formally committed plan — call that out explicitly. Phase 1 is what's tested and Verified today (22/22 capabilities, torn down to zero-cost). Phase 2 is the next milestone (qa/prod/dr wiring). Phase 3 introduces the agentic surface. Phase 4 is the north star: citizen developer GA on the same safety envelope. Use this only when an audience member asks "how do you get from here to there." --- @@ -361,4 +363,36 @@ flowchart LR | **VCS** | Version Control System — the git hosting platform (GitHub, Gitea, GitLab) | | **NFR** | Non-Functional Requirement — encryption, tagging, observability standards | -> **Speaker notes:** Keep this slide in your back pocket for the audience member who asks "what does ABAC actually mean?" Don't read it aloud. \ No newline at end of file +> **Speaker notes:** Keep this slide in your back pocket for the audience member who asks "what does ABAC actually mean?" Don't read it aloud. + +--- + +## A6 — Operating Model & Cost + +ACDL runs at **zero cloud cost** for day-to-day development. The v1.0→v1.10 AWS spend was measured directly via Cost Explorer (`COST.md`, 2026-07-28): + +| Metric | Value | +|--------|-------| +| Total spend (8 days) | **$0.001883** | +| Daily average | $0.000235 | +| Projected monthly | ~$0.007 | +| Peak day | 2026-07-27 ($0.000867 — v1.10 regression + verify run) | + +- **Local emulators are the primary tier** — the full pipeline runs in-process, no AWS credentials, no Checkov, no DynamoDB. Testing +- **Live-AWS verification is milestone-scoped, then torn down.** The v1.11 lifecycle pipeline ran apply→modify→destroy for every module, then tore down to zero-cost steady state (D-096 — teardown mandatory before milestone COMPLETE). The lifecycle pipeline now **defaults to plan-only** on every PR (fast, no AWS mutation, no cost); a CI variable (`ACDL_LIFECYCLE_MODE=full`) overrides to the real apply→destroy for milestone verification (REQ-134, v1.12). +- **Cost drivers** are spike-scoped: Terraform plan reads (free), S3 state storage (cents), DynamoDB outbox (cents). No running infrastructure between milestones. + +**Pre-mortem (`PRE_MORTEM.md`):** the project's failure modes were pre-mortemed before the leadership pitch. The v1.10 decay incident (diff-scoped VERIFY missed 7 adapter defects — decks advertised capability that wasn't reproducible) is the root pattern: *a claim outruns the verification that backs it.* Four forward failure modes + structural mitigations (regression-tested IAM baseline, mandatory teardown, verified-only deck claims, honest scope). + +> **Speaker notes:** The headline for the Head of Cloud / Finance: less than one cent over 8 days of active development; zero BAU cloud spend; the lifecycle pipeline defaults to plan-only so the PR-time cost is zero. The pre-mortem is the credibility slide — we already asked "how does this fail?" and the mitigations are structural. + +--- + +## A7 — Verified by Construction (the v1.11 architecture) + +v1.11 rebuilt the platform on two architectural pillars that make "Verified" a structural property, not a claim: + +- **The stateless adapter (918 → ~80 lines).** The Terraform adapter was a 918-line monolith with 3 constant tables and 39 type-specific branches. It is now a ~80-line **stateless assembler**: it owns no module content. Each L1 module ships a real `terraform/` module dir owning its resource shape, nested blocks, and defaults. A new module is a new terraform dir, not a code change. *(The v1.12 P67 fix closed a dedup defect for multi-resource L1s — ecs-service, alb; CAP-013 now Verified.)* +- **Pipeline-driven lifecycle testing.** A `modules-lifecycle` pipeline matrix-runs each L1 and L2 module's contracts through apply→modify→destroy against live AWS. **The "test" = the pipeline cell going green.** Defaults to **plan-only** on every PR (fast, no AWS mutation, no cost); `ACDL_LIFECYCLE_MODE=full` runs the real apply→destroy for milestone verification (REQ-134, v1.12). The regression gate (D-091) re-runs all 22 capabilities at milestone completion — 22/22 Verified as of v1.12. + +> **Speaker notes:** This is the deep-dive slide for the Head of Engineering / Architecture. The two pillars answer "how do you keep the decks honest?" The adapter is simple enough to reason about (a stateless assembler); the lifecycle pipeline is the automated verification that backs every "Testing" claim. The v1.10 lesson is the negative space: a 918-line adapter with type-specific branches decayed silently. The ~80-line stateless adapter + the milestone regression gate are the structural fix. The plan-only default (v1.12) means verification runs on every PR at zero cost, with the full apply→destroy gated behind a CI variable override. \ No newline at end of file