Files
acdl/docs/presentations/how-the-platform-works.md
T
Jon Chery e1be05287b feat(P39): refresh design docs + parameterize adapter (P1-1)
---ci---
project: acdl
phase: 39
milestone: v1.9
status: execute
---/ci---

Phase 39 — design-doc-refresh-and-p1-1-parameterization:

Design docs (REQ-100, REQ-101):
- hitl_matrix_design.md: 'dev-only spike'/'v1.2 wires the gates' framing
  replaced with v1.9 wired-gates reality; 8-concern matrix marked
  implemented (offline-testable subset + signed evidence artifacts,
  D-084); v1.9 wiring section cross-references hitl_gates.py +
  attestation_matrix.py; approver_dr noted.
- audit_ledger_design.md: outbox marked shipped+production since v1.8;
  S3 Object Lock + JWS + async worker + DLQ + daily checkpoints clearly
  labeled 'Deferred to a future milestone (D-083)'; RPO/RTO table updated;
  approver fields note v1.9 hitl_gates.attest.

P1-1 adapter parameterization (REQ-102, D-085):
- ecs-service interface.json: desired_count (default 1), launch_type
  (FARGATE), family (app) inputs added.
- alb interface.json: load_balancer_type (application), target_type (ip).
- adapter.py: hardcoded defaults replaced with inputs.get(<name>, <default>);
  hardcoded 'acdl-microservice-rt'/'acdl-microservice-igw' Name tags
  derive from the VPC name input.
- contract_resolver.py: child_input_map routes wires to the sub-resource
  that declares the input (desired_count → aws:ecs:service, family →
  aws:ecs:task_definition, target_type → targetgroup, etc.).
- microservice composition.json: wires added for the new inputs.

Tests: +21 (test_p1_1_adapter_parameterization.py, test_design_docs_current.py).
371 passed; run_ci.sh green; run_platform.sh --check-only green; v1.1 S3
regression preserved.
2026-07-23 04:24:25 +00:00

18 KiB

How the Platform Works

Audience: Senior Leadership, CTO, Head of Cloud, Head of Infrastructure, Head of DevOps Length: ~15 minutes · 14 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: "Available today" = shipped and verified. "Planned" = on the roadmap, not yet shipped.


Slide 1 — The Problem We Solve

Software delivery scales with the coordination surface around it, not the engineering inside it. Most teams can write code; far fewer get the infrastructure right.

Two frictions slow every team down:

  • Cognitive load — authoring the infrastructure that runs a service correctly. The long tail of well-meaning services that are difficult to deploy, inconsistent in security and observability posture.
  • Operational work — moving a merged change from "merged" to "running in production with policy, observability, and security enforced." Manual work that scales with the system, not with the change.

Speaker notes: Open with the cost of the status quo. Every team that stands up its own pipeline, its own Terraform, its own review checklist is paying a tax that doesn't differentiate the business. The platform absorbs both frictions — that is the value proposition in one sentence.


Slide 2 — The North Star

Consumers declare intent; the platform delivers safe production deployment through an agentic stack — automatically, safely, and with a complete audit trail.

What success looks like:

  • A merged change progresses through lower environments end-to-end without a platform engineer joining a thread, approving a ticket, or manually triggering a stage.
  • A non-technical consumer ships a production deployment by declaring intent — without authoring a workflow, a configuration file, or an infrastructure module.
  • Every production change is traceable to a human attestation and an immutable evidence stream.

Speaker notes: This is the litmus test. If a platform engineer still has to touch a ticket for a dev→qa promotion, we haven't delivered the vision. The two consumer surfaces (technical developer + citizen developer) are covered in the companion deck. Here we focus on how the platform makes the North Star real.


Slide 3 — The Contract-Driven Model

One small YAML file is all a consumer writes. The platform owns everything else.

flowchart LR
    A["Consumer<br/>writes a contract"] --> B["Platform resolves,<br/>compiles, checks,<br/>deploys, records"]
    B --> C["Resources running in AWS<br/>+ tamper-evident evidence"]

The contract names three things:

  • Which module — a catalog of pre-built, security-reviewed building blocks (a static site, a microservice, a database, and more).
  • Which environmentdev, qa, prod, or dr. The platform raises the safety bar automatically as the environment gets more sensitive.
  • Which inputs — the handful of values that vary per deployment (a bucket name, a container image, a port).

