Skip to content

feat(ui): virtualized event timeline#35

Merged
sepehr-safari merged 1 commit into
mainfrom
feat/event-timeline
Jul 11, 2026
Merged

feat(ui): virtualized event timeline#35
sepehr-safari merged 1 commit into
mainfrom
feat/event-timeline

Conversation

@sepehr-safari

Copy link
Copy Markdown
Member

Summary

The inspector's centerpiece: a virtualized event timeline. One row per OCPP
event, in a model-owned split beside a detail pane — and it stays viewport-sized
in widget nodes no matter how large the trace is.

  • Windowed virtual list (ui.virtualList / ui.virtualWindow) over the
    active trace's events. The runtime owns the scroll; the view builds only the
    visible window, keyed by event index. A 500 000-event trace materializes a few
    dozen row nodes, not 500k — well under the 1024 widget-node per-view budget.
  • Rows: a severity dot (shown when the event participates in a detected
    failure, colored by severity), the index, UTC time-of-day, a direction
    affordance (CS→CSMS / CSMS→CS / unknown), the message (action for calls, the
    responded UniqueId for results, code: description for errors), and the message
    type. Clicking a row selects the event.
  • Split layout: the timeline (left) and a detail pane (right) sit in a
    model-owned split; the divider fraction echoes back through value after
    each drag (timeline_resized).
  • Detail pane (first cut): the selected event's normalized fields. The full
    inspector — raw OCPP-J array, payload tree, and session panel — is feat(ui): message inspector + session panel #30; this
    establishes the pane and the selection wiring.

Verification

  • native test -Dplatform=null65/65 pass (macOS; CI also runs Linux).
    New coverage: the timeline renders sample rows; a row press selects the event
    and the detail pane reflects it (through msgForPointer); the splitter fraction
    round-trips; the virtual window stays viewport-sized at 500 000 items
    (window.itemCount() < 64); and the accessibility sweep still passes over the
    split + timeline tree.
  • native check --strict clean; native build produces the ReleaseFast binary.
  • scripts/smoke.sh now also asserts a timeline row (BootNotification) renders
    live — the CI Linux · Xvfb job drives the real window.

Notes

  • The 500k-event end-to-end capacity claim (a real 100 MB trace parsed and
    correlated) lands with the trusted-ingestion engine path in feat(engine): trusted-ingestion parse path + streaming (500k / 100 MB) #29; this PR proves
    the UI side — the window math is viewport-bounded regardless of item count.
  • Direction and severity are drawn with built-in vector icons carrying
    accessibility labels (no font-coverage risk, a11y-clean).

Closes #28

Add the inspector's centerpiece — a windowed virtual list of trace
events in a model-owned split (S3):

- The timeline uses `ui.virtualList`, so the visible window (and the
  widget-node budget) stays viewport-sized no matter the trace length: a
  500k-event trace materializes a few dozen row nodes, not 500k. Proven
  by a dataset-scale window-math test.
- Each row shows a severity dot (when the event participates in a
  detected failure), the index, UTC time, a direction affordance, the
  message (action / responded id / error), and the message type.
  Clicking a row selects the event through the pressable row.
- A model-owned splitter separates the timeline from a detail pane; the
  fraction echoes back through `value` after each drag.
- A first-cut detail pane shows the selected event's normalized fields;
  the full inspector (raw array, payload tree, session panel) is #30.

Closes #28
@sepehr-safari sepehr-safari added this to the S3 — Inspector UI milestone Jul 11, 2026
@sepehr-safari sepehr-safari added type:feature New capability area:ui Native markup views labels Jul 11, 2026
@sepehr-safari
sepehr-safari merged commit 6d31d71 into main Jul 11, 2026
3 checks passed
@sepehr-safari
sepehr-safari deleted the feat/event-timeline branch July 11, 2026 13:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:ui Native markup views type:feature New capability

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat(ui): virtualized event timeline

1 participant