diff --git a/.ciagent/ARCHITECTURE.md b/.ciagent/ARCHITECTURE.md index de17d56..0247b77 100644 --- a/.ciagent/ARCHITECTURE.md +++ b/.ciagent/ARCHITECTURE.md @@ -48,6 +48,8 @@ The demo is a three-repo, stub-driven system that simulates an autonomous cloud | `acdl-contracts` repo | Developer + agentic entry surface; holds contracts + issue workflow | Triggers main pipeline on push | `acdl` reusable workflow | | `acdl-evidence` repo | Pages host for `audit.json` + `index.html` timeline | Read-only for the pipeline; written at finalize stage | evidence_writer.py output | | Reusable pipeline workflow | Dev → QA → Prod → Finalize stages with environment gates | Gitea Actions; calls core scripts | All core scripts | +| `evidence-ui/index.html` | Vanilla-JS timeline UI (Phase 05); fetches `./audit.json` and renders events | Single HTML file with inline CSS+JS; no frameworks (REQ-14) | `audit.json` on `acdl-evidence` main | +| `scripts/run_demo.sh` | Phase 05 dry-run simulation of the 4 demo acts; calls core scripts + writes evidence + uploads `audit.json` + `index.html` to `acdl-evidence` | Bash; uses `evidence_writer.py` + `finalize_evidence.py` + the file-contents API | All Phase 03/04 artifacts | ## Phase 04 pipeline topology (research) @@ -90,6 +92,32 @@ Because each stage is a separate dispatch, the workflow file uses `if:` conditio This means a full pipeline = 3 dispatches (initial, qa-approve, prod-approve). The human drives each via the Gitea UI or the dispatch API. +## Phase 05 dry-run + UI (research) + +Phase 05 has no act_runner available in this environment, so the "dry run" +is a local bash simulation (`scripts/run_demo.sh`) that produces the same +`audit.json` shape a real pipeline run would, then uploads it (plus the +UI) to `acdl-evidence` via the file-contents API. The simulation covers: + +- **Act 1 — Friction:** a single evidence event "manual 2-week deployment (legacy process)" at `stage: dev` with a red-colored timeline marker. +- **Act 2 — Developer Self-Service:** `l2-commodity-price-feed` contract, full pipeline (dev → qa → prod → finalize), 4 evidence events. +- **Act 3 — Citizen Developer:** Issue body fed to `l3b_agent_stub.py`, generates the same `l2-commodity-price-feed` contract, identical pipeline, 4 evidence events. +- **Act 4 — Safety Net:** `l2-regulatory-reporting` contract with `public-ingress: true`, dev rejects (confidence 0.40 < 0.50), 1 evidence event "dev rejected: POLICY_VIOLATION:PUBLIC_INGRESS". + +The `audit.json` after `run_demo.sh` contains the genesis + all act +events (typically ~14 events). The UI fetches `./audit.json` and renders +a vertical timeline with stage-colored markers and a per-event hash +preview. + +### UI rendering contract (D-032, D-033) + +`evidence-ui/index.html`: +- Single file, inline CSS + JS, no external resources. +- Fetches `./audit.json` (relative URL; works against any raw-URL origin). +- Renders events as a vertical timeline; each event card shows `seq`, `ts`, `stage` (color-coded: `dev` blue, `qa` yellow, `prod` orange, `finalize` green, `genesis` gray, rejected events red), `event` text, and a 12-char hash preview (`hash.slice(0, 12)…`). +- Handles fetch failure with a "No audit data yet" message. +- Refresh button to re-fetch. + ## Data Flow 1. A `contract.yaml` arrives either by direct push (L3A) or by the issue workflow running `l3b_agent_stub.py` (L3B). diff --git a/.ciagent/PERSONAS.md b/.ciagent/PERSONAS.md index 097be0d..7288b94 100644 --- a/.ciagent/PERSONAS.md +++ b/.ciagent/PERSONAS.md @@ -59,12 +59,12 @@ verification_toolchain: ### frontend-engineer - **Domain:** frontend -- **Active:** false -- **Reason:** No UI in Phases 01-04. The single UI artifact (`index.html`, vanilla JS) is built in Phase 05. frontend-engineer is reactivated for Phase 05 only (see Phase-specific overrides below). -- **Phase-specific:** true (reactivates in Phase 05) +- **Active:** true # REACTIVATED for Phase 05 (evidence UI + dry run) +- **Reason:** Phase 05 builds the vanilla-JS `index.html` timeline UI (REQ-14) and runs the 4 demo acts end-to-end dry run (REQ-15). Inactive for Phases 01-04 (no UI). +- **Phase-specific:** true (this reactivation is for Phase 05 only; will be deactivated again after the milestone ships if the project continues) - **Frameworks:** vanilla-js, dom-api, fetch-api -- **Constraints:** no-frameworks, single-file, fetch-from-same-origin-raw-url -- **Territory:** `acdl-evidence/index.html` (Phase 05) +- **Constraints:** no-frameworks, single-file, fetch-from-same-origin-raw-url, relative-url-for-audit-json +- **Territory:** `evidence-ui/**` (the source-of-truth `index.html` in the `acdl` repo; pushed to `acdl-evidence` by `run_demo.sh`) ## Phase-specific overrides