Skip to content

v4.5.2 - The command centre, the project map dashboard and account chain fixes

Choose a tag to compare

@theyashgupta theyashgupta released this 13 Oct 18:23
660667c

Version 4.5.1 prepared the data for the orchestrator command centre, but it gave no screen for it. The orchestrator was a side panel with a raw terminal. The dashboard showed the board as plain tables. On the account side, the usage reads used more requests than the usage endpoint allows, so the endpoint answered 429. On 2026-10-12, four sessions stopped at the weekly limit, and Dispatch could not move them to a different account. You moved each session by hand.

This release fixes those problems. Each change is a fix or a follow-up to a released feature, so this is a patch release.

The account move works on the new limit screen (LOCAL-112)

An account move no longer fails with limit-unknown when the session shows the limit screen after its menu ("Automatic continue cancelled") or the "Continuing shortly" notice. Dispatch now reads the limit text only from the pane lines below the input line. Old limit text higher in the scrollback no longer counts as a live limit screen. When a move still returns limit-unknown, the server log shows the last 15 lines of the pane, so the next failure has a record.

Evidence: "The move read the limit surface from the whole pane. An old 'Continuing automatically ... esc to cancel' line higher in the scrollback matched as a live surface." (PR #250)

The account chain: a measured usage budget, hysteresis and a login expiry warning (LOCAL-107)

Dispatch now reads the usage of each Claude account on an adaptive plan. The plan stays inside the endpoint budget of about 28 to 30 requests per hour.

  • The plan. The minimum interval is 180 s. The interval is 60 s while the account in use is less than 15 points below the threshold and goes up 1 point or more for each read. Dispatch reads an idle account each 300 to 600 s and a limited account each 600 s. It reads the account in use at least once each 300 s.
  • 429 backoff. A 429 holds the account for Retry-After plus 900 s. During the hold, no part of Dispatch sends a usage request for that account. For one hour after the hold, the reads are slower.
  • The request log. Each usage request writes one line to usage-requests.jsonl in the data folder. A line never holds a token or a header.
  • Hysteresis. The new chain setting hysteresisPercent (default 10) applies before a move that usage causes. Dispatch selects only an account whose highest bucket is below the threshold minus the hysteresis. A limit screen, a StopFailure, Switch now and the exhausted check ignore it.
  • Login expiry. The account row shows the login expiry date, with a warning tone when the date is 3 days away or less. Dispatch sends one login-expiring push for each expiry date.

Evidence: in a replay of one recorded day, the account in use went from 34 requests to 19 requests in its highest hour, and from 588 to 301 requests in the day. (PR #251)

The command centre (LOCAL-104 Part 1b)

Each orchestrator now has its own page, at /boards/<key>/orchestrator. Choose Orchestrator in the board header, or Open command centre next to the Project map title of the dashboard.

  • The graph. The orchestrator node shows its state, context, cost and the count of branches that need you. Each ticket and group that the orchestrator runs is a tile in one of five bands: Needs you, Running, Planned, Done and Shipped. The newest approved plan sets the planned tiles.
  • Inline actions. A tile opens its card. A tile can also show an inline reply, Resume loop, Try resume again or Open terminal, the same actions as the attention queue.
  • The conversation. The right pane has the tabs Conversation and Terminal. The conversation shows your messages, the orchestrator replies, the lines that Dispatch typed and the orchestrator decisions in time order. A plan decision shows a table of order, ticket, playbook and size. The comment box Message the orchestrator sends text to the orchestrator session and shows "Delivered" or "Not confirmed. Check the terminal."
  • Controls. The page header has Start, Stop or Resume, Settings, and a switcher when the board has more than one orchestrator.
  • Narrow screens. Below 768 px, the page has one column with the tabs Branches and Conversation.

Evidence: "The command centre shows one orchestrator of a board as one page. It has the orchestrator, one branch for each ticket and group that it runs, and a conversation with it." (docs/user-guide.md)

The dashboard as a project map (LOCAL-106)

The board dashboard has a new look. The data, the actions and the states of v4.5.0 do not change.

  • Header strip. The title is Project map. One status line shows the synced time, the loops that run, the gates passed today, the money spent and a "need a call" link.
  • Milestone tracks. Each loop is one track with one node for each unit. A node is done, current, failed gate or pending. The current node has a "You are here" pill and a phase bar.
  • Left on this board. A strip shows the count of open cards and one pill for each open card.
  • Ticket tiles. Tiles replace the tickets-by-column table. A tile is stuck, needs input, current, not started or done. The column counts are in Show column counts.
  • The rail. Next step, Needs your call, Changed since and Cost and usage are in a right rail from 1024 px wide. Below 1024 px the page has one column, and Needs your call comes first.
  • Themes and widths. The page works in the light and the dark theme, and at phone widths.

Evidence: "236 pairs per theme, 0 failing" in the contrast run, and "26 browser cases in the loop found no behaviour regression." (PR #254)

Also in this release

  • Specs. Unit specs for the usage poll plan, the usage fetch gate, the request log and the login expiry warning (#252).
  • Decision card. The shared decision card shows the plan table, and long option labels wrap.
  • Design tokens. New soft tint tokens ok-soft, warn-soft and danger-soft, and the dot-grid and glow-current tokens.
  • Visual suite. New cases for the command centre at 1440 px and 390 px in both themes, and new dashboard baselines.

Known limits

  • You cannot approve a permission prompt from the attention queue. Open the terminal.
  • The queue refuses a reply in four cases. The session shows a permission prompt, the session shows the usage limit dialog, the session waits for the usage reset, or Claude exited.
  • A reply of more than 500 characters goes to the loop as a file with a one-line pointer.
  • The queue has no length limit.
  • A Needs input item can take up to about 2 seconds to show, because the marker watcher reads the panes every 2 seconds.
  • The sidebar Dashboard row and the Go to Dashboard command show only on a board with a main orchestrator.
  • When an orchestrator start fails, the reason can be raw text from the Claude pane.
  • A wake line clears a message that you typed but did not send in the orchestrator terminal.
  • A review session runs with the default skip-permissions argument and your gh login. "Post nothing" is a prompt instruction only.
  • A Roadmap Loop session starts with Refuse for messages from other sessions, but a later Resume of it starts with Accept.
  • A session with no hooks gets no settings file, so the messages setting does not apply to it.
  • A review card in Done cannot start a new review after the pull request changes. Ship from a review card pushes the card branch, not the review branch. A second session on a review card fails with a general start error.
  • Dismissed Inbox items never expire. Dismissed (n) ignores the search and the filters. A second dismiss within 10 s replaces the first Undo.
  • The command centre conversation reads all the answered decisions of the board every 3 seconds and filters them in the browser. No load numbers exist.
  • The command centre has no Markdown for orchestrator text, no message search and no paging of older messages. The side panel stays until a later release.
  • A double click on Try resume again sends two requests.
  • Urgent mode can make about 30 usage reads in one rolling hour on a steady climb. A 429 then holds the account, and a limit screen still moves the sessions.
  • The 429 hold is in memory only. A restart reads every account at once.
  • A manual usage refresh inside a 429 hold shows "Wait 30 seconds between refreshes.", also when the hold is longer.
  • Some timing tests fail under load and pass alone.

Upgrade notes

  • The store schema stays at 3. board-db.ts did not change, so there is no migration.
  • One default changes for an existing install. hysteresisPercent is new with the default 10, so hysteresis is on after the upgrade. With the default threshold 100, a move that usage causes refuses an account at 90 percent or more, and an account with no good usage read yet. A limit screen and Switch now still move sessions. Set hysteresisPercent to 0 to get the old selection.
  • For contributors: DISPATCH_USAGE_TIME_SCALE replaces DISPATCH_USAGE_POLL_MS and DISPATCH_USAGE_NEAR_POLL_MS.
  • Otherwise there is nothing to do on upgrade.

See it

dispatch-v4.5.2-centre-map.mp4

Dispatch v4.5.2: the Payments project map in the light theme, the switch to the dark theme in Appearance settings, the same project map in dark, then the command centre opened from the board header, a comment typed in the conversation pane and sent, and the way back to the board

Higher-quality video with narration: dispatch-v4.5.2-centre-map.mp4

Full changelog: v4.5.1...v4.5.2

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