Jon Chery
bcdb51c090
docs(P56): create v1.11 phase plans
...
PLAN stage. Wrote the v1.11 milestone (Operating Model + Deploy
Verification) into ROADMAP.md + REQUIREMENTS.md + config.json.
ROADMAP.md:
- v1.11 overview line in the milestone summary.
- New "## v1.11" section with 8 phases (56-63) — full descriptions,
status, depends-on, requirements, success criteria for each.
- Wave ordering: 56 → (57 ‖ 58 ‖ 60) → 59 → 61 → 62 → 63.
REQUIREMENTS.md:
- 7 new requirement definitions (REQ-116..122) under "IAM + Deploy
Verification (v1.11)".
- v1.11 traceability table (all pending).
- "Out of Scope (v1.11)" — OIDC act_runner adoption, per-phase
regression (G-007), audit ledger build-out (D-083), operator-supplied
evidence, pilot onboarding (G-001).
config.json: active project milestone v1.10 (complete) → v1.11 (active).
Versioning: v1.11.0 (feature milestone — Phases 56/57/58/59 are feat;
next minor per run.md: v1.10.2 → v1.11.0). Phase 56 is a deploy-class
escalation (D-095: escalate to human for fresh access keys if the
bootstrap root key is invalid).
---ci---
project: acdl
phase: 56
milestone: v1.11
status: plan
---/ci---
2026-07-28 12:33:29 +00:00
Jon Chery
48b4ad6f04
docs(P56): research findings for v1.11
...
RESEARCH stage. Verified the technical assumptions behind the 8-phase
v1.11 plan against the live codebase.
Findings:
- spike_runner_policy.json (terraform/bootstrap/) already grants
ECS/ECR/ELB/IAM/EC2/S3-tfstate/DynamoDB-outbox. MISSING for CAP-017..022:
cloudfront, waf, lambda, dynamodb (acdl-contracts + acdl-change-requests),
secretsmanager, sns, ce (Cost Explorer). Phase 56 extends this exact file.
- terraform/platform/main.tf already defines acdl_contracts table, Lambda
contract_ingestor + Function URL, acdl_change_requests table, acdl-sod-halt
SNS topic. CAP-017/018 verification = terraform apply platform stack +
Lambda Function URL probe.
- modules/l2/{microservice,static-assets}/composition.json confirm the L2
wiring; contracts/*.yml use the v1.10.2 contract shape (id/name/
infrastructure map).
- scripts/run_platform.sh implements decommission mode (D-070, REQ-92) with
2-step pipeline + SRE gates + changeRequestId validation. Phase 61 reuses
this exact path for teardown (REQ-122).
- scripts/run_regression.sh + core/regression_verify.py implement the D-091
regression gate. v1.11 milestone COMPLETE re-runs this; CAP-017..022 must
be added to the capability registry so the regression gate covers them.
- Decks (docs/presentations/*-marp.md + source .md) carry the "6 IAM-gated
cloud resources escalated (require an admin principal)" framing in 4
locations. Phase 62 rewrites all 4 to "Verified live-aws on <date>".
PERSONAS.md updated for v1.11:
- lambda-engineer reactivated (Phase 57 live Lambda probe).
- NEW cost-engineer persona (Phase 59 Cost Explorer + COST.md).
- Domain priority: coordination → security → platform → backend → lambda
→ cost → frontend.
- Phase-specific overrides 56-63 added.
- Territory enforcement: warn (co-authoring expected on spike_runner_policy
+ terraform/platform/main.tf).
Env state: ACDL_BOOTSTRAP_AWS_* NOT set in this shell. Phase 56 will
escalate per D-095 (escalate to human for fresh access keys, not silent
fallback).
---ci---
project: acdl
phase: 0
milestone: v1.11
status: research
---/ci---
2026-07-28 12:31:21 +00:00
Jon Chery
69cb0ca36d
docs(P57): update ROADMAP for v1.10.2 release
...
acdl-ci / Lint (push) Successful in 7s
acdl-ci / Test (push) Successful in 2m7s
acdl-ci / Platform check-only (offline) (push) Successful in 18s
---ci---
project: acdl
phase: 57
milestone: v1.10.2
status: complete
---/ci---
2026-07-28 12:17:35 +00:00
Jon Chery
7f36df5610
docs(P56): update ROADMAP for v1.10.1 patch release
...
acdl-ci / Lint (push) Successful in 7s
acdl-ci / Test (push) Successful in 2m6s
acdl-ci / Platform check-only (offline) (push) Successful in 9s
Mark v1.10 as complete (was "active"); add v1.10.1 entry: post-v1.10
NFR patch (grill + verify + review). Gitea release id 236.
---ci---
project: acdl
phase: 0
milestone: v1.10
status: complete
---/ci---
2026-07-27 19:40:07 +00:00
Jon Chery
29eae2120d
verify(grill): code review — 0 P0, 1 P1 auto-fixed, 0 P1+ flagged
...
acdl-ci / Lint (push) Successful in 8s
acdl-ci / Test (push) Successful in 2m7s
acdl-ci / Platform check-only (offline) (push) Successful in 9s
Multi-persona review of the grill deliverable (2 commits, 2 docs files).
P1-1 (auto-fixed): two mis-citations in GRILL.md cited
PROJECT.md:6 for the "0 consumer adoption" quote, but line 6 reads
"deployment through an agentic stack..." — the quote is at
PROJECT.md:487. Fixed both instances (Axis 1 Q3 + Axis 9 Q1).
Persona review:
- Correctness: 12 binding decisions traceable to evidence; 2 escalations
correctly unresolved. All file:line citations now validate against
source files. PASS (after P1 fix).
- Testing: docs-only; 513 fast tests pass (no regression). PASS.
- Security: no credential leakage; no sensitive data in report. PASS.
- Performance: N/A (docs file; no runtime cost). PASS.
- Maintainability: report follows grill workflow Step 5 format; appendable
for future runs. PASS.
- Adversarial: AWS account 581513795199 + CAPABILITY_INVENTORY section
references validated against source. Escalations surfaced, not skipped.
PASS.
Verified after fix: all citations valid.
---ci---
project: acdl
phase: 0
milestone: v1.10
status: verify
lessons:
- P1 fix: GRILL.md cited PROJECT.md:6 for "0 consumer adoption" but the
quote is at PROJECT.md:487. Evidence citations must be validated
against source line numbers, not just the file.
---/ci---
2026-07-27 19:33:24 +00:00
Jon Chery
d3c42afb6a
verify(grill): 4-layer gate — PASS (docs-only deliverable ac11c01)
...
Layer 1 (Structural): GRILL.md present; all 9 axes + meta + binding
decisions table (12 rows) + escalations (2) per grill workflow Step 5
format. Commit ci block well-formed (project/phase/milestone/status +
12 decision ids + 2 escalation lines). PASS.
Layer 2 (Behavioral): pytest tests/ -m "not slow" — 513 passed, 5
deselected. No regressions from the docs-only grill commit. No REQ-IDs
bound (phase 0, status grill; advisory only). PASS.
Layer 3 (Security/STRIDE): all threats low-or-none (docs-only); no
credential leakage (grep scan clean); commit signed. Auto-accepted. PASS.
Layer 4 (Quality): 0 P0, 0 P1, 0 P2. 12 decisions traceable to evidence;
2 escalations (G-005 risks, G-008 budget) surfaced, not silently skipped.
PASS.
Verdict: VERIFY PASS. Grill deliverable is sound; escalations visible
via ciagent audit.
---ci---
project: acdl
phase: 0
milestone: v1.10
status: verify
requirements:
covered: []
partial: []
lessons:
- A docs-only grill deliverable still warrants a 4-layer verify; the
structural check caught the format conformance (12 decisions, 2
escalations) and the security scan confirmed no credential leakage.
- The grill's binding decisions are advisory and do not modify
REQUIREMENTS.md per grill workflow Step 7; escalation promotion is
a separate user action (ciagent-clarify or a follow-up CLARIFY).
---/ci---
2026-07-27 19:30:56 +00:00
Jon Chery
ac11c01247
docs(grill): adversarial review — 12 challenges, 10 binding decisions, 2 escalations
...
First grill run. Verdict: Proceed with conditions (confidence 0.72).
All 9 axes + meta reviewed; 10 binding decisions, 2 escalations.
Key reclassification: ACDL is an OSS reference implementation (G-003),
not a sponsored product. The grill's sponsor/ROI/budget/timeline axes
apply in weakened form; adoption, architecture, and risks apply in full.
Escalations (must resolve before leadership pitch):
- G-005 (risks): 6 cloud capabilities (CAP-017..022) deploy-unverified;
re-bootstrap IAM or mark deploy-unverified in decks.
- G-008 (budget): no cost documentation despite live AWS resources;
add COST.md or document zero-cloud-cost operating model.
---ci---
project: acdl
phase: 0
milestone: v1.10
status: grill
decisions:
- id: G-001
decision: Feature-complete MVP for leadership pitch + pilot consumers in parallel; CIAgent builds, Platform Team deploys.
rationale: PROJECT.md admits 0 consumer adoption across 10 milestones; user clarified the pitch is the sponsor-acquisition moment and pilot consumers run in parallel.
confidence: 0.65
alternatives: [treat as pre-product and pause, dogfood via CI, add v1.11 adoption milestone]
- id: G-002
decision: ACDL is white-label; Platform Team customization is out-of-repo.
rationale: User clarified the repo must stay generic for any platform team at any company; ops-handoff concern is intentionally out of scope.
confidence: 0.78
alternatives: [Platform Team joins post-pitch, CIAgent is ops team for MVP]
- id: G-003
decision: Reframe as OSS reference implementation; no sponsor/ROI required.
rationale: White-label framing (G-002) makes ACDL a product with no signed pilot; user chose OSS reference framing where the bar is credible reference, not paying customer.
confidence: 0.85
alternatives: [escalate for named sponsor, treat senior leadership as sponsor]
- id: G-004
decision: Keep production-deployment vision; reference describes target state.
rationale: PROJECT.md North Star describes the state a downstream team would achieve, not ACDL-the-repo's own production state; no rewrite needed.
confidence: 0.75
alternatives: [rewrite vision to OSS framing, escalate positioning instability]
- id: G-005
decision: ESCALATION — re-bootstrap IAM or mark CAP-017..022 deploy-unverified in decks.
rationale: 6 of 22 advertised capabilities (27%) are unverifiable; terraform plan path is hope over evidence; no admin principal engaged; no pre-mortem.
confidence: 0.80
alternatives: [accept design-verified+locally-emulated as the bar, disclosure is sufficient]
- id: G-006
decision: Autonomous OSS build has no deadline; cadence acceptable.
rationale: 10 milestones in 6 days with no deadline, critical path, or estimate basis; user accepts this for an autonomous OSS reference build.
confidence: 0.72
alternatives: [disclose no-deadline basis in PROJECT.md, impose dwell time / external review]
- id: G-007
decision: Milestone-level regression gate is correct; system worked as designed.
rationale: D-091 regression gate caught the 8-phase decay at the milestone boundary; per-phase regression is accepted as unnecessary cost.
confidence: 0.70
alternatives: [extend regression gate to per-phase, treat decay as one-time event]
- id: G-008
decision: ESCALATION — add COST.md or document zero-cloud-cost operating model.
rationale: No cost documentation exists despite live AWS resources (account 581513795199); financial-control gap.
confidence: 0.74
alternatives: [near-zero cloud cost; no doc needed, budget is downstream-team concern]
- id: G-009
decision: Autonomous CI is the governance; no human stop-trigger needed.
rationale: config.json defines autonomy level, escalation hooks, confidence thresholds; user accepts this as the governance mechanism despite v1.10 decay incident.
confidence: 0.68
alternatives: [add documented stop-trigger to PROJECT.md, user is the stop-trigger]
- id: G-010
decision: OSS scope is contributor-bounded; no out-of-scope table needed.
rationale: User accepts that an OSS reference implementation's scope is bounded by contributors, not by a formal out-of-scope table; v1.9.x deck-polish expansion accepted.
confidence: 0.65
alternatives: [add current Out-of-Scope section to PROJECT.md, Domain Boundaries is sufficient]
- id: G-011
decision: Single-maintainer is normal for OSS reference; no action.
rationale: Bus factor is 1 (the user); user accepts this as normal for an OSS reference implementation; downstream forks improve the bus factor.
confidence: 0.70
alternatives: [document single-maintainer bus-factor-1 in PROJECT.md, pin agent/model version]
- id: G-012
decision: Full catalog is the value; no minimal release needed.
rationale: User accepts the full 115-requirement build as the reference value; trimming to v1.2-equivalent would reduce the reference value for downstream teams.
confidence: 0.68
alternatives: [tag minimal-reference release (v1.2-equivalent), decks are the 80%-value artifact]
escalations:
- G-005: 6 cloud capabilities (CAP-017..022) deploy-unverified; re-bootstrap IAM with admin principal or explicitly mark deploy-unverified in every leadership deck before the pitch.
- G-008: no cost documentation despite live AWS resources; add COST.md or document zero-cloud-cost operating model.
---/ci---
2026-07-27 19:20:37 +00:00
Jon Chery
ab477b3990
audit(v1.10): post-ship audit — PASS (1 issue fixed: ARCHITECTURE.md addendum)
...
acdl-ci / Lint (push) Successful in 8s
acdl-ci / Test (push) Successful in 2m7s
acdl-ci / Platform check-only (offline) (push) Successful in 9s
Reconstruction: PASS — state fully reconstructable from 9 ---ci--- blocks.
File discipline: PASS (after fix) — ARCHITECTURE.md had 0 references to
v1.10 components; added a v1.10 addendum covering regression-class VERIFY,
local emulating adapters, capability re-verification sweep, and the 7
adapter defect fixes.
Branch hygiene: PASS — main only, no orphan branches.
Commit discipline: PASS — 9/9 commits have ---ci--- blocks; no stale
decisions; no unresolved escalations.
---ci---
project: acdl
phase: 0
milestone: v1.10
status: audit
lessons:
- ARCHITECTURE.md must be updated when new subsystems are added; the
v1.10 addendum was missing and caught by the audit.
---/ci---
2026-07-27 18:58:12 +00:00
Jon Chery
28d4645a0c
verify(v1.10): code review — 1 P0 auto-fixed, 1 P1 auto-fixed, 2 P1+ flagged
...
acdl-ci / Lint (push) Successful in 9s
acdl-ci / Test (push) Successful in 2m12s
acdl-ci / Platform check-only (offline) (push) Successful in 10s
Multi-persona review of the v1.10 milestone (6 commits, 23 files).
P0-1 (auto-fixed): TOCTOU race in LocalEcsEmulator.deploy() — opened a
socket to find a free port, closed it, then bound TCPServer to that
port. Between close and bind, another process could grab the port,
causing serve_forever to fail with OSError: Address already in use.
Fix: bind TCPServer directly to port 0 (OS assigns a free port
atomically); read the assigned port back from server_address[1].
P1-1 (auto-fixed, upgraded): run_local_e2e() called os.chdir() as a
side-effect without restoring the prior CWD. Fix: wrapped the body in
try/finally that restores prior_cwd on exit.
P2-1 (flagged): regression registry covers microservice + static-assets
but not uptime-kuma or RDS stacks. Recommend adding in a future patch.
P2-2 (flagged): _check_outbox_writer uses an f-string to embed a temp
path into a python3 -c command. Safe in practice but fragile by design.
Verified after fixes: 513 fast tests + 5 slow local E2E tests pass.
No regressions.
---ci---
project: acdl
phase: 0
milestone: v1.10
status: verify
lessons:
- P0 fix: TOCTOU race in LocalEcsEmulator.deploy() — bind to port 0
directly instead of open/close/rebind.
- P1 fix: os.chdir side-effect in run_local_e2e() — restore prior
CWD in a finally block.
- The regression registry should be expanded to cover all L2 stacks
(uptime-kuma, RDS) to prevent untested-stack regressions.
---/ci---
2026-07-27 18:46:05 +00:00
Jon Chery
5274bc48a9
verify(v1.10): 4-layer milestone gate — PASS
...
Layer 1 (Structural): all 8 plan-referenced files exist; imports resolve;
no TODO/stub placeholders; all declared exports present. PASS.
Layer 2 (Behavioral): 518 tests pass (513 fast + 5 slow); REQ-112..115
all complete; regression gate 16/16 Verified. PASS.
Layer 3 (Security/STRIDE): all 6 threats low-severity; auto-accepted.
No creds logged; loopback-only binding; monkey-patches scoped to local
tier. PASS.
Layer 4 (Quality): 0 P0, 0 P1, 1 P2 (post-hoc: expand regression
registry to uptime-kuma + RDS stacks). Gate can't be bypassed; local
E2E can't mutate cloud; no injection vectors. PASS.
Verdict: VERIFY PASS. v1.10 ready to ship.
---ci---
project: acdl
phase: 0
milestone: v1.10
status: verify
requirements:
covered: [REQ-112, REQ-113, REQ-114, REQ-115]
partial: []
lessons:
- The regression gate (D-091) is the durable fix for the diff-scoped
VERIFY defect; it must run at every milestone completion to catch
capability decay before it hides behind docs-only NFR patches.
- Local emulating adapters (D-092) make the platform testable without
cloud credentials; the local tier is now the regression baseline.
- 6 IAM-gated cloud resources cannot be auto-verified (chicken-and-egg);
the terraform plan path is the strongest verification possible
without terraform apply (a deploy-class autonomy escalation).
---/ci---
2026-07-27 18:40:44 +00:00
Jon Chery
2697775470
docs(milestone): complete v1.10 — pipeline regression fix + capability re-verification
...
v1.10 milestone COMPLETE. 4 phases (52-55) shipped + verified:
- P52: regression-class VERIFY (D-091) — catches capability decay
- P53: local emulating adapters (D-092) — full local E2E, no AWS
- P54: capability re-verification sweep (D-093) — 16/16 Verified, 7 adapter defects fixed
- P55: rewrite PROJECT/ROADMAP/decks to verified reality (D-094)
Review: READY TO SHIP (0 P0, 0 P1, 1 P2 post-hoc).
Audit: PASS (reconstruction, file discipline, branch hygiene, commit discipline).
Regression gate: 16/16 capabilities Verified (12 local + 4 live-AWS).
Tests: 513 fast + 5 slow, all pass.
Tag v1.10.0 (next minor; fix/test/docs, not a breaking schema change).
---ci---
project: acdl
phase: 0
milestone: v1.10
status: complete
requirements:
covered: [REQ-112, REQ-113, REQ-114, REQ-115]
partial: []
---/ci---
2026-07-27 18:29:33 +00:00
Jon Chery
950db56fdc
docs(P55): rewrite PROJECT/ROADMAP/decks to verified reality; unfreeze decks
...
PROJECT.md gains a 'Capability Status (Re-Verified 2026-07-27)' section
after Domain Boundaries: decay disclosure, the 16 auto-verified
capabilities table, the 6 IAM-gated escalated resources, and the
regression-gate note. ROADMAP.md v1.9.8 entry annotated 'Last
deck-polish phase before the v1.10 deck-freeze'; new v1.10 overview
entry noting v1.9.1-v1.9.8 are 'superseded-by-reverification'. Both
leadership decks disclose the 2026-07-27 re-verification in their
maturity-framing headers, citing .ciagent/CAPABILITY_INVENTORY.md as
the source of truth.
No 'shipped'/'Available today' claims remain that aren't backed by a
Verified capability or an explicit escalation note. The 6 IAM-gated
cloud resources (contracts table, Lambda, ECS service, CloudFront
stack, uptime-kuma, OIDC role) are explicitly listed as escalated,
not silently omitted.
Decks unfrozen. v1.10.0 ready to tag.
---ci---
project: acdl
phase: 55
milestone: v1.10
status: verify
requirements:
covered: [REQ-115]
partial: []
decisions: [D-094]
---/ci---
2026-07-27 18:26:00 +00:00
Jon Chery
44d1d19cfd
fix(P54): capability re-verification sweep — 16/16 Verified, 7 adapter defects fixed
...
The v1.1-v1.8 capability re-verification sweep (D-093) found and fixed
7 adapter defects in adapters/terraform/adapter.py that had prevented
the headline E2E from running against live AWS since the v1.7/v1.8
platform simplification. All 16 auto-verifiable capabilities are now
Verified.
Defects fixed in-sweep (D-090: no cap):
1. Duplicate output definitions (per-resource + stack-level both emitted).
2. Duplicate desired_count/launch_type on ECS service.
3. Duplicate target_type/family/load_balancer_type.
4. Missing assume_role_policy/role_name on IAM role (L2 composition gap).
5. Missing cidr_block/vpc_id/name defaults on VPC/subnet/route_table/
ECS cluster/ECR repository.
6. ECR kms_key_arn unsupported arg -> encryption_configuration block.
7. CloudFront OAC + WAF deprecated arg names (AWS provider v5):
signing_behavior, signing_protocol, origin_access_control_id,
s3_origin_config.origin_access_identity, origin_id, rule (singular),
scope=CLOUDFRONT (uppercase).
New live-AWS capability checks (CAP-013..CAP-016):
- terraform init+validate+plan live AWS (microservice): 14 resources, OK
- terraform init+validate+plan live AWS (static-assets): CloudFront+WAF+S3, OK
- DynamoDB outbox table: exists, 9 items
- S3 state bucket: exists, keys=[spike/l2-microservice/terraform.tfstate]
6 IAM-gated cloud resources (CAP-017..CAP-022: contracts table, Lambda,
ECS service, CloudFront stack, uptime-kuma, OIDC role) are documented
as escalated: the spike-runner lacks the IAM permissions to verify
them (chicken-and-egg). The terraform plan path proves the code would
deploy them; the local emulators prove the runtime behavior.
Verified: 513 fast tests pass. run_regression.sh reports 16/16
Verified (was 12; +4 live-AWS). terraform init+validate+plan succeeds
against live AWS for both contracts. No regressions.
---ci---
project: acdl
phase: 54
milestone: v1.10
status: verify
requirements:
covered: [REQ-114]
partial: []
decisions: [D-090, D-093]
regression:
- { capability: CAP-013, status: Verified }
- { capability: CAP-014, status: Verified }
- { capability: CAP-015, status: Verified }
- { capability: CAP-016, status: Verified }
---/ci---
2026-07-27 18:21:45 +00:00
Jon Chery
217653d6f4
feat(P53): local emulating adapters (D-092) — full local E2E, no AWS
...
The platform is now fully locally testable without cloud credentials.
The headline E2E (contract -> resolver -> adapter -> S3 state -> ECS
service -> DynamoDB outbox -> contract-ingestor Lambda) runs end-to-end
against the local emulating tier (D-092, REQ-113).
Four local emulating adapters in core/local_emulators.py:
- FlatFileOutbox: flat-file DynamoDB outbox emulator (hash-chained JSONL;
resumable across instances; chain verification).
- LocalEcsEmulator: local ECS Fargate HTTP 200 emulator (free-port
binding on 127.0.0.1; health check; clean destroy).
- LocalS3StateBackend: rewrites the terraform S3 backend to a local
backend (per-stack tfstate in a temp folder).
- LocalLambdaStub: invokes the contract_ingestor handler in-process
(patches _get_dynamodb / _get_secrets_client / urllib.urlopen;
DynamoDB writes redirected to the FlatFileOutbox).
run_platform.sh gains a --local flag that short-circuits to the local
emulating tier (no AWS, no Checkov, no DynamoDB).
Regression gate (D-091) now covers 12 capabilities (was 10): +CAP-011
(local E2E microservice) + CAP-012 (local E2E static-assets).
Verified: 513 fast tests pass (was 502; +11 new). 2 slow local E2E
tests pass. run_regression.sh reports 12/12 Verified. run_platform.sh
--local exits 0 with LOCAL E2E OK. No AWS credentials required.
---ci---
project: acdl
phase: 53
milestone: v1.10
status: verify
requirements:
covered: [REQ-113]
partial: []
decisions: [D-092]
regression:
- { capability: CAP-011, status: Verified }
- { capability: CAP-012, status: Verified }
---/ci---
2026-07-27 17:39:33 +00:00
Jon Chery
9897df04b2
fix(P52): add regression-class VERIFY (D-091) — catches capability decay
...
The prior VERIFY stage was diff-scoped: it checked the phase diff only
and never re-ran underlying platform capability. This structural defect
(D-091) let 8 NFR-patch phases (v1.9.1-v1.9.8, deck rework) pass VERIFY
while the platform they described decayed underneath.
Phase 52 remediation:
- core/regression_verify.py: regression-class VERIFY with 10 seeded
local-tier capability checks (CAP-001..CAP-010). Tags each
Verified/Decayed/Broken; fails closed on any non-Verified.
- scripts/run_regression.sh: shell wrapper; writes
.ciagent/REGRESSION_REPORT.{md,json}; exits non-zero on decay.
- tests/test_verify_regression_mode.py: 11 tests (8 fast + 3 slow).
Confirms the gate catches decay (fails closed) and that regression
mode is additive (diff-scoped VERIFY behavior preserved).
- pyproject.toml: slow marker registered; run_ci.sh excludes slow
tests to avoid recursion.
Verified: 502 fast tests pass (was 493 at v1.9; +9 new). 3 slow
integration tests pass. run_regression.sh reports all 10 seeded
local-tier capabilities Verified against current code. The
decay-surfacing test injects a broken cloud-backed check and confirms
the run tags it Broken and fails closed.
Cloud-backed capability re-verification (live ECS, DynamoDB writes,
Lambda invocation) lands in Phase 54 (D-093).
---ci---
project: acdl
phase: 52
milestone: v1.10
status: verify
requirements:
covered: [REQ-112]
partial: []
decisions: [D-091]
regression:
- { capability: CAP-001, status: Verified }
- { capability: CAP-002, status: Verified }
- { capability: CAP-003, status: Verified }
- { capability: CAP-004, status: Verified }
- { capability: CAP-005, status: Verified }
- { capability: CAP-006, status: Verified }
- { capability: CAP-007, status: Verified }
- { capability: CAP-008, status: Verified }
- { capability: CAP-009, status: Verified }
- { capability: CAP-010, status: Verified }
---/ci---
2026-07-27 17:29:52 +00:00
Jon Chery
772ac721b0
docs(P52): create v1.10 milestone plan — pipeline regression fix + capability re-verification
...
---ci---
project: acdl
phase: 52
milestone: v1.10
status: plan
decisions: [D-090, D-091, D-092, D-093, D-094]
requirements: [REQ-112, REQ-113, REQ-114, REQ-115]
---/ci---
2026-07-27 17:10:09 +00:00
Jon Chery
5f69bdea10
docs(P51): update ROADMAP + PROJECT for v1.9.8 patch release
...
acdl-ci / Lint (push) Successful in 8s
acdl-ci / Test (push) Successful in 29s
acdl-ci / Platform check-only (offline) (push) Successful in 9s
---ci---
phase: 51
milestone: v1.9
status: complete
requirements:
covered: []
partial: []
---/ci---
2026-07-27 14:48:45 +00:00
Jon Chery
116f49ecb8
docs(P50): update ROADMAP + PROJECT for v1.9.7 patch release
...
acdl-ci / Lint (push) Successful in 8s
acdl-ci / Test (push) Successful in 28s
acdl-ci / Platform check-only (offline) (push) Successful in 9s
---ci---
phase: 50
milestone: v1.9
status: complete
requirements:
covered: []
partial: []
---/ci---
2026-07-23 15:59:20 +00:00
Jon Chery
1eeee323c0
docs(P49): update ROADMAP + PROJECT for v1.9.6 patch release
...
acdl-ci / Lint (push) Successful in 7s
acdl-ci / Test (push) Successful in 27s
acdl-ci / Platform check-only (offline) (push) Successful in 9s
---ci---
phase: 49
milestone: v1.9
status: complete
requirements:
covered: []
partial: []
---/ci---
2026-07-23 15:44:36 +00:00
Jon Chery
0f250d2bbd
docs(P48): update ROADMAP + PROJECT for v1.9.5 patch release
...
acdl-ci / Lint (push) Successful in 6s
acdl-ci / Test (push) Successful in 24s
acdl-ci / Platform check-only (offline) (push) Successful in 8s
---ci---
phase: 48
milestone: v1.9
status: complete
requirements:
covered: []
partial: []
---/ci---
2026-07-23 14:59:19 +00:00
Jon Chery
7585c828f0
docs(P48): vision gaps + badge system + substrate→engine + CR format + agentic tags
...
acdl-ci / Lint (push) Successful in 7s
acdl-ci / Test (push) Successful in 23s
acdl-ci / Platform check-only (offline) (push) Successful in 8s
9 requirements implemented across presentation decks and project docs:
1. DX closing slide: added 'Infrastructure as a utility, not a craft' bullet
to convey the full vision (infrastructure consumed, not maintained;
platform compounds value over time).
2. PW Problem slide: 'moving a merged change' → 'promoting a change'.
3. PW Problem slide: added 'Red tape' and 'Scalability without increasing
headcount' bullets (4 frictions, not 2).
4. PW Roadmap slide: redesigned with side-by-side HTML table layout
(Testing | Planned), 16px font, no overflow.
5. PW deck: added new slide 'What This Platform Is — and Isn't' after North
Star (sovereign boundary, infrastructure as utility, 4 anti-goals).
PW deck now 16 slides (was 15).
6. Maturity nomenclature: 'Available today'/'shipped' → 'Testing' across
both decks + source markdown. New .testing badge (blue/teal #DBEAFE).
Roadmap title: 'Testing vs. Planned'. The platform has 0 consumer
adoption — 'shipped' was inaccurate.
7. Global: 'substrate' → 'engine' across entire project (88 matches, 30+
files including .ciagent/, docs/, modules/, adapters/, schemas/, code).
8. Presentation files only: 'forge' → 'VCS' / 'version control system'
(6 occurrences in 4 files). 'forge' retained in all technical docs and
code as the industry-standard term.
9. New .agentic badge (purple/violet #EDE9FE) appended to agentic features
in both decks: confidence signal, autonomous dev, pattern recognition,
dynamic module creation, citizen developer surface, auto-promotion.
Also: Change Request ID format changed from 'CR-2026-001' to 'CHG0678912'
across presentation files, consumer guide, and test fixtures.
HTML re-rendered. PPTX rendered for release upload.
---ci---
phase: 48
milestone: v1.9
status: complete
requirements:
covered: []
partial: []
---/ci---
2026-07-23 14:58:29 +00:00
Jon Chery
fc070ccb15
docs(P47): remove HIPAA from ciagent tracking files
...
acdl-ci / Lint (push) Successful in 7s
acdl-ci / Test (push) Successful in 25s
acdl-ci / Platform check-only (offline) (push) Successful in 8s
---ci---
phase: 47
milestone: v1.9
status: complete
requirements:
covered: []
partial: []
---/ci---
2026-07-23 14:10:16 +00:00
Jon Chery
be6dc7cff6
docs(P47): update ROADMAP + PROJECT for v1.9.4 patch release
...
acdl-ci / Lint (push) Successful in 7s
acdl-ci / Test (push) Successful in 26s
acdl-ci / Platform check-only (offline) (push) Successful in 9s
---ci---
phase: 47
milestone: v1.9
status: complete
requirements:
covered: []
partial: []
---/ci---
2026-07-23 14:09:31 +00:00
Jon Chery
5079d07e64
docs(P46): update ROADMAP + PROJECT for v1.9.3 patch release
...
acdl-ci / Lint (push) Successful in 7s
acdl-ci / Test (push) Successful in 26s
acdl-ci / Platform check-only (offline) (push) Successful in 9s
---ci---
phase: 46
milestone: v1.9
status: complete
requirements:
covered: []
partial: []
---/ci---
2026-07-23 13:44:51 +00:00
Jon Chery
2cd9ae150d
docs(P45): update ROADMAP + PROJECT for v1.9.2 patch release
...
acdl-ci / Lint (push) Successful in 7s
acdl-ci / Test (push) Successful in 26s
acdl-ci / Platform check-only (offline) (push) Successful in 9s
---ci---
phase: 45
milestone: v1.9
status: complete
requirements:
covered: []
partial: []
---/ci---
2026-07-23 13:28:54 +00:00
Jon Chery
b0a2728f59
docs(P44): update ROADMAP + PROJECT for v1.9.1 patch release
...
acdl-ci / Lint (push) Successful in 7s
acdl-ci / Test (push) Successful in 26s
acdl-ci / Platform check-only (offline) (push) Successful in 8s
---ci---
phase: 44
milestone: v1.9
status: complete
requirements:
covered: []
partial: []
---/ci---
2026-07-23 12:51:59 +00:00
Jon Chery
7cccf989b1
audit(v1.9): PASS — ARCHITECTURE.md v1.9 addendum + audit report
...
acdl-ci / Lint (push) Successful in 7s
acdl-ci / Test (push) Successful in 26s
acdl-ci / Platform check-only (offline) (push) Successful in 8s
---ci---
phase: 43
milestone: v1.9
status: complete
---/ci---
Audit of the shipped v1.9 milestone:
Reconstruction: PASS — 16 v1.9 commits, all with ---ci--- blocks;
state reconstructs to milestone v1.9, phase 43, status complete.
Decisions D-080..D-089 all present in git log + .ciagent/ files.
File discipline: PASS — config.json, PROJECT.md, ROADMAP.md,
REQUIREMENTS.md, REVIEW.md, PERSONAS.md, VERIFY.md all consistent.
Fixed: ARCHITECTURE.md had no v1.9 coverage — added a v1.9 addendum
covering all 9 new code components (contract_resolver interpolation,
environment_check.load, hitl_gates, attestation_matrix,
separation_of_duties.route_halt_artifact, WizClient, kyverno_adapter,
per-env promotion, adapter parameterization) + the deferred D-083 items.
Branch hygiene: PASS — only main (local + remote); all 5 v1.9 phase
branches merged + pruned.
Commit discipline: PASS — 16/16 commits with ---ci--- blocks; no stale
implementation decisions; no unresolved v1.9 escalations.
Audit result: PASS.
2026-07-23 12:04:08 +00:00
Jon Chery
6e41f09c6e
verify(P43): code review — 1 P0 auto-fixed, 1 P1 auto-fixed, 3 P1 flagged
...
acdl-ci / Lint (push) Successful in 6s
acdl-ci / Test (push) Successful in 26s
acdl-ci / Platform check-only (offline) (push) Successful in 9s
---ci---
phase: 43
milestone: v1.9
status: verify
lessons:
- P0 fix: run_platform.sh HITL gate passed approver via string interpolation into Python (GITHUB_ACTOR injection vector) — fixed by passing env vars (ACDL_HITL_*) read via os.environ
- P1 fix: attestation_matrix._is_fresh accepted future-dated artifacts (negative age bypassed freshness) — fixed with negative-age guard + test
- P1 flagged: WizClient._post does not check GraphQL errors (silent empty-list mask)
- P1 flagged: WizClient._post no SSRF validation on WIZ_API_URL
- P1 flagged: contract_resolver._load_env duplicates environment_check.load (can drift)
---/ci---
Multi-persona review of the v1.9 diff (v1.8.0..HEAD). Review pass 2
(post-complete) caught issues the initial self-review missed:
P0-INJECT (auto-fixed): scripts/run_platform.sh Step 7b interpolated
$APPROVER (GITHUB_ACTOR/GITEA_ACTOR) directly into a Python string
literal — an attacker-controllable username containing shell/python
metacharacters would execute arbitrary Python. Fixed: approver, contract
id, and env are now passed as environment variables to the subprocess
and read via os.environ[...] (no string interpolation).
P1-FRESHNESS (auto-fixed): core/attestation_matrix.py _is_fresh
accepted future-dated artifacts (negative age.days <= window_days).
Fixed: added age.total_seconds() < 0 guard rejecting future timestamps.
Test added: test_freshness_rejects_future_dated_artifact.
3 P1 flagged for post-hoc:
- WizClient._post does not surface GraphQL errors (silent empty mask)
- WizClient._post no SSRF validation on WIZ_API_URL (operator-supplied, low risk)
- contract_resolver._load_env duplicates environment_check.load (drift risk)
REVIEW.md updated with the findings. 494 tests pass; run_ci.sh + run_platform.sh --check-only green.
2026-07-23 11:54:58 +00:00
Jon Chery
5365bb4e0a
docs(milestone): complete v1.9 — verify + review + audit + tag v1.9.0
...
---ci---
project: acdl
phase: 0
milestone: v1.9
status: complete
requirements:
covered: [REQ-100, REQ-101, REQ-102, REQ-103, REQ-104, REQ-105, REQ-106, REQ-107, REQ-108, REQ-109, REQ-110, REQ-111]
partial: []
---/ci---
v1.9 milestone COMPLETE. All 12 requirements satisfied.
Verify: 4 layers PASS (structural 26/26 files, behavioral 493 tests +
run_ci.sh + run_platform.sh --check-only green, security, quality).
Review: 0 P0, 0 P1 (READY TO SHIP). REVIEW.md reconstructed (D-086).
Audit: PASS (reconstruction, file discipline, branch hygiene, commit
discipline — 12/12 commits with ---ci--- blocks).
Updated:
- .ciagent/REQUIREMENTS.md: v1.9 section marked complete; traceability
table REQ-100..111 added.
- .ciagent/ROADMAP.md: v1.9 marked complete; Phase 43 added.
- .ciagent/PROJECT.md: v1.9 objective marked complete.
- .ciagent/config.json: milestone v1.9 status -> complete.
- .ciagent/REVIEW.md: reconstructed with v1.9 content (D-086).
- .ciagent/VERIFY.md: v1.9 4-layer verify.
- .ciagent/AUDIT.md: v1.9 audit (PASS).
- uses:/ref: bumped @v1.6 -> @v1.9 in contracts/, deploy workflows,
docs/consumer-guide.md (D-071 successor).
Tag v1.9.0 created next; floating v1.9 + v1 tags updated.
2026-07-23 04:46:04 +00:00
Jon Chery
e74a8c2f5d
feat(P42): stub implementation — SoD, HITL gates, attestation matrix, Wiz, Kyverno
...
---ci---
project: acdl
phase: 42
milestone: v1.9
status: execute
---/ci---
Phase 42 — stub-implementation (REQ-107..111, D-084):
route_halt_artifact (REQ-107):
- core/separation_of_duties.py: real SNS publish (ACDL_SOD_HALT_TOPIC_ARN)
+ outbox fallback (SEPARATION_OF_DUTIES_VIOLATION event via
outbox_writer) + stderr emission. No silent print-only stub.
- terraform/platform/main.tf: aws_sns_topic.acdl-sod-halt + output.
HITL attestation gates (REQ-108):
- core/hitl_gates.py: attest(contract_id, env, approver, evidence,
outbox_client) records approver_qa/approver_prod/approver_dr to
outbox, runs SoD check on prod, invokes attestation matrix, returns
(ok, reason). Dev skips (autonomous). approver_from_env() reads
GITHUB_ACTOR/GITEA_ACTOR.
- scripts/run_platform.sh: Step 7b HITL gate before apply for qa/prod/dr.
8-concern attestation matrix (REQ-109, D-084):
- core/attestation_matrix.py: check(env, evidence) runs the 8 concerns
from hitl_matrix_design.md §10.4. Offline-testable (contract_nfrs,
schema_validity, policy_pass) run for real. Operator-supplied accept
signed artifacts validated for freshness (FRESHNESS_DAYS table) +
schema. Signature skip when ACDL_ATTESTATION_SIGNING_KEY_ID unset
(D-089). Fail loud if missing/expired for prod/dr.
Wiz real client (REQ-110):
- adapters/wiz/wiz_adapter.py: WizClient (GraphQL API, Bearer auth,
pagination via pageInfo.hasNextPage + endCursor). fetch_and_adapt
translates issues → PolicyCheckResult; graceful degrade when
WIZ_API_TOKEN/WIZ_API_URL unset.
Kyverno fleshed out (REQ-111):
- adapters/kyverno/kyverno_adapter.py: full PolicyReport →
PolicyCheckResult mapping (pass/fail/skip/warn + severity + skip-with-
reason + resource ref construction from kind/name/namespace).
adapt_inactive() emits KYVERNO_INACTIVE_TF_STACK guard. --kube-version
stub parsed for future GitOps.
Tests: +47 (test_route_halt_artifact.py, test_hitl_gates.py,
test_attestation_matrix.py, test_wiz_adapter_real_client.py, expanded
test_kyverno_adapter.py). Existing wiz_adapter tests updated for the
real client's control.name ruleId. 493 passed; run_ci.sh green;
run_platform.sh --check-only green.
2026-07-23 04:40:44 +00:00
Jon Chery
cd637808f5
feat(P41): per-environment CI jobs + environment workflow input
...
---ci---
project: acdl
phase: 41
milestone: v1.9
status: execute
---/ci---
Phase 41 — per-environment-ci-jobs (REQ-105, REQ-106, D-082):
Per-env contracts (REQ-105):
- contracts/static-assets.{dev,qa,prod,dr}.yaml + microservice.{dev,qa,prod,dr}.yaml
(8 files, each sets environment: to its own name, uses interpolation).
- Default contracts/static-assets.yaml + microservice.yaml preserved (backwards compat).
Deploy workflow environment input (REQ-106):
- .github/workflows/deploy.yml + .gitea/workflows/deploy.yml (byte-identical):
new 'environment' workflow_call input (default empty, override).
- scripts/run_platform.sh: --environment <name> flag; exports
ACDL_ENVIRONMENT_OVERRIDE; re-runs env check against the override.
- core/contract_resolver.py: resolve(environment_override=...) (D-088);
CLI honors --environment flag + ACDL_ENVIRONMENT_OVERRIDE env var.
Consumer guide (REQ-106):
- docs/consumer-guide.md: 'Per-environment deployment' section with 4
caller-workflow examples (dev/qa/prod/dr), HITL gate structure
(approve_qa/approve_prod/approve_dr, D-042), interpolation reference table.
- Documents promotion-without-editing + hybrid model (per-env contracts
OR single contract + env input).
Tests: +40 (test_per_env_contracts.py, test_deploy_workflow_env_input.py,
test_consumer_guide_per_env_section.py). 446 passed; run_ci.sh green;
deploy workflows byte-identical.
2026-07-23 04:34:10 +00:00
Jon Chery
bee9d02f01
feat(P40): contract interpolation + environment JSON schema
...
---ci---
project: acdl
phase: 40
milestone: v1.9
status: execute
---/ci---
Phase 40 — contract-interpolation (REQ-103, REQ-104, D-081):
Interpolation:
- core/contract_resolver.py: _expand_vars(value, context) recursively
expands ${env.<field>} + ${contract.<field>} tokens (dotted paths
supported, e.g. ${env.state_backend.bucket}). Unknown tokens raise
ValueError (fail loud). Expansion is post-schema-validation,
pre-IR-resolution.
- resolve() accepts environment_override (D-088) — overrides the
contract's environment field BEFORE schema validation so interpolation
context is consistent.
- env context loaded via _load_env (self-contained, works as script +
package import); 'environment' alias for env 'name' so
${env.environment} resolves.
Environment schema + bindings:
- schemas/environment.schema.json (draft 2020-12): name, account_id,
region, state_backend, network, runner_role_arn, autonomy, confidence_threshold.
- core/environments/qa.json, prod.json, dr.json placeholder bindings
(attested, thresholds 0.75/0.90/0.95, placeholder account_id with
stderr warning at load).
- core/environment_check.py: load(env_name) helper + placeholder warning.
Sample contracts:
- contracts/static-assets.yaml + microservice.yaml use
acdl-${env.environment}-${contract.module}-${env.account_id}-${env.region}
naming pattern (region + account id + environment).
Tests: +35 (test_environment_schema.py, test_interpolation.py,
test_sample_contracts_interpolate.py). 406 passed; run_ci.sh green;
run_platform.sh --check-only green. Existing fixture-based tests
preserved (instance.json static fixtures unaffected).
2026-07-23 04:30:30 +00:00
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
Jon Chery
58100c485e
docs(P00): create 5 phase plans for v1.9 (phases 39-43)
...
---ci---
project: acdl
phase: 0
milestone: v1.9
status: plan
---/ci---
5 vertical-slice phases, wave-ordered:
- Wave 1 (parallel): Phase 39 (design docs + P1-1, disjoint file sets)
- Wave 2: Phase 40 (contract interpolation + env schema)
- Wave 3: Phase 41 (per-env CI jobs + env workflow input)
- Wave 4: Phase 42 (stubs: SoD, HITL gates, attestation matrix, Wiz, Kyverno)
- Wave 5: Phase 43 (verify + review + audit + complete)
Plans reference REQ-100..REQ-111. Decisions D-080..D-089 applied.
Versioning: feature milestone, patches v1.8.1..v1.8.5, tag v1.9.0 at COMPLETE.
2026-07-23 04:19:17 +00:00
Jon Chery
2bea048bb6
docs(P00): research v1.9 — interpolation, per-env jobs, Wiz, attestation matrix
...
---ci---
project: acdl
phase: 0
milestone: v1.9
status: research
---/ci---
RESEARCH.md v1.9 addendum:
- RA-1: interpolation prior art + ${env.<field>} syntax choice (D-081)
- RA-2: GitHub/Gitea Actions workflow_call environment input + per-env jobs (D-082)
- RA-3: Wiz GraphQL API shape + PolicyCheckResult mapping (REQ-110)
- RA-4: attestation matrix freshness validation + signed artifacts (D-084)
- RA-5: design doc drift audit (hitl_matrix + audit_ledger)
- RA-6: P1-1 adapter hardcoded defaults audit (D-085)
New decisions surfaced: D-087 (recursive expansion), D-088 (env override
pre-validation), D-089 (signature skip when signing key unset).
PERSONAS.md updated for v1.9: milestone field, lambda-engineer
reactivated (SNS topic), phase-specific overrides for phases 39-43,
domain priority updated.
2026-07-23 04:17:41 +00:00
Jon Chery
c05ed7a26f
docs(P00): clarify v1.9 — record decisions D-080..D-086
...
---ci---
project: acdl
phase: 0
milestone: v1.9
status: clarify
---/ci---
Full autonomy: all clarifications resolved interactively pre-run + 2
auto-resolved parameters. Decisions recorded (renumbered D-080+ to
avoid collision with v1.8 research decisions D-073..D-077):
- D-080: new milestone v1.9 (feature), ship tag v1.9.0
- D-081: ${env.<field>} + ${contract.<field>} interpolation syntax
- D-082: hybrid per-env promotion (per-env contracts + env workflow input)
- D-083: audit ledger Object Lock/JWS/worker/DLQ deferred (future milestone)
- D-084: attestation matrix offline-testable subset + signed evidence artifacts
- D-085: P1-1 adapter defaults move to L1 interface.json inputs
- D-086: REVIEW.md reconstructed at v1.9 complete; v1.3-v1.8 noted as not-persisted
Auto-resolved: per-env account_id placeholder + stderr warning; SNS topic
defined in Terraform + code reads ACDL_SOD_HALT_TOPIC_ARN.
2026-07-23 04:16:42 +00:00
Jon Chery
136ec6abf3
docs(init): validate v1.9 specification
...
---ci---
project: acdl
phase: 0
milestone: v1.9
status: specify
---/ci---
v1.9 scope (user-directed, 2026-07-23):
- Design doc refresh (hitl_matrix_design.md + audit_ledger_design.md)
- Contract interpolation (${env.<field>} + ${contract.<field>})
- Per-environment CI jobs (no environment field editing for promotion)
- Stub implementation (SoD, HITL gates, attestation matrix, Wiz, Kyverno)
- P1-1 adapter parameterization remediation
Requirements REQ-100..REQ-111 added to REQUIREMENTS.md.
PROJECT.md v1.9 objective + phase table (39-43) appended.
config.json milestone bumped to v1.9 (active).
2026-07-23 04:15:41 +00:00
Jon Chery
2f0e69272a
audit(v1.8): PASS — audit report committed
...
acdl-ci / Lint (push) Successful in 7s
acdl-ci / Test (push) Successful in 26s
acdl-ci / Platform check-only (offline) (push) Successful in 9s
---ci---
project: acdl
phase: 0
milestone: v1.8
status: complete
---/ci---
Audit report: PASS. All checks passed:
- Reconstruction: 17/17 commits with ---ci--- blocks, state matches config
- File discipline: 10 .ciagent/ files valid, 0 issues
- Branch hygiene: stale branches cleaned, only main remains
- Commit discipline: 17/17 with ---ci--- blocks, 0 stale decisions
Issues fixed during audit:
- ARCHITECTURE.md: added v1.8 addendum
- Stale branches: deleted phase/21 + milestone/v1.0-initial
2026-07-22 22:43:07 +00:00
Jon Chery
2861319447
audit(v1.8): ARCHITECTURE.md v1.8 addendum + stale branch cleanup
...
acdl-ci / Lint (push) Successful in 7s
acdl-ci / Test (push) Successful in 26s
acdl-ci / Platform check-only (offline) (push) Successful in 9s
---ci---
project: acdl
phase: 0
milestone: v1.8
status: complete
---/ci---
Audit fixes:
- ARCHITECTURE.md: added v1.8 addendum covering new primitives (kms-key,
uptime), encryption-by-default, deletion-protection-by-default,
decommission alias, adapter expansion (19 TYPE_MAP entries), pipeline
stages (9), forge-agnostic API URLs.
- Stale branches cleaned: phase/21-docs-restructure (v1.6) and
milestone/v1.0-initial (v1.0) deleted. Pruned remote refs.
- Only main + origin/main remain.
Audit result: PASS
2026-07-22 22:42:46 +00:00
Jon Chery
f9a93d56cc
docs(milestone): ship v1.8.0 — fix REQUIREMENTS.md header
...
acdl-ci / Lint (push) Successful in 8s
acdl-ci / Test (push) Successful in 26s
acdl-ci / Platform check-only (offline) (push) Successful in 9s
---ci---
project: acdl
phase: 0
milestone: v1.8
status: complete
---/ci---
Ship finalization: REQUIREMENTS.md v1.8 section header corrected
from Active to Complete. All other .ciagent/ files already updated.
2026-07-22 22:36:54 +00:00
Jon Chery
c99da9a58c
docs(milestone): complete v1.8 — P1 remediation + uptime + standards + encryption + decommission + docs
...
---ci---
project: acdl
phase: 0
milestone: v1.8
status: complete
requirements:
covered: [REQ-76, REQ-77, REQ-78, REQ-79, REQ-80, REQ-81, REQ-82, REQ-83, REQ-84, REQ-85, REQ-86, REQ-87, REQ-88, REQ-89, REQ-90, REQ-91, REQ-92, REQ-93, REQ-94, REQ-95, REQ-96, REQ-97, REQ-98, REQ-99]
partial: []
---/ci---
v1.8 milestone complete. 11 phases (28-38), 24 requirements (REQ-76..99).
Track 1 — P1 Remediation (8 issues, all resolved):
- P1-3: SSM fail-loud without CMK + escape hatch
- P1-4: WAF custom rules emit nested HCL blocks
- P1-5: WAF default_action input honored
- P1-6: Terraform-rendered invoke policy (no placeholder account ID)
- P1-7: L2 composition outputs resolved + adapter output blocks
- P1-8: Per-run temp dir (terraform/spike removed)
- P1-9: Forge-agnostic API URLs (GITHUB_API_BASE)
- S1: Static-key override wired to configure-aws-credentials inputs
Track 2 — Encryption + Deletion Protection by Default:
- Per-stack CMK (kms-key primitive, 90-day rotation, no shared keys)
- All 12 primitives have encryption_enabled NFR + kms_key_arn input
- L2 modules wire per-stack CMK to all children
- All 12 primitives have deletion_protection NFR (default true)
- Adapter emits lifecycle { prevent_destroy = true }
- L2 feature flag propagation (inputs.deletion_protection)
Track 3 — Uptime + Standards + Docs:
- uptime-kuma primitive (ECS Fargate, feature flag, alert channels)
- deploy-uptime pipeline stage (separate state)
- Decommission mode (2-step HITL SRE gates + CMDB validation)
- modules/STANDARDS.md (L1+L2 authoring + review standards)
- schemas/README.md, pipelines/README.md, adapters/README.md
Tests: 275 -> 350 (+75 new). All pass. run_ci.sh + check-only green.
Zero pending P1 issues remaining.
2026-07-22 22:24:15 +00:00
Jon Chery
da60f0e82f
verify(P28-36): 4-layer verification — 350 tests, all pass
...
---ci---
project: acdl
phase: 28-36
milestone: v1.8
status: verify
---/ci---
Structural: 14 new files present, terraform/spike removed, 14 registry entries. PASS.
Behavioral: 350 tests pass (275 -> 350, +75 new). run_ci.sh + check-only green. PASS.
Security: no placeholder account IDs, no hardcoded API URLs, byte-identical
workflows, SSM fail-loud, deletion protection + encryption by default. PASS.
Quality: each P1 fix + each new feature has dedicated tests. PASS.
VERIFY PASS.
2026-07-22 22:23:24 +00:00
Jon Chery
045c7279aa
docs(P28-38): create 11 phase plans for v1.8
...
---ci---
project: acdl
phase: 28-38
milestone: v1.8
status: plan
---/ci---
11 phase plans created covering 24 requirements (REQ-76..99):
P28: adapter WAF + resolver outputs (P1-4,5,7)
P29: SSM KMS + invoke policy (P1-3,6)
P30: run-platform isolation + API portability + S1 (P1-8,9,S1)
P31: encryption-by-default + per-stack CMK
P32: deletion-protection-by-default + L2 feature flag
P33: uptime-kuma primitive + pipeline stage
P34: decommission alias + CMDB validation
P35: module engineering standards
P36: schemas/adapters/pipelines READMEs
P37: verify (4-layer)
P38: review-audit-complete
2026-07-22 22:02:09 +00:00
Jon Chery
7f1eff622d
docs(P22-38): research findings + 6 phase plans
...
---ci---
project: acdl
phase: 22-38
milestone: v1.8
status: research
---/ci---
v1.8 research: 6 targets investigated + 5 decisions surfaced (D-073..D-077).
TARGET 1: uptime-kuma on ECS Fargate (image louislam/uptime-kuma:1,
port 3001, EFS volume, ALB, monitor seeding via post-deploy API script).
TARGET 2: Terraform prevent_destroy lifecycle (2-step decommission pattern).
TARGET 3: AWS KMS rotation (enable_key_rotation=true, annual AWS-managed;
90-day is roadmap item D-075).
TARGET 4: Forge-agnostic API URLs (GITHUB_API_BASE + _forge_type helper).
TARGET 5: DynamoDB as CMDB (acdl-change-requests table + validate_change_request).
TARGET 6: Module engineering standards scan (codified patterns from 12 modules).
PERSONAS.md updated for v1.8: lambda-engineer reactivated (D-068 CMDB +
D-065 API portability). 11 phase-specific overrides added.
2026-07-22 22:01:13 +00:00
Jon Chery
60f2b669ea
docs(P0): clarify v1.8 — 12 decisions resolved
...
---ci---
project: acdl
phase: 0
milestone: v1.8
status: clarify
---/ci---
12 decisions resolved (D-061..D-072) at full autonomy:
- D-061: Fold all 3 new requirements into v1.8 (feature milestone)
- D-062: P1-3 SSM fail loud + escape hatch
- D-063: P1-6 Terraform-rendered invoke policy
- D-064: P1-8 Remove committed spike .tf files
- D-065: S1 Single conditional AWS credentials step
- D-066: Uptime on ECS Fargate
- D-067: Uptime as deploy-uptime pipeline stage, separate state
- D-068: CMDB = DynamoDB acdl-change-requests table
- D-069: Per-stack CMK (one key per L2 deployment)
- D-070: Decommission as mode on existing deploy pipeline, HITL SRE gates
- D-071: uses: ref bump @v1.6 -> @v1.8 at COMPLETE
- D-072: Managed KMS fallback for standalone L1s with warning
2026-07-22 21:59:45 +00:00
Jon Chery
bab2cf363b
docs(init): validate v1.8 specification
...
---ci---
project: acdl
phase: 0
milestone: v1.8
status: specify
---/ci---
v1.8 specification validated. 11 phases (28-38), 24 new requirements
(REQ-76..99). Three tracks: P1 remediation (P1-3..P1-9 + S1), encryption
+ deletion protection by default + decommission alias, uptime monitoring
+ engineering standards + path documentation. Feature milestone, ship
tag v1.8.0.
2026-07-22 21:59:29 +00:00
Jon Chery
0bee8f9bc2
docs(milestone): complete v1.7 — production platform + contract ingestion
...
---ci---
project: acdl
phase: 0
milestone: v1.7
status: complete
requirements:
covered: [REQ-62, REQ-63, REQ-64, REQ-65, REQ-66, REQ-67, REQ-68, REQ-69, REQ-70, REQ-71, REQ-72, REQ-73, REQ-74, REQ-75]
partial: []
---/ci---
v1.7 milestone COMPLETE. 6 phases (22-27), 14 requirements (REQ-62..REQ-75),
all shipped + verified. 272 tests pass. CI pipeline green.
Phase summary:
P22: rename static-asset -> static-assets (D-048) + cloudfront/waf
primitives + production stack (D-049) + @v1.6 bump (D-057).
P23: tagging standard (D-054, D-043 closure) + Wiz adapter (D-052) +
Kyverno adapter (D-053).
P24: platform Lambda + DynamoDB acdl-contracts (D-051) + cross-account IAM.
P25: deploy outputs SSM+PR comment (D-050) + error reporting via Lambda
(D-055) + stage comments.
P26: 3 platform pipelines (platform-test, primitives-plan, patterns-plan) +
release job (D-057) + multi-resource L1 ref fix.
P27: remove consumer-repos + validated per-module examples (D-058) +
RDS primitive (D-059).
Ship tag: v1.7.0 (feature milestone, next minor per ship.md;
v1.6 shipped v1.6.0).
2026-07-22 20:28:18 +00:00
Jon Chery
49462d5e38
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---
2026-07-22 20:20:12 +00:00
Jon Chery
dca35c78ec
feat(P22): rename static-asset→static-assets + cloudfront/waf primitives + production stack + @v1.6 bump
...
---ci---
phase: 22
title: rename-and-production-static-assets-stack
status: complete
verification:
- scripts/run_ci.sh: PASS (CI PIPELINE OK)
- python3 -m pytest tests/ -v: 175 passed
- scripts/run_platform.sh --check-only: PASS (PLATFORM CHECK OK)
- grep -R "static-asset[^s]" . (excl .git/): 0 hits
- grep -R "static-asset$" . (excl .git/): 0 hits
- floating git tags v1.6 + v1 point at v1.6.0 (a90a756 )
changed_files:
- Task 1 (rename): contracts/static-asset.yaml→static-assets.yaml (git mv); modules/l2/static-asset→static-assets (git mv); sed replaceAll static-asset→static-assets in 22 files (README, docs, scripts/run_platform.sh, pipelines/deploy.yaml, modules/registry.json, tests/*, .ciagent/* historical narrative)
- Task 2 (cloudfront primitive): modules/l1/cloudfront/interface.json + README.md
- Task 3 (waf primitive): modules/l1/waf/interface.json + README.md
- Task 4 (registry): modules/registry.json (+cloudfront, +waf, static-assets renamed)
- Task 5 (augment static-assets): modules/l2/static-assets/composition.json (s3+cloudfront+waf, depth 1); modules/l1/s3/interface.json +instance.json (+bucket_regional_domain_name output); modules/l2/static-assets/README.md (production stack docs)
- Task 6 (adapter): adapters/terraform/adapter.py (+TYPE_MAP/INPUT_MAP/OUTPUT_MAP for cloudfront distribution+OAC+wafv2 webacl; special handling in _emit_resource for OAC defaults, distribution origin/cache_behavior/restrictions/viewer_certificate/web_acl_id, waf scope/default_action/visibility_config/managed rules)
- Task 7 (contract schema): no change needed (generic inputs object; new module names match ^[a-z][a-z0-9-]*$)
- Task 8 (@v1.6 bump): contracts/static-assets.yaml, .gitea/.github/workflows/deploy.yml (ref: v1.6 + header comments), docs/consumer-guide.md, docs/contracts/index.md, docs/pipeline/versioning.md, docs/pipeline/index.md, docs/architecture.md, README.md, modules/l2/microservice/README.md, tests/test_environment_check.py, tests/test_pipeline_contract.py
- Task 9 (floating tags): git tag -f v1.6 v1.6.0; git tag -f v1 v1.6.0
- Task 10 (tests): tests/test_adapter.py (registry 11 entries/9 L1/2 L2; cloudfront+waf type map tests; TestS3Output bucket_regional_domain_name; TestStaticAssetsStack 4 tests); tests/test_contract_resolver.py (+s3/cloudfront/waf resource assertions)
generated:
- terraform/spike/main.tf + terraform.tf (regenerated by run_platform.sh --check-only; reflect static-assets production stack + backend key spike/static-assets/)
notes:
- D-048 full rewrite of .ciagent/ historical narrative (verbatim phase descriptions, REQ-25/27/50, D-036) — produces intentional tautologies (e.g. "Rename static-assets → static-assets") per the decision to override the v1.6 preservation precedent.
- cloudfront interface.json resources array ordered distribution-first so the resolver (first-match wire resolution) routes bucket_regional_domain_name/waf_web_acl_arn/region to the distribution; the OAC gets adapter-provided defaults (name=acdl-oac, origin_type=s3, signing_behavior=always).
- .ciagent/ @v1.4 references left as historical record (D-048 scope was static-asset rename only; @v1.4 is historical narrative of Phase 20).
- s3 OUTPUT_MAP bucket_regional_domain_name not added (identity fallback in adapt() already handles it; OUTPUT_MAP documents non-identity mappings only).
---ci---
2026-07-22 19:56:52 +00:00
Jon Chery
fee59944fd
docs(init): validate v1.7 specification
...
---ci---
project: acdl
phase: 0
milestone: v1.7
status: specify
---/ci---
v1.7 milestone: production platform + contract ingestion + pipeline
maturation. 12 user-directed scope axes (2026-07-22):
1. rename static-asset -> static-assets (D-048)
2. production-ready static-assets stack (cloudfront + waf, D-049)
3. DX-friendly deploy outputs (SSM + PR comment, D-050)
4. central pipeline error reporting via Lambda (D-055)
5. PR comments after every successful stage
6. three platform pipelines (platform-test, primitives-plan, patterns-plan)
7. release job with semver + MAJOR.MINOR/MAJOR tag updates (D-057)
8. platform Lambda + DynamoDB contract ingestion (D-051)
9. tagging standards (Checkov custom rule, D-054, D-043 closure)
10. Wiz adapter (D-052)
11. Kyverno adapter (D-053)
12. remove consumer-repos + validated per-module examples (D-058) + RDS
primitive (D-059)
6 phases (22-27), 14 requirements (REQ-62..REQ-75).
Ship tag: v1.7.0 (feature milestone, next minor; v1.6 shipped v1.6.0).
2026-07-22 19:47:08 +00:00