diff --git a/.ciagent/REQUIREMENTS.md b/.ciagent/REQUIREMENTS.md
index 988e320..bd666c1 100644
--- a/.ciagent/REQUIREMENTS.md
+++ b/.ciagent/REQUIREMENTS.md
@@ -69,6 +69,6 @@
| REQ-10 | 4 | complete (v1.0.4) |
| REQ-11 | 3 | complete (v1.0.3) |
| REQ-12 | 4 | complete (v1.0.4) |
-| REQ-13 | 5 | pending |
-| REQ-14 | 5 | pending |
-| REQ-15 | 5 | pending |
\ No newline at end of file
+| REQ-13 | 5 | covered (pending VERIFY) |
+| REQ-14 | 5 | covered (pending VERIFY) |
+| REQ-15 | 5 | covered (pending VERIFY) |
\ No newline at end of file
diff --git a/.ciagent/ROADMAP.md b/.ciagent/ROADMAP.md
index f9afad3..0e5ea5b 100644
--- a/.ciagent/ROADMAP.md
+++ b/.ciagent/ROADMAP.md
@@ -49,7 +49,7 @@ Five-phase breakdown to take ACDL from empty repo to a reproducible 4-act execut
### Phase 05 — evidence-ui-and-demo-dry-run
- **Description:** Build `index.html` (vanilla JS, fetches `audit.json`, renders timeline) and run all four acts end-to-end as a dry run.
-- **Status:** not_started
+- **Status:** executing
- **Depends on:** [4]
- **Requirements:** REQ-11, REQ-13, REQ-14, REQ-15
- **Success Criteria:**
diff --git a/scripts/verify_phase05.sh b/scripts/verify_phase05.sh
new file mode 100755
index 0000000..97d28c7
--- /dev/null
+++ b/scripts/verify_phase05.sh
@@ -0,0 +1,213 @@
+#!/usr/bin/env bash
+# Phase 05 verification script.
+# Validates the evidence UI + the 4-act demo dry-run.
+#
+# Usage: scripts/verify_phase05.sh
+# Exit codes: 0 = all checks passed; 1 = one or more checks failed.
+
+set -uo pipefail
+
+ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
+cd "$ROOT"
+
+fail_count=0
+pass() { printf ' [PASS] %s\n' "$1"; }
+fail() { printf ' [FAIL] %s\n' "$1"; fail_count=$((fail_count + 1)); }
+
+GITEA_HOST="${GITEA_HOST:-https://git.cloudinit.dev}"
+ORG="continuous-intelligence"
+EVIDENCE_REPO="acdl-evidence"
+
+echo "== Phase 05 verification =="
+echo "Root: ${ROOT}"
+echo
+
+# --- Check 1: evidence-ui/index.html structure ---
+echo "-- Check 1: evidence-ui/index.html structure (D-032, REQ-14) --"
+UI="evidence-ui/index.html"
+if [ ! -f "$UI" ]; then
+ fail "$UI missing"
+else
+ pass "$UI exists"
+ size=$(wc -c < "$UI")
+ if [ "$size" -ge 1000 ] && [ "$size" -le 30000 ]; then
+ pass "$UI size ${size} bytes (within 1-30 KB range)"
+ else
+ fail "$UI size ${size} bytes (expected 1-30 KB)"
+ fi
+ ui_check=$(python3 << 'PYEOF'
+import re, sys
+content = open('evidence-ui/index.html').read()
+problems = []
+if '' not in content: problems.append('missing inline