Skip to content

Event Logs UI phase 3: Layout state, view bar, three-column shell #829

Open

Description

@adamgell

Part of #823.
Depends on: #827, #828.
Spec: docs/superpowers/specs/2026-10-08-event-logs-workbench-ui-handoff-design.md (see the section references below).
Design: Claude Design canvas "Event Log Viewer Redesign" (board exports to be attached).

Spec: §5, §8.2, §9 (layout persistence)

Scope (5 files)

  • evtx-layout-store.ts (+ test, new): activeView, panels {channels, insights, dock}, railTab, railWidth, dockHeight.
  • EvtxViewBar.tsx (+ test, new): layout tablist, panel toggles, Group by, Columns, Export menu (existing formats).
  • EventLogWorkspace.tsx: channel pane | main | rail columns; Table is the only view wired in this phase
    (others render a "Not implemented in this phase" placeholder behind the same tablist).

Acceptance

  • Measurements per spec §5.1–5.2 (±2 px) in the Phase 2 screenshots.
  • Keyboard: tablist arrow navigation; toggles expose aria-pressed.
  • Confirm and document the persistence mechanism for layout state (spec §13.2).
  • tsc / tests / diff-check / screenshots pass.

Generated by Claude Code

Activity

  1. adamgell commented on Oct 11, 2026

    @adamgell
    OwnerAuthor

    Layout persistence, confirmed for spec 13.2 (the A.5 acceptance item), from the Phase 3 lane at local head 2dcf4f2 (verified by its fix-verification review against source):

    • Mechanism: zustand persist over the default localStorage, the same middleware the app already uses for ui-store (key cmtraceopen-ui-preferences) and evtx-filter-store (key cmtraceopen-evtx-saved-filters).
    • Key and version: cmtraceopen-evtx-layout, version 1.
    • What is stored: partialize keeps exactly activeView, panels, railTab, railWidth and dockHeight. No record content is stored.
    • Rehydration: merge sanitizes on every load. An unknown view or rail tab falls back to Table or Insights, non-boolean panel flags fall back to their defaults, panels whose phase has not shipped are forced off, non-finite sizes fall back to defaults and every size is clamped (rail 280 to 480, dock at least 160), and unknown keys are dropped. The dock's 50vh ceiling is applied in pixels at render time.
    • Enabling a panel later: the phase that ships a panel flips it in EVTX_PANELS_AVAILABLE and DEFAULT_PANELS, bumps the persist version and migrates a stored false to the new default; a guard test makes a missed migration fail.

    Spec section 9 still marks the mechanism [Unverified]; this comment is the confirmation until a spec errata pass updates it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions