fix(webui): the organization page fits its width with the agent drawer open, #/orgs/<id>?query opens the organization page, the drawer waits for the state read before it names a state, the Queue card says plainly why it shows nothing (#1873) #1977

Merged
jason.woltje merged 3 commits from sp13-org-page-fit into refactor 2026-11-15 19:20:36 +00:00
Owner

What changes

  • The organization page fits its width. Its two columns wrap to one when the content is narrower than both need, with or without the agent drawer. The Settings card puts a value on its own row when the card is narrow, so no value or Open link is cut.
  • #/orgs/<id>?query is the organization page with the query kept. #/orgs/acme?agent=acme:assistant opens the drawer. Before, it painted "Organization unavailable".
  • The agent drawer says "Reading state…" until the bus instances read answers, and "State not read" when that read fails or carries no runs. It no longer says "not running" before it knows. The Stop note and the Agents table follow the same rule.
  • The Queue card says in plain words that this Console does not run from the checkout that holds the queue, and drops the Open queue link, when the queue store refuses for that reason. Any other refusal keeps its reason and its link.

How

  • shell.css: the organization page's split is a flex wrap, and the Settings card is an inline-size container. A viewport breakpoint could not see the drawer, which shrinks the content box and not the viewport.
  • display.js (orgOf, tail) and workspace.js (route) match the organization segment with [^/?]+.
  • workspace.js: the drawer has its own instances read per organization. An answer that arrives after the drawer closed is dropped.
  • No new server route, no new write route, no schema change, nothing under roles/, contracts/ or packages/queue/.

Tests

  • New tests/org-page-fit-browser.test.mjs, 9 tests. Six failed on the base commit, each for the fault it names. It includes the test sp12 left out: a repaint keeps the Stop question on screen.
  • Lane gate on 68df55130: 192 webui test files, 1547 pass, 0 fail, 4 skipped (org-quick-live, needs a live scratch instance).
  • Lead check on 68df55130: 205 pass, 0 fail over the new test file plus the drawer, agents, single-pane, workspace, tiles, switch, layout, workflows, tasks, inbox and assistant files.

Review

One fresh claude-opus-5-5 reviewer approved with no P1 or P2 and five P3. Two were fixed in 68df55130 (a stale drawer answer after close, shots that showed no drawer). The fix is about four source lines plus a test.

Left for later

  • The bus's async instances path (packages/bus/src/broker.mjs) returns before it adds running state, so clients can get instances without runs. The web UI now says "state not read" there. The bus should send the runs.
  • With no runs in the answer, the organization page still says "none running" and "0 running" in three places.
  • The repaint after a pending drawer read runs every page read again.
  • The Queue card shows the repository's development queue, the same for every organization. It may not belong on an organization page.
## What changes - The organization page fits its width. Its two columns wrap to one when the content is narrower than both need, with or without the agent drawer. The Settings card puts a value on its own row when the card is narrow, so no value or Open link is cut. - `#/orgs/<id>?query` is the organization page with the query kept. `#/orgs/acme?agent=acme:assistant` opens the drawer. Before, it painted "Organization unavailable". - The agent drawer says "Reading state…" until the bus instances read answers, and "State not read" when that read fails or carries no runs. It no longer says "not running" before it knows. The Stop note and the Agents table follow the same rule. - The Queue card says in plain words that this Console does not run from the checkout that holds the queue, and drops the Open queue link, when the queue store refuses for that reason. Any other refusal keeps its reason and its link. ## How - `shell.css`: the organization page's split is a flex wrap, and the Settings card is an inline-size container. A viewport breakpoint could not see the drawer, which shrinks the content box and not the viewport. - `display.js` (`orgOf`, `tail`) and `workspace.js` (`route`) match the organization segment with `[^/?]+`. - `workspace.js`: the drawer has its own instances read per organization. An answer that arrives after the drawer closed is dropped. - No new server route, no new write route, no schema change, nothing under `roles/`, `contracts/` or `packages/queue/`. ## Tests - New `tests/org-page-fit-browser.test.mjs`, 9 tests. Six failed on the base commit, each for the fault it names. It includes the test sp12 left out: a repaint keeps the Stop question on screen. - Lane gate on 68df55130: 192 webui test files, 1547 pass, 0 fail, 4 skipped (`org-quick-live`, needs a live scratch instance). - Lead check on 68df55130: 205 pass, 0 fail over the new test file plus the drawer, agents, single-pane, workspace, tiles, switch, layout, workflows, tasks, inbox and assistant files. ## Review One fresh claude-opus-5-5 reviewer approved with no P1 or P2 and five P3. Two were fixed in 68df55130 (a stale drawer answer after close, shots that showed no drawer). The fix is about four source lines plus a test. ## Left for later - The bus's async instances path (`packages/bus/src/broker.mjs`) returns before it adds running state, so clients can get instances without runs. The web UI now says "state not read" there. The bus should send the runs. - With no runs in the answer, the organization page still says "none running" and "0 running" in three places. - The repaint after a pending drawer read runs every page read again. - The Queue card shows the repository's development queue, the same for every organization. It may not belong on an organization page.
jason.woltje added 3 commits 2026-11-15 19:20:31 +00:00
jason.woltje merged commit 68df55130e into refactor 2026-11-15 19:20:36 +00:00
Sign in to join this conversation.