copy: the thinking-field placeholders, the brief round (release polish 5)

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.
This commit is contained in:
amosblomqvist
2026-10-07 11:03:54 +03:00
parent f979e35f57
commit bab0d3f94d
5 changed files with 5 additions and 5 deletions
+1 -1
View File
@@ -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) => {
+1 -1
View File
@@ -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",
+1 -1
View File
@@ -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",
+1 -1
View File
@@ -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"
/>
+1 -1
View File
@@ -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)");