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:
+1
-1
@@ -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) => {
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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"
|
||||
/>
|
||||
|
||||
@@ -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)");
|
||||
|
||||
Reference in New Issue
Block a user