fffd0cb5fa
V-567, severe. classifyConfirm was strings.Contains over bare stems, so "погода" contained "да" and "покажи" contained "ок". resolveConfirm runs before routing, so asking the weather while a confirm was parked executed the destructive tool or the bound Hexis capability. Measured on the box before the fix: "какая погода" ran the parked act. Second defect found while fixing: an unrecognised utterance also disarmed the confirm, because claim() cleared the pending slot before the verdict was read. An utterance that is not an answer is not a cancellation either. The yes and no words are now two closed sets in internal/lexicon, matched as whole tokens, phrases longest-first so "не надо" is read before "нет", and negatives before positives. The whole utterance must be answer words plus filler, so "давай посмотрим погоду" is unknown and leaves the confirm parked. "хорошо", "ладно" and "точно" are deliberately absent: they open a sentence about something else as often as they answer one. Conflict in lexicon_ru_v1.json resolved by hand: V-560's slot_value_frame and dialogue_cancel and V-567's confirm_yes and confirm_no all belong. 22 sets, JSON validated, lexicon, mavend, router and router/eval green with -race. --no-verify: the pre-commit hook refuses master, and the owner asked for straight-to-master merges for this unattended run.