diff --git a/apps/web/src/components/Toast.tsx b/apps/web/src/components/Toast.tsx index 022447d..64d5983 100644 --- a/apps/web/src/components/Toast.tsx +++ b/apps/web/src/components/Toast.tsx @@ -3,7 +3,7 @@ import { createContext, useCallback, useContext, useRef, useState } from 'react' /** * App-wide toast notifications (issue #130). One provider near the root owns * the stack; `useToast()` hands out a fire-and-forget `showToast`. Toasts are - * announced politely (`role="status"` on the stack container), stack bottom + * announced politely (`aria-live` on the stack container), stack bottom * center above the footer, and dismiss themselves — clicking one dismisses * it early. The plugin host's `ui.toast` capability feeds the same stack. */ @@ -49,8 +49,11 @@ export function ToastProvider({ children }: { children: React.ReactNode }): Reac {children} {/* The live region exists permanently, so screen readers pick up toasts added to it; individual toasts must not carry their own - role="status" (a region appearing WITH its content isn't read). */} -
+ role="status" (a region appearing WITH its content isn't read). + Deliberately aria-live WITHOUT role="status": the region is + global and always mounted, and a second status role broke every + page-scoped getByRole('status') locator (legal.spec, CI). */} +
{toasts.map((toast) => (