---ci---
phase: 2
milestone: v0.1
status: execute
persona: ci-lead-developer
task: T-2.14
requirements:
covered: [REQ-57, REQ-58]
---/ci---
P1-1: trace auto-scroll now sets container scrollTop (scrollIntoView
moved ancestors, not the inner fold). P1-2: trace events render their
timestamp (acceptance criterion). P1-3: report page gets the standard
main shell. P1-4: completeRun removed from the ApiClient interface —
DONE is engine-owned and arrives via the stream terminal event; the
mock owns the transition locally and persists it before onDone fires.
---ci---
phase: 2
milestone: v0.1
status: execute
persona: ci-lead-developer
task: T-2.14
requirements:
covered: [REQ-54]
---/ci---
Verified: no component/page imports @/lib/api/mock (production code);
all data flows through the ApiClient interface (cancelRun/completeRun
added to the interface — maps to POST /api/runs/{id}/cancel in REQ-25);
no dangerouslySetInnerHTML — report bodies parsed to React nodes;
replay timers cleared on cancel + subscription teardown on unmount;
gates re-run green (typecheck, lint, 33/33 tests, build).
---ci---
phase: 2
milestone: v0.1
status: execute
persona: frontend-engineer
task: T-2.4
requirements:
covered: [REQ-57]
---/ci---
Three-stage RunView: awaiting_approval plan display (sub-questions,
source universe chips, outline, Approve as sole primary action),
streaming trace with progressive event rendering + auto-scroll +
Pause/Resume/Cancel wired to the subscription handle, and
done/cancelled terminal states with onward links. Trace region is
aria-live; cancel persists via cancelRun.