docs(P05): research findings — UI reactivation + dry-run simulation design
---ci---
phase: 5
milestone: v1.0
status: research
research:
personas: frontend-engineer REACTIVATED for Phase 05 (territory evidence-ui/**)
dry_run_design:
approach: scripts/run_demo.sh local bash simulation (no act_runner)
acts: 4 (Friction, Dev Self-Service, Citizen Developer, Safety Net)
audit_events: ~14 (genesis + 1 + 4 + 4 + 1 + finalize markers)
output: audit.json + index.html pushed to acdl-evidence via file-contents API
ui_contract:
file: evidence-ui/index.html (single file, inline CSS+JS, no frameworks)
fetch: ./audit.json (relative URL)
render: vertical timeline, stage color-coded, 12-char hash preview
---/ci---
PERSONAS.md: frontend-engineer -> Active: true (REACTIVATED for Phase 05),
territory evidence-ui/**. ARCHITECTURE.md gains 'Phase 05 dry-run + UI
(research)' section: the bash simulation design, the 4-act breakdown,
the audit.json shape, and the UI rendering contract.
This commit is contained in:
@@ -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).
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user