fix(webui): a system page names itself once, thread links open as Assistant panes, one restart control on a stopped organization (#1873) #1971

Merged
jason.woltje merged 6 commits from sp7-polish into refactor 2026-11-15 13:07:05 +00:00
Owner

What changes

  • A system page names itself once. Tasks, Agents, Inbox and Assistant no longer show the page name as a trail line above the same h1. A drill-in such as #/orgs/<id>/agents keeps its trail.
  • A plain click on a thread link opens that thread as a pane on #/assistant. With three open, the new thread replaces the first pane that holds no unsent message. When all three hold one, nothing is replaced and the page says why.
  • Each pane header has a "Full view" link to the thread's own page and a "Messages" link to that pane's organization. The bar no longer names the organization opened last.
  • Links that need the full conversation keep it: a requirement's "Open conversation", and the project page's "Review decision", "Requests in progress" and "Needs your input".
  • "Resume assistant" in a pane is a small secondary control.
  • Inbox class chips use words ("Within role"), from the map the Class filter already used.
  • A stopped organization's page shows one restart control.
  • The unused Side by side parameters are removed from projects.js and workspace.js.

How

  • brand.js hides the trail when it has no link and its text equals the visible h1. Two per-page shell.css rules that did the same are gone.
  • assistant.js adds a capture-phase click handler for thread links. Modified clicks, target, download, typed or pasted addresses and links marked data-full-view are left to the browser.
  • No new server route, no new write route.

Tests

  • New or changed browser tests in assistant-threads, projects-review, single-pane, system-agents, system-inbox, system-tasks and workspace-pages, each red before its fix.
  • Lane gate on a9912983e: 188 webui test files, 1483 pass, 0 fail, 4 skipped (org-quick-live, needs a live scratch instance).
  • Lead check on a9912983e: 141 pass, 0 fail over the changed test files plus org-switch, unified-workspace and browser.

Review

Three rounds, each a fresh claude-opus-5-5 reviewer. Rounds 1 and 2 each asked for two changes, all fixed. Round 3 approved and reproduced the red-first runs.

Left for later

  • "Resume assistant" still shows whenever thread writes are allowed, not only when the assistant is paused or stopped.
  • Leaving the Assistant page drops unsent pane drafts.
  • A pane with a send in flight counts as free for replacement.
  • Per-organization decision and message lists still show the raw class.
  • With three panes at about 761 to 850 px the pane header wraps to two rows.
## What changes - A system page names itself once. Tasks, Agents, Inbox and Assistant no longer show the page name as a trail line above the same h1. A drill-in such as `#/orgs/<id>/agents` keeps its trail. - A plain click on a thread link opens that thread as a pane on `#/assistant`. With three open, the new thread replaces the first pane that holds no unsent message. When all three hold one, nothing is replaced and the page says why. - Each pane header has a "Full view" link to the thread's own page and a "Messages" link to that pane's organization. The bar no longer names the organization opened last. - Links that need the full conversation keep it: a requirement's "Open conversation", and the project page's "Review decision", "Requests in progress" and "Needs your input". - "Resume assistant" in a pane is a small secondary control. - Inbox class chips use words ("Within role"), from the map the Class filter already used. - A stopped organization's page shows one restart control. - The unused Side by side parameters are removed from `projects.js` and `workspace.js`. ## How - `brand.js` hides the trail when it has no link and its text equals the visible h1. Two per-page `shell.css` rules that did the same are gone. - `assistant.js` adds a capture-phase click handler for thread links. Modified clicks, `target`, `download`, typed or pasted addresses and links marked `data-full-view` are left to the browser. - No new server route, no new write route. ## Tests - New or changed browser tests in assistant-threads, projects-review, single-pane, system-agents, system-inbox, system-tasks and workspace-pages, each red before its fix. - Lane gate on a9912983e: 188 webui test files, 1483 pass, 0 fail, 4 skipped (`org-quick-live`, needs a live scratch instance). - Lead check on a9912983e: 141 pass, 0 fail over the changed test files plus org-switch, unified-workspace and browser. ## Review Three rounds, each a fresh claude-opus-5-5 reviewer. Rounds 1 and 2 each asked for two changes, all fixed. Round 3 approved and reproduced the red-first runs. ## Left for later - "Resume assistant" still shows whenever thread writes are allowed, not only when the assistant is paused or stopped. - Leaving the Assistant page drops unsent pane drafts. - A pane with a send in flight counts as free for replacement. - Per-organization decision and message lists still show the raw class. - With three panes at about 761 to 850 px the pane header wraps to two rows.
jason.woltje added 6 commits 2026-11-15 13:07:02 +00:00
- A system page with nothing above it in the trail hides the trail that repeats its h1; drill-in trails stay.
- A project's thread link and each open-in-chat link add that thread as a pane on #/assistant. With three
  open, the first pane without an unsent message is replaced; when all three hold one, nothing is
  replaced and the page says why. Per-org chat addresses still work typed or pasted.
- "Messages in <org>" moves from the bar into each pane header as a link.
- The pane composer's Resume assistant is a small secondary control; behaviour unchanged.
- Inbox class chips read the one map of decision classes to words.
- Removes the unused pane, idPrefix and views params from projects.js and workspace.js; fixes the stale
  comment on the held-message status line.
- While an organization's bus is down, the header draws no bus control; the down banner's restart is the one.
- assistant.css: the pane title shrinks before the header tools wrap, so the close button stays on the title's line at 1440.
- assistant.js: paintNote draws the line under the lead; a refusal marks it data-refused and the line shows in the warning colour until the next change clears it.
- assistant-threads browser test: the refusal line carries data-refused, and closing a pane clears it.
jason.woltje merged commit a9912983e6 into refactor 2026-11-15 13:07:05 +00:00
Sign in to join this conversation.