Skip to content

feat(dashboard): choice gates in the right rail (all sets at once + sticky nav)#445

Merged
suleimansh merged 2 commits into
mainfrom
feat/dashboard-choices-rail-440
Jul 12, 2026
Merged

feat(dashboard): choice gates in the right rail (all sets at once + sticky nav)#445
suleimansh merged 2 commits into
mainfrom
feat/dashboard-choices-rail-440

Conversation

@suleimansh

Copy link
Copy Markdown
Member

Part of #314. Today a single choice gate renders inline in the main view. The spec wants every pending choice set shown at once in the right rail as a long scroll with a sticky top-nav to jump between them, plus Ctrl+Enter on Accept (parity with the retired page).

What (client only, framework-dashboard is private, so no changeset)

  • ChoicesRail (new): a Choices tab in the right rail that stacks every open gate in a scroll, with a sticky top-nav (numbered, titled) that scrolls to each set. The rail auto-switches to Choices when a gate opens and back to Docs when the last clears; a count badge on the tab.
  • pendingChoices (new, plural): returns every gate the run is parked on, in fire order; a choice-resolved drops its gate, a re-fire replaces in place. pendingChoice (singular) now derives from it.
  • Ctrl+Enter: ChoicePanel gains an active flag; only the first (topmost) gate binds Ctrl+Enter to Accept, so the shortcut is unambiguous with several gates open. A subtle hint shows on the active gate.
  • Shared live feed: the onEvents subscription is lifted into a useLiveEvents hook so the main view and the rail read one Telefunc Channel per project (no double subscription). EventStream is now events-prop-driven; +Page and RelayView own the hook. The inline gate is removed from the main view.

Verify

  • Dashboard typecheck clean, vite build + prerender clean, workspace typecheck 22/22.
  • pendingChoices sanity-checked against seeded events (single + multi + confirm + one resolved): returns the 3 open gates, drops the resolved one, first gate active.
  • Live daemon on :4200 seeded with the same gates for a browser check of the rail render, sticky nav, and Ctrl+Enter.

Closes #440

Move the interactive choice gates out of the main view into the right rail as a
dedicated Choices tab: every gate the run is parked on shown at once in a long
scroll with a sticky top-nav to jump between the sets, instead of one inline gate.
Ctrl+Enter accepts the first (active) gate, restoring page.ts parity.

The live event feed is lifted into a shared useLiveEvents hook so the main view
and the rail read one Telefunc Channel; pendingChoices returns every open gate.

Closes #440
@suleimansh suleimansh self-assigned this Jul 12, 2026
formatFrameworkEvent returns undefined for an unknown event kind (the switch has
no default), and EventList called .trim() on it, white-screening the whole
dashboard on a single malformed or future event. Guard with ?? '' so one bad
event degrades to an empty line under its kind badge instead.
@suleimansh suleimansh merged commit 64bedfb into main Jul 12, 2026
2 checks passed
@suleimansh suleimansh deleted the feat/dashboard-choices-rail-440 branch July 12, 2026 22:31
@suleimansh suleimansh mentioned this pull request Jul 12, 2026
8 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[The Framework] dashboard: choice gates in the right rail (all sets at once + sticky nav)

1 participant