45 Commits

Author SHA1 Message Date
Jon Chery 067fef14aa ship: phase-08 aws-bootstrap (v1.1.3)
---ci---
project: acdl
phase: 8
milestone: v1.1
status: shipped
release:
  tag: v1.1.3
---/ci---

Squash merge of phase/08-aws-bootstrap. AWS substrate bootstrapped:
S3 state bucket acdl-tfstate-581513795199-us-east-1 (versioning enabled)
+ DynamoDB outbox table acdl-outbox (PAY_PER_REQUEST, PK contractId, SK
eventType#eventTs) + IAM user acdl-spike-runner with least-privilege
scoped policy (DenyEverythingElse) + per-run-rotated spike key in
gitignored .env.secrets. Real OIDC deferred to v1.2 (D-039, blocked on
go-gitea/gitea#36988). verify_phase08.sh green: caller identity is
acdl-spike-runner (not root), all resources present, .env.secrets +
.bootstrap_state.json gitignored.
v1.1.3
2026-07-21 19:02:26 +00:00
Jon Chery 96ab42fde1 docs(P08): post-ship traceability + roadmap update (v1.1.3)
---ci---
project: acdl
phase: 8
milestone: v1.1
status: shipped
requirements:
  complete: [REQ-23]
release:
  tag: v1.1.3
---/ci---

ROADMAP Phase 08 -> complete (v1.1.3). REQUIREMENTS REQ-23 -> complete.
S3 state bucket + DynamoDB outbox table + IAM user acdl-spike-runner
with least-privilege scoped policy + rotated spike key all created and
verified. D-034 closure: user must manually rotate the root key now.
2026-07-21 19:02:26 +00:00
Jon Chery d28630d1f1 phase: 8, status: plan-as-execute, persona: lead-developer, task: T-8.8
---ci---
project: acdl
phase: 8
milestone: v1.1
status: plan-as-execute
persona: lead-developer
task: T-8.8
requirements.covered: [REQ-23]
---/ci---

Wave 5: execute the bootstrap against real AWS + fix verify script.

- Created S3 bucket acdl-tfstate-581513795199-us-east-1 (versioning
  enabled) + DynamoDB table acdl-outbox (PAY_PER_REQUEST, PK contractId,
  SK eventType#eventTs) via create_state_backend.py.
- Created IAM user acdl-spike-runner + scoped inline policy
  (DenyEverythingElse) + initial key via create_iam_user.py.
- Rotated the spike key via rotate_spike_key.sh: old key deleted, new
  key in gitignored .env.secrets (chmod 600).
- verify_phase08.sh fixes: (a) heredoc python instead of -c to avoid
  bash quoting issues; (b) Check 4 uses the bootstrap root key to
  inspect IAM (the spike key is least-privilege and cannot iam:GetUser
  - that itself confirms the policy denies non-granted actions); (c)
  get_user_policy returns PolicyDocument as a dict, not a URL-encoded
  string in this boto3 version - handle both.
- VERIFIED: caller identity is acdl-spike-runner (not root), S3 + DDB +
  IAM user + Deny-everything-else policy all present, .env.secrets +
  .bootstrap_state.json gitignored.

D-034 closure: user must manually rotate the root key in the AWS IAM
console now (the bootstrap root key has served its one-shot purpose).
2026-07-21 19:01:58 +00:00
Jon Chery 1d5c4d2ae7 phase: 8, status: plan-as-execute, persona: platform-engineer+lead-developer, task: T-8.5..T-8.7
---ci---
project: acdl
phase: 8
milestone: v1.1
status: plan-as-execute
persona: platform-engineer+lead-developer
task: [T-8.5, T-8.6, T-8.7]
requirements.covered: [REQ-23]
---/ci---

Waves 3+4: rotation script + verify script + README + .gitignore.

- T-8.5 (platform): scripts/rotate_spike_key.sh - boto3 with bootstrap
  root key from env (ACDL_BOOTSTRAP_AWS_*); creates new key for
  acdl-spike-runner, deactivates+deletes old, writes new to gitignored
  .env.secrets (chmod 600); idempotent (re-run ends with exactly 1
  active key); optional Gitea secret upload if ACDL_GITEA_TOKEN set;
  does NOT rotate the root key (D-034 closure = manual user step).

- T-8.6 (lead): scripts/verify_phase08.sh - loads rotated key from
  .env.secrets, asserts caller identity is acdl-spike-runner (not root),
  S3 bucket + DynamoDB table + IAM user + scoped policy with
  DenyEverythingElse all present, .env.secrets + .bootstrap_state.json
  gitignored. Uses heredoc python to avoid bash quoting issues.

- T-8.7 (lead): terraform/bootstrap/README.md runbook (6 steps incl.
  manual D-034 root-key rotation) + .gitignore (.env.secrets +
  .bootstrap_state.json). Spike vs v1.2 boundary table.

bash -n + gitignore checks pass.
2026-07-21 19:00:08 +00:00
Jon Chery f8ddd8b182 phase: 8, status: plan-as-execute, persona: security-engineer+platform-engineer, task: T-8.1..T-8.4
---ci---
project: acdl
phase: 8
milestone: v1.1
status: plan-as-execute
persona: security-engineer+platform-engineer
task: [T-8.1, T-8.2, T-8.3, T-8.4]
requirements.covered: [REQ-23]
---/ci---

Waves 1+2: IAM policy + state backend + IAM user creation scripts.

- T-8.1 (security): terraform/bootstrap/spike_runner_policy.json —
  least-privilege IAM policy: Allow S3 r/w on the state bucket, DynamoDB
  r/w on the outbox table, sts:GetCallerIdentity; final Deny statement
  (Action *, NotResource = the above ARNs) enforcing least privilege. No
  terraform apply permission (plan-only spike).

- T-8.2/T-8.3 (platform): terraform/bootstrap/create_state_backend.py —
  boto3, idempotent: creates S3 bucket acdl-tfstate-581513795199-us-east-1
  (versioning enabled) + DynamoDB table acdl-outbox (PAY_PER_REQUEST, PK
  contractId, SK eventType#eventTs per D-P08-1 one table for both lock
  + outbox). Writes .bootstrap_state.json marker.

- T-8.4 (platform + security review): terraform/bootstrap/create_iam_user.py
  — boto3, idempotent: creates IAM user acdl-spike-runner, attaches the
  inline policy from spike_runner_policy.json, creates an initial access
  key if none active exists (prints to stdout for the orchestrator to
  capture; NEVER committed).

py_compile + policy JSON valid.
2026-07-21 18:58:29 +00:00
Jon Chery a003168b3a docs(P08): create Phase 08 plan (aws-bootstrap)
---ci---
project: acdl
phase: 8
milestone: v1.1
status: plan
plan:
  waves: 5
  tasks: 8
  requirements: [REQ-23]
---/ci---

Phase 08 plan authored by ci-planner. 5 waves:
- Wave 1 (security): T-8.1 spike_runner_policy.json (least-privilege)
- Wave 2 (platform): T-8.2/T-8.3 create_state_backend.py, T-8.4 create_iam_user.py
- Wave 3 (platform): T-8.5 rotate_spike_key.sh
- Wave 4 (lead): T-8.6 verify_phase08.sh, T-8.7 README + .gitignore
- Wave 5 (lead, EXECUTE-only): T-8.8 run bootstrap against AWS + D-034 closure

7 authored files. Key decisions: D-P08-1 (one DynamoDB table acdl-outbox
for both lock + outbox), D-P08-2 (IAM user acdl-spike-runner not OIDC
role; OIDC deferred to v1.2 per D-039), D-P08-3 (Wave 5 EXECUTE-only),
D-P08-4 (optional Gitea secret upload), D-P08-5 (initial key is
throwaway).

Security: root key via env vars only (never committed); .env.secrets
gitignored; IAM policy explicit Deny-everything-else; D-034 closure =
user manually rotates root key post-phase.
2026-07-21 18:57:31 +00:00
Jon Chery 727c87339b fix(P08 prep): rename platform/ -> acdl_platform/ (stdlib shadow fix)
---ci---
project: acdl
phase: 8
milestone: v1.1
status: plan-as-execute
persona: lead-developer
task: T-8.0
type: prerequisite-fix
---/ci---

The Phase 07 P1 ('platform/ package shadows stdlib platform module')
became a Phase 08 blocker: boto3 imports uuid -> platform.system(),
which fails when the repo's platform/ package is on sys.path[0]. Renamed
platform/ -> acdl_platform/ (the verifier's recommended v1.2 fix, pulled
forward because Phase 08 needs boto3).

- git mv platform/ acdl_platform/ (history preserved)
- verify_phase07.sh: updated paths; removed the /tmp workaround (no
  longer needed; the shadow is gone)
- verify_phase06.sh: updated the new-dirs check for the rename
- README.md: layout table updated

Both verify_phase06.sh and verify_phase07.sh still pass; confidence_signal
now imports + runs correctly from the repo root. boto3 imports clean.
2026-07-21 18:53:41 +00:00
Jon Chery 167a92f621 verify(P07): VERIFIED — architecture v1.0 finalized, 9 files, 11 decisions
---ci---
project: acdl
phase: 7
milestone: v1.1
status: verify
verdict: VERIFIED
---/ci---

Phase 07 architecture-v1-finalization verified on main (HEAD 8723206,
tag v1.1.2). All four layers PASS:

- Structural: 9 deliverable files present; architecture-v1.0.md status
  is v1.0; all 11 decision IDs + Q1.3 in the snapshot; gitea-runner
  rename (D-046) applied; §15 table lists the 6 REQ-mapped files;
  3 JSON Schemas declare Draft 2020-12 with required fields per PLAN;
  3 .py files have expected docstrings + public functions; history
  preserved (T-7.1 92d4535 is creation point); tags v1.1.0/v1.1.1/v1.1.2
  all present.
- Behavioral: scripts/verify_phase07.sh exits 0 with expected final
  line; typecheck gate (bash -n + py_compile) passes; schema
  cross-checks (qa/prod/dr/agentic negative cases, staging rejected,
  valid PCR passes) all pass; confidence_signal spot-checks (missing
  input -> block + INPUT_MISSING; critical fail -> 0.0 block +
  CRITICAL_OVERRIDE; cold-start dev -> 0.95 pass) all pass; SoD
  spot-checks (None outbox, None item, equal approvers, distinct,
  empty approver_qa) all pass; Checkov adapter spot-check (CKV_AWS_24
  -> medium fail + ACDL_TAG_NAMING skipped appended) passes.
- Security: no secrets in v1.1.1..v1.1.2 file set; no boto3 imports
  (stdlib only); platform/ shadow of stdlib platform documented +
  worked around in verify_phase07.sh (cd /tmp for jsonschema); LSP
  diagnostic on confidence_signal.py:148 confirmed false positive
  (py_compile + AST parse pass; runtime correct).
- Quality: README layout table matches reality (platform/ + schemas/
  now populated); all 7 Phase 07 commits carry ---ci--- blocks;
  ROADMAP Phase 07 = complete (v1.1.2); REQUIREMENTS REQ-16..22 =
  complete (v1.1.2); architecture-v1.0.md §15 files all exist; §13
  resolutions match PROJECT.md decisions table.

Requirements covered: REQ-16, REQ-17, REQ-18, REQ-19, REQ-20, REQ-21,
REQ-22 (all 7 Phase 07 requirements; no partials).

P1 flags (post-hoc, out of Phase 07 scope):
- P1-1: platform/ package shadows stdlib platform module; v1.2 rename
  to acdl_platform/ (or src/ layout) would remove the workaround need.
- P1-2: LSP false positive on confidence_signal.py:148 (Dict[str, Any]
  typing confuses pyright); py_compile + runtime correct; a v1.2
  TypedDict tightening would silence it.
2026-07-21 18:50:40 +00:00
Jon Chery 8723206f5a ship: phase-07 architecture-v1-finalization (v1.1.2)
---ci---
project: acdl
phase: 7
milestone: v1.1
status: shipped
release:
  tag: v1.1.2
---/ci---

Squash merge of phase/07-architecture-v1-finalization. Architecture
finalized to v1.0: all 11 open decisions resolved (PROJECT.md); 9
deliverable files authored across 5 waves:
- docs/architecture-v1.0.md (REQ-16, snapshot)
- schemas/ir.schema.json (REQ-17, Target Stack IR)
- schemas/policy_check_result.schema.json + adapters/terraform/policy/checkov_adapter.py (REQ-18)
- platform/confidence_signal.py (REQ-19, 6-input signal, co-authored backend+security)
- platform/audit_ledger_design.md (REQ-20, tiered ledger, spike scope D-041)
- platform/hitl_matrix_design.md + platform/separation_of_duties.py (REQ-21)
- schemas/contract.schema.json (REQ-22, per-env mandatory W3.E)
scripts/verify_phase07.sh green: all 9 files present + validate.
v1.1.2
2026-07-21 18:48:09 +00:00
Jon Chery 412e1ef62e phase: 7, status: plan-as-execute, persona: lead-developer, task: T-7.10
---ci---
project: acdl
phase: 7
milestone: v1.1
status: plan-as-execute
persona: lead-developer
task: T-7.10
---/ci---

Wave 5: scripts/verify_phase07.sh + traceability.

verify_phase07.sh asserts all 9 deliverable files exist, 3 JSON Schemas
validate as Draft 2020-12 (run from /tmp to avoid the repo platform/
package shadowing stdlib platform which jsonschema's uuid import needs),
3 .py files py_compile, 3 .md files non-empty, all 11 decision IDs +
OpenTofu in PROJECT.md, architecture-v1.0.md status is v1.0, D-040..D-044
present, spike contract validates against contract schema, minimal IR
validates against IR schema. All checks pass: 'VERIFIED - Phase 07:
architecture v1.0 finalized; 6 files authored + 11 decisions resolved'.

Traceability: REQUIREMENTS REQ-16..22 -> complete (v1.1.2); ROADMAP
Phase 07 -> complete (v1.1.2).
2026-07-21 18:47:58 +00:00
Jon Chery 68d90c08a7 phase: 7, status: plan-as-execute, persona: backend-engineer+security-engineer, task: T-7.9
---ci---
project: acdl
phase: 7
milestone: v1.1
status: plan-as-execute
persona: backend-engineer+security-engineer
task: T-7.9
requirements.covered: [REQ-19]
---/ci---

Wave 4 (co-authored): platform/confidence_signal.py (REQ-19).

backend-engineer: 6-input weighted sum (WEIGHTS = policy 0.30,
validation 0.25, freshness 0.10, source 0.15, history 0.10, nfrs 0.10 per
D-040; sums to 1.0), per-env thresholds (dev 0.50, qa 0.75, prod 0.90,
dr 0.95), _per_input_score rules, compute() orchestration, Signal
dataclass, dev-warn->block flip (autonomous, no reviewer).

security-engineer: PENALTY dict (critical=None hard-override sentinel,
high 0.20, medium 0.05, low 0.01, info 0.0), critical-override
short-circuit return in compute(), severity penalty loop over the
policy input's failing PolicyCheckResult records.

Verified: missing input -> block + INPUT_MISSING:<name>; critical fail
-> 0.0 block + CRITICAL_OVERRIDE:<ruleId>; cold-start spike dev (ACDL
_TAG_NAMING skipped, all validation true, nfrs neutral 0.5) -> 0.95 pass.
stdlib only.
2026-07-21 18:46:13 +00:00
Jon Chery 6ed93f0311 phase: 7, status: plan-as-execute, persona: security-engineer, task: T-7.4..T-7.8
---ci---
project: acdl
phase: 7
milestone: v1.1
status: plan-as-execute
persona: security-engineer
task: [T-7.4, T-7.5, T-7.6, T-7.7, T-7.8]
requirements.covered: [REQ-18, REQ-20, REQ-21]
---/ci---

Wave 3 (security-engineer, 5 files sequential):

- T-7.4: schemas/policy_check_result.schema.json (REQ-18 schema half) —
  canonical shape from ARCHITECTURE.md §12.6; engine enum
  [checkov,kyverno,opa]; severity enum [critical,high,medium,low,info];
  result enum [pass,fail,skipped,error]. Validates as Draft 2020-12;
  valid instance validates.

- T-7.5: adapters/terraform/policy/checkov_adapter.py (REQ-18 adapter
  half) — Checkov JSON -> PolicyCheckResult; RULE_MAP has all 11 Checkov
  rule IDs (CKV_AWS_41/45/46/20/57/24/25/1/40/7/33) mapped to the 4 L2
  checks + tag/naming; emits ACDL_TAG_NAMING SKIPPED per D-043; stdlib
  only; tolerates both Checkov JSON shapes. Synthetic fixture produces 3
  records all valid against the schema.

- T-7.6: platform/audit_ledger_design.md (REQ-20) — three tiers (S3
  Object Lock compliance 7yr, acdl-evidence hot index, DynamoDB outbox
  RPO=0); spike scope (D-041) = hash chain + outbox write; v1.2 build-out
  = Object Lock + JWS (KMS key, quarterly rotation) + async worker + DLQ
  + daily checkpoints. Outbox item shape, RPO/RTO table, decision trail.

- T-7.7: platform/hitl_matrix_design.md (REQ-21 design half) —
  pre-execution gate model; Gitea-specific mechanics (workflow_dispatch +
  gitea.actor per D-042, no Environments API); full 8-concern matrix
  verbatim from §10.4; timeout 1d warn / 2d freeze; rejection -> HELD +
  supersedes; CODEOWNERS routing; SoD pointer to the .py.

- T-7.8: platform/separation_of_duties.py (REQ-21 impl half) —
  check(outbox_client, contract_id, current_prod_approver) -> (ok,
  reason); None outbox -> no-op; equal -> SEPARATION_OF_DUTIES_VIOLATION;
  distinct -> ok; route_halt_artifact stub; stdlib only (duck-typed
  outbox_client). All 5 SoD cases verified.
2026-07-21 18:45:28 +00:00
Jon Chery f8e99ed906 phase: 7, status: plan-as-execute, persona: platform-engineer+backend-engineer, task: T-7.2+T-7.3
---ci---
project: acdl
phase: 7
milestone: v1.1
status: plan-as-execute
persona: platform-engineer+backend-engineer
task: [T-7.2, T-7.3]
requirements.covered: [REQ-17, REQ-22]
---/ci---

Wave 2 (parallel): two independent JSON Schemas, different owners.

- T-7.2 (platform-engineer): schemas/ir.schema.json — Target Stack IR
  (JSON Schema draft 2020-12). Resources with typed inputs/outputs/NFRs,
  relationships (single parent per child), composition tree max-depth-5,
  policy hooks. Substrate-agnostic (no Terraform block keywords, no aws_
  provider prefixes; type values are IR types like aws:s3:bucket). module
  pins L1 by name@semver (W3.D). shared_keyword reserved for v2. Validates
  as Draft 2020-12; minimal l2-static-asset IR instance validates.

- T-7.3 (backend-engineer): schemas/contract.schema.json — consumer
  contract (JSON Schema draft 2020-12). Per-env mandatory (W3.E): dev
  stack+environment; qa adds validation.e2eSuite+loadTest; prod adds
  runbook+dashboard+oncall; dr adds drDrillRef. inputs always optional.
  profile: agentic marker; naturalLanguageIntent required when agentic
  (fixed: if-condition requires profile to be present before checking
  const). environment enum has no staging. Validates as Draft 2020-12;
  spike dev contract validates; qa/prod/dr/agentic negative cases reject.
2026-07-21 18:43:33 +00:00
Jon Chery 92d4535f5f phase: 7, status: plan-as-execute, persona: lead-developer, task: T-7.1
---ci---
project: acdl
phase: 7
milestone: v1.1
status: plan-as-execute
persona: lead-developer
task: T-7.1
requirements.covered: [REQ-16]
---/ci---

Snapshot docs/architecture.md (v0.2) to v1.0. Body §§1-12 copied verbatim;
resolution log + §13 markers rewritten to  RESOLVED (see PROJECT.md);
§14 status bumped to v1.0; new §15 maps the 6 Phase 07 authored files to
their REQs + owner personas. gitea-runner rename (D-046) applied;
act_runner appears only in a 'formerly' note. All 11 open-decision IDs
present (W1.A, W1.B, W2.A, W3.D, W3.E, BA.A-F, Q1.3 OpenTofu).
2026-07-21 18:42:37 +00:00
Jon Chery b40aadd195 docs(P07): create Phase 07 plan (architecture-v1-finalization)
---ci---
project: acdl
phase: 7
milestone: v1.1
status: plan
plan:
  waves: 5
  tasks: 10
  requirements: [REQ-16, REQ-17, REQ-18, REQ-19, REQ-20, REQ-21, REQ-22]
---/ci---

Phase 07 plan authored by ci-planner. 5 waves (strictly ordered):
- Wave 1 (lead-developer): REQ-16 architecture-v1.0.md snapshot (umbrella)
- Wave 2 (platform + backend parallel): REQ-17 ir.schema.json || REQ-22 contract.schema.json
- Wave 3 (security-engineer, 5 files): REQ-18 PolicyCheckResult schema + checkov_adapter.py, REQ-20 audit_ledger_design.md, REQ-21 hitl_matrix_design.md + separation_of_duties.py
- Wave 4 (backend + security co-authored): REQ-19 confidence_signal.py (depends on Wave 3)
- Wave 5 (lead-developer): verify_phase07.sh + traceability

9 deliverable files + 1 verify script. Cross-persona co-authorship on
confidence_signal.py (backend weighted-sum + security penalty mapping)
mitigated by the PLAN content checklist fixing the critical-override
sentinel + short-circuit location.
2026-07-21 18:40:20 +00:00
Jon Chery 0779a92e2f verify(P06): VERIFIED — structural, behavioral, security, quality
---ci---
project: acdl
phase: 6
milestone: v1.1
status: verify
verdict: VERIFIED
---ci---

All four verification layers pass for Phase 06 (v1.1.1):
- Structural: demo/ contains the full v1.0 demo (history preserved via
  git mv); new v1.1 top-level dirs scaffolded with .gitkeep; no stray
  v1.0 dirs at root; v1.0.1..v1.0.5 + v1.1.0 + v1.1.1 tags present.
- Behavioral: typecheck gate green; scripts/verify_phase06.sh exits 0
  with "Phase 06: ALL CHECKS PASS"; demo/scripts/run_demo.sh --no-upload
  produces a non-empty, hash-chained audit.json in /tmp/acdl_demo_run/.
- Security: no .env/tfstate/_key/secret files in v1.1.0..v1.1.1 diff;
  the only content authored in the phase was the move commit, README,
  .gitignore, and the verify script. LSP error on
  demo/scripts/finalize_evidence.py:46 is pre-existing v1.0 demo code
  (authored at v1.0.4, Phase 06 only git-mv'd it) — not a regression.
- Quality: all README link targets exist (docs/vision.md,
  docs/architecture.md, .ciagent/{PROJECT,ARCHITECTURE,ROADMAP}.md,
  demo/ACDL_DEMO.md); every phase commit carries a ---ci--- block with
  the required fields; ROADMAP §Phase 06 status = complete (v1.1.1).

P1 (post-hoc, non-blocking): scripts/verify_phase06.sh does not
programmatically assert runner-data/ is in .gitignore. The must-have
is satisfied structurally (file content verified); only the assertion
is missing. Recommend adding `grep -q '^runner-data/$' .gitignore` in
a future touch-up.

No P0 issues. Phase 06 has no new REQ (repo hygiene).
2026-07-21 18:29:32 +00:00
Jon Chery ecb2c78d11 ship: phase-06 archive-demo-and-reorient (v1.1.1)
---ci---
project: acdl
phase: 6
milestone: v1.1
status: shipped
release:
  tag: v1.1.1
---/ci---

Squash merge of phase/06-archive-demo-and-reorient. v1.0 demo archived
under demo/; new v1.1 top-level layout scaffolded (platform/, schemas/,
adapters/, terraform/, modules-ir/); README rewritten for the real
platform. verify_phase06.sh green: archived demo runs end-to-end from
demo/, no stray v1.0 dirs at repo root.
v1.1.1
2026-07-21 18:28:11 +00:00
Jon Chery 4ab15cb7a5 docs(P06): post-ship traceability + roadmap update (v1.1.1)
---ci---
project: acdl
phase: 6
milestone: v1.1
status: shipped
requirements:
  complete: []
release:
  tag: v1.1.1
---/ci---

ROADMAP Phase 06 -> complete (v1.1.1). No new REQ in this phase (repo
hygiene). The archived demo runs end-to-end from demo/ (regression
gate passed); new v1.1 top-level dirs scaffolded.
2026-07-21 18:28:07 +00:00
Jon Chery e044a2de0d phase: 6, status: plan-as-execute, persona: lead-developer, task: T-6.1..T-6.4
---ci---
project: acdl
phase: 6
milestone: v1.1
status: plan-as-execute
persona: lead-developer
tasks: [T-6.1, T-6.2, T-6.3, T-6.4]
---/ci---

Archive the v1.0 demo under demo/ (D-037) and reorient the repo to the
real platform. Wave 1 of the Phase 06 plan.

- T-6.1: git mv modules/, scripts/, evidence-ui/, contracts/,
  contracts-repo/, .gitea/ -> demo/; mv ACDL_DEMO.md + runner-data/ -> demo/
- T-6.2: scaffold new v1.1 top-level dirs (platform/, schemas/, adapters/,
  terraform/, modules-ir/) with .gitkeep
- T-6.3: create top-level scripts/verify_phase06.sh (v1.1 verify scripts
  live at top-level, NOT demo/scripts/ which holds the v1.0 demo verify
  scripts)
- T-6.4: rewrite README.md to reflect the real platform (vision +
  architecture links, new layout, status v1.1 active); add runner-data/
  to .gitignore

All moves via git mv (history preserved). Repo root now contains only
README.md, demo/, docs/, .ciagent/, and the new empty v1.1 dirs.
2026-07-21 18:27:21 +00:00
Jon Chery b927f9026a docs(P06): create Phase 06 plan (archive-demo-and-reorient)
---ci---
project: acdl
phase: 6
milestone: v1.1
status: plan
plan:
  waves: 3
  tasks: 6
  requirements: []  # repo hygiene; no new REQ
---/ci---

Phase 06 plan authored by ci-planner. 3 waves (strictly ordered):
- Wave 1 (lead-developer): T-6.1 git mv demo dirs, T-6.2 scaffold new
  dirs, T-6.3 write scripts/verify_phase06.sh at top-level, T-6.4 rewrite
  README + .gitignore
- Wave 2 (frontend-engineer): T-6.5 confirm demo/evidence-ui/ moved
  cleanly (confirm-only)
- Wave 3 (lead-developer): T-6.6 run verify_phase06.sh + typecheck gate

Key design: v1.1 verify scripts live at a new top-level scripts/ (not
demo/scripts/ which holds the archived v1.0 verify scripts). All git mv
commands enumerated verbatim in T-6.1, cross-checked against RESEARCH.md
TARGET 10.
2026-07-21 18:26:24 +00:00
Jon Chery 930c24be6d docs(research): OIDC blocker found; adopt D-039..D-046; re-scope Phase 08
---ci---
project: acdl
phase: 0
milestone: v1.1
status: research
research_targets: 10
top_finding:
  - TARGET 1 (conf 0.95): Gitea Actions does NOT support id-token: write / OIDC.
    Real OIDC deferred to v1.2 (blocked on go-gitea/gitea#36988).
    Spike adopts D-039: per-run-rotated long-lived key waiver.
decisions_adopted: [D-039, D-040, D-041, D-042, D-043, D-044, D-045, D-046]
risks:
  - R-1 (highest): OIDC gap -> key-rotation waiver (mitigated by D-039)
  - R-2: Checkov terraform_plan edge cases (mitigated by ACDL_TAG_NAMING skipped record)
  - R-3: 6 confidence inputs are a recommendation (D-040 adopted in PROJECT.md)
---/ci---

RESEARCH.md (1330 lines) authored by ci-researcher. Key findings:

- TARGET 1: Gitea Actions does NOT support emitting an OIDC id-token
  (Gitea docs list id-token as unsupported; go-gitea/gitea#33681 open;
  draft PR #36988 unmerged; Gitea's own CI still uses long-lived keys
  per #37980). Real-AWS OIDC is unachievable in this environment for v1.1.
- TARGETS 2-10: Terraform/Checkov install steps, IR prior art, Checkov
  adapter, DynamoDB outbox, 6-input confidence signal, tiered ledger
  (Object Lock deferred), HITL/SoD, contract schema, archive strategy
  — all resolved with concrete sketches in RESEARCH.md.

Adopted D-039..D-046 in PROJECT.md. Re-scoped Phase 08 (ROADMAP) and
REQ-23 (REQUIREMENTS) to reflect the OIDC blocker: the spike uses a
per-run-rotated long-lived key (D-039) instead of OIDC; real OIDC is a
v1.2 deliverable. ARCHITECTURE.md Gitea API surface table updated with
the OIDC verdict.
2026-07-21 18:03:41 +00:00
Jon Chery 087c89edbf docs(clarify): auto-resolve operational parameters; defer OIDC to RESEARCH
---ci---
project: acdl
phase: 0
milestone: v1.1
status: clarify
clarifications:
  resolved: 12 operational parameters (AWS region, state bucket/lock names, OIDC role + trust subject, spike L1/L2/contract inputs, terraform command scope, Checkov ruleset, tag preservation, next ship tag)
  mode: accept-recommendations + decide-rest (D-038)
  deferred_to_research: [gitea/act_runner OIDC support, terraform/checkov runner availability, configure-aws-credentials action availability]
  user_blocking_questions: 0
---/ci---

At full autonomy, the 11 architecture open decisions were already
recorded in PROJECT.md during SPECIFY (D-038). CLARIFY resolves the 12
operational parameters needed to unblock planning (AWS region, state
backend names, OIDC role, spike L1/L2/contract inputs, terraform command
scope, Checkov ruleset). The one genuinely unknown item — Gitea/act_runner
OIDC support — is not a clarification (no user preference can resolve it);
it is the highest-priority RESEARCH target.
2026-07-21 17:55:49 +00:00
Jon Chery 288607b3fa docs(specify): ingest docs/vision+architecture; reframe .ciagent for v1.1
---ci---
project: acdl
phase: 0
milestone: v1.1
status: specify
decisions:
  - D-034 temporary long-lived AWS key waiver (used once in Phase 08, rotated)
  - D-035 milestone v1.1 (feature), ship tag v1.2.0
  - D-036 spike picks l1-s3 + l2-static-asset
  - D-037 demo archived to demo/
  - D-038 open decisions resolved (accept recommendations + decide rest)
---/ci---

Ingest docs/vision.md (6 tenets, anti-goals, signals of success) and
docs/architecture.md v0.2 (4 layers + 6 cross-cutting concerns incl. the
substrate abstraction) as the source of truth for why/how. Reframe the
project from the v1.0 stub demo (tag v1.1.0, archived to demo/ in Phase 06)
to the real Agentic Cloud Delivery Platform.

- config.json: milestone v1.1, status specify
- PROJECT.md: vision + 4-layer/6-concern model + 11 open-decision
  resolutions (W1.A/B, W2.A, BA.A accepted; W3.D/E, BA.B-F, OpenTofu
  decided) + D-034..D-038
- ARCHITECTURE.md: target architecture (IR, confidence, ledger, HITL, SoD,
  substrate abstraction) + v1.1 spike scope (l1-s3 + l2-static-asset)
- REQUIREMENTS.md: add REQ-16..REQ-28 + traceability
- ROADMAP.md: add v1.1 Phases 06-10 (archive, arch-finalize, OIDC, IR+L1,
  L2+contract-e2e)
- PERSONAS.md: add platform-engineer + security-engineer (custom),
  retire infra-stub-engineer, update territories + verification toolchain
  (terraform validate + jsonschema)
- PLAN.md: v1.1 specify plan
2026-07-21 17:55:09 +00:00
Jon Chery 30e63d6cb5 docs(contracts): add elaborate example contracts with rich inputs
---ci---
phase: 5
milestone: v1.0
status: complete
---/ci---

Two reference contracts under contracts/examples/ demonstrating how
developers can use the open-ended inputs: map (D-021) to carry
environment + ownership + business context + deployment knobs +
operational flags. 29 keys each.

- contract-commodity-price-feed-prod.yaml: passing pipeline (POLICY_PASS,
  score 0.90, all 5 L1s applied)
- contract-regulatory-reporting-violation.yaml: Act 4 trigger
  (public-ingress: true -> POLICY_VIOLATION:PUBLIC_INGRESS -> score 0.40
  < 0.50 gate -> Dev rejects)

Both validated end-to-end: yaml load, policy_checker, confidence_signal,
mock_executor (passing contract only). state.json captures all 29 input
keys.
2026-07-21 17:42:04 +00:00
grimacing b84a8a2241 Update docs/architecture.md 2026-07-21 17:38:57 +00:00
grimacing 7614c41530 Add docs/vision.md 2026-07-21 17:35:51 +00:00
grimacing 52665b8f0c Add docs/architecture.md 2026-07-21 17:28:09 +00:00
Jon Chery d700148063 audit(v1.0): PASS — reconstruction + hygiene + discipline; P1-001 fixed
---ci---
phase: 0
milestone: v1.0
status: complete
audit:
  reconstruction: PASS (git-log phase statuses match ROADMAP.md; all 5 phases complete; 33 decisions in PROJECT.md; SEC-001 mitigated)
  branch_hygiene: PASS (all 5 phase branches merged + deleted; main + milestone/v1.0-initial only; tags v1.0.1..v1.0.5 + v1.1.0 monotonic; all 5 PRs merged)
  commit_discipline: PASS-WITH-CAVEAT (all per-task commits had ---ci--- blocks on phase branches; the 5 squash-merge commits on main lack ---ci--- blocks because Gitea's squash-merge API compresses the phase branch into a single summary commit — the per-task blocks were on the deleted phase branches)
  security_findings:
    - SEC-001 (Phase 01): mitigated (token rotated to env var)
    - P0-001 (Phase 04): fixed inline (URLError catch in finalize_evidence.py)
    - P0-002 (Phase 04): fixed inline (shell injection in issue body -> env var)
    - P1-001 (this audit): fixed (remote URL in .git/config stripped of token; future pushes use 'git -c http.https://<host>/.extraHeader=Authorization: token <token>' or a credential helper)
  escalation_count: 0
  lessons_count: 13 (across 5 verify_phaseNN.sh commits)
---/ci---

Audit PASS. Reconstruction test confirms git-log state matches .ciagent/
files. Branch hygiene clean (no orphan phase branches; tags monotonic;
PRs merged). Commit discipline passes with the documented caveat that
Gitea's squash-merge API strips per-task ---ci--- blocks from the
squashed commit body (the per-task blocks existed on the now-deleted
phase branches and are recoverable via git reflog if needed).

P1-001 (token in .git/config remote URL — deferred from Phase 01 verify)
is now FIXED: the remote URL is tokenless; future pushes use a one-shot
'git -c http.<host>/.extraHeader=Authorization: token <token>' or a
credential helper. This was the last open finding from the milestone.

The ACDL milestone v1.0 is complete and audited. Tag v1.1.0 is the
feature-milestone release (next minor per ship.md). The demo is live at
https://git.cloudinit.dev/continuous-intelligence/acdl-evidence/raw/branch/main/index.html
2026-07-21 13:58:22 +00:00
Jon Chery 80ac975e61 docs(milestone): complete v1.0 (tagged v1.1.0)
---ci---
phase: 0
milestone: v1.0
status: complete
requirements:
  covered: [REQ-01, REQ-02, REQ-03, REQ-04, REQ-05, REQ-06, REQ-07, REQ-08, REQ-09, REQ-10, REQ-11, REQ-12, REQ-13, REQ-14, REQ-15]
  partial: []
release:
  tag: v1.1.0
  type: feature-milestone (next minor per ship.md)
  phases:
    - v1.0.1 phase-01 repo-scaffolding
    - v1.0.2 phase-02 l1-modules
    - v1.0.3 phase-03 l2-modules-and-core-scripts
    - v1.0.4 phase-04 pipeline-and-approval-gates
    - v1.0.5 phase-05 evidence-ui-and-demo-dry-run
---/ci---

Milestone v1.0 complete. All 15 requirements covered. main branch created
from milestone/v1.0-initial and pushed. Repo default branch set to main.
Tag v1.1.0 (feature milestone -> next minor per ship.md versioning rule).
2026-07-21 13:57:04 +00:00
Jon Chery 58adf9e231 docs(P05): post-ship traceability + roadmap update (v1.0.5)
---ci---
phase: 5
milestone: v1.0
status: shipped
requirements:
  complete: [REQ-13, REQ-14, REQ-15]
release:
  tag: v1.0.5
  pr: 5
---/ci---

ROADMAP Phase 05 -> complete (v1.0.5). REQUIREMENTS REQ-13/14/15 -> complete.
All 5 phases of milestone v1.0 are now complete. Next: the COMPLETE gate
(review -> ship(milestone v1.1.0) -> audit).
v1.1.0
2026-07-21 13:54:41 +00:00
grimacing 0672edfc3f ship: phase-05 evidence-ui-and-demo-dry-run (v1.0.5)
Squash merge of phase/05-evidence-ui-and-demo-dry-run; evidence-ui/index.html + run_demo.sh 4-act simulation + verify_phase05.sh; demo live at acdl-evidence raw URL.
v1.0.5
2026-07-21 13:53:54 +00:00
Jon Chery 1415c85d35 docs(P04): post-ship traceability + roadmap update (v1.0.4)
---ci---
phase: 4
milestone: v1.0
status: shipped
requirements:
  complete: [REQ-10, REQ-12]
release:
  tag: v1.0.4
  pr: 4
---/ci---

ROADMAP Phase 04 -> complete (v1.0.4). REQUIREMENTS REQ-10/12 -> complete.
Phase 04 was the last 'skeleton-filling' phase; Phase 05 builds the
evidence UI and runs the 4 demo acts end-to-end.
2026-07-21 13:43:07 +00:00
grimacing 72b359c9a9 ship: phase-04 pipeline-and-approval-gates (v1.0.4)
Squash merge of phase/04-pipeline-and-approval-gates; pipeline.yml + issue-to-contract.yml + finalize_evidence.py; verify_phase04.sh green; 1 P0 fixed (shell injection).
v1.0.4
2026-07-21 13:42:25 +00:00
Jon Chery 711b61d63e docs(P03): post-ship traceability + roadmap update (v1.0.3)
---ci---
phase: 3
milestone: v1.0
status: shipped
requirements:
  complete: [REQ-04, REQ-05, REQ-06, REQ-07, REQ-08, REQ-11]
  partial: [REQ-12]
release:
  tag: v1.0.3
  pr: 3
---/ci---

ROADMAP Phase 03 -> complete (v1.0.3). REQUIREMENTS: REQ-04/05/06/07/08/11
-> complete; REQ-12 -> partial (full issue-trigger wiring in Phase 04).
2026-07-21 13:33:18 +00:00
grimacing 3ea36ef3ab ship: phase-03 l2-modules-and-core-scripts (v1.0.3)
Squash merge of phase/03-l2-modules-and-core-scripts; 4 L2s + 5 core scripts; verify_phase03.sh green.
v1.0.3
2026-07-21 13:32:21 +00:00
Jon Chery 6e27df7404 docs(P02): post-ship traceability + roadmap update (v1.0.2)
---ci---
phase: 2
milestone: v1.0
status: shipped
requirements:
  complete: [REQ-02, REQ-03]
release:
  tag: v1.0.2
  pr: 2
---/ci---

ROADMAP Phase 02 -> complete (v1.0.2). REQUIREMENTS REQ-02/03 -> complete.
2026-07-21 13:18:51 +00:00
grimacing 00d0043866 ship: phase-02 l1-modules (v1.0.2)
Squash merge of phase/02-l1-modules into milestone/v1.0-initial; 8 L1 stub modules created; verify_phase02.sh green.
v1.0.2
2026-07-21 13:18:12 +00:00
Jon Chery fd423e2df1 docs(P01): post-ship traceability + roadmap update (v1.0.1)
---ci---
phase: 1
milestone: v1.0
status: shipped
requirements:
  complete: [REQ-01, REQ-09]
  partial: [REQ-10, REQ-12]
release:
  tag: v1.0.1
  url: https://git.cloudinit.dev/continuous-intelligence/acdl/releases/tag/v1.0.1
  pr: 1
---/ci---

ROADMAP Phase 01 -> complete (v1.0.1). REQUIREMENTS REQ-01/09 -> complete;
REQ-10/12 -> partial (full impl in Phase 04).
2026-07-21 13:12:01 +00:00
grimacing 8947e89d7b ship: phase-01 repo-scaffolding (v1.0.1)
Squash merge of phase/01-repo-scaffolding into milestone/v1.0-initial; tagged v1.0.1.
2026-07-21 13:11:02 +00:00
Jon Chery b953fd4a8e docs(P01): complete repo-scaffolding phase
---ci---
phase: 1
milestone: v1.0
status: complete
requirements:
  covered: [REQ-01, REQ-09]
  partial: [REQ-10, REQ-12]
---/ci---

Squash merge of phase/01-repo-scaffolding into milestone/v1.0-initial.
Phase 01 ships the three-repo scaffold (acdl, acdl-contracts, acdl-evidence),
the placeholder index.html on acdl-evidence (D-012/D-016 raw-URL substitute
for unsupported Gitea Pages), the qa + prod branches on acdl-contracts
(D-013 stand-in for unsupported Gitea environments), the workflow skeletons
(pipeline.yml + issue-to-contract.yml), and the idempotent setup + verify
scripts. REQ-10/12 remain partial pending Phase 04 full implementation.
v1.0.1
2026-07-21 13:10:50 +00:00
Jon Chery 38eaec9337 docs(P01): create 3-wave phase plan (REQ-01/09/10)
---ci---
phase: 1
milestone: v1.0
status: plan
plan:
  waves: 3
  wave_1_coordination: [T-1.1 gitignore+layout+README, T-1.2 verify_phase01.sh]
  wave_2_backend: [T-2.1 gitea_setup.sh, T-2.2 pipeline.yml skeleton, T-2.3 issue-to-contract.yml skeleton]
  wave_3_coordination: [T-3.1 wire verify + traceability update]
  requirements_covered: [REQ-01, REQ-09, REQ-10]
  must_haves: 6
  verification:
    typecheck: bash -n scripts/*.sh
    test: scripts/verify_phase01.sh
    build: no-op
---/ci---

PLAN.md defines 3 vertical-slice waves: coordination (skeleton + verify
script), backend (Gitea setup + workflow skeletons), coordination (wiring +
traceability). infra-stub-engineer and frontend-engineer have 0 tasks this
phase. Branch for EXECUTE will be phase/01-repo-scaffolding.
2026-07-21 12:59:27 +00:00
Jon Chery 6691974445 docs(P01): research findings — Gitea API surface + persona roster
---ci---
phase: 1
milestone: v1.0
status: research
research:
  gitea_capabilities:
    pages: not_supported
    environments_api: not_supported
    repository_dispatch: not_supported
    workflow_call: supported
    workflow_dispatch: supported
    issues_opened: supported
  workarounds:
    - D-012 raw file URLs in place of Pages
    - D-013 workflow_dispatch approval inputs in place of environments
    - D-014 workflow_dispatch API in place of repository_dispatch
  verification_toolchain:
    typecheck: bash -n + python -m py_compile (no package.json)
    test: per-phase scripts/verify_phaseNN.sh
    build: no-op
---/ci---

ARCHITECTURE.md gains a Gitea API surface table and a branch-pinning rule.
PERSONAS.md is the canonical project-level persona roster: lead-developer
and backend-engineer always active; infra-stub-engineer custom persona owns
L1 stubs; data-engineer deactivated (no DB); frontend-engineer deactivated
until Phase 05.
2026-07-21 12:58:35 +00:00
Jon Chery e5f5604319 decision(P01): clarification — project mode, pages fallback, env gates
---ci---
phase: 1
milestone: v1.0
status: clarify
decisions:
  - id: D-011
    decision: Single-project mode explicitly enforced via config.json mode=single
    rationale: run.md Step 0 reads projects[] length as multi-project trigger; explicit flag disambiguates from D-010
    confidence: 0.95
    alternatives: [move acdl into .ciagent/acdl/ subdirectory and adopt multi-project paths]
  - id: D-012
    decision: Gitea has no native Pages; serve acdl-evidence via raw file URLs + CORS note
    rationale: Research confirms Gitea has no [pages] section; raw URLs work without server config
    confidence: 0.85
    alternatives: [sidecar static server, external Pages host]
  - id: D-013
    decision: QA/Prod gates modeled as workflow_dispatch approval inputs (D-004 fallback) instead of Gitea environments
    rationale: Research confirms Gitea ignores environment: blocks and exposes no environments API
    confidence: 0.90
    alternatives: [external approval bot, drop approval gates entirely]
  - id: D-014
    decision: Cross-repo triggering uses workflow_dispatch API from inside a step (no repository_dispatch)
    rationale: Gitea Actions does not support repository_dispatch
    confidence: 0.85
    alternatives: [push-based trigger with a sentinel file, polling]
  - id: D-015
    decision: New repos acdl-contracts and acdl-evidence use default_branch=main with auto_init=true
    rationale: Matches Gitea DEFAULT_BRANCH=main; required for the default branch to exist before any push
    confidence: 0.95
    alternatives: [use milestone/v1.0-initial as default_branch]
  - id: D-016
    decision: Pages placeholder for Phase 01 is a minimal HTML stub; full timeline UI deferred to Phase 05
    rationale: Phase 01 success criterion is the URL returns 200 with placeholder; full UI is Phase 05
    confidence: 0.90
    alternatives: [build a minimal timeline now]
---/ci---

Clarifications accepted at full autonomy per clarify.md Step 4. Three requirements
re-stated: REQ-09 (new repos default_branch=main), REQ-10 Pages (raw-URL 200
substitute), REQ-10 environments (workflow_dispatch inputs + qa/prod branches).
See .ciagent/REQUIREMENTS.md Clarifications table.
2026-07-21 12:57:50 +00:00
Jon Chery 5222a460e5 chore(config): rotate Gitea token to env-var reference (security)
---ci---
phase: 0
milestone: v1.0
status: specify
security:
  - id: SEC-001
    type: info_disclosure
    disposition: mitigated
    summary: Literal API token was committed in config.json gitea.api_token_env field
    fix: Replaced literal with env var name 'ACDL_GITEA_TOKEN'; token supplied via shell env at runtime
    severity: high
    stride: Information Disclosure
---/ci---

The 40-char value previously stored in .ciagent/config.json was a live Gitea
API token. Per the spec constraint 'no secrets in repo', the field now holds
an env var name. The token itself is exported in the shell session at runtime
and is never written to disk. Treat the prior value as already-leaked and
rotate it via the Gitea UI before any external disclosure.
2026-07-21 12:55:29 +00:00
Jon Chery e3416f8e77 docs(init): initialize Agentic Cloud Delivery Platform (5 phases)
---ci---
phase: 0
milestone: v1.0
status: specify
decisions:
  - id: D-001
    decision: Use Gitea org continuous-intelligence for all ACDL repos
    rationale: User-specified target org; already exists at git.cloudinit.dev
    confidence: 0.95
    alternatives: [new dedicated demo org]
  - id: D-002
    decision: Map "GitHub Actions" to Gitea Actions (act_runner) using same workflow YAML
    rationale: Environment is Gitea; syntax-compatible with act_runner
    confidence: 0.85
    alternatives: [migrate to GitHub.com, raw shell scripts]
  - id: D-003
    decision: Collapse acdl-platform into the existing empty acdl repo
    rationale: acdl already exists at org root; avoids a 4th repo
    confidence: 0.90
    alternatives: [create separate acdl-platform repo]
  - id: D-004
    decision: Use Gitea environment blocks + required reviewers for QA/Prod; fallback to manual workflow_dispatch with approval input
    rationale: Spec mandates approval gates; forge supports environment protection
    confidence: 0.80
    alternatives: [external approval bot, no approval gates]
  - id: D-005
    decision: Hash-chained ledger (prev_hash + own hash via SHA-256 of canonical JSON) for evidence; declared demonstrative not adversarially secure
    rationale: Spec asks for simple JSON; chain gives visible tamper-evidence
    confidence: 0.85
    alternatives: [signed commits only, full Merkle tree]
  - id: D-006
    decision: Confidence gate threshold = 0.50 exactly (base 0.90, fail drops to 0.40)
    rationale: Explicit in spec
    confidence: 0.99
    alternatives: []
  - id: D-007
    decision: Each mock_apply.sh echoes "[L1: <name>] applying..." + "OK", sleeps 1s, exits 0
    rationale: Spec literal; uniformity aids timeline parsing
    confidence: 0.95
    alternatives: [randomized sleep durations]
  - id: D-008
    decision: L3B keyword->stack mapping: gas/price/ingest/data-lake->commodity-price-feed; invoice/billing->invoice-service; analytics/historical/query->energy-analytics-api; regulatory/compliance/reporting/trading->regulatory-reporting; fallback->invoice-service
    rationale: Mirrors the 4 L2 modules + Act 3 example issue text
    confidence: 0.85
    alternatives: [single default stack, ML classifier (forbidden by no-AI constraint)]
  - id: D-009
    decision: Init milestone = v1.0, branch milestone/v1.0-initial
    rationale: init.md Step 5 mandates milestone/v1.0-initial
    confidence: 0.99
    alternatives: []
  - id: D-010
    decision: Single-project mode for the acdl checkout; ---ci--- blocks omit project field
    rationale: User chose standalone single-project; no other projects in this checkout
    confidence: 0.90
    alternatives: [register acdl in /root multi-project config]
---/ci---

Specification: 30-minute executive demo of the Agentic Cloud Delivery Platform proving automatic, safe, audited infra delivery via local stubs on Gitea Actions (no cloud, no AI APIs).
Requirements: [3 repos under continuous-intelligence org, 8 L1 stub modules, 4 L2 composed modules mirroring S&P Global Energy use cases, 5 core scripts (mock_executor.sh, policy_checker.py, confidence_signal.py, evidence_writer.py, l3b_agent_stub.py), reusable Dev->QA->Prod pipeline with approval gates, issue-triggered L3B agent, Pages evidence timeline UI, 4 scripted demo acts]
Constraints: [local Linux OS, Gitea Actions + Environments, no AWS/GCP/Azure, no external LLM APIs, state in flat JSON/artifacts, EKS Fargate + serverless primitives (no VPC module), L1 single-purpose substrate-agnostic max-depth-1, L2 max-depth-5]
Out of scope: [real cloud provisioning, real LLM inference, production-grade infrastructure, adversarial tamper-proofing of evidence]
2026-07-21 12:46:33 +00:00