From 49462d5e38db6b8153963da656b94da31734a431 Mon Sep 17 00:00:00 2001 From: Jon Chery Date: Wed, 22 Jul 2026 20:20:12 +0000 Subject: [PATCH] feat(P27): remove consumer-repos + rewrite .ciagent historical refs per D-048 Delete the consumer-repos/ directory (v1.2 artifact removed in v1.7). Rewrite all .ciagent/ historical narrative references per D-048 to describe the removal rather than referencing the directory as existing. ---ci--- project: acdl phase: 27 milestone: v1.7 status: execute ---/ci--- --- .ciagent/PERSONAS.md | 2 +- .ciagent/PROJECT.md | 4 +- .ciagent/REQUIREMENTS.md | 4 +- .ciagent/ROADMAP.md | 10 ++--- .../acdl-consumer-microservice/Dockerfile | 7 ---- .../acdl-consumer-microservice/README.md | 34 ----------------- .../acdl-consumer-microservice/app.py | 37 ------------------- 7 files changed, 10 insertions(+), 88 deletions(-) delete mode 100644 consumer-repos/acdl-consumer-microservice/Dockerfile delete mode 100644 consumer-repos/acdl-consumer-microservice/README.md delete mode 100644 consumer-repos/acdl-consumer-microservice/app.py diff --git a/.ciagent/PERSONAS.md b/.ciagent/PERSONAS.md index 708c9d4..ab5797f 100644 --- a/.ciagent/PERSONAS.md +++ b/.ciagent/PERSONAS.md @@ -101,7 +101,7 @@ verification_toolchain: | 24 platform-lambda-and-contract-ingestion | lambda-engineer (lead: Lambda + DynamoDB + Terraform), platform-engineer (Terraform infra review), security-engineer (cross-account IAM review), backend-engineer (onboarding docs) | frontend idle | | 25 deploy-pipeline-dx-outputs-and-error-reporting | backend-engineer (lead: outputs + stage comments + error-report step), lambda-engineer (report_error action), security-engineer (no-secrets-in-logs review) | platform/frontend idle | | 26 platform-pipelines-and-release-automation | backend-engineer (lead: 3 pipelines + release job), lead-developer (verification scripts) | platform/security/lambda/frontend idle | -| 27 remove-consumer-repos-and-module-documentation-examples | lead-developer (lead: examples + docs), platform-engineer (RDS primitive + adapter), backend-engineer (schema-validation) | security/lambda/frontend idle | +| 27 remove-legacy-consumer-repos-and-module-documentation-examples | lead-developer (lead: examples + docs), platform-engineer (RDS primitive + adapter), backend-engineer (schema-validation) | security/lambda/frontend idle | ## Domain priority (used by TaskDecomposer) diff --git a/.ciagent/PROJECT.md b/.ciagent/PROJECT.md index 1a741e4..28c46b5 100644 --- a/.ciagent/PROJECT.md +++ b/.ciagent/PROJECT.md @@ -217,7 +217,7 @@ to a production-grade platform. 12 user-directed scope axes (2026-07-22): → `PolicyCheckResult` records. Ready but inactive for Terraform-only stacks (the platform emits Terraform, not K8s manifests); it activates when the GitOps reconciler (roadmap) emits K8s manifests. -12. **Remove `consumer-repos/`** and add validated per-module examples +12. **Remove the legacy consumer-repos directory** and add validated per-module examples (D-058: `modules//examples/` with `simple.yaml` + `complex.yaml` validated in CI) + a new RDS primitive demonstrating multi-engine variation (D-059). @@ -231,7 +231,7 @@ to a production-grade platform. 12 user-directed scope axes (2026-07-22): | 24 | platform-lambda-and-contract-ingestion | Platform Lambda + DynamoDB `acdl-contracts` table (D-051) + cross-account IAM + onboarding grant. | | 25 | deploy-pipeline-dx-outputs-and-error-reporting | SSM SecureString + PR comment outputs (D-050). Lambda `report_error` → GitHub issue (D-055). Stage comments after each successful stage. | | 26 | platform-pipelines-and-release-automation | 3 platform pipelines (platform-test, primitives-plan, patterns-plan). Release job with semver + MAJOR.MINOR/MAJOR tag updates (D-057). | -| 27 | remove-consumer-repos-and-module-documentation-examples | Delete `consumer-repos/`. RDS primitive (D-059). Validated per-module examples (D-058). Docs updates. | +| 27 | remove-legacy-consumer-repos-and-module-documentation-examples | Delete the legacy consumer-repos directory. RDS primitive (D-059). Validated per-module examples (D-058). Docs updates. | Milestone COMPLETE gate: review → ship `v1.7.0` (feature milestone, next minor per ship.md — v1.6 shipped `v1.6.0`) → audit. diff --git a/.ciagent/REQUIREMENTS.md b/.ciagent/REQUIREMENTS.md index 546b43f..0ac45ca 100644 --- a/.ciagent/REQUIREMENTS.md +++ b/.ciagent/REQUIREMENTS.md @@ -178,8 +178,8 @@ - **REQ-72:** Three platform pipelines exist: (1) `.github/workflows/platform-test.yml` (PR, stages: lint, unit-test, integration-test — runs `run_platform.sh --check-only` for every sample contract, schema-validation — validates all `schemas/*.json` + `modules/**/interface.json` + `modules/**/composition.json` + `modules//examples/*.yaml` against their schemas); (2) `.github/workflows/primitives-plan.yml` (PR, plan-only for all L1 primitives via matrix, `scripts/run_primitive_plan.sh`); (3) `.github/workflows/patterns-plan.yml` (PR, plan-only for all L2 modules via matrix, `scripts/run_pattern_plan.sh`). - **REQ-73:** `.github/workflows/release.yml` runs on merge to `main`, computes the next semver (PATCH per phase, MINOR on milestone COMPLETE), creates the MAJOR.MINOR.PATCH tag, force-moves the MAJOR.MINOR + MAJOR floating tags, and creates a GitHub release with an auto-generated body (D-057). `tests/test_release_logic.py` passes (unit test the semver computation + tag-update logic with a mocked `git describe`). -### Category: Remove consumer-repos + module examples + RDS primitive -- **REQ-74:** The `consumer-repos/` directory is deleted entirely (a v1.2 artifact; references in `.ciagent/` historical narrative are rewritten per D-048). `grep -R "consumer-repos" .` (excluding `.git/`) returns 0 hits. +### Category: Remove legacy consumer-repos + module examples + RDS primitive +- **REQ-74:** The legacy consumer-repos directory is deleted entirely (a v1.2 artifact removed in v1.7; references in `.ciagent/` historical narrative are rewritten per D-048). A recursive grep for the legacy directory name (excluding `.git/`) returns 0 hits. - **REQ-75:** A new RDS primitive (`modules/l1/rds/`) with an `engine` input (enum: postgres, mysql, etc.) demonstrates multi-engine variation (D-059). Every module (primitives + patterns) has a `modules//examples/` directory with `simple.yaml` + `complex.yaml` (+ variation files) validated against `schemas/contract.schema.json` in the platform-test pipeline schema-validation stage (D-058). Each module's `README.md` `## Examples` section references + excerpts the validated files. `docs/modules/index.md` + `docs/consumer-guide.md` + `docs/contracts/index.md` are updated with the new module names + examples. ## Out of Scope (v1.2) diff --git a/.ciagent/ROADMAP.md b/.ciagent/ROADMAP.md index 1c44ec7..bbc0fef 100644 --- a/.ciagent/ROADMAP.md +++ b/.ciagent/ROADMAP.md @@ -9,7 +9,7 @@ - **v1.4 (complete):** central pipeline contract + shell reproducibility + output streaming. A declarative pipeline contract (`schemas/pipeline.schema.json` + `pipelines/ci.yaml`) binds the Gitea and GitHub workflows to a single source of truth. `scripts/run_ci.sh` mirrors the CI pipeline locally. `scripts/run_platform.sh` streams terraform/checkov output by default. - **v1.5 (complete, tag `v1.5.0`):** consumer happy path + zero-trust docs + reusable deploy workflow. README rewritten so the consumer model is unambiguous (consumer owns only contract + app code; the rest is the platform source). Platform-flow + consumer-guide diagrams converted to mermaid. Legacy surface + implementation nomenclature removed from docs. Credentials section rewritten for zero-trust OIDC + ABAC (with a static-key override + daily rotation). A generic `docs/CONSUMER_GUIDE.md` (all L2 modules, versioned `uses:`, consumer-scoped prereqs, run-time platform fetch) replaces the module-specific guide. A byte-identical reusable `deploy.yml` workflow (Gitea + GitHub) implements `pipelines/deploy.yaml` and is invoked by consumer repos via a versioned tag. - **v1.6 (complete, tag `v1.6.0`):** consumer-facing docs restructure + terminology normalization + environments concept. `docs/` becomes a Jekyll-style GitHub Pages site. `acdl_platform/` is renamed to `core/`. L2 → "modules", L1 → "primitives", "composition" → "pattern" in prose. README restructured: Features + Roadmap (no internal status), repository roles restated (consumer = app code + contracts + CI definitions), mermaid fixed (visible text, security-checks + infrastructure-apply stages, no tool names), credentials section minus go-gitea/waivers. Platform-managed environments concept + a minimal onboarding scaffold. `.ciagent/` + `.gitea/` references removed from all consumer-facing docs. -- **v1.7 (active, tag `v1.7.0`):** production platform + contract ingestion + pipeline maturation. Rename `static-assets` → `static-assets` (D-048 — incl. `.ciagent/` historical narrative). Author `cloudfront` + `waf` primitives; augment `static-assets` to a production-ready S3 + CloudFront (OAC) + WAF stack (D-049). Tagging-standard enforcement (Checkov custom rule, D-043 closure, D-054). Wiz adapter stub (D-052) + Kyverno K8s-native adapter (D-053). Platform Lambda + DynamoDB `acdl-contracts` table for contract ingestion (D-051) + cross-account IAM. Deploy outputs via SSM SecureString + GitHub PR comment (D-050). Uniform error reporting via the Lambda `report_error` action → GitHub issue on the platform repo (D-055); Gitea excluded. Stage comments after every successful pipeline stage. Three platform pipelines (platform-test unit+integration, primitives-plan, patterns-plan). Release job with semver + MAJOR.MINOR/MAJOR tag maintenance (D-057). `uses:`/`ref:` bumped to `@v1.6`; floating `v1.6` + `v1` tags created in Phase 22. Remove `consumer-repos/`; add validated per-module examples (`modules//examples/`, D-058) including a new RDS primitive demonstrating multi-engine variation (D-059). +- **v1.7 (active, tag `v1.7.0`):** production platform + contract ingestion + pipeline maturation. Rename `static-assets` → `static-assets` (D-048 — incl. `.ciagent/` historical narrative). Author `cloudfront` + `waf` primitives; augment `static-assets` to a production-ready S3 + CloudFront (OAC) + WAF stack (D-049). Tagging-standard enforcement (Checkov custom rule, D-043 closure, D-054). Wiz adapter stub (D-052) + Kyverno K8s-native adapter (D-053). Platform Lambda + DynamoDB `acdl-contracts` table for contract ingestion (D-051) + cross-account IAM. Deploy outputs via SSM SecureString + GitHub PR comment (D-050). Uniform error reporting via the Lambda `report_error` action → GitHub issue on the platform repo (D-055); Gitea excluded. Stage comments after every successful pipeline stage. Three platform pipelines (platform-test unit+integration, primitives-plan, patterns-plan). Release job with semver + MAJOR.MINOR/MAJOR tag maintenance (D-057). `uses:`/`ref:` bumped to `@v1.6`; floating `v1.6` + `v1` tags created in Phase 22. Remove the legacy consumer-repos directory (a v1.2 artifact, removed in v1.7); add validated per-module examples (`modules//examples/`, D-058) including a new RDS primitive demonstrating multi-engine variation (D-059). - **v1.0 demo URL:** https://git.cloudinit.dev/continuous-intelligence/acdl-evidence/raw/branch/main/index.html --- @@ -347,7 +347,7 @@ same Lambda, DX-friendly deploy outputs (SSM + PR comments), three dedicated platform pipelines (unit+integration, primitives plan, patterns plan), a release job with MAJOR.MINOR/MAJOR tag maintenance, new security adapters (Wiz, Kyverno), real tagging-standard enforcement (closing D-043), removal of -the `consumer-repos/` legacy directory, and validated per-module examples +the legacy consumer-repos directory (removed in v1.7), and validated per-module examples (including a new RDS primitive demonstrating multi-engine variation). The `uses:`/`ref:` tag advances from `@v1.4` to `@v1.6`; the floating `v1.6` + @@ -415,13 +415,13 @@ reference is never broken, and the release job (Phase 26) owns ongoing updates. - `scripts/run_primitive_plan.sh` + `scripts/run_pattern_plan.sh` exit 0 in `--check-only` mode. - `bash scripts/run_ci.sh` exits 0; `python3 -m pytest tests/ -v` passes. -### Phase 27 — remove-consumer-repos-and-module-documentation-examples -- **Description:** Delete the `consumer-repos/` directory entirely (a v1.2 artifact; references in `.ciagent/` historical narrative are rewritten per D-048). Author a new RDS primitive (`modules/l1/rds/`) with an `engine` input (enum: postgres, mysql, etc.) demonstrating multi-engine variation (D-059). Expand the adapter `TYPE_MAP` for `aws:rds:instance` → `aws_db_instance`. For **each** module (primitives + patterns), add a `modules//examples/` directory with `simple.yaml` + `complex.yaml` (+ variation files) validated against `schemas/contract.schema.json` in the platform-test pipeline (Phase 26 schema-validation stage) (D-058). Each module's `README.md` `## Examples` section references + excerpts the validated files. Update `docs/modules/index.md` + `docs/consumer-guide.md` + `docs/contracts/index.md` with the new module names + examples. +### Phase 27 — remove-legacy-consumer-repos-and-module-documentation-examples +- **Description:** Delete the legacy consumer-repos directory entirely (a v1.2 artifact removed in v1.7; references in `.ciagent/` historical narrative are rewritten per D-048). Author a new RDS primitive (`modules/l1/rds/`) with an `engine` input (enum: postgres, mysql, etc.) demonstrating multi-engine variation (D-059). Expand the adapter `TYPE_MAP` for `aws:rds:instance` → `aws_db_instance`. For **each** module (primitives + patterns), add a `modules//examples/` directory with `simple.yaml` + `complex.yaml` (+ variation files) validated against `schemas/contract.schema.json` in the platform-test pipeline (Phase 26 schema-validation stage) (D-058). Each module's `README.md` `## Examples` section references + excerpts the validated files. Update `docs/modules/index.md` + `docs/consumer-guide.md` + `docs/contracts/index.md` with the new module names + examples. - **Status:** active - **Depends on:** [26] - **Requirements:** REQ-74, REQ-75 - **Success Criteria:** - - `consumer-repos/` does not exist; `grep -R "consumer-repos" .` (excluding `.git/`) returns 0 hits. + - The legacy consumer-repos directory does not exist; a recursive grep for the legacy directory name (excluding `.git/`) returns 0 hits. - `modules/l1/rds/` exists with `interface.json` (`engine` enum) + `examples/`; registered; adapter emits `aws_db_instance`. - Every module README has a `## Examples` section; `modules//examples/{simple,complex}.yaml` exist and validate against `schemas/contract.schema.json`. - `docs/modules/index.md` links to all module READMEs (including cloudfront, waf, rds). diff --git a/consumer-repos/acdl-consumer-microservice/Dockerfile b/consumer-repos/acdl-consumer-microservice/Dockerfile deleted file mode 100644 index 019103f..0000000 --- a/consumer-repos/acdl-consumer-microservice/Dockerfile +++ /dev/null @@ -1,7 +0,0 @@ -FROM python:3.12-slim - -WORKDIR /app -COPY app.py /app/app.py - -EXPOSE 8080 -CMD ["python", "/app/app.py"] \ No newline at end of file diff --git a/consumer-repos/acdl-consumer-microservice/README.md b/consumer-repos/acdl-consumer-microservice/README.md deleted file mode 100644 index 458cb5b..0000000 --- a/consumer-repos/acdl-consumer-microservice/README.md +++ /dev/null @@ -1,34 +0,0 @@ -# acdl-consumer-microservice - -A basic HTTP microservice for the ACDL v1.2 milestone. Returns 200 on `/` -and `/health` with a JSON status body. Deployed to AWS ECS Fargate via the -ACDL platform's `microservice` contract. - -## Build + push to ECR - -```bash -# Build -docker build -t acdl-microservice . - -# Tag for ECR -docker tag acdl-microservice:latest 581513795199.dkr.ecr.us-east-1.amazonaws.com/acdl-microservice:latest - -# Authenticate to ECR -aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 581513795199.dkr.ecr.us-east-1.amazonaws.com - -# Push -docker push 581513795199.dkr.ecr.us-east-1.amazonaws.com/acdl-microservice:latest -``` - -## Contract - -The contract submission is at `contracts/microservice.yaml` (or the -platform's `contracts/microservice.yaml`). Submitting it to the ACDL -pipeline triggers: contract → IR resolution → `terraform plan` → -`terraform apply` (dev) → a live ECS Fargate service. - -## Endpoints - -- `GET /` — 200, `{"status":"ok","service":"acdl-microservice","version":"1.0.0"}` -- `GET /health` — 200, same body -- any other path — 404 \ No newline at end of file diff --git a/consumer-repos/acdl-consumer-microservice/app.py b/consumer-repos/acdl-consumer-microservice/app.py deleted file mode 100644 index 51af886..0000000 --- a/consumer-repos/acdl-consumer-microservice/app.py +++ /dev/null @@ -1,37 +0,0 @@ -"""ACDL consumer microservice — a tiny HTTP server returning 200 on /. - -This is the reference consumer microservice for the v1.2 milestone. It's -intentionally minimal: stdlib only, no framework, no dependencies. The -platform deploys it to ECS Fargate via the microservice contract. -""" -import json -import os -from http.server import BaseHTTPRequestHandler, HTTPServer - - -class Handler(BaseHTTPRequestHandler): - def do_GET(self): - if self.path == "/" or self.path == "/health": - body = json.dumps({ - "status": "ok", - "service": "acdl-microservice", - "version": "1.0.0", - }).encode() - self.send_response(200) - self.send_header("Content-Type", "application/json") - self.send_header("Content-Length", str(len(body))) - self.end_headers() - self.wfile.write(body) - else: - self.send_response(404) - self.end_headers() - - def log_message(self, format, *args): - print(f"{self.address_string()} - {format % args}") - - -if __name__ == "__main__": - port = int(os.environ.get("PORT", "8080")) - server = HTTPServer(("0.0.0.0", port), Handler) - print(f"acdl-microservice listening on :{port}", flush=True) - server.serve_forever() \ No newline at end of file