Owner: review agent. 5 lenses (staff-eng · UX · art-dir · a11y · perf) run in parallel against
the verified v1 slice (commits efdb1d6 · afe10e5 · d10949f). Plus a prior automated security
review of the auth commit. This file records findings, severity, and resolution. Fixes landed
in the REVIEW-fixes commit; deferred items are tied to D-1/D-2/D-3 infra and tracked in tasks.md.
Ship the slice (fixtures). Two correctness blockers and a cluster of a11y/brand findings were
fixed; the rest are deferred with reason. 33 tests green, JS 6.9 KB / 60 KB.
/api/runs/stream declared after /runs/{trace_id} → the push path was dead (always polled). Fixed: reordered; regression test test_stream_route_not_shadowed.
ValidationError/JSONDecodeError from the observe client → raw 500 + killed the SSE generator. Fixed: _UPSTREAM_ERRORS now includes both in routes + SSE → calm 503.
py_webauthn .parse_raw removed in Pydantic v2 → first real passkey registration would AttributeError. Fixed: model_validate_json (register + login).
HttpObserveClient leak — new httpx.AsyncClient per request/SSE tick in live mode. Fixed: process-cached client (_cached_client).
session.verify() wrote to disk every request (prune-on-verify) — I/O on the event loop per SSE tick. Fixed: verify is now read-only + inline expiry; prune only on create().
metadata: dict = {} → Field(default_factory=dict).list_products walked .venv (1000s of files) on the event loop. Fixed: os.walk pruning _SKIP_DIRS.
onerror could spawn duplicate poll loops. Fixed: poll starts once (polling guard), handler nulled on close.
trace.js bounds() spread into Math.min/max → stack overflow on 500+ steps. Fixed: reduce.
#sr-status live region,announces concise summary on change only.
aria-hidden, hue-only). Fixed: SR-only status wordper row + failed = ring shape (not just ember hue).
model_used at 3.1:1 body text. Fixed: --ink-dim (6.5:1).<h1> / page heading. Fixed: visually-hidden <h1>.aria-pressed inconsistency + selected-run had no visible mark. Fixed: view reset on nav switch; .run[aria-pressed="true"] style.
.dot { animation: none } added. watchdog falls back to polling after pollMs*2.
selectedId neverreset; SSE tick clobbered the PRISM sidebar. Fixed: nav handlers reset selection + clear
main; onRuns no-ops unless the Orion view is active.
1.5px-stroke SVG glyphs (ring / prism / terminal).
thesis. Fixed: only the top live run breathes; others static amber; PRISM gates = steady
amber gate state (distinct from running).
:focus-visible outline (updated inbrand.md); §6 grain now implemented.
register/login pools, single-use.
write_secret_0600 via os.open(…,0o600).the login shell when remote mode is exercised (D-3).
terminal (a11y/UX). Both are T10 (terminal) surface** — deferred until the ttyd+Tailscale VPS
exists (D-3); will be addressed when T10 is built and verifiable.
.wf-bar graphic ~3:1 at the line (a11y). Minor; nudge bar color if it regresses.API) and AC-Sec-1 (port scan) require a browser / live Observe API / VPS respectively —
run at D-1/D-3 cutover (documented in spec §5, tasks.md).
staff-eng: fix-first → fixed. perf: ship after 2 fixes → fixed. a11y: not-conformant →
now AA on text, non-color cues added. art-dir: on-brand (minor) → leaks closed. UX:
calm discipline good, 2 bugs → fixed.