PLAN stage. P59 authors the modules-lifecycle pipeline that matrix-tests
every L1 module's examples/{simple,complex}.yml contracts through
apply→modify→destroy against live AWS. No per-module Python.
5 tasks: declarative contract, byte-identical Gitea+GitHub workflows,
schema, tests, README update.
---ci---
project: acdl
phase: P59
milestone: v1.11
status: plan
---/ci---
PLAN stage. P58 fixes the 4-VPC bug: adds a single shared VPC to
terraform/platform, drops the vpc child from the microservice composition
(references the platform VPC via data source), and makes state keys
env-aware (spike/{id}/{env}/terraform.tfstate — stable across lifecycle).
5 tasks: platform VPC, composition update, resolver environment passthrough,
adapter state key + data block emission, tests + regression.
---ci---
project: acdl
phase: P58
milestone: v1.11
status: plan
---/ci---
RESEARCH stage. Verified the technical assumptions behind the 13-phase
v1.11 restart plan against the live codebase (branched off v1.10.2).
Findings:
- Adapter monolith audit: adapters/terraform/adapter.py is 918 lines
with 3 constant tables (TYPE_MAP/INPUT_MAP/OUTPUT_MAP) that duplicate
what interface.json already declares, plus 39 type-specific branches
across 18 stack types carrying nested HCL blocks + hardcoded defaults
(CIDR, assume_role_policy JSON, ECR/logs inline policy, Fargate
requires_compatibilities, assign_public_ip, listener/target ports,
security group emission). STANDARDS.md §8 blessed this drift as the
intended design — the standards doc itself must be rewritten (P56a).
- State-key root cause of the 4-VPC bug: adapter.py:664,676 emits
spike/{stack_name}/terraform.tfstate where stack_name = contract.id;
all 5 microservice contracts share id 'msvc' but differ in
environment (dev/qa/prod/dr); the state key does NOT include the
environment, so all 4 env contracts collide on spike/msvc/terraform.tfstate.
Combined with verify_deploy_microservice.py running terraform init
-reconfigure in a fresh temp dir each time, each run created a fresh
VPC. Two root causes: (1) per-contract state keys with no VPC sharing,
(2) non-deterministic state keys across environments. D-105 + D-106 +
D-101 correct all three.
- Per-module terraform module design: documented the
versions/variables/locals/main/outputs.tf layout for s3, vpc, ecs-service
and how the stateless adapter assembles them via registry.json →
terraform_dir → module-instantiation blocks + ref wiring.
- Existing pipeline architecture: run_platform.sh line 287 runs terraform
plan only (never apply/destroy); the --apply/--destroy lifecycle modes
must be ADDED (P57). Byte-identical Gitea+GitHub convention documented.
PERSONAS.md updated for v1.11:
- Deactivated lambda-engineer, platform-engineer, security-engineer,
frontend-engineer (no per-module Python this milestone).
- Reactivated data-engineer (owns terraform/ + per-module terraform
subdirs — the heaviest v1.11 work).
- Kept backend-engineer (adapter/resolver), general (pipelines/workflows).
- Territory enforcement: warn (co-authoring expected on adapter +
run_platform.sh boundary).
- Domain priority: data → backend → general.
6 assumptions logged (A-1.1..A-5.1), all >= 0.6 confidence, none
escalated.
---ci---
project: acdl
phase: 0
milestone: v1.11
status: research
---/ci---
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---
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---
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---
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---
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---
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---
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---
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---