Skip to content

Commit edb6aaa

Browse files
committed
Trim the fit confirmation to a terse "Fits!"
Echoing the word back plus its letter count ("Heart. 5 letters — it fits!") slowed every exchange for no information: the user just said the word. A fitting answer is now confirmed with just "Fits!" and the session moves on. The one exception stays: a homophone/digit rescue still spells the accepted word first ("A, T, E — fits!") because there the entered spelling differs from what was voiced (REQ-ANS-006). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017zPpG6mrZdmsUVNUv1MZ9Z
1 parent b807ad5 commit edb6aaa

4 files changed

Lines changed: 15 additions & 14 deletions

File tree

docs/MANUAL-TESTS.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ Covers: REQ-SPCH-003
5858
### MT-06 — Conversational solve, end to end
5959
Covers: REQ-ANS-006 REQ-LIFE-005 REQ-NAV-001 REQ-NAV-002 REQ-NAV-003 REQ-NAV-007 REQ-SPCH-002 REQ-SPCH-005 REQ-CMD-001
6060
1. Solve today's Mini entirely by voice: answer, *pass* on unknowns, come back around.
61-
2. **PASS:** fitting answers are confirmed ("It fits") and appear in the grid; *pass* leaves cells
61+
2. **PASS:** fitting answers are confirmed with a terse "Fits!" and appear in the grid; *pass* leaves cells
6262
untouched and reads the next unfilled clue in list order (wrapping); the page highlight always
6363
matches the spoken clue; the mic never listens while the extension is talking; completing the
6464
puzzle triggers NYT's congratulations AND the extension's "Hooray" + session end.

docs/REQUIREMENTS.md

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -479,10 +479,12 @@ This is the heart of the product. Speech recognition is *phonetic*; crossword an
479479

480480
#### REQ-ANS-006 — Fit → confirm → enter → advance
481481
- **Status:** Active · **Level:** MUST
482-
- When exactly one spelling fits length + pattern: say it fits (`"HEART — 5 letters. It fits."`);
483-
if the accepted spelling differs from the literal transcript (homophone/digit rescue), spell it
484-
out loud first (`"E-I-G-H-T... eight, 5 letters. It fits."`); then enter it into the grid, then
485-
advance per strategy and read the next clue. Entering is verified per REQ-ANS-013.
482+
- When exactly one spelling fits length + pattern: confirm tersely with just `"Fits!"` — no echo
483+
of the word and no letter count (the user just said the word; repeating it wastes time). One
484+
exception: if the accepted spelling differs from the literal transcript (homophone/digit
485+
rescue), spell it out first (`"A, T, E — fits!"`) so the user knows what will be entered. Then
486+
enter it into the grid, advance per strategy, and read the next clue. Entering is verified per
487+
REQ-ANS-013.
486488
- **Accept:** Given a fitting answer, then actions occur in order SAY(fit) → ENTER → SELECT/SAY(next
487489
clue) and the grid contains the word.
488490
- **Verify:** unit `tests/unit/machine.test.js`, `tests/unit/matching.test.js` (spelledDifferently

extension/src/conversation/phrases.js

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -92,11 +92,10 @@ export function render(say) {
9292
return 'Hooray — puzzle solved! Great work.';
9393
case 'grid-full-wrong':
9494
return "The grid is full, but something's not right yet. Say next to move around, or give a new answer to replace one.";
95-
case 'fit': {
96-
const spoken = sayWord(say.word);
97-
const head = say.spelledDifferently ? `${spellOut(say.word)}${spoken}.` : `${spoken}.`;
98-
return `${head} ${say.word.length} letters — it fits!`;
99-
}
95+
case 'fit':
96+
// REQ-ANS-006: terse — the user just said the word, so don't echo it back. The
97+
// spell-out stays only when we accepted a different spelling than they voiced.
98+
return say.spelledDifferently ? `${spellOut(say.word)} — fits!` : 'Fits!';
10099
case 'length-mismatch': {
101100
// REQ-ANS-007: only the problem — no "I heard ..." preamble.
102101
const list = say.variants

tests/unit/verbalizer.test.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,12 +71,12 @@ describe('clue readout (READ)', () => {
7171
});
7272

7373
describe('outcome phrasing', () => {
74-
test('REQ-ANS-006: fit announcement; homophone rescues get spelled out', () => {
75-
expect(render({ kind: 'fit', word: 'HEART', spelledDifferently: false }))
76-
.toBe('Heart. 5 letters — it fits!');
74+
test('REQ-ANS-006: fit is a terse "Fits!"; only homophone rescues get spelled out', () => {
75+
expect(render({ kind: 'fit', word: 'HEART', spelledDifferently: false })).toBe('Fits!');
7776
const spelled = render({ kind: 'fit', word: 'ATE', spelledDifferently: true });
7877
expect(spelled).toContain('A, T, E');
79-
expect(spelled).toContain('it fits');
78+
expect(spelled).toContain('fits');
79+
expect(spelled).not.toContain('letters'); // no letter count in either form
8080
});
8181

8282
test('REQ-ANS-007: length mismatch states only the problem — variants, lengths, target', () => {

0 commit comments

Comments
 (0)