Spec 098 — activity browsability (T023)

Playwright sweep of the Web UI activity view against an isolated core (127.0.0.1:18471, scratch data-dir), 2026-08-15.

3 / 3 scenarios passed. Spec: preflight-activity.spec.ts (committed next to this report).

Fixture: two POST /api/v1/preflight calls against a proxy with no upstreams configured, producing unknown_ids records with server_not_configured reasons.

PASS Activity list renders the preflight record

Expected: Row typed “Preflight” (icon + label), Details cell carrying the set verdict and the reason rollup instead of an empty cell.

Observed: Row reads Preflight / unknown_ids (3 tools): server_not_configured x3, status Blocked.

Activity list renders the preflight record
PASS Type filter menu offers “Preflight”

Expected: The multi-select Type dropdown lists Preflight alongside the existing types, and checking it filters the table to preflight records only.

Observed: Menu entry present; after checking it, every visible row is a preflight row (asserted by row-count equality).

Type filter menu offers “Preflight”
PASS Detail drawer renders the verdict, not a policy decision

Expected: Dedicated “Preflight Verdict” section (verdict badge, id count, reason rollup, per-tool list). The generic “Policy Decision” block, which keys off status=blocked, must NOT appear.

Observed: Section present with unknown_ids, server_not_configured x1, ctl:echo / unavailable; no Policy Decision block.

Detail drawer renders the verdict, not a policy decision