The consumer does not write infrastructure modules, workflow logic, or adapter code. They declare intent; the platform reconciles, provisions, and progresses.

Speaker notes: Emphasize the asymmetry. The consumer's surface is intentionally tiny — a contract that fits on one screen. The platform's surface is large and opinionated. That asymmetry is what makes "declare intent, not execute operations" concrete.


Slide 4 — The End-to-End Flow

Every deployment runs the same stages, in the same order, with the same checks — no team-specific pipelines, no tribal runbooks.

flowchart TD
    A["Consumer contract<br/>(module + environment + inputs)"] --> B["Validate contract<br/>against the schema"]
    B --> C["Resolve to a target stack<br/>(expand the module's pattern)"]
    C --> D["Security checks<br/>(before any infra is created)"]
    D --> E["Infrastructure plan<br/>(platform compiles the stack)"]
    E --> F["Policy checks<br/>(normalized results)"]
    F --> G["Confidence signal<br/>(6 inputs → score + band)"]
    G --> H["Evidence event<br/>(hash-chained, tamper-evident)"]
    H --> I["Infrastructure apply<br/>(dev only — higher envs hold for attestation)"]

Two properties matter to leadership:

  • Security and policy checks run before any infrastructure is created — not after the fact, not as a post-deployment audit.
  • Every stage produces a record that feeds the confidence signal and the evidence stream. There is no "unchecked" path.

Speaker notes: Walk left to right once. Don't dwell on internals — the point is that the flow is fixed, opinionated, and identical for every consumer. The two leadership-relevant beats are (1) checks before creation, (2) every stage is evidenced. The confidence signal (Slide 6) is where the "safety is computed" story lands.


Slide 5 — Zero-Trust by Default

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. (Available today on GitHub Actions runners; planned for all platform runners.)
  • Authorization is attribute-based (ABAC), not role-based. Two attribute classes scope every action:
    • Repository identity — the role's trust policy binds to the exact consumer repo + branch that invoked the workflow.
    • Resource-creation attributes — every resource is tagged with acdl:owner=<consumer-repo> and acdl:contract=<contract-id>. The session policy grants view/update/delete only on resources whose tags match the calling repo.

The effect: a consumer's pipeline can only touch the resources it created. Blast radius is contained to that consumer's own stack instances. One consumer can never touch another's resources, and the consumer cannot escape its own scope.

Speaker notes: This is the slide for the Head of Cloud/Security. The key phrase is "blast radius contained to the consumer's own stack." Contrast with the common failure mode of shared CI roles that can touch any account resource. The static-key override exists for edge cases but is rotated daily on platform runners; it is never the default.


Slide 6 — Safety is Computed, Not Assumed

Every delivery action produces a measurable, explainable confidence signal — the platform's certified answer to "is this safe to proceed?"

  • Six weighted inputs: policy conformance, validation, freshness, source provenance, history, and non-functional requirements (NFRs).
  • Per-environment thresholds that rise with sensitivity:
Environment Threshold Who must attest
dev ≥ 0.50 No one — fully autonomous
qa ≥ 0.75 QA
prod ≥ 0.90 SRE
dr ≥ 0.95 SRE + a disaster-recovery drill reference
  • A single critical policy finding hard-blocks the deployment, regardless of every other input. Critical findings are not averaged away.
  • When the platform halts, it gives a measured reason — a policy violation, an insufficient signal, a missing attestation — never an opaque, manual-debugging exercise.

Speaker notes: This is the bet that separates this platform from "yet another CI/CD tool." Reliance on operator instinct or tenure is not a substitute. The signal is auditable; the thresholds are tunable by Infra & Ops + SRE jointly, and any override is itself a confidence-event in the audit stream. Leadership cares about this because it makes promotion decisions reviewable.


Slide 7 — Policy & Security Enforcement

Checks run on every deployment, normalized to a single schema regardless of which engine produced them.

  • 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).
  • Cloud security posture (Wiz adapter) — translates cloud security findings into the same normalized record. (Adapter available today; activates when a Wiz tenant is configured.)
  • Kubernetes-native policy (Kyverno adapter) — ready for the GitOps reconciler roadmap item. (Adapter available today; inactive for Terraform-only stacks.)

Every check produces a record with severity, rule ID, pass/fail status, and human-readable message — consumed uniformly by the confidence signal. No engine-specific escapes.

