From bab0d3f94d6a4e3900bdd8d91a3d5902250250d9 Mon Sep 17 00:00:00 2001 From: amosblomqvist Date: Wed, 7 Oct 2026 11:03:54 +0300 Subject: [PATCH] copy: the thinking-field placeholders, the brief round (release polish 5) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Four placeholders rewritten per the owner's set (2026-10-07): the thinking fields are an invitation to stream-of-consciousness transfer, and everything else is implied by the field's existence — no "the teacher reads all of this", no mechanism, no em dashes, nothing that wraps. The reading field's placeholder no longer breaks to a second line. quiz: "Why this answer? Whatever comes to mind." reading: "Whatever comes to mind as you read." practice: "Work here, think out loud." pause: "Ask anything, or press Enter for the next one." The answer-field placeholders ("Type your answer…") stay: brief and functional already (owner ruling). Quiz placeholder pin updated. 1428 tests, tsc, lint, build green. --- components/chat.tsx | 2 +- components/practice-dock.tsx | 2 +- components/question-dock.tsx | 2 +- components/reading-thinking.tsx | 2 +- tests/render-cards.test.tsx | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/components/chat.tsx b/components/chat.tsx index 18a9957..ff85597 100644 --- a/components/chat.tsx +++ b/components/chat.tsx @@ -1574,7 +1574,7 @@ export function Chat({ // applies. nextProblem={nextReady} onNext={sendNext} - placeholder={nextReady ? "Ask about this problem — or press Enter for the next one…" : undefined} + placeholder={nextReady ? "Ask anything, or press Enter for the next one." : undefined} /> } onSubmitAnswer={(output) => { diff --git a/components/practice-dock.tsx b/components/practice-dock.tsx index ca2f53b..e4ed501 100644 --- a/components/practice-dock.tsx +++ b/components/practice-dock.tsx @@ -143,7 +143,7 @@ export function PracticeDock({ problemCallId, input, expanded, onExpand, onSubmi submit(); } }} - placeholder="Work here — say as much of your thinking as you have." + placeholder="Work here, think out loud." rows={4} className={cn( "field-sizing-content lh-input max-h-64 min-h-16 w-full resize-none bg-transparent px-2.5 pb-2 outline-none placeholder:text-muted-foreground", diff --git a/components/question-dock.tsx b/components/question-dock.tsx index 24b4e74..22fcc83 100644 --- a/components/question-dock.tsx +++ b/components/question-dock.tsx @@ -853,7 +853,7 @@ function QuestionDockForm({ submit(); } }} - placeholder="Why this answer? What are you unsure about? Say as much as you like — the teacher reads all of this." + placeholder="Why this answer? Whatever comes to mind." rows={1} className={cn( "field-sizing-content lh-input max-h-48 w-full resize-none bg-transparent px-2.5 py-2 outline-none placeholder:text-muted-foreground/70", diff --git a/components/reading-thinking.tsx b/components/reading-thinking.tsx index 0691c3e..a2c86b5 100644 --- a/components/reading-thinking.tsx +++ b/components/reading-thinking.tsx @@ -85,7 +85,7 @@ export function ReadingThinkingField({ e.currentTarget.blur(); } }} - placeholder="What are you thinking as you read? Say as much as you like — it rides your next check answer to the teacher." + placeholder="Whatever comes to mind as you read." rows={1} className="field-sizing-content lh-input max-h-40 w-full resize-none bg-transparent outline-none placeholder:text-muted-foreground/70" /> diff --git a/tests/render-cards.test.tsx b/tests/render-cards.test.tsx index 7e2209c..c4ad9d2 100644 --- a/tests/render-cards.test.tsx +++ b/tests/render-cards.test.tsx @@ -143,7 +143,7 @@ describe("render smoke tests", () => { // INSIDE the dock — never called optional, inviting the dump. assert.ok(html.includes('data-testid="thinking-field"'), "thinking field present"); assert.match(html, /YOUR THINKING/, "labeled as the learner's voice (all caps, owner round 3)"); - assert.match(html, /Why this answer\? What are you unsure about\?/, "placeholder invites, not apologizes"); + assert.match(html, /Why this answer\? Whatever comes to mind/, "placeholder invites, not apologizes (owner, placeholder round 2026-10-07)"); assert.ok(!html.includes("optional"), "the field is never called optional"); assert.match(html, /Submit answer/, "send becomes Submit answer"); assert.match(html, /↵ submits · ⇧↵ newline/, "the standard chord is discoverable (owner round 5)");