diff --git a/src/components/insights/coach-panel/__tests__/message-thread.test.tsx b/src/components/insights/coach-panel/__tests__/message-thread.test.tsx index 5f064674e..f975defab 100644 --- a/src/components/insights/coach-panel/__tests__/message-thread.test.tsx +++ b/src/components/insights/coach-panel/__tests__/message-thread.test.tsx @@ -103,6 +103,18 @@ describe("", () => { ); }); + it("announces the empty-thread hero as a polite live region", () => { + // v1.11.3 D5 — the bespoke empty-state hero stays (gradient avatar), + // but it must carry `role="status"` + `aria-live="polite"` so screen + // readers announce the hint when the thread first mounts. + const html = render(); + const threadTag = html.match( + /]*data-slot="coach-message-thread"[^>]*>/, + ); + expect(threadTag?.[0]).toContain('role="status"'); + expect(threadTag?.[0]).toContain('aria-live="polite"'); + }); + it("renders user + assistant bubbles for a persisted conversation", () => { const html = render(); expect(html).toContain('data-slot="coach-bubble-user"'); diff --git a/src/components/insights/coach-panel/message-thread.tsx b/src/components/insights/coach-panel/message-thread.tsx index 684ee151f..1affe9681 100644 --- a/src/components/insights/coach-panel/message-thread.tsx +++ b/src/components/insights/coach-panel/message-thread.tsx @@ -236,6 +236,8 @@ export function MessageThread({ return (
{t("insights.coach.composerDisclaimer")}

@@ -371,12 +373,15 @@ function ChatBubble({ return (
@@ -438,7 +443,7 @@ function ChatBubble({ )}
-
+
{t("insights.coach.feedbackThanks")}