Speaker notes: The selling point is normalization. We can add a new security tool without changing the confidence model or the evidence stream. For the Head of Security: tagging standards are enforced, not advisory — a missing acdl:owner tag fails the check, not a warning.


Slide 8 — Secure by Default

Security defaults that do not require a team to opt in.

  • Encryption on every resource — at-rest encryption is on by default for every primitive (S3, RDS, ECR, ECS, and more). (Available today.)
  • Per-stack customer-managed keys (CMKs) — one key per deployment, 90-day rotation at creation, no shared keys across stacks. (Available today.)
  • Managed-key fallback with a loud warning — standalone primitives fall back to cloud-managed keys only when no CMK is provided, and the platform warns explicitly. Silent use of cloud-managed keys is a security gap we refuse to hide. (Available today.)
  • Deletion protection on by default — every resource has prevent_destroy on unless a consumer explicitly disables it via a documented feature flag. (Available today.)
  • Safe decommission — a 2-step pipeline (disable protection → zero counts → destroy) with two SRE human-attestation gates and a change-request validated against the platform CMDB before any destructive action. (Available today.) Encryption keys enter a grace window (default 30 days) so encrypted data remains recoverable during decommission.

Speaker notes: The phrase to land is "secure by default, not secure by effort." The decommission flow is the counter-argument to "deletion protection makes cleanup impossible" — it's a deliberate, gated, two-approval path, not a lock with no key.


Slide 9 — Immutable Audit & Evidence

Version control is a coordination tool, not an evidentiary fortress. True compliance requires an immutable, externally-stored ledger.

  • Every deployment writes a hash-chained evidence event — each event links to the previous via a cryptographic hash. Tampering breaks the chain. (Available today. the DynamoDB outbox.)
  • Tiered storage design: cold, tamper-proof source of truth (S3 Object Lock, compliance mode, 7-year retention) + a hot query index for fast lookup. (Outbox shipped; S3 Object Lock + JWS detached signatures are planned regulatory-ledger build-out.)
  • RPO = 0 — the evidence write is synchronous; a deployment is not acknowledged until the evidence event is durably recorded.
  • Every production change is traceable to a human attestation — the QA and prod approver identities are the only durable record outside the forge's audit log, stored in the outbox keyed by contract.

Speaker notes: This is the slide for the Head of Infrastructure and anyone who has been through an audit. "The audit trail is a byproduct of deployment, not a project." Note honestly that the full regulatory ledger (S3 Object Lock, JWS signatures, daily checkpoints) is planned; what ships today is the outbox + hash chain that makes every event tamper-evident and queryable.


Slide 10 — Human-in-the-Loop Where It Matters

Autonomy and accountability are not in tension — they are applied at different environments.

  • Dev is fully autonomous. No human gate. The confidence signal (≥ 0.50) is the only gate. Queue-based handoffs are eliminated from lower environments.
  • qa, prod, and dr require deliberate human attestation — not rubber stamps, but policy-mandated acts of accountability via protected deployment approvals.
  • Separation of duties is enforced (design shipped; wiring for qa/prod/dr is planned) — the person who approved the qa promotion cannot be the person who approves the prod promotion. The platform reads both identities from the outbox and blocks on a match, emitting a SEPARATION_OF_DUTIES_VIOLATION and routing a halt artifact to SRE on-call.
  • Timeout discipline — 1 business day = warn + escalate; 2 business days = auto-freeze + re-submit. Rejection extends the audit chain; it does not tear it up.

Speaker notes: The "Lower environments autonomous, higher environments attested" tenet is the resolution to the classic "move fast vs. be safe" false dichotomy. Be honest: the mechanism (CODEOWNERS routing, identity-distinctness check, the 8-concern attestation matrix) is designed and the dev path is wired; the qa/prod/dr wiring is on the roadmap.


Slide 11 — Observability Built In

Monitoring is a platform default, not a per-team project.

  • Uptime monitoring deployed automatically with every stack — a dedicated monitoring instance (Uptime-kuma on ECS Fargate) is provisioned after any module deploy, in a separate state, with a feature flag to disable. (Available today.)
  • Monitored endpoints passed from the deployment's own outputs — the platform constructs a synthetic monitoring contract from what was just deployed. No manual endpoint registration.
  • Alert channels: Microsoft Teams webhook, email, SMS, and GitHub issues. (Available today.)
  • The uptime URL is published to the developer via a PR comment — they don't hunt for it.
  • Roadmap: deeper observability bootstrap (dashboards, runbooks, on-call bindings) as first-class contract fields for prod/dr.

