Skip to content

feat(ui): manual-scrub replay transport#51

Merged
sepehr-safari merged 1 commit into
mainfrom
feat/replay-transport
Jul 11, 2026
Merged

feat(ui): manual-scrub replay transport#51
sepehr-safari merged 1 commit into
mainfrom
feat/replay-transport

Conversation

@sepehr-safari

Copy link
Copy Markdown
Member

What

feat(ui): the manual-scrub replay transport (S4 #44) — step the
selection through the timeline.

Closes #44 (the ReplayEngine core landed in #50; this is the closing UI piece).

Changes

  • src/ui/inspector.zig — a transport row atop the timeline pane: First /
    Prev / Next / Last
    buttons + an N / M position readout. It reuses the
    existing select_event Msg with view-computed target indices, so:
    • stepping and clicking share one selection model (the current event highlights
      in the timeline and drives the detail / session / failure panels as usual);
    • it steps over the filtered set — a hidden event is never selected;
    • boundaries clamp (Prev at the start / Next at the end stay put); with nothing
      selected, Next → first and Prev → last.
  • View-only. No Model / Msg / update change (zero risk to the workspace
    tests), and one small row (no widget-node-budget concern).
  • CURRENT_STATE updated.

Why not wall-clock auto-play

Per the spike (and your call): the zero-config runner exposes no timer/tick effect
(Command = menu/shortcut commands, not a TEA effect scheduler), so real-time
auto-play is deferred to the runner-eject bucket (#33). This transport is the
manual step/scrub half, which needs no timer.

Tests

117/117 headless tests pass (native test -Dplatform=null); native check --strict clean; zig fmt clean; the a11y sweep + layout tests still pass. New
coverage drives the actual buttons (press → Msg → selection moves): First / Prev /
Next / Last stepping, empty-selection behavior, and filter-aware stepping (every
landed selection is a visible CallResult).

Add a step control to the timeline pane — First / Prev / Next / Last plus a
position readout — that walks the current selection through the visible events,
reusing the existing select_event message with view-computed target indices. It
steps over the filtered set (a hidden event is never selected) and highlights the
current event in the timeline exactly as a click would. Entirely a view addition;
no Model / Msg / update change.

Real wall-clock auto-play needs a timer source the zero-config runner does not
expose (spiked), so it stays deferred to the runner-eject bucket (#33).

Closes #44.
@sepehr-safari
sepehr-safari merged commit dc365f5 into main Jul 11, 2026
3 checks passed
@sepehr-safari
sepehr-safari deleted the feat/replay-transport branch July 11, 2026 21:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat(engine): replay engine + wall-clock playback

1 participant