From e044a2de0d7cedf57949413459992fa1859f350b Mon Sep 17 00:00:00 2001 From: Jon Chery Date: Tue, 21 Jul 2026 18:27:21 +0000 Subject: [PATCH 1/2] phase: 6, status: plan-as-execute, persona: lead-developer, task: T-6.1..T-6.4 ---ci--- project: acdl phase: 6 milestone: v1.1 status: plan-as-execute persona: lead-developer tasks: [T-6.1, T-6.2, T-6.3, T-6.4] ---/ci--- Archive the v1.0 demo under demo/ (D-037) and reorient the repo to the real platform. Wave 1 of the Phase 06 plan. - T-6.1: git mv modules/, scripts/, evidence-ui/, contracts/, contracts-repo/, .gitea/ -> demo/; mv ACDL_DEMO.md + runner-data/ -> demo/ - T-6.2: scaffold new v1.1 top-level dirs (platform/, schemas/, adapters/, terraform/, modules-ir/) with .gitkeep - T-6.3: create top-level scripts/verify_phase06.sh (v1.1 verify scripts live at top-level, NOT demo/scripts/ which holds the v1.0 demo verify scripts) - T-6.4: rewrite README.md to reflect the real platform (vision + architecture links, new layout, status v1.1 active); add runner-data/ to .gitignore All moves via git mv (history preserved). Repo root now contains only README.md, demo/, docs/, .ciagent/, and the new empty v1.1 dirs. --- .gitignore | 3 +- README.md | 81 ++-- {.gitea/workflows => adapters}/.gitkeep | 0 .../.gitea/workflows/.gitkeep | 0 .../.gitea}/workflows/pipeline.yml | 0 demo/ACDL_DEMO.md | 368 ++++++++++++++++++ .../contracts-repo/.gitea/workflows}/.gitkeep | 0 .../.gitea/workflows/issue-to-contract.yml | 0 .../contract-commodity-price-feed-prod.yaml | 0 ...ntract-regulatory-reporting-violation.yaml | 0 {evidence-ui => demo/evidence-ui}/index.html | 0 .../modules}/l1/l1-api-gateway/manifest.yaml | 0 .../modules}/l1/l1-api-gateway/mock_apply.sh | 0 .../modules}/l1/l1-cloudwatch/manifest.yaml | 0 .../modules}/l1/l1-cloudwatch/mock_apply.sh | 0 .../modules}/l1/l1-eks-fargate/manifest.yaml | 0 .../modules}/l1/l1-eks-fargate/mock_apply.sh | 0 .../modules}/l1/l1-eventbridge/manifest.yaml | 0 .../modules}/l1/l1-eventbridge/mock_apply.sh | 0 .../modules}/l1/l1-iam-role/manifest.yaml | 0 .../modules}/l1/l1-iam-role/mock_apply.sh | 0 .../modules}/l1/l1-lambda/manifest.yaml | 0 .../modules}/l1/l1-lambda/mock_apply.sh | 0 .../modules}/l1/l1-s3/manifest.yaml | 0 .../modules}/l1/l1-s3/mock_apply.sh | 0 .../modules}/l1/l1-sqs/manifest.yaml | 0 .../modules}/l1/l1-sqs/mock_apply.sh | 0 .../l2/l2-commodity-price-feed/manifest.yaml | 0 .../l2/l2-energy-analytics-api/manifest.yaml | 0 .../l2/l2-invoice-service/manifest.yaml | 0 .../l2/l2-regulatory-reporting/manifest.yaml | 0 demo/scripts/.gitkeep | 0 .../scripts}/confidence_signal.py | 0 {scripts => demo/scripts}/evidence_writer.py | 0 .../scripts}/finalize_evidence.py | 0 {scripts => demo/scripts}/gitea_setup.sh | 0 {scripts => demo/scripts}/l3b_agent_stub.py | 0 {scripts => demo/scripts}/mock_executor.sh | 0 {scripts => demo/scripts}/policy_checker.py | 0 {scripts => demo/scripts}/run_demo.sh | 0 {scripts => demo/scripts}/verify_phase01.sh | 0 {scripts => demo/scripts}/verify_phase02.sh | 0 {scripts => demo/scripts}/verify_phase03.sh | 0 {scripts => demo/scripts}/verify_phase04.sh | 0 {scripts => demo/scripts}/verify_phase05.sh | 0 modules-ir/.gitkeep | 0 platform/.gitkeep | 0 schemas/.gitkeep | 0 scripts/verify_phase06.sh | 44 +++ terraform/.gitkeep | 0 50 files changed, 453 insertions(+), 43 deletions(-) rename {.gitea/workflows => adapters}/.gitkeep (100%) rename {contracts-repo => demo}/.gitea/workflows/.gitkeep (100%) rename {.gitea => demo/.gitea}/workflows/pipeline.yml (100%) create mode 100644 demo/ACDL_DEMO.md rename {scripts => demo/contracts-repo/.gitea/workflows}/.gitkeep (100%) rename {contracts-repo => demo/contracts-repo}/.gitea/workflows/issue-to-contract.yml (100%) rename {contracts => demo/contracts}/examples/contract-commodity-price-feed-prod.yaml (100%) rename {contracts => demo/contracts}/examples/contract-regulatory-reporting-violation.yaml (100%) rename {evidence-ui => demo/evidence-ui}/index.html (100%) rename {modules => demo/modules}/l1/l1-api-gateway/manifest.yaml (100%) rename {modules => demo/modules}/l1/l1-api-gateway/mock_apply.sh (100%) rename {modules => demo/modules}/l1/l1-cloudwatch/manifest.yaml (100%) rename {modules => demo/modules}/l1/l1-cloudwatch/mock_apply.sh (100%) rename {modules => demo/modules}/l1/l1-eks-fargate/manifest.yaml (100%) rename {modules => demo/modules}/l1/l1-eks-fargate/mock_apply.sh (100%) rename {modules => demo/modules}/l1/l1-eventbridge/manifest.yaml (100%) rename {modules => demo/modules}/l1/l1-eventbridge/mock_apply.sh (100%) rename {modules => demo/modules}/l1/l1-iam-role/manifest.yaml (100%) rename {modules => demo/modules}/l1/l1-iam-role/mock_apply.sh (100%) rename {modules => demo/modules}/l1/l1-lambda/manifest.yaml (100%) rename {modules => demo/modules}/l1/l1-lambda/mock_apply.sh (100%) rename {modules => demo/modules}/l1/l1-s3/manifest.yaml (100%) rename {modules => demo/modules}/l1/l1-s3/mock_apply.sh (100%) rename {modules => demo/modules}/l1/l1-sqs/manifest.yaml (100%) rename {modules => demo/modules}/l1/l1-sqs/mock_apply.sh (100%) rename {modules => demo/modules}/l2/l2-commodity-price-feed/manifest.yaml (100%) rename {modules => demo/modules}/l2/l2-energy-analytics-api/manifest.yaml (100%) rename {modules => demo/modules}/l2/l2-invoice-service/manifest.yaml (100%) rename {modules => demo/modules}/l2/l2-regulatory-reporting/manifest.yaml (100%) create mode 100644 demo/scripts/.gitkeep rename {scripts => demo/scripts}/confidence_signal.py (100%) rename {scripts => demo/scripts}/evidence_writer.py (100%) rename {scripts => demo/scripts}/finalize_evidence.py (100%) rename {scripts => demo/scripts}/gitea_setup.sh (100%) rename {scripts => demo/scripts}/l3b_agent_stub.py (100%) rename {scripts => demo/scripts}/mock_executor.sh (100%) rename {scripts => demo/scripts}/policy_checker.py (100%) rename {scripts => demo/scripts}/run_demo.sh (100%) rename {scripts => demo/scripts}/verify_phase01.sh (100%) rename {scripts => demo/scripts}/verify_phase02.sh (100%) rename {scripts => demo/scripts}/verify_phase03.sh (100%) rename {scripts => demo/scripts}/verify_phase04.sh (100%) rename {scripts => demo/scripts}/verify_phase05.sh (100%) create mode 100644 modules-ir/.gitkeep create mode 100644 platform/.gitkeep create mode 100644 schemas/.gitkeep create mode 100755 scripts/verify_phase06.sh create mode 100644 terraform/.gitkeep diff --git a/.gitignore b/.gitignore index a2e3b86..d3b37ad 100644 --- a/.gitignore +++ b/.gitignore @@ -6,4 +6,5 @@ __pycache__/ state.json audit.json *.tmp -.DS_Store \ No newline at end of file +.DS_Store +runner-data/ \ No newline at end of file diff --git a/README.md b/README.md index fed4272..9c24deb 100644 --- a/README.md +++ b/README.md @@ -1,55 +1,52 @@ # ACDL — Agentic Cloud Delivery Platform -A 30-minute executive demo proving that infrastructure can be delivered -**automatically, safely, and with a complete audit trail** — without the -usual weeks of manual tickets, reviews, and copy-pasted configuration. +Consumers declare intent; the platform delivers safe production deployment +through an agentic stack — automatically, safely, and with a complete audit +trail. A merged change progresses through lower environments end-to-end +without a platform engineer joining a thread; a non-technical consumer ships +a production deployment by declaring intent, without authoring a workflow, +a configuration file, or a Terraform module. -The demo runs entirely on **local stubs** (no AWS/GCP/Azure, no external LLM -APIs). It shows intent and safety behavior rather than provisioning real -cloud resources. +- **Vision** (the why): [`docs/vision.md`](docs/vision.md) +- **Architecture** (the how): [`docs/architecture.md`](docs/architecture.md) +- **Decisions**: [`.ciagent/PROJECT.md`](.ciagent/PROJECT.md) +- **Target architecture**: [`.ciagent/ARCHITECTURE.md`](.ciagent/ARCHITECTURE.md) +- **Phase plan**: [`.ciagent/ROADMAP.md`](.ciagent/ROADMAP.md) -## Four acts +## Status -1. **Act 1 — The Friction:** the old manual 2-week deployment process. -2. **Act 2 — Developer Self-Service:** commit a valid `contract.yaml` for - `l2-commodity-price-feed`, watch Dev auto-run, QA + Prod approval gates, - then the evidence timeline. -3. **Act 3 — Citizen Developer:** open a GitHub/Gitea Issue with natural- - language intent; the Python keyword parser generates the same - `contract.yaml` and triggers the identical pipeline. -4. **Act 4 — The Safety Net:** commit a malicious `contract.yaml` - (`public-ingress: true`) for `l2-regulatory-reporting`; the pipeline - halts in Dev because the confidence signal drops below 0.50, and the - rejection is visible on the evidence stream. +- **v1.1 (active):** architecture finalization + v1 spike. Finalize the + architecture to v1.0 (resolve the 11 open design decisions) and prove the + locked commitments with one end-to-end implementation spike + (`l1-s3` + `l2-static-asset` + Terraform adapter → real `terraform plan` + against AWS). +- **v1.0 demo (complete, archived):** tag `v1.1.0`. The 30-minute + stub-driven executive demo is preserved under `demo/` as the intent + reference; it is not the platform. -## Repositories +## Repository layout -All under the `continuous-intelligence` Gitea org at -`https://git.cloudinit.dev`: +| Path | Purpose | Populated | +|------|---------|-----------| +| `platform/` | Platform code: confidence signal, contract resolver, outbox, HITL/ledger designs | Phase 07+ | +| `schemas/` | JSON Schemas: IR, PolicyCheckResult, contract | Phase 07 | +| `adapters/` | Substrate adapters (Terraform adapter in v1; the only substrate-specific code per §12) | Phase 09 | +| `terraform/` | State backend + provider config (S3 state + DynamoDB lock) | Phase 08+ | +| `modules-ir/` | IR-typed L1/L2 modules (`l1-s3`, `l2-static-asset`) | Phase 09–10 | +| `scripts/` | v1.1 verify scripts (`verify_phaseNN.sh`) | Phase 06+ | +| `demo/` | Archived v1.0 executive demo (tag `v1.1.0`); runs locally via `demo/scripts/run_demo.sh --no-upload` | complete | +| `.ciagent/` | CIAgent metadata (plans, decisions, personas, roadmap, research) | active | +| `docs/` | Upstream vision + architecture sources | active | -- `acdl` (this repo) — platform + stubs + reusable workflows -- `acdl-contracts` — developer surface (`contract.yaml` + issue trigger) -- `acdl-evidence` — audit timeline (served via raw file URLs; Gitea has no - native Pages — see `.ciagent/ARCHITECTURE.md` Gitea API Surface table) +## Running the archived demo -## Project metadata - -See `.ciagent/PROJECT.md` for the full spec, `.ciagent/ROADMAP.md` for the -5-phase breakdown, `.ciagent/REQUIREMENTS.md` for traceable requirements, -and `.ciagent/PERSONAS.md` for the active persona roster. - -## Phase 01 verification - -After running `scripts/gitea_setup.sh` (which creates `acdl-contracts` and -`acdl-evidence` in the org and pushes the placeholder `index.html`), run: +The v1.0 demo is an archived artifact. To re-run it locally: ```bash -ACDL_GITEA_TOKEN= scripts/verify_phase01.sh +bash demo/scripts/run_demo.sh --no-upload ``` -The script confirms: -- both new repos exist via the Gitea API -- the raw `index.html` URL on `acdl-evidence` returns HTTP 200 -- the `qa` and `prod` branches exist on `acdl-contracts` - -Exit 0 = Phase 01 success criteria met. \ No newline at end of file +The demo deck is at [`demo/ACDL_DEMO.md`](demo/ACDL_DEMO.md). The demo runs +entirely on local stubs — no AWS, no AI — and shows intent and safety +behavior rather than provisioning real cloud resources. It is the reference +of intent for the real platform; it is not the platform itself. \ No newline at end of file diff --git a/.gitea/workflows/.gitkeep b/adapters/.gitkeep similarity index 100% rename from .gitea/workflows/.gitkeep rename to adapters/.gitkeep diff --git a/contracts-repo/.gitea/workflows/.gitkeep b/demo/.gitea/workflows/.gitkeep similarity index 100% rename from contracts-repo/.gitea/workflows/.gitkeep rename to demo/.gitea/workflows/.gitkeep diff --git a/.gitea/workflows/pipeline.yml b/demo/.gitea/workflows/pipeline.yml similarity index 100% rename from .gitea/workflows/pipeline.yml rename to demo/.gitea/workflows/pipeline.yml diff --git a/demo/ACDL_DEMO.md b/demo/ACDL_DEMO.md new file mode 100644 index 0000000..2081f33 --- /dev/null +++ b/demo/ACDL_DEMO.md @@ -0,0 +1,368 @@ +--- +marp: true +theme: default +paginate: true +size: 16:9 +header: 'ACDL · Agentic Cloud Delivery Platform' +footer: 'Executive Demo · v1.0' +style: | + /* S&P Global-inspired palette */ + :root { + --sp-red: #C8102E; + --sp-red-dark: #8E0B20; + --sp-ink: #1A1A1A; + --sp-slate: #4A4A4A; + --sp-gray: #6E6E6E; + --sp-line: #D6D6D6; + --sp-bg: #FFFFFF; + --sp-tint: #F4F4F4; + } + section { + font-size: 24px; + color: var(--sp-ink); + background: var(--sp-bg); + font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; + padding: 50px 60px; + } + section.title { + text-align: center; + background: var(--sp-red); + color: #FFFFFF; + display: flex; + flex-direction: column; + justify-content: center; + } + section.title h1 { + color: #FFFFFF; + font-size: 64px; + margin-bottom: 0; + border: none; + } + section.title h2 { + color: #FFFFFF; + border: none; + font-weight: 400; + } + section.title strong { color: #FFFFFF; } + h1 { + color: var(--sp-red); + font-size: 40px; + font-weight: 700; + margin-bottom: 12px; + } + h2 { + color: var(--sp-red); + border-bottom: 3px solid var(--sp-red); + padding-bottom: 6px; + font-weight: 700; + } + h3 { + color: var(--sp-red-dark); + font-weight: 600; + margin-top: 24px; + } + ul, ol { color: var(--sp-slate); } + li { margin-bottom: 6px; } + strong { color: var(--sp-ink); } + table { + font-size: 18px; + width: 100%; + border-collapse: collapse; + margin: 12px 0; + } + th { + background: var(--sp-red); + color: #FFFFFF; + text-align: left; + padding: 10px 12px; + font-weight: 600; + border: 1px solid var(--sp-red-dark); + } + td { + padding: 8px 12px; + border: 1px solid var(--sp-line); + color: var(--sp-slate); + } + tr:nth-child(even) td { background: var(--sp-tint); } + pre { + font-size: 13px; + background: var(--sp-tint); + border-left: 4px solid var(--sp-red); + padding: 14px 16px; + border-radius: 0; + color: var(--sp-ink); + } + code { + background: var(--sp-tint); + color: var(--sp-red-dark); + padding: 1px 5px; + border-radius: 2px; + font-family: 'Menlo', 'Consolas', monospace; + } + pre code { + background: none; + color: var(--sp-ink); + padding: 0; + } + blockquote { + border-left: 5px solid var(--sp-red); + background: var(--sp-tint); + padding: 10px 16px; + color: var(--sp-slate); + font-style: italic; + border-radius: 0; + } + header { + color: var(--sp-red); + font-weight: 700; + font-size: 14px; + } + footer { + color: var(--sp-gray); + font-size: 12px; + } + section::after { + color: var(--sp-red); + font-weight: 700; + } +--- + + + +# ACDL +## Agentic Cloud Delivery Platform + +Automatic. Safe. Audited. — in 30 minutes, on stubs. + +v1.0 · GitHub Actions · stub-driven + + + +--- + +# The Problem + +### Today, deploying infrastructure takes **weeks** + +- Ticket → triage queue → copy-paste config → peer review → security review → waiting for central IT to release + +> Two weeks of human latency for a service that should take minutes. + +### What we want instead + +- Developer commits a **contract** → pipeline runs +- Safety **computed** automatically (confidence signal) +- Manual gates only where they matter (QA, Prod) +- Every step written to a tamper-evident **evidence stream** + + + +--- + +# How It Works + +``` + ┌────────────── acdl-contracts ──────────────┐ + Developer ──▶│ commit contract.yaml │ + └───────┬───────────────────────────────────┘ + │ (push) + Citizen ┌─────────┴──────────┐ + │ "ingest gas pricing into data lake" + ▼ + Claude agent ──▶ contract.yaml ─┘ + │ (push) + ▼ + ┌─────────────────┐ + │ reusable │ + │ GitHub Actions │ + │ pipeline │ + └────────┬────────┘ + │ + ┌─────────────┼─────────────┐ + ▼ ▼ ▼ + Dev (auto) QA (approval) Prod (approval) + │ + ▼ + evidence_writer ─▶ audit.json (hash-chained) ─▶ Pages timeline +``` + +Two entry paths, **one** pipeline, **one** audit trail — developer via GitHub, citizen developer via their own Claude agent. + + + +--- + +# The Safety Story + +### Computed, not requested + +| Signal | Behavior | +|--------|----------| +| **Base confidence** | 0.90 | +| **On policy violation** | drop to 0.40 + reason code | +| **Gate threshold** | ≥ 0.50 to proceed past Dev | + +### Policy (v1) +- `public-ingress: true` → `POLICY_VIOLATION:PUBLIC_INGRESS` + +### Evidence +- Each event appended to `audit.json` with SHA-256 link to previous (`prev_hash` + `hash`) +- Published to Pages → vanilla-JS timeline + + + +--- + +# Scenario 1 — Developer Self-Service + +### Trigger +Developer commits a valid `contract.yaml` requesting **`l2-commodity-price-feed`** via **GitHub**. + +### What you'll see +- **Dev:** policy ✅ → apply api-gateway, lambda, s3 → confidence **0.90** → proceed +- **QA:** pipeline pauses → click **Approve** +- **Prod:** pipeline pauses → click **Approve** +- **Finalize:** `audit.json` committed → Pages timeline updates + +### Evidence outcome +Timeline shows: contract received → policy pass → apply × 3 → confidence 0.90 → QA → Prod → published. + + + +--- + +# Scenario 1 — Journey + +```mermaid +flowchart LR + classDef gh fill:#F4F4F4,stroke:#1A1A1A,stroke-width:2px,color:#1A1A1A + classDef stage fill:#C8102E,stroke:#8E0B20,stroke-width:1px,color:#FFFFFF + classDef gate fill:#FFFFFF,stroke:#1A1A1A,stroke-width:2px,color:#1A1A1A + classDef evidence fill:#F4F4F4,stroke:#C8102E,stroke-width:1px,color:#1A1A1A + + D["Developer"]:::gh -->|"writes contract.yaml"| GH["GitHub
acdl-contracts"]:::gh + GH -->|"push triggers
GitHub Action"| DEV["Dev
(autonomous)"]:::stage + DEV -->|"policy ✅ · confidence 0.90"| QA["QA
approval gate"]:::gate + QA -->|"approve"| PROD["Prod
approval gate"]:::gate + PROD -->|"approve"| FIN["Finalize
commit audit.json"]:::stage + FIN --> TL["GitHub Pages
timeline"]:::evidence +``` + + + +--- + +# Scenario 2 — Citizen Developer + +### Trigger +Non-technical user prompts their **own Claude agent** in natural language: + +> "I need a new service to ingest real-time natural gas pricing data into our data lake." + +### What you'll see +- Claude agent parses intent, writes `contract.yaml` for **`l2-commodity-price-feed`**, pushes a branch +- Issue **closed**; branch push triggers the **identical** pipeline from Scenario 1 +- Citizen developer follows the run all the way to **Prod** + +### Evidence outcome +Timeline is **indistinguishable** from Scenario 1 — the agentic surface is first-class, not a bolt-on. + + + +--- + +# Scenario 2 — Journey + +```mermaid +flowchart LR + classDef cit fill:#F4F4F4,stroke:#C8102E,stroke-width:2px,color:#1A1A1A + classDef agent fill:#C8102E,stroke:#8E0B20,stroke-width:1px,color:#FFFFFF + classDef stage fill:#1A1A1A,stroke:#1A1A1A,stroke-width:1px,color:#FFFFFF + classDef gate fill:#FFFFFF,stroke:#1A1A1A,stroke-width:2px,color:#1A1A1A + classDef evidence fill:#F4F4F4,stroke:#C8102E,stroke-width:1px,color:#1A1A1A + + CD["Citizen developer"]:::cit -->|"natural-language
prompt"| CL["Claude agent
(citizen-owned)"]:::agent + CL -->|"generates
contract.yaml"| GH["GitHub
acdl-contracts"]:::cit + GH -->|"push triggers
GitHub Action"| DEV["Dev
(autonomous)"]:::stage + DEV -->|"policy ✅ · confidence 0.90"| QA["QA
approval gate"]:::gate + QA -->|"approve"| PROD["Prod
approval gate"]:::gate + PROD -->|"approve"| FIN["Finalize
commit audit.json"]:::stage + FIN --> TL["GitHub Pages
timeline"]:::evidence +``` + + + +--- + +# Scenario 3 — The Safety Net + +### Trigger +Developer commits a **malicious** `contract.yaml` for `l2-regulatory-reporting` via **GitHub**: + +```yaml +stack: l2-regulatory-reporting +public-ingress: true +``` + +### What you'll see +- **Dev:** `policy_checker` → `POLICY_VIOLATION:PUBLIC_INGRESS` +- `confidence_signal` drops 0.90 → **0.40** +- `0.40 < 0.50` → pipeline **halts in Dev** +- Rejection reason written to the evidence stream + +### Evidence outcome +Timeline shows the attempted deploy, the violation, the confidence drop, and the **halt** — visible and explained. + + + +--- + +# Scenario 3 — Journey + +```mermaid +flowchart LR + classDef gh fill:#F4F4F4,stroke:#1A1A1A,stroke-width:2px,color:#1A1A1A + classDef stage fill:#C8102E,stroke:#8E0B20,stroke-width:1px,color:#FFFFFF + classDef halt fill:#1A1A1A,stroke:#1A1A1A,stroke-width:1px,color:#FFFFFF + classDef evidence fill:#F4F4F4,stroke:#C8102E,stroke-width:1px,color:#1A1A1A + + D["Developer"]:::gh -->|"writes malicious
contract.yaml"| GH["GitHub
acdl-contracts"]:::gh + GH -->|"push triggers
GitHub Action"| DEV["Dev
(autonomous)"]:::stage + DEV -->|"POLICY_VIOLATION:PUBLIC_INGRESS
confidence 0.90 → 0.40"| HALT["Halt in Dev
+ rejection reason"]:::halt + HALT --> TL["GitHub Pages
timeline"]:::evidence +``` + + \ No newline at end of file diff --git a/scripts/.gitkeep b/demo/contracts-repo/.gitea/workflows/.gitkeep similarity index 100% rename from scripts/.gitkeep rename to demo/contracts-repo/.gitea/workflows/.gitkeep diff --git a/contracts-repo/.gitea/workflows/issue-to-contract.yml b/demo/contracts-repo/.gitea/workflows/issue-to-contract.yml similarity index 100% rename from contracts-repo/.gitea/workflows/issue-to-contract.yml rename to demo/contracts-repo/.gitea/workflows/issue-to-contract.yml diff --git a/contracts/examples/contract-commodity-price-feed-prod.yaml b/demo/contracts/examples/contract-commodity-price-feed-prod.yaml similarity index 100% rename from contracts/examples/contract-commodity-price-feed-prod.yaml rename to demo/contracts/examples/contract-commodity-price-feed-prod.yaml diff --git a/contracts/examples/contract-regulatory-reporting-violation.yaml b/demo/contracts/examples/contract-regulatory-reporting-violation.yaml similarity index 100% rename from contracts/examples/contract-regulatory-reporting-violation.yaml rename to demo/contracts/examples/contract-regulatory-reporting-violation.yaml diff --git a/evidence-ui/index.html b/demo/evidence-ui/index.html similarity index 100% rename from evidence-ui/index.html rename to demo/evidence-ui/index.html diff --git a/modules/l1/l1-api-gateway/manifest.yaml b/demo/modules/l1/l1-api-gateway/manifest.yaml similarity index 100% rename from modules/l1/l1-api-gateway/manifest.yaml rename to demo/modules/l1/l1-api-gateway/manifest.yaml diff --git a/modules/l1/l1-api-gateway/mock_apply.sh b/demo/modules/l1/l1-api-gateway/mock_apply.sh similarity index 100% rename from modules/l1/l1-api-gateway/mock_apply.sh rename to demo/modules/l1/l1-api-gateway/mock_apply.sh diff --git a/modules/l1/l1-cloudwatch/manifest.yaml b/demo/modules/l1/l1-cloudwatch/manifest.yaml similarity index 100% rename from modules/l1/l1-cloudwatch/manifest.yaml rename to demo/modules/l1/l1-cloudwatch/manifest.yaml diff --git a/modules/l1/l1-cloudwatch/mock_apply.sh b/demo/modules/l1/l1-cloudwatch/mock_apply.sh similarity index 100% rename from modules/l1/l1-cloudwatch/mock_apply.sh rename to demo/modules/l1/l1-cloudwatch/mock_apply.sh diff --git a/modules/l1/l1-eks-fargate/manifest.yaml b/demo/modules/l1/l1-eks-fargate/manifest.yaml similarity index 100% rename from modules/l1/l1-eks-fargate/manifest.yaml rename to demo/modules/l1/l1-eks-fargate/manifest.yaml diff --git a/modules/l1/l1-eks-fargate/mock_apply.sh b/demo/modules/l1/l1-eks-fargate/mock_apply.sh similarity index 100% rename from modules/l1/l1-eks-fargate/mock_apply.sh rename to demo/modules/l1/l1-eks-fargate/mock_apply.sh diff --git a/modules/l1/l1-eventbridge/manifest.yaml b/demo/modules/l1/l1-eventbridge/manifest.yaml similarity index 100% rename from modules/l1/l1-eventbridge/manifest.yaml rename to demo/modules/l1/l1-eventbridge/manifest.yaml diff --git a/modules/l1/l1-eventbridge/mock_apply.sh b/demo/modules/l1/l1-eventbridge/mock_apply.sh similarity index 100% rename from modules/l1/l1-eventbridge/mock_apply.sh rename to demo/modules/l1/l1-eventbridge/mock_apply.sh diff --git a/modules/l1/l1-iam-role/manifest.yaml b/demo/modules/l1/l1-iam-role/manifest.yaml similarity index 100% rename from modules/l1/l1-iam-role/manifest.yaml rename to demo/modules/l1/l1-iam-role/manifest.yaml diff --git a/modules/l1/l1-iam-role/mock_apply.sh b/demo/modules/l1/l1-iam-role/mock_apply.sh similarity index 100% rename from modules/l1/l1-iam-role/mock_apply.sh rename to demo/modules/l1/l1-iam-role/mock_apply.sh diff --git a/modules/l1/l1-lambda/manifest.yaml b/demo/modules/l1/l1-lambda/manifest.yaml similarity index 100% rename from modules/l1/l1-lambda/manifest.yaml rename to demo/modules/l1/l1-lambda/manifest.yaml diff --git a/modules/l1/l1-lambda/mock_apply.sh b/demo/modules/l1/l1-lambda/mock_apply.sh similarity index 100% rename from modules/l1/l1-lambda/mock_apply.sh rename to demo/modules/l1/l1-lambda/mock_apply.sh diff --git a/modules/l1/l1-s3/manifest.yaml b/demo/modules/l1/l1-s3/manifest.yaml similarity index 100% rename from modules/l1/l1-s3/manifest.yaml rename to demo/modules/l1/l1-s3/manifest.yaml diff --git a/modules/l1/l1-s3/mock_apply.sh b/demo/modules/l1/l1-s3/mock_apply.sh similarity index 100% rename from modules/l1/l1-s3/mock_apply.sh rename to demo/modules/l1/l1-s3/mock_apply.sh diff --git a/modules/l1/l1-sqs/manifest.yaml b/demo/modules/l1/l1-sqs/manifest.yaml similarity index 100% rename from modules/l1/l1-sqs/manifest.yaml rename to demo/modules/l1/l1-sqs/manifest.yaml diff --git a/modules/l1/l1-sqs/mock_apply.sh b/demo/modules/l1/l1-sqs/mock_apply.sh similarity index 100% rename from modules/l1/l1-sqs/mock_apply.sh rename to demo/modules/l1/l1-sqs/mock_apply.sh diff --git a/modules/l2/l2-commodity-price-feed/manifest.yaml b/demo/modules/l2/l2-commodity-price-feed/manifest.yaml similarity index 100% rename from modules/l2/l2-commodity-price-feed/manifest.yaml rename to demo/modules/l2/l2-commodity-price-feed/manifest.yaml diff --git a/modules/l2/l2-energy-analytics-api/manifest.yaml b/demo/modules/l2/l2-energy-analytics-api/manifest.yaml similarity index 100% rename from modules/l2/l2-energy-analytics-api/manifest.yaml rename to demo/modules/l2/l2-energy-analytics-api/manifest.yaml diff --git a/modules/l2/l2-invoice-service/manifest.yaml b/demo/modules/l2/l2-invoice-service/manifest.yaml similarity index 100% rename from modules/l2/l2-invoice-service/manifest.yaml rename to demo/modules/l2/l2-invoice-service/manifest.yaml diff --git a/modules/l2/l2-regulatory-reporting/manifest.yaml b/demo/modules/l2/l2-regulatory-reporting/manifest.yaml similarity index 100% rename from modules/l2/l2-regulatory-reporting/manifest.yaml rename to demo/modules/l2/l2-regulatory-reporting/manifest.yaml diff --git a/demo/scripts/.gitkeep b/demo/scripts/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/scripts/confidence_signal.py b/demo/scripts/confidence_signal.py similarity index 100% rename from scripts/confidence_signal.py rename to demo/scripts/confidence_signal.py diff --git a/scripts/evidence_writer.py b/demo/scripts/evidence_writer.py similarity index 100% rename from scripts/evidence_writer.py rename to demo/scripts/evidence_writer.py diff --git a/scripts/finalize_evidence.py b/demo/scripts/finalize_evidence.py similarity index 100% rename from scripts/finalize_evidence.py rename to demo/scripts/finalize_evidence.py diff --git a/scripts/gitea_setup.sh b/demo/scripts/gitea_setup.sh similarity index 100% rename from scripts/gitea_setup.sh rename to demo/scripts/gitea_setup.sh diff --git a/scripts/l3b_agent_stub.py b/demo/scripts/l3b_agent_stub.py similarity index 100% rename from scripts/l3b_agent_stub.py rename to demo/scripts/l3b_agent_stub.py diff --git a/scripts/mock_executor.sh b/demo/scripts/mock_executor.sh similarity index 100% rename from scripts/mock_executor.sh rename to demo/scripts/mock_executor.sh diff --git a/scripts/policy_checker.py b/demo/scripts/policy_checker.py similarity index 100% rename from scripts/policy_checker.py rename to demo/scripts/policy_checker.py diff --git a/scripts/run_demo.sh b/demo/scripts/run_demo.sh similarity index 100% rename from scripts/run_demo.sh rename to demo/scripts/run_demo.sh diff --git a/scripts/verify_phase01.sh b/demo/scripts/verify_phase01.sh similarity index 100% rename from scripts/verify_phase01.sh rename to demo/scripts/verify_phase01.sh diff --git a/scripts/verify_phase02.sh b/demo/scripts/verify_phase02.sh similarity index 100% rename from scripts/verify_phase02.sh rename to demo/scripts/verify_phase02.sh diff --git a/scripts/verify_phase03.sh b/demo/scripts/verify_phase03.sh similarity index 100% rename from scripts/verify_phase03.sh rename to demo/scripts/verify_phase03.sh diff --git a/scripts/verify_phase04.sh b/demo/scripts/verify_phase04.sh similarity index 100% rename from scripts/verify_phase04.sh rename to demo/scripts/verify_phase04.sh diff --git a/scripts/verify_phase05.sh b/demo/scripts/verify_phase05.sh similarity index 100% rename from scripts/verify_phase05.sh rename to demo/scripts/verify_phase05.sh diff --git a/modules-ir/.gitkeep b/modules-ir/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/platform/.gitkeep b/platform/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/schemas/.gitkeep b/schemas/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/scripts/verify_phase06.sh b/scripts/verify_phase06.sh new file mode 100755 index 0000000..b4b93c0 --- /dev/null +++ b/scripts/verify_phase06.sh @@ -0,0 +1,44 @@ +#!/usr/bin/env bash +# scripts/verify_phase06.sh - Phase 06 archive regression + layout check. +# Lives at TOP-LEVEL scripts/ (v1.1 verify scripts), NOT demo/scripts/. +set -u +ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +cd "$ROOT" +fail() { echo "FAIL: $*" >&2; exit 1; } +ok() { echo "ok: $*"; } + +# --- Check 1: demo/ contains the full v1.0 demo tree --- +for d in demo/modules demo/scripts demo/evidence-ui demo/contracts \ + demo/contracts-repo demo/.gitea/workflows; do + [ -d "$d" ] || fail "missing $d" +done +[ -f demo/ACDL_DEMO.md ] || fail "missing demo/ACDL_DEMO.md" +[ -f demo/scripts/run_demo.sh ] || fail "missing demo/scripts/run_demo.sh" +ok "demo/ contains the full v1.0 demo" + +# --- Check 2: regression - the archived demo still runs from demo/ --- +out=$(ACDL_GITEA_TOKEN= bash demo/scripts/run_demo.sh --no-upload 2>&1); rc=$? +[ "$rc" -eq 0 ] || { echo "$out" >&2; fail "demo/scripts/run_demo.sh --no-upload exited $rc"; } +ok "demo/scripts/run_demo.sh --no-upload exits 0" + +# --- Check 3: new top-level dirs exist and are scaffolded --- +for d in platform schemas adapters terraform modules-ir; do + [ -d "$d" ] || fail "missing new top-level dir $d" + [ -f "$d/.gitkeep" ] || fail "missing $d/.gitkeep" +done +ok "new top-level dirs exist: platform/ schemas/ adapters/ terraform/ modules-ir/" + +# --- Check 4: no stray v1.0 dirs left at repo root --- +for stray in modules evidence-ui contracts contracts-repo ACDL_DEMO.md; do + [ -e "$stray" ] && fail "stray $stray left at repo root (should be under demo/)" +done +[ -e ".gitea" ] && fail "stray .gitea/ left at repo root (moved to demo/.gitea/)" +ok "no stray v1.0 dirs at repo root" + +# --- Check 5: README reflects the real platform --- +grep -q "Agentic Cloud Delivery Platform" README.md || fail "README missing platform name" +grep -q "demo/" README.md || fail "README does not reference the archived demo/" +grep -qi "vision\|architecture" README.md || fail "README missing vision/architecture links" +ok "README reflects the real platform (name + demo/ ref + vision/arch links)" + +echo "Phase 06: ALL CHECKS PASS" \ No newline at end of file diff --git a/terraform/.gitkeep b/terraform/.gitkeep new file mode 100644 index 0000000..e69de29 From 4ab15cb7a57c2e363254fbd33d92f0871351a2a0 Mon Sep 17 00:00:00 2001 From: Jon Chery Date: Tue, 21 Jul 2026 18:28:07 +0000 Subject: [PATCH 2/2] docs(P06): post-ship traceability + roadmap update (v1.1.1) ---ci--- project: acdl phase: 6 milestone: v1.1 status: shipped requirements: complete: [] release: tag: v1.1.1 ---/ci--- ROADMAP Phase 06 -> complete (v1.1.1). No new REQ in this phase (repo hygiene). The archived demo runs end-to-end from demo/ (regression gate passed); new v1.1 top-level dirs scaffolded. --- .ciagent/ROADMAP.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ciagent/ROADMAP.md b/.ciagent/ROADMAP.md index fe8a16c..66a42fb 100644 --- a/.ciagent/ROADMAP.md +++ b/.ciagent/ROADMAP.md @@ -80,7 +80,7 @@ milestone COMPLETE: `v1.2.0` (feature milestone, next minor per ship.md). ### Phase 06 — archive-demo-and-reorient - **Description:** Move the v1.0 demo (`modules/`, `scripts/`, `evidence-ui/`, `contracts/`, demo `.gitea/workflows/`) to `demo/`. Establish the new repo layout (`platform/`, `schemas/`, `adapters/`, `terraform/`, `modules-ir/`). Rewrite README to reflect the real platform. Verify the demo still runs from `demo/` (regression check). -- **Status:** pending +- **Status:** complete (v1.1.1) - **Depends on:** — - **Requirements:** (no new REQ; repo hygiene) - **Success Criteria:**