Speaker notes: The Head of DevOps cares about this. The framing: "you don't deploy a service and then remember to set up monitoring — the platform does it as part of the deploy." The feature flag means teams with existing monitoring (e.g. Datadog) can opt out cleanly.


Slide 12 — Platform-Managed Environments

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:

  • An AWS account (or a scoped partition of one).
  • A network (VPC + subnets).
  • A state backend (S3 + DynamoDB for infrastructure state + locking).
  • An IAM role surfaced to the consumer via ABAC, scoped to the consumer's repository identity and resource tags.

The consumer selects an environment by name in their contract (environment: dev). The platform resolves the name to the underlying account/network/state/role at run time. The consumer never sees the raw credentials.

Friendly onboarding: the first run detects no environment and emits a guided prompt (not an opaque failure) telling the consumer what the platform will provision and how to request it. (Available today.) Self-service environment provisioning is planned.

Speaker notes: For the Head of Cloud: this is the governance story. The platform team owns the accounts, the network design, the state hygiene. Consumers can't drift into misconfigured state backends or over-permissioned roles because they never touch them. The onboarding prompt matters — first impressions of a platform are made when it fails for the first time.


Slide 13 — Portability & Future-Proofing

The platform is opinionated, but not painted into a corner.

  • Substrate-agnostic core. The contract, the resolved stack, the policy results, the confidence signal, and the evidence stream are all defined without reference to any specific infrastructure tool. Today there is one adapter (Terraform). (OpenTofu, Pulumi, Kubernetes CRDs are future adapters — no architectural change required.)
  • Forge-agnostic contract ingestion. The platform Lambda reads a configurable API base for GitHub or Gitea. (Available today.)
  • Portable contracts. The contract schema, the confidence signal, and the audit stream are substrate- and forge-agnostic. A second forge (e.g. GitLab) needs a forge adapter + a workflow-template translator — no change to the modules, the contract standard, the confidence model, or the audit stream.
  • Pattern recognition compounds value over time. As the platform observes recurring contract patterns, it can synthesize and offer reusable modules. (Future capability, not a current commitment — but the design allows it.)

Speaker notes: This is the "we won't have to rewrite this in two years" slide. The bet is that the substrate (Terraform today) will change, but the contract + confidence + audit model won't. Leadership should hear: the investment is in the abstraction, not the tool.


Slide 14 — Roadmap: Honest Shipped vs. Planned

Available today:

  • Contract-driven deploys with a versioned reusable workflow.
  • Module catalog (primitives + modules) with validated examples.
  • Zero-trust OIDC + ABAC on GitHub Actions runners.
  • Security + policy checks before infra creation (Checkov; Wiz + Kyverno adapters ready).
  • Confidence signal (6 inputs, per-env thresholds) gating promotion.
  • Hash-chained, tamper-evident evidence outbox (RPO = 0).
  • Encryption by default + per-stack customer-managed keys.
  • Deletion protection by default + safe decommission with SRE gates + CMDB validation.
  • Uptime monitoring deployed automatically with every stack.
  • Platform-managed environments + friendly onboarding.
  • Local reproducibility (run_ci.sh mirrors the CI pipeline).
  • Forge-agnostic contract ingestion (GitHub + Gitea).

Planned (on the roadmap, not yet shipped):

  • Real OIDC federation on all platform runners (Gitea Actions OIDC pending an upstream merge).
  • HITL wiring for qa / prod / dr environments (design shipped; wiring is next).
  • Full regulatory ledger: S3 Object Lock (7-yr compliance mode) + JWS detached signatures + daily checkpoints.
  • Compliance milestone: per-module extension points for GDPR, SOX, SOC2, HIPAA, DORA.
  • Environment self-service (a consumer-facing flow to request and provision a new environment).
  • Dynamic module creation from a contract (the agentic "citizen developer" composition mechanism).
  • Additional substrate adapters (OpenTofu, Pulumi, Kubernetes CRDs).

Speaker notes: Close on honesty. The platform delivers real, verifiable value today — and the roadmap is concrete, not aspirational hand-waving. Invite questions on any "planned" item; each has a defined milestone and a clear reason it isn't shipped yet (usually an upstream dependency, not an engineering gap).