feat(webui): an organization's workflows read only, a list, a step graph with the selected step's detail, and a Workflows card on the organization page (#1873)
#1973
An organization's workflows can be read in the Console. #/orgs/<id>/workflows lists them by scope (organization, then each code project) with step count, description and the step chain.
#/orgs/<id>/workflows/<name> draws the steps as a graph, one box per step with its state, title and roles, and arrows in step order. Left to right above 700 px, top to bottom at 700 px and below.
Selecting a step shows its position, roles, the state it puts a task in, and links to the previous and next step. The address carries ?step=n.
A role that names no current role is marked in red on its step.
The organization page gets a Workflows card above Settings, with an "All workflows" link and one link per workflow. The right column is now named "Workflows and settings".
With no workflows the page says so and, when the read says the Console can write, links to Apply a pack. A stopped organization says it was not read and never says "no workflows".
Read only. Nothing here edits a workflow.
How
workflows.js gains page(org, name, q) and card(org, opts) on window.MosaicWorkflows, next to the existing editor code. New workflows.css, theme tokens only.
bus.js routes the two addresses and treats them as workspace pages, so they poll and repaint like the others.
It reads the existing GET /api/orgs/<id>/workflows. No new server route, no write route. serve.mjs only serves the new stylesheet.
Tests
New tests/workflows-browser.test.mjs, 12 results, red on the base.
unified-workspace-browser.test.mjs: the tab-order test names the renamed column and checks Tab reaches "All workflows".
Lane gate on 7c6571768: 190 webui test files, 1504 pass, 0 fail, 4 skipped (org-quick-live, needs a live scratch instance).
Lead check on 7c6571768: 143 pass, 0 fail over the changed test files plus the system page files.
Review
Two rounds, each a fresh claude-opus-5-5 reviewer. Round 1 asked for one change (role names ran past the step box on a four-role step) and three smaller ones, all fixed. Round 2 approved.
Left for later
At 1440 the missing-role line cuts the role name ("No current role: merg..."). The step panel names it in full.
The "text stays inside its box" test cannot fail while the clip path exists.
No running-step mark: no read says which step a task is on.
No branches, gates or inputs: the workflow file is a flat list of steps.
Roles are text, not chips with the agents that fill them.
No editing, and no Summary / Workflows / Settings tabs on the organization page.
## What changes
- An organization's workflows can be read in the Console. `#/orgs/<id>/workflows` lists them by scope (organization, then each code project) with step count, description and the step chain.
- `#/orgs/<id>/workflows/<name>` draws the steps as a graph, one box per step with its state, title and roles, and arrows in step order. Left to right above 700 px, top to bottom at 700 px and below.
- Selecting a step shows its position, roles, the state it puts a task in, and links to the previous and next step. The address carries `?step=n`.
- A role that names no current role is marked in red on its step.
- The organization page gets a Workflows card above Settings, with an "All workflows" link and one link per workflow. The right column is now named "Workflows and settings".
- With no workflows the page says so and, when the read says the Console can write, links to Apply a pack. A stopped organization says it was not read and never says "no workflows".
- Read only. Nothing here edits a workflow.
## How
- `workflows.js` gains `page(org, name, q)` and `card(org, opts)` on `window.MosaicWorkflows`, next to the existing editor code. New `workflows.css`, theme tokens only.
- `bus.js` routes the two addresses and treats them as workspace pages, so they poll and repaint like the others.
- It reads the existing `GET /api/orgs/<id>/workflows`. No new server route, no write route. `serve.mjs` only serves the new stylesheet.
## Tests
- New `tests/workflows-browser.test.mjs`, 12 results, red on the base.
- `unified-workspace-browser.test.mjs`: the tab-order test names the renamed column and checks Tab reaches "All workflows".
- Lane gate on 7c6571768: 190 webui test files, 1504 pass, 0 fail, 4 skipped (`org-quick-live`, needs a live scratch instance).
- Lead check on 7c6571768: 143 pass, 0 fail over the changed test files plus the system page files.
## Review
Two rounds, each a fresh claude-opus-5-5 reviewer. Round 1 asked for one change (role names ran past the step box on a four-role step) and three smaller ones, all fixed. Round 2 approved.
## Left for later
- At 1440 the missing-role line cuts the role name ("No current role: merg..."). The step panel names it in full.
- The "text stays inside its box" test cannot fail while the clip path exists.
- No running-step mark: no read says which step a task is on.
- No branches, gates or inputs: the workflow file is a flat list of steps.
- Roles are text, not chips with the agents that fill them.
- No editing, and no Summary / Workflows / Settings tabs on the organization page.
The graph reads the existing GET /api/orgs/<id>/workflows; no new route and no write.
A stopped bus shows the data-ws-unread note, never "no workflows". An organization
with none says so and links Apply a pack only where this Console may apply one.
At 700px and below the graph runs top to bottom inside its own frame.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
What changes
#/orgs/<id>/workflowslists them by scope (organization, then each code project) with step count, description and the step chain.#/orgs/<id>/workflows/<name>draws the steps as a graph, one box per step with its state, title and roles, and arrows in step order. Left to right above 700 px, top to bottom at 700 px and below.?step=n.How
workflows.jsgainspage(org, name, q)andcard(org, opts)onwindow.MosaicWorkflows, next to the existing editor code. Newworkflows.css, theme tokens only.bus.jsroutes the two addresses and treats them as workspace pages, so they poll and repaint like the others.GET /api/orgs/<id>/workflows. No new server route, no write route.serve.mjsonly serves the new stylesheet.Tests
tests/workflows-browser.test.mjs, 12 results, red on the base.unified-workspace-browser.test.mjs: the tab-order test names the renamed column and checks Tab reaches "All workflows".7c6571768: 190 webui test files, 1504 pass, 0 fail, 4 skipped (org-quick-live, needs a live scratch instance).7c6571768: 143 pass, 0 fail over the changed test files plus the system page files.Review
Two rounds, each a fresh claude-opus-5-5 reviewer. Round 1 asked for one change (role names ran past the step box on a four-role step) and three smaller ones, all fixed. Round 2 approved.
Left for later