Wording fixes from the review of the clarify + phrasing PRs.
- "На когда напомнить?" → "Когда?". After she has just been asked something,
the long form is the phrasing of a form field, not of a person.
- A reminder now wants a subject as well as a time. "напомни в 11" had a time
and nothing to say at 11, and she asked nothing at all — she now asks
"О чём напомнить?". Subject first, since a reminder with no subject is not
worth setting.
- The expiry notice is five phrasings picked at random instead of one fixed
sentence. It is the line he hears every time he walks off mid-request, so it
is the line that repeats most.
- The nudge prompt's ban on "обращения" is now "ласковые обращения". It was
meant to forbid "милый"/"дорогой", not his name — "Ками, ноутбук на трёх
процентах" is how she talks, and the eval's cringe check already only flags
pet names.
- The nudge example no longer claims she plugged the laptop in. She has no
hands and no smart plug; an example where she acts teaches the model to
invent actions Maven never took.
- replySystem: "тепло" → "спокойно и без официальных формулировок". A one-word
mood instruction a 1.7B can't act on, replaced with the behaviour meant.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CGeSZxh1DCtRxmFVSYVGvJ
An unclear answer used to end the request on the spot. Now she re-asks the same
question while attempts remain, and when they run out she says
"Прости, я не поняла. Скажи, пожалуйста, по-другому." — silence would leave him
thinking it was handled. Same reply when the missing slot has no question to
ask, and as a floor in finishClarified so an empty reply can never ship.
Tests: three questions allowed, the fourth gives up out loud, the cap is
configurable, and a restated time is the one that lands.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CGeSZxh1DCtRxmFVSYVGvJ
On a clarify decision with one identifiable gap she now asks instead of saying
"не поняла", and parks the request. The next utterance is parsed as the answer
with the router's own extractor and the completed decision runs through
applyAction like any other — so a clarified act still needs the allowlist and
still hits the destructive confirm gate. An answer that does not fill the gap
drops the request; she never asks twice. Also pulls the session-store block
that HandlePushToTalk and handleText both had into rememberTurn, since the
clarify path needed a third copy.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CGeSZxh1DCtRxmFVSYVGvJ
A table per intent (reminder needs a time, fact needs a key, act needs a fn)
plus one fixed Russian question per slot. Templates, not model output: a 0.8B
would wander and a question that rewords itself is harder to answer. Note,
query, chat and system get no question — for those a clarify decision keeps
the canned reply rather than inventing a question for noise.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CGeSZxh1DCtRxmFVSYVGvJ