diff --git a/components/chat.tsx b/components/chat.tsx index 38f36c8..5a5ea65 100644 --- a/components/chat.tsx +++ b/components/chat.tsx @@ -605,7 +605,7 @@ export function Chat({ Plan )} - +
diff --git a/components/phase-divider.tsx b/components/phase-divider.tsx index 56aac68..9d6f617 100644 --- a/components/phase-divider.tsx +++ b/components/phase-divider.tsx @@ -1,4 +1,3 @@ -import { BrailleSpinner } from "@/components/braille-spinner"; import type { Phase3 } from "@/src/core"; /** @@ -17,6 +16,12 @@ import type { Phase3 } from "@/src/core"; * never a banner. Probe never renders a divider: phases only advance, so * probe is the start of the transcript and "Planning"/"Teaching" are the two * visible seams. + * + * Owner, minimal-color round 2: the chip is LABEL-ONLY, deliberately — a + * working-state spinner was tried here and rejected: the pill's curve and + * the square braille cell fought for space, and the chat surface already + * shows in-flight work (thinking shimmer, the dock). The chip states the + * phase; work-state is the sidebar row's spinner. */ /** Header-chip labels: the phases as the learner thinks of them. */ @@ -26,18 +31,16 @@ const CHIP_LABEL: Record = { teach: "Teaching", }; -/** The header chip: the phase label, monochrome; while a turn is in - * flight the old dot slot shows the braille spinner (motion = the honest - * state signal — see BrailleSpinner). */ -export function PhaseChip({ phase, busy = false }: { phase: Phase3; busy?: boolean }) { +/** The header chip: the phase label, monochrome — label-only by design + * (see the component note: the pill's curve suits text, not glyphs). */ +export function PhaseChip({ phase }: { phase: Phase3 }) { return ( - {busy && } {CHIP_LABEL[phase]} ); diff --git a/tests/render-phase-divider.test.tsx b/tests/render-phase-divider.test.tsx index 72f2005..71b00f3 100644 --- a/tests/render-phase-divider.test.tsx +++ b/tests/render-phase-divider.test.tsx @@ -30,16 +30,10 @@ describe("PhaseChip (header)", () => { } }); - it("busy: the old dot slot becomes the braille spinner (motion = turn in flight)", () => { - const html = renderToStaticMarkup(); - assert.ok(html.includes('data-testid="braille-spinner"'), "spinner in the chip"); - assert.ok(html.includes("Teaching"), "label stays"); - assert.ok((html.match(/class="braille-frame"/g) ?? []).length === 10, "all ten frames"); - }); - - it("idle: no spinner — the chip is the label alone", () => { + it("NEVER shows a working spinner — the pill's curve suits text, not glyph cells (owner, round 2)", () => { const html = renderToStaticMarkup(); - assert.ok(!html.includes("braille-spinner")); + assert.ok(!html.includes("braille-spinner"), "the chip is label-only by design"); + assert.ok(!html.includes("braille-frame"), "no spinner frames leak in"); }); });