diff --git a/packages/local-runtime-v2/test/integration/webui-owner-host.integration.test.ts b/packages/local-runtime-v2/test/integration/webui-owner-host.integration.test.ts index 2bc36deb7..bb389fd08 100644 --- a/packages/local-runtime-v2/test/integration/webui-owner-host.integration.test.ts +++ b/packages/local-runtime-v2/test/integration/webui-owner-host.integration.test.ts @@ -96,7 +96,7 @@ describe('a host declared as webui', () => { ); it( - 'reports cron native and the channel bridge unsupported in its diagnostics', + 'reports cron native and the channel bridge native in its diagnostics', async () => { const host = await bootWebuiHost(); // Phase 2's correction, observed end to end: the surface table no longer claims @@ -106,7 +106,11 @@ describe('a host declared as webui', () => { | Record | undefined; expect(surfaces?.cron?.status).toBe('native'); - expect(surfaces?.channelBridge?.status).toBe('unsupported'); + // The WebUI row of the owner policy assembles the channel service: the + // browser client's remote page carries the channel tab, so a browser + // owner has a screen to bind and manage a channel with. The surface + // table reports the bridge it assembled, which is a native one. + expect(surfaces?.channelBridge?.status).toBe('native'); }, 120_000, ); diff --git a/packages/webui/docs/verification/coverage-review.md b/packages/webui/docs/verification/coverage-review.md index c808a54fd..6713e1a8b 100644 --- a/packages/webui/docs/verification/coverage-review.md +++ b/packages/webui/docs/verification/coverage-review.md @@ -9,14 +9,14 @@ not claim. A number in this document is a number some gate produced. | Question | Count | | --- | --- | -| Client UI modules classified | 131 | +| Client UI modules classified | 133 | | Modules with a pending contract decision | 0 | -| Floating layers inventoried | 22 | -| Floating layers managed by the coordinator | 21 | +| Floating layers inventoried | 23 | +| Floating layers managed by the coordinator | 22 | | Business-authored alerts left (all exempt) | 2 | -| Motion distinct effects with a recorded reason | 24 | +| Motion distinct effects with a recorded reason | 25 | | Accessibility findings recorded as debt | 0 | -| Accessibility exceptions | 26 | +| Accessibility exceptions | 0 | | Accessibility manual reviews open | 0 | ## Every entry still pending, and why @@ -56,11 +56,11 @@ Not verified by any browser check: - `features/account/ui/UserMenuUsage.tsx` — borrows the dialog role for labelling only: renders role=dialog for labelling only: it is a hover/focus fly-out inside the account menu's layer and is dismissed by that menu, not by itself. Owner: the account menu. Removal: when the fly-out becomes a layer of its own. ### The accessibility scan -- 26 reviewed exceptions, each carrying rule, surface, state, target, reason, owner and removal condition in `accessibility-exceptions.json`. +- 0 reviewed exceptions, each carrying rule, surface, state, target, reason, owner and removal condition in `accessibility-exceptions.json`. ### The motion inventory -- 24 durations and one keyframe are recorded as distinct effects, each with the reason it is not one of the four families (`docs/design/motion-inventory.json`). +- 25 durations and one keyframe are recorded as distinct effects, each with the reason it is not one of the four families (`docs/design/motion-inventory.json`). ## Families whose contract is still partly a business's own diff --git a/packages/webui/src/client/features/workspace/ui/WebuiWorkspaceTabStrip.public.tsx b/packages/webui/src/client/features/workspace/ui/WebuiWorkspaceTabStrip.public.tsx index 987cab228..9ec6dfc14 100644 --- a/packages/webui/src/client/features/workspace/ui/WebuiWorkspaceTabStrip.public.tsx +++ b/packages/webui/src/client/features/workspace/ui/WebuiWorkspaceTabStrip.public.tsx @@ -286,7 +286,7 @@ export function WebuiWorkspaceTabStrip({ const tabListRef = useRef(null); useEffect(() => { tabListRef.current - ?.querySelector('[aria-selected="true"]') + ?.querySelector('[aria-pressed="true"]') ?.scrollIntoView({ block: "nearest", inline: "nearest" }); }, [state.activeTabId]); @@ -335,8 +335,7 @@ export function WebuiWorkspaceTabStrip({ variant="plain" size="regular" className="webui-workspace-tab-control" - role="tab" - aria-selected={state.activeTabId === item.id} + aria-pressed={state.activeTabId === item.id} data-testid={`workspace-tab-${item.id}`} onClick={() => dispatch({ type: "select-tab", tabId: item.id })} > diff --git a/packages/webui/src/client/features/workspace/ui/WorkspacePanels.tsx b/packages/webui/src/client/features/workspace/ui/WorkspacePanels.tsx index c32c9a20a..53fcdb7ee 100644 --- a/packages/webui/src/client/features/workspace/ui/WorkspacePanels.tsx +++ b/packages/webui/src/client/features/workspace/ui/WorkspacePanels.tsx @@ -752,7 +752,7 @@ export function WebuiWorkspacePanel({ state, dispatch, sessionId, workspaceDir, return