3.6 KiB
Dashboard orchestration focus
Outcome
The dashboard is now an orchestration stage: compact operational status frames the top, compact focus tasks frame the bottom, and Iris enters only when the owner invokes the topbar action.
This is a distill correction for an operational product surface. It preserves
the established Galaxy/Glass direction and all existing dashboard stores,
requests, events, task data, chat messages, agent actions, and route behavior.
Implementation
- Removed the permanently visible
360pxIris rail from the dashboard workspace. - Made the existing topbar action an explicit
Iris Chattrigger witharia-haspopup="dialog",aria-expanded, andaria-controls. - Rendered the existing
IrisChat.vuedata and send handler inside a native modal dialog. The dialog is absent by default, focuses the message field, closes through its named button or Escape, and returns focus to the trigger. - Reduced the operations status surface to one
46pxrow. Narrow layouts keep active/planning/blocker signals and remove lower-priority idle/cost detail. - Reduced the task surface to one
44pxfocus row with priority, state, title, and owner retained through visible or accessible text. - Increased the first multi-row auto-layout offset to avoid node overlap and
introduced compact agent cards at
680pxand below. - Replaced the affected blank inline icon slots with the installed Lucide components.
No backend, API, store, service, DTO, route, permission, chat-send, task, or agent-selection contract changed.
Measured geometry
At 1440 x 1000:
| Surface | Before | After | Change |
|---|---|---|---|
| Live orchestration | 774 x 731px |
1152 x 808px |
+48.8% width, +10.6% height |
| Iris rail | 360 x 902px |
absent until invoked | full workspace width recovered |
| Operations status | 57px high |
46px high |
-19% |
| Focus tasks | 87px high |
44px high |
-49% |
Operated proof
- Default state: Iris dialog absent and
aria-expanded="false". - Pointer path: Iris Chat open -> named close button -> dialog removed -> focus returned to Iris Chat.
- Keyboard path: Iris Chat open -> input focused -> Escape -> dialog removed -> focus returned to Iris Chat.
- Input path: message text enables the named send action; the existing send handler remains unchanged.
- Native dialog top layer and backdrop passed at desktop and
375px. - No page overflow, clipped nodes, or node intersections at
375,680,681,768,1024,1440, or1920px.
The after-state used a temporary controlled browser fixture so the layout could be exercised without credentials or external API dependency. The fixture and temporary QA entry were removed after capture. Evidence maturity is controlled local browser proof, not deployment evidence.
Evidence
screenshots/dashboard-orchestration-before-1440.pngscreenshots/dashboard-orchestration-before-693.pngscreenshots/dashboard-orchestration-after-1440.pngscreenshots/dashboard-orchestration-after-375.pngscreenshots/dashboard-iris-modal-after-1440.pngscreenshots/dashboard-iris-modal-after-375.png
Technical gates
vue-tsc --noEmit -> passed
vitest run -> passed (1 file, 2 tests)
vite build -> passed (1,873 modules)
git diff --check -> passed; line-ending notices only
The Codex pnpm wrapper attempted a package-manager bootstrap before executing
the repository scripts. Restricted registry access and its non-interactive
dependency-purge prompt blocked that wrapper path; the already-installed local
script binaries above completed successfully.
No commit, push, or deployment was performed.