Skip to content

v3.8.0 - The board is a page now

Choose a tag to compare

@theyashgupta theyashgupta released this 28 Sep 22:46
· 193 commits to main since this release
3d4628f

You opened Dispatch and got a board. Everything else hung from it. A strip above the columns held the sync clock and the view switch. An Inbox toggle sat beside them. One Settings screen held your playbooks, vault keys, accounts and the archive. That worked while Linear was the only source. It does not scale to pull requests, errors, meetings and messages all wanting a place to land.

This release gives Dispatch a sidebar and pages. The board is one page among many. Inbox, Sessions, Tickets, Activity, Accounts and Usage, Playbooks, Vault, Archive and Settings each get a hash route that survives a reload. A command palette jumps between them.

A sidebar, pages and Cmd+K

The sidebar groups its rows. Home holds the Inbox with a count badge. Work holds Board, Sessions, Workspace and Activity. Sources holds Tickets. System holds Accounts and Usage, Playbooks, Vault and Archive. The footer keeps the sync clock, your account, New ticket and Settings. The sidebar collapses to icons, force-collapses under 1024px, and becomes a top bar with a menu sheet on a phone.

The Inbox lists tickets waiting for a decision as one ranked list. It has search, a source filter, a time range, an unread toggle, and grouping by source, type or state. Every row has a Promote button. j and k walk the rows, Enter opens the ticket panel.

Cmd+K opens the palette on any page: "Go to" for every page, New ticket, Sync now, then ticket search. With a ticket selected it adds Start, Open terminal, Move to and Clean up. On the board, j k h l move between cards and columns. 1 to 7 move the focused card. ? shows every shortcut in one sheet.

Sessions on one page

The Sessions page lists every session across every card, live and past, in four sections: In progress, Needs you, Finished, Lost. Filters cover live only, account, status and text. A row opens the panel on that session. Selected rows take a bulk Clean up or Resume lost.

Act on Linear from the card

Linear cards show the workflow state in Linear's own color, with team key and cycle, refreshed past To Do too. The panel shows the last five comments and posts a new one. Assign to me is one button. Sync to Linear creates the issue with a direct GraphQL call and a team and state picker. No Claude session runs. It never creates a second issue for the same card. A per-team map in Settings ties board columns to Linear states. A manual move or a start pushes the mapped state, agent-driven moves never do. The Tickets page groups every Linear card by status, priority, project, cycle or team.

Settings tabs and a setup wizard

Settings splits into nine tabs on their own hashes: Connections, Board, Appearance, Notifications, Remote access, Workspaces, About you, Updates, About. The old hashes still resolve. Connections shows Linear as one card with a setup guide, a key form that tests before it saves, and a Disconnect that keeps your cards.

A five-step wizard replaces the first-run key page: Welcome with the prerequisite checklist, Connect Linear, More sources, Add a workspace, a summary. You can skip the connection and still use the app. "Run setup guide" on the Connections tab reopens it.

What changed underneath

Sources are a registry with one poll loop per source. Each source declares whether it pulls a full snapshot or appends. Only a complete snapshot pull may remove a card that vanished upstream. A light Item entity lives in an items table in board.db for things that are not tickets yet, and a promote mints a local card. No source produces items in this release. The entity shipped ahead of its first producer.

Every key, menu row and palette row routes through one actions module. Outbound Linear writes go through four mutations in one server module. Comments never ride the live snapshot.

Known limits

The Inbox's item actions have no live consumer until a source produces items. Done cards past the 50-card window are not on the wire, so their sessions are not listed. The Linear write paths were verified against a fake Linear server, not the live service, because Linear rejects the stored test key. The wizard's summary reads Connected for Linear only. Harmless now, wrong once a second source can connect. Page wiring is proven by browser runs, not by a DOM test suite, because the repo has none.

Upgrade notes

Existing boards need no migration. Dispatch creates the items table on first boot. Dispatch rewrites a flat linearApiKey in ~/.dispatch/config.json once into sources.linear.apiKey. A failed rewrite keeps the flat key working. A user with a key never sees the wizard. A first-run user, or one who never set a key, sees it once and can skip it. Restart the running Dispatch after you upgrade, then reload the page. The first poll after upgrade clears stale "Gone from Linear" badges.

See it

Dispatch v3.8.0: the sidebar and Inbox page, Promote sending a ticket to To Do, the Cmd+K palette jumping to Sessions, the keyboard cheat sheet, and the nine Settings tabs

Higher-quality video: dispatch-v3.8.0-sidebar-shell.mp4

Full changelog: v3.6.3...v3.8.0

Requires Node ≥ 22.22, tmux, ttyd, git, and the Claude Code CLI. Setup is in the README.