This was generated by AI during triage.
Problem Statement
The Gateway page's current Client routing area is built around Managed Takeover: every client card ends with an Official/CodexHub segmented control. Under Provider Injection (ADR-0004), connect means adding CodexHub's Injected Block and disconnect means surgically removing it; CodexHub never changes the client's model selection. The right column must present this new contract truthfully without redesigning the already-established Gateway, Recovery, or Usage & Cost surfaces.
Solution
Keep the existing Gateway page and left column unchanged. Redesign only the fixed-height Client routing column as a compact list of five client cards (OpenCode, DeepSeek Harness, ZCode, Pi, OMP). Each card contains its own unframed status label and standard toggle: on = inject, off = detach. No Gateway entity card, topology rail, connection lines, Ready badge, Official/CodexHub segmented control, or active-model indicator is shown.
The right column is exactly as tall as the left column. Five cards fit without scrolling at the normal window size; if height is insufficient or future clients are added, only the client list scrolls and its scrollbar stays at the panel edge.
User Stories
- As a user, I want the Gateway page's existing left column to remain familiar, so that a client-integration change does not redesign unrelated controls.
- As a user, I want all five supported clients visible at once, so that I can inspect connections without scrolling in the normal window size.
- As a DSH user, I want DeepSeek Harness listed alongside OpenCode, ZCode, Pi, and OMP, so that it feels first-class.
- As a user, I want one toggle inside each client card, so that connect/disconnect is obvious and local to that client.
- As a user, I want turning a toggle on to inject CodexHub and turning it off to surgically detach it, so that the control maps directly to the backend contract.
- As a user, I want CodexHub to leave my model-selection switch alone, so that connecting never changes which model my client uses.
- As a user, I want connection state expressed by meaningful labels and toggle colors, so that I can distinguish Connected, Updating, Repair, Disconnected, and Unavailable.
- As a user, I want the toggle to use the same simple visual treatment as Auto retry, so that it matches the existing application.
- As a user, I want the toggle's label and track to use blue for connected/updating, amber for repair, and gray for disconnected/unavailable, so that exceptional states are recognizable.
- As a user, I want each card to show the client icon, name, kind, version, and config path, so that I know exactly what CodexHub will change.
- As a user, I want contextual text such as Injected provider or Configuration changed, so that I understand the current state without a meaningless Ready badge.
- As a user, I want config drift to be actionable, so that reconnecting repairs only the Injected Block.
- As a user, I want not-installed clients disabled and visibly muted, so that unavailable actions are truthful.
- As a user, I want connect/disconnect results reported through the shared Toast lifecycle, so that success and failure are explicit.
- As a keyboard or screen-reader user, I want a real labelled switch with aria-checked state, so that the interaction is accessible.
- As a user on a smaller window, I want only the client list to scroll, so that the Client routing header and left column stay stable.
Implementation Decisions
- Scope boundary: modify only the Gateway page's Client routing aside. Gateway settings, Copy connection, Recovery, Usage & Cost, RuntimeBar, tabs, and the Providers page remain unchanged.
- Layout: the page grid stretches both columns to one height. Client routing is an h-full/min-h-0 panel with an auto/minmax list row. The internal list uses edge-aligned vertical scrolling; five cards are compact enough to fit at the normal height.
- Header: Client routing keeps a small Network icon and refresh control, following the same PanelTitle pattern as the other Gateway modules.
- No topology decoration: no Gateway source card, vertical rail, horizontal branch, connector node, or flow animation in this column.
- Client cards: neutral surface cards with 12px inner radius and control/raised shadows. Each shows icon, client name, kind, compact version chip, inset config-path row, and state narrative. Drift gets an amber ring/tint; unavailable clients are muted.
- Connection control: a status label plus the existing standard toggle, directly inside the card. There is no outer border, background, pill, or shadow wrapper. Connected/Updating use action blue; Repair uses warning amber; Disconnected/Unavailable use neutral gray.
- Removed UI: delete the Ready badge and Official/CodexHub segmented switch. Do not show an active/pointing state.
- State contract: connected means the Injected Block is present and passes block-fingerprint readback. Repair means drift. The toggle calls client_connect(client_id) / client_disconnect(client_id); takeover-era clients map internally to their legacy apply/restore paths until migrated.
- DSH: add the fifth contract entry, icon, installed/version/config status, and the same card/control semantics as every other client.
- Feedback: persistent changes use the shared Toast lifecycle and disclose exact restart requirements; DSH requires none because it hot-reloads.
- Localization/accessibility: all new copy lands in en-US and zh-CN; labels are not color-only; the toggle is a labelled switch.
Testing Decisions
Good tests assert visible behavior and command contracts, not CSS hierarchy.
Out of Scope
Further Notes
Problem Statement
The Gateway page's current Client routing area is built around Managed Takeover: every client card ends with an Official/CodexHub segmented control. Under Provider Injection (ADR-0004), connect means adding CodexHub's Injected Block and disconnect means surgically removing it; CodexHub never changes the client's model selection. The right column must present this new contract truthfully without redesigning the already-established Gateway, Recovery, or Usage & Cost surfaces.
Solution
Keep the existing Gateway page and left column unchanged. Redesign only the fixed-height Client routing column as a compact list of five client cards (OpenCode, DeepSeek Harness, ZCode, Pi, OMP). Each card contains its own unframed status label and standard toggle: on = inject, off = detach. No Gateway entity card, topology rail, connection lines, Ready badge, Official/CodexHub segmented control, or active-model indicator is shown.
The right column is exactly as tall as the left column. Five cards fit without scrolling at the normal window size; if height is insufficient or future clients are added, only the client list scrolls and its scrollbar stays at the panel edge.
User Stories
Implementation Decisions
Testing Decisions
Good tests assert visible behavior and command contracts, not CSS hierarchy.
Out of Scope
Further Notes