reminder_verbs held five words and none named an alarm, and ReminderGrammar did not read the set anyway — it carried the literal напомни|remind me. So no part of the cascade recognised разбуди, and the three alarm cases in the fixture went to fact and act at over 0.89. The lexicon addition alone moved nothing, measured at 66/91. Every consumer reads the set after a reminder route already exists. Building the grammar's alternation from the set is what scored: 66/91 to 69/91, three cases gained, none lost, and each alarm now carries its time slot. Longest-first ordering in the alternation is load-bearing. Go's regexp alternation is leftmost-first, so напомнить after напомни would never match. Found while training the V-546 intent head, where the same three cases went to system. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0117tgnmbgZpHVV3XSNw8Qua
2.5 KiB
Alarm verbs reach stage 0
06-08-2026. V-627. Measured with TestONNXBaseline, 91-case RU routing fixture,
classifier plus the ONNX embedder. No LLM arm in this run.
What was wrong
lexicon.ReminderVerbs held five words and none of them named an alarm. ReminderGrammar
in internal/router/stage0.go did not read the set at all: it carried the literal
напомни|remind me. So no part of the cascade recognised разбуди.
Three fixture cases ride on that. Under the classifier they went to fact and act at high confidence, so the failure was never a near miss:
ru-rem-005"разбуди меня в 6:30" to fact at 0.918ru-rem-009"разбуди меня полвосьмого" to act at 0.941en-rem-002"wake me at 6:15" to fact at 0.899
Found while training the V-546 intent head, where the same three cases went to system. The head reads a spoken time with no known verb in front of it as a clock question. The classifier was making the same mistake in its own way.
The change
Four alarm imperatives and bare wake join reminder_verbs. ReminderGrammar builds its
alternation from the set, longest alternative first, and eats an optional мне, меня or
me before the body.
Longest-first is load-bearing. Go's alternation is leftmost-first rather than longest-match,
so напомнить listed after напомни would never match.
Result
66/91 to 69/91, 72.5% to 75.8% full. Three cases gained, none lost.
All three are the alarms above, and each now carries its time slot, which it did not before.
Clarify counts unchanged at 0 false and 8 missed. The two remaining system failures,
какое число завтра and какой день недели послезавтра, failed at baseline too.
What this does not fix
The lexicon addition on its own moved nothing. Measured before touching the grammar:
66/91, exactly the baseline. Every consumer of reminder_verbs reads it after a reminder
route already exists. A verb that cannot win the route is a verb nobody asks about. The
grammar was the whole change.
Lemma matching in isReminderVerb now covers разбудил as well as разбуди, because one
lemma holds both. That is the trap cmd/mavend/quiet_toggle.go documents for говори. It
is tolerable here and not in the quiet toggle. isReminderVerb runs only on an utterance
already routed to reminder, and it decides where the subject starts. A quiet match flips a
daemon-wide setting from any channel.