{
  "schema_version": 1,
  "name": "russian closed-class lexicons v1",
  "notes": [
    "Every set here is a CLOSED CLASS: the language has a fixed number of members and the list can be finished. That is why it is a list at all. A word list that can never be finished is a guess dressed as a rule, and it belongs with the embedder, not here (Vikunja #522).",
    "Editing a word is a data change. No Go change, no rebuild of a pattern, no second copy to keep in step — month names used to live in two files and day offsets in three.",
    "Interrogatives and capture verbs carry their English members too. He speaks both languages in one sentence and the router sees one utterance.",
    "The sets are matched over tokens, never as substrings: \"что\" inside \"чтобы\" and \"как\" inside \"какао\" are not questions.",
    "Order matters in weekdays, months and hours, and nowhere else. weekdays starts at Sunday because Go's time.Weekday does. months is 1-indexed with an empty slot at 0 for the same reason. hours is indexed by the hour itself.",
    "A form missing from a closed set is a bug report, not a judgement call. Add it."
  ],
  "sets": {
    "interrogatives": {
      "note": "The Russian interrogative pronouns and adverbs, declined, plus the English ones. Closed class: this is the whole list, and a question word outside it does not exist.",
      "words": [
        "что", "чего", "чему", "чем", "чём",
        "кто", "кого", "кому", "кем", "ком",
        "какой", "какая", "какое", "какие", "какого", "какому", "каким", "каких", "какими", "каком",
        "который", "которая", "которое", "которые", "которого", "котором",
        "чей", "чья", "чьё", "чьи",
        "где", "куда", "откуда", "когда", "докуда",
        "почему", "зачем", "отчего", "как", "сколько", "насколько", "каково",
        "what", "who", "whom", "whose", "why", "when", "where", "which", "how"
      ]
    },
    "locative_interrogatives": {
      "note": "The locative subset of interrogatives. These ask where a named object or event is, went, came from or extends to; recall uses that frame to require the candidate to corroborate the named topic rather than trusting a high single-hit cosine.",
      "words": [
        "где", "куда", "откуда", "докуда", "where"
      ]
    },
    "capture_verbs": {
      "note": "An explicit instruction to record something, in the imperative he actually speaks. Not a closed class in the grammatical sense, but a closed set of the commands Maven answers to — it is her vocabulary, and its members are decided here rather than discovered.",
      "words": [
        "запиши", "запомни", "отметь", "заметь", "добавь", "сохрани", "занеси", "внеси",
        "note", "remember", "log", "save", "add"
      ]
    },
    "narrative_requests": {
      "note": "\"Tell me about X\" asks for knowledge Maven does not hold about him. It carries no question mark and no interrogative, which is how \"расскажи про битву при Ватерлоо\" reached the fact store (#470).",
      "words": [
        "расскажи", "объясни", "опиши", "перечисли", "поясни",
        "tell", "explain", "describe", "list"
      ]
    },
    "ordinals": {
      "note": "Position words, as spoken, with the gender and oblique forms Russian requires: \"отметь второй пункт\" and \"закрепи вторым\" name one position (Vikunja #516). Values are the 1-based position, and -1 is the last one, which is a position rather than a count. The genitive forms here are also what a half-past hour needs (\"в половине восьмого\", V-538), so this set is written for two callers. It runs to twelve rather than ten because a clock does: \"в половине двенадцатого\" is 11:30.",
      "values": {
        "первый": 1, "первая": 1, "первое": 1, "первого": 1, "первую": 1, "первым": 1, "первой": 1, "first": 1,
        "второй": 2, "вторая": 2, "второе": 2, "второго": 2, "вторую": 2, "вторым": 2, "second": 2,
        "третий": 3, "третья": 3, "третье": 3, "третьего": 3, "третью": 3, "третьим": 3, "третьей": 3, "third": 3,
        "четвёртый": 4, "четвертый": 4, "четвёртая": 4, "четвертая": 4, "четвёртого": 4, "четвертого": 4, "четвёртую": 4, "четвертую": 4, "четвёртым": 4, "четвертым": 4, "fourth": 4,
        "пятый": 5, "пятая": 5, "пятое": 5, "пятого": 5, "пятую": 5, "пятым": 5, "пятой": 5, "fifth": 5,
        "шестой": 6, "шестая": 6, "шестое": 6, "шестого": 6, "шестую": 6, "шестым": 6, "sixth": 6,
        "седьмой": 7, "седьмая": 7, "седьмое": 7, "седьмого": 7, "седьмую": 7, "седьмым": 7, "seventh": 7,
        "восьмой": 8, "восьмая": 8, "восьмое": 8, "восьмого": 8, "восьмую": 8, "восьмым": 8, "eighth": 8,
        "девятый": 9, "девятая": 9, "девятое": 9, "девятого": 9, "девятую": 9, "девятым": 9, "ninth": 9,
        "десятый": 10, "десятая": 10, "десятое": 10, "десятого": 10, "десятую": 10, "десятым": 10, "tenth": 10,
        "одиннадцатый": 11, "одиннадцатая": 11, "одиннадцатое": 11, "одиннадцатого": 11, "одиннадцатую": 11, "одиннадцатым": 11, "eleventh": 11,
        "двенадцатый": 12, "двенадцатая": 12, "двенадцатое": 12, "двенадцатого": 12, "двенадцатую": 12, "двенадцатым": 12, "twelfth": 12,
        "последний": -1, "последняя": -1, "последнее": -1, "последнего": -1, "последнюю": -1, "последним": -1, "last": -1
      }
    },
    "cardinals": {
      "note": "Number words as spoken, with the gender variants Russian requires (один/одна/одно and два/две agree with the noun that follows) and the oblique forms, because a spoken time declines: \"в семь\", \"к семи\", \"около семи\" are three forms of one hour (Vikunja #530). Values are the number itself. Twenties and up are compounds and are read as their parts, so only the round members are listed. From five up one oblique form serves the genitive, dative and prepositional, so \"пяти\" is the whole set; one to four decline separately and carry the dative and instrumental of their own, because \"к двум часам\" and \"к трём\" are hours he says (V-581).",
      "values": {
        "ноль": 0, "нуль": 0, "zero": 0,
        "один": 1, "одна": 1, "одно": 1, "одного": 1, "одной": 1, "одну": 1, "одному": 1, "одним": 1, "one": 1,
        "два": 2, "две": 2, "двух": 2, "двум": 2, "двумя": 2, "two": 2,
        "три": 3, "трёх": 3, "трех": 3, "трём": 3, "трем": 3, "тремя": 3, "three": 3,
        "четыре": 4, "четырёх": 4, "четырех": 4, "четырём": 4, "четырем": 4, "четырьмя": 4, "four": 4,
        "пять": 5, "пяти": 5, "five": 5,
        "шесть": 6, "шести": 6, "six": 6,
        "семь": 7, "семи": 7, "seven": 7,
        "восемь": 8, "восьми": 8, "eight": 8,
        "девять": 9, "девяти": 9, "nine": 9,
        "десять": 10, "десяти": 10, "ten": 10,
        "одиннадцать": 11, "одиннадцати": 11, "eleven": 11,
        "двенадцать": 12, "двенадцати": 12, "twelve": 12,
        "тринадцать": 13, "тринадцати": 13, "thirteen": 13,
        "четырнадцать": 14, "четырнадцати": 14, "fourteen": 14,
        "пятнадцать": 15, "пятнадцати": 15, "fifteen": 15,
        "шестнадцать": 16, "шестнадцати": 16, "sixteen": 16,
        "семнадцать": 17, "семнадцати": 17, "seventeen": 17,
        "восемнадцать": 18, "восемнадцати": 18, "eighteen": 18,
        "девятнадцать": 19, "девятнадцати": 19, "nineteen": 19,
        "двадцать": 20, "двадцати": 20, "twenty": 20,
        "тридцать": 30, "тридцати": 30, "thirty": 30,
        "сорок": 40, "сорока": 40, "forty": 40,
        "пятьдесят": 50, "пятидесяти": 50, "fifty": 50,
        "шестьдесят": 60, "шестидесяти": 60, "sixty": 60,
        "семьдесят": 70, "семидесяти": 70, "seventy": 70,
        "восемьдесят": 80, "восьмидесяти": 80, "eighty": 80,
        "девяносто": 90, "девяноста": 90, "ninety": 90,
        "сто": 100, "ста": 100, "hundred": 100
      }
    },
    "day_offsets": {
      "note": "The words that name a day relative to today, and the number of days each one moves. Only explicit ones: an offset is a claim about which day, and guessing which day is the guess these callers refuse to make. Multi-word members are matched as a phrase.",
      "values": {
        "позавчера": -2,
        "вчера": -1,
        "yesterday": -1,
        "сегодня": 0,
        "today": 0,
        "tonight": 0,
        "завтра": 1,
        "tomorrow": 1,
        "послезавтра": 2,
        "day after tomorrow": 2
      }
    },
    "weekdays": {
      "note": "Nominative, starting at Sunday so the index is Go's time.Weekday.",
      "words": [
        "воскресенье", "понедельник", "вторник", "среда",
        "четверг", "пятница", "суббота"
      ]
    },
    "weekdays_english": {
      "note": "The English weekday names with their Go time.Weekday index, plus the plural a habit is spoken in (\"on mondays\"). English is listed as words where Russian is not, because the vendored dictionary is Russian: it lemmatises \"пятницу\" to \"пятница\" on its own and leaves \"mondays\" alone (V-581). So the Russian side of a weekday match is grammar and the English side is data.",
      "values": {
        "sunday": 0, "sundays": 0,
        "monday": 1, "mondays": 1,
        "tuesday": 2, "tuesdays": 2,
        "wednesday": 3, "wednesdays": 3,
        "thursday": 4, "thursdays": 4,
        "friday": 5, "fridays": 5,
        "saturday": 6, "saturdays": 6
      }
    },
    "months_genitive": {
      "note": "The form a date takes: \"10 июля\", not \"июль\". 1-indexed, so slot 0 is empty and month numbers need no arithmetic.",
      "words": [
        "", "января", "февраля", "марта", "апреля", "мая", "июня",
        "июля", "августа", "сентября", "октября", "ноября", "декабря"
      ]
    },
    "hours_spoken": {
      "note": "Hours spelled out for the voice: \"3 ч\" is fine on a screen and wrong out loud. Indexed by the hour, 0 to 23.",
      "words": [
        "ноль", "один", "два", "три", "четыре", "пять", "шесть", "семь", "восемь",
        "девять", "десять", "одиннадцать", "двенадцать", "тринадцать",
        "четырнадцать", "пятнадцать", "шестнадцать", "семнадцать", "восемнадцать",
        "девятнадцать", "двадцать", "двадцать один", "двадцать два", "двадцать три"
      ]
    },
    "repair_markers": {
      "note": "The ways he says she got it wrong. A closed set of Maven's own vocabulary, like capture_verbs: its members are decided here rather than discovered. NOT the embedder, and that is deliberate — a correction rewrites the previous turn and runs pre-route, before the turn vector exists, so a near-miss would redo a request he did not make. Phrases, matched as substrings.",
      "words": [
        "не так поняла", "неправильно поняла", "ты не поняла", "не поняла меня",
        "ты ошиблась", "это не", "а не", "не про то",
        "got it wrong", "not a ", "that was wrong"
      ]
    },
    "repair_negatives": {
      "note": "The ways he says she got it wrong WITHOUT saying what it should have been. Matched against the WHOLE utterance, not as substrings, which is what keeps them apart from repair_markers: \u0022\u044d\u0442\u043e \u043d\u0435\u0022 is a fragment that needs an intent word after it, while these are complete sentences. A member that could appear inside an ordinary sentence does not belong here.",
      "words": ["не так поняла", "неправильно поняла", "ты не поняла", "не поняла меня", "ты ошиблась", "не так", "неправильно", "это неправильно", "that was wrong", "got it wrong", "you got it wrong", "wrong"]
    },
    "first_person": {
      "note": "Every form of the first-person pronoun, plus the English ones. Closed class in the strictest sense: the language has these and no others. A sentence carrying one is about him, which is what makes it a fact rather than a passing complaint.",
      "words": [
        "я", "меня", "мне", "мной", "мною",
        "мы", "нас", "нам", "нами",
        "i", "me", "my", "mine", "we", "us", "our"
      ]
    },
    "not_place_after_v": {
      "note": "Words that follow the preposition \"в\" without naming a place, so \"в общем\" and \"в котором часу\" are not read as a city we do not know.",
      "words": [
        "данный", "данную", "данное", "этот", "эту", "это", "том", "той",
        "котором", "которой", "какое", "какой", "который", "каком",
        "общем", "точности", "курсе", "принципе", "итоге", "целом",
        "сутках", "часах", "минутах", "секундах", "неделе", "месяце", "году",
        "начале", "конце", "середине", "течение", "течении"
      ]
    },
    "parts_of_day": {
      "note": "The times of day named as one word, in the instrumental case Russian uses for when something happens. A day has as many parts as it has, so this set is finished. They are not day offsets: \"вечером\" says which part of a day, never which day (Vikunja #530).",
      "words": [
        "утром", "днём", "днем", "вечером", "ночью",
        "morning", "afternoon", "evening", "night"
      ]
    },
    "pleasantries": {
      "note": "Whole utterances that greet, thank or say goodbye. They ask for nothing and answer nothing, so a parked question must neither consume them as a failed answer nor be dropped by them (V-663). Matched as WHOLE utterances and never as tokens, because the tokens are not safe alone: \"вечер\" answers \"это утра или вечера?\" and \"нет\" answers a confirm. Anything that could fill a slot stays out. The control words (\"стоп\", \"отмена\") stay out too, because isCancel already owns them and they mean something stronger.",
      "words": [
        "привет", "приветик", "здравствуй", "здравствуйте",
        "доброе утро", "добрый день", "добрый вечер",
        "пока", "прощай", "до свидания", "спокойной ночи",
        "спасибо", "спасибо тебе", "большое спасибо", "благодарю",
        "извини", "извините", "прости", "простите",
        "hi", "hello", "hey", "bye", "goodbye",
        "good morning", "good evening", "good night",
        "thanks", "thank you", "thanks a lot", "sorry"
      ]
    },
    "reminder_verbs": {
      "note": "The imperatives that mean \"remind me\", in the forms he speaks. The same kind of set as capture_verbs and decided the same way: it is her vocabulary, not a discovery about Russian (Vikunja #530). The alarm verbs joined them in V-627. \"разбуди меня в 6:30\" is a reminder that fires at the hour he gets up, and the set knew no form of it, so an alarm reached IntentReminder only by resembling one to the embedder.",
      "words": [
        "напомни", "напомните", "напомнить", "напоминай",
        "разбуди", "разбудите", "разбудить", "буди",
        "remind", "wake"
      ]
    },
    "half_hour": {
      "note": "The forms of \"половина\" that introduce a spoken half hour: \"в половине восьмого\", \"к половине\", the bare \"пол\" of \"полвосьмого\". The set matters to two callers and for opposite reasons (V-522). The clock rewrite reads the ordinal after one of these as the hour being entered, and the ordinal-selection turn has to REFUSE that ordinal, because \"в половине восьмого\" names a time and not the eighth thing she read out.",
      "words": [
        "половина", "половине", "половину", "половины", "пол",
        "half"
      ]
    },
    "filler_particles": {
      "note": "Words that carry no subject of their own: particles, the politeness words, and the first-person object he addresses her with. A caller asking \"did he say WHAT to remind him about\" has to discount these, or \"ну напомни же\" and \"напомни мне пожалуйста\" both read as a reminder whose subject is the particle. Closed in the sense that matters: these are function words, and the language is not adding any. Not a stopword list — a stopword list is a scoring convenience and may be as long as it likes, while every word here has to be one that cannot BE a reminder's subject.",
      "words": [
        "ну", "же", "уж", "там", "вот", "пожалуйста", "плиз", "ка",
        "давай", "давай-ка", "а", "и", "бы", "мне", "меня", "мной",
        "please", "just", "hey", "me"
      ]
    },
    "capture_frame_particles": {
      "note": "The narrow post-imperative wrapper Maven removes from an explicit note capture before storing its body. Unlike filler_particles, this excludes conjunctions and demonstratives because they can change the note itself: «запомни и это важно» must keep «и». These are only politeness, dative-address and enclitic tokens; matched as whole tokens immediately after a capture verb, never elsewhere.",
      "words": [
        "же", "уж", "ка", "пожалуйста", "плиз", "мне", "please"
      ]
    },
    "unresolved_references": {
      "note": "Deictic words that point at missing context rather than naming a subject. A router may refuse only when every content token in the utterance comes from this set or filler_particles; the same words inside a real sentence remain ordinary pronouns. This is a closed grammatical class, not a phrase exception list.",
      "words": [
        "это", "то", "этот", "эта", "эту", "этого", "этому", "этим", "этом",
        "тот", "та", "ту", "того", "тому", "тем", "том", "потом",
        "его", "её", "ее", "их", "нему", "ней", "ними",
        "it", "this", "that", "thing", "the", "from", "earlier", "him", "her", "them"
      ]
    },
    "reminder_cancel_verbs": {
      "note": "The exact singular imperatives Maven accepts for cancelling a committed reminder. Kept apart from task_drop_words because that mixed set also contains infinitives and reports such as передумал; a reminder cancellation is a mutation and only a command addressed to Maven may reach it. English base forms are imperatives when they lead the command; the caller enforces that position structurally.",
      "words": [
        "убери", "удали", "отмени", "сними",
        "cancel", "remove", "delete"
      ]
    },
    "reminder_cancel_report_verbs": {
      "note": "Dictionary forms for a first-person report that a reminder was cancelled, plus English past forms. Kept separate from reminder_cancel_verbs because these words must never authorize a mutation; they only keep a completed-action statement out of the query/recall lane.",
      "words": [
        "отменить", "удалить", "убрать", "снять",
        "cancelled", "canceled", "removed", "deleted"
      ]
    },
    "self_state_verbs": {
      "note": "Verbs that describe the speaker's own knowledge, memory, intent or ability. Negated in the first person they report a state, so \"не знаю\" and \"не помню\" answer a question instead of forbidding an action. Closed because the prohibition frame only needs the heads a person actually puts after \"не\" when talking about himself; a real prohibition names something Maven can do. Russian entries are dictionary forms compared through morphology, English entries are the surface forms after \"don't\".",
      "words": [
        "знать", "помнить", "думать", "хотеть", "понимать", "успеть", "быть",
        "know", "remember", "think", "want", "understand", "care", "mind"
      ]
    },
    "reminder_nouns": {
      "note": "The nouns naming Maven's committed reminder and alarm records. Russian dictionary forms are listed once; callers use morphology for their cases. This is product vocabulary and therefore finite.",
      "words": [
        "напоминание", "напоминалка", "будильник", "сигнал",
        "reminder", "alarm"
      ]
    },
    "reminder_cancel_frame": {
      "note": "The closed grammar around a reminder cancellation's noun and subject: Russian possessive forms, the forms of о used for its topic, and English articles/topic markers. These are removed only after an imperative command has been established; they never establish one themselves.",
      "words": [
        "мой", "моя", "моё", "мое", "мои", "моего", "моей", "мою", "моих",
        "о", "об", "обо", "про",
        "my", "the", "a", "an", "about"
      ]
    },
    "current_version_nouns": {
      "note": "Nouns whose explicitly latest/current release is public product information. They do not establish a world query alone; the structural grammar also requires a question and one current_version_markers member, and refuses first-person ownership.",
      "words": ["версия", "выпуск", "релиз", "version", "release"]
    },
    "current_version_markers": {
      "note": "Adjectives that ask for the current public release of a product. Matched by morphology in Russian and exactly in English; finite because they are the grammar around current_version_nouns, not topics to discover.",
      "words": [
        "последний", "текущий", "актуальный", "стабильный", "поддерживаемый", "новейший",
        "latest", "current", "stable", "supported", "newest"
      ]
    },
    "personal_possessives": {
      "note": "Possessive determiners that make an otherwise public-looking question private. Russian forms are explicit because ambiguous pronouns such as моего are not reliably reduced to мой by a general-purpose lemmatiser; English possessives are included for the same structural boundary.",
      "words": [
        "мой", "моя", "моё", "мое", "мои", "моего", "моей", "моему", "мою", "моим", "моими", "моих",
        "наш", "наша", "наше", "наши", "нашего", "нашей", "нашему", "нашу", "нашим", "нашими", "наших",
        "свой", "своя", "своё", "свое", "свои", "своего", "своей", "своему", "свою", "своим", "своими", "своих",
        "my", "our"
      ]
    },
    "ecosystem_services": {
      "note": "The four services in Maven's architecture, including the ordinary Russian case forms used in the scoped-attention frame. This is deployment contract vocabulary, not an open entity list; every other entity remains Nexus's answer.",
      "words": [
        "maven", "maven's", "мавен", "мавена", "мавеном",
        "nexus", "nexus's", "нексус", "нексуса", "нексусом",
        "praxis", "praxis's", "праксис", "праксиса", "праксисом",
        "hexis", "hexis's", "хексис", "хексиса", "хексисом"
      ]
    },
    "task_done_words": {
      "note": "Compatibility union of the task completion vocabulary. Mutation parsers must use task_done_commands and task_done_states instead: combining grammatical moods in one accessor made finite reports such as \"я закрыл задачу\" authorize writes.",
      "words": [
        "закрой", "закройте", "закрыть", "заверши", "завершить", "close", "finish",
        "сделано", "сделанную", "сделал", "сделала", "выполнено", "выполнил", "выполнила",
        "готово", "готова", "закрыл", "закрыла", "done", "finished"
      ]
    },
    "task_drop_words": {
      "note": "Compatibility union of the task abandonment vocabulary. Mutation parsers must use task_drop_commands and task_drop_states so reports and commands cannot be lemma-matched through one list.",
      "words": [
        "убери", "уберите", "убрать", "удали", "удалить", "отмени", "отменить",
        "drop", "remove", "cancel",
        "передумал", "передумала", "неактуально"
      ]
    },
    "task_done_commands": {
      "note": "Exact command forms that authorize completing a Maven board task when they occupy the command head. Exactness is load-bearing: Russian morphology gives закрой, закрывай and закрыл one lemma, while only the first two are addressed requests. Infinitives are included because a command-head infinitive (задачу закрыть) is a productive spoken imperative; surrounding structure still has to prove command position.",
      "words": [
        "закрой", "закройте", "закрывай", "закрывайте", "закрыть",
        "заверши", "завершите", "завершай", "завершайте", "завершить",
        "close", "finish"
      ]
    },
    "task_done_states": {
      "note": "Result-state words for an explicit mark-task-as-state frame. These may be matched by lemma only after a separate command-head marker has authorized the transition. Finite first-person reports are deliberately absent.",
      "words": [
        "сделано", "сделанный", "сделанную", "выполнено", "выполненный", "готово",
        "done", "finished"
      ]
    },
    "task_drop_commands": {
      "note": "Exact command-head forms that authorize dropping a Maven board task. Past reports and decisions such as передумал are absent; morphology must never turn them into commands.",
      "words": [
        "убери", "уберите", "убирай", "убирайте", "убрать",
        "удали", "удалите", "удаляй", "удаляйте", "удалить",
        "отмени", "отмените", "отменяй", "отменяйте", "отменить",
        "drop", "remove", "cancel"
      ]
    },
    "task_drop_states": {
      "note": "Result states accepted only inside an explicit mark-task-as-state command frame. A bare state is a report, not mutation authority.",
      "words": ["неактуально"]
    },
    "hour_units": {
      "note": "Every form of the hour noun, Russian and English (V-609). One home for a closed class that four router sets used to list separately, and all four stopped at \"часу\": \"напомни к двум часам\" lost its hour and the reminder was left asking \"Когда?\". Russian declines, so the dative plural is as ordinary a way to say an hour as the accusative singular. A caller that folds time words into one set reads HourUnits; a caller asking about one word reads IsHourUnit.",
      "words": [
        "час", "часа", "часов", "часу", "часам", "часами", "часах",
        "hour", "hours"
      ]
    },
    "minute_units": {
      "note": "Every form of the minute noun, Russian and English (V-609). Same class as hour_units one noun over, and it had the same gap: the dative plural \"минутам\" was missing everywhere \"минут\" and \"минуты\" were present.",
      "words": [
        "минута", "минуты", "минуту", "минут", "минуте", "минутам", "минутами", "минутах",
        "minute", "minutes"
      ]
    },
    "slot_value_frame": {
      "note": "The words that can stand around a bare slot value without making the utterance a request of its own (Vikunja #560). Prepositions, hedges and the nouns a spoken time is built from: strip these, the numbers, the interrogatives, the filler particles and the other time sets, and whatever is left is the utterance's OWN content. \"а что если в 11:00\" leaves nothing and is an answer; \"какая сейчас погода в Риме\" leaves \"погода\" and \"Риме\" and is not. Closed because each part of it is closed — Russian has a fixed list of prepositions, and a clock is built from a fixed list of nouns. It is not a stopword list: a word goes in only if it can never be the thing he is asking about.",
      "words": [
        "в", "во", "на", "к", "ко", "до", "с", "со", "за", "по", "под", "около", "через", "после", "перед", "от", "из", "у", "при", "про",
        "at", "on", "in", "by", "to", "till", "until", "after", "before", "about", "for",
        "нет", "не", "да", "ага", "угу", "ой", "ох", "тогда", "лучше", "может", "можно", "наверное", "наверно", "пожалуй", "точнее", "скорее", "если", "пусть", "прости", "извини", "слушай", "значит", "как-то", "типа", "вообще-то",
        "no", "yes", "yeah", "ok", "okay", "sorry", "maybe", "actually", "rather", "then", "well",
        "полдень", "полночь", "полдня",
        "утра", "утро", "утру", "дня", "день", "днями", "вечера", "вечер", "вечеру", "ночи", "ночь", "ночью",
        "сейчас", "теперь", "сегодняшний", "ближайший", "ближайшее",
        "noon", "midnight", "am", "pm", "oclock", "now"
      ]
    },
    "dialogue_cancel": {
      "note": "The ways he calls off the request Maven is in the middle of assembling (Vikunja #560). Not task_drop_words: those abandon a Praxis item that exists, these abandon a question she has only just asked, and \"удали\" must never mean the second. Matched as the WHOLE utterance minus its frame, because \"забудь\" alone calls off the reminder and \"забудь купить молоко\" is a sentence with content of its own.",
      "words": [
        "отмена", "отмени", "отменить", "отставить", "забудь", "забей", "неважно", "проехали", "передумал", "передумала",
        "cancel", "nevermind", "forget"
      ]
    },
    "conversation_verbs": {
      "note": "The verbs Maven accepts after a cooperative marker as an explicit request to converse: «давай поговорим», «давай поболтаем», «let's talk». This is her control vocabulary, like capture_verbs, not a claim to list every way humans can converse. Russian forms are matched by lemma, so one infinitive covers tense and number; English is exact because the Russian dictionary leaves it unchanged.",
      "words": [
        "говорить", "поговорить", "болтать", "поболтать", "общаться", "пообщаться",
        "talk", "chat"
      ]
    },
    "confirm_yes": {
      "note": "The whole vocabulary of saying yes to a parked confirm, Russian and English. Closed because it is her question that is being answered: she asked \"да или нет\", and the answers to that question can be listed. Matched as whole tokens and never as substrings — \"погода\", \"давление\" and \"дальше\" all contain \"да\", and a substring test executed a destructive act when he asked about the weather (V-567). Words that merely sound agreeable — \"хорошо\", \"ладно\", \"точно\" — are deliberately absent: they open a sentence about something else as often as they answer, and an unclear answer must route rather than execute.",
      "words": [
        "да", "ага", "угу", "давай", "давайте", "конечно",
        "подтверждаю", "подтверди", "подтвердить", "выполняй", "валяй",
        "yes", "yeah", "yep", "yup", "ok", "okay", "sure", "confirm", "affirmative"
      ]
    },
    "water_nouns": {
      "note": "The water noun, in the forms he drinks it in, plus English (V-586). Closed because it is one noun: Russian gives it six cases and two numbers and that is the whole list. Both \"вода\" and \"водой\" are listed even though one declension covers both, because the vendored dictionary lemmatises \"воды\" to \"вод\" and \"водой\" to \"вода\" — two lemmas for one noun, so the set has to name both or a caller matching by lemma misses half of them. Matched over tokens with morph.SameWord, never as a substring: the \"вод\" this replaced fired on \"водитель\" and \"заводить\".",
      "words": [
        "вода", "водой", "водичка", "water"
      ]
    },
    "drink_verbs": {
      "note": "Drinking, in the aspects and prefixes he speaks (V-586). Closed in the sense that matters: these are the verbs that make a water noun a water FACT, and the list is her vocabulary rather than a discovery about Russian. \"пил\" and \"пили\" are listed as surface forms because the dictionary lemmatises them to \"пила\", the saw; the perfective forms lemmatise correctly and one member each covers them. Whole tokens only — the substring \"пил\" this replaced fired on \"пилот\".",
      "words": [
        "пить", "пил", "пили", "пей", "выпить", "попить", "допить", "запить",
        "drink", "drank", "drinking"
      ]
    },
    "meal_words": {
      "note": "Eating: the meal nouns and the verbs of having one (V-586). Closed the same way capture_verbs is — these are the words that write a meal fact, decided here. The verbs are listed in the infinitive because that is the lemma the dictionary returns, so \"поужинал\" and \"позавтракал\" match without their own entries. \"есть\" and \"ел\" are deliberately ABSENT: \"есть\" is also the existential, and \"есть новости по бэкапу\" is a question rather than a meal. The English \"ate\" carried a guard against \"backup\" when this was a substring test; over tokens the guard is unnecessary.",
      "words": [
        "обед", "обедать", "пообедать",
        "ужин", "ужинать", "поужинать",
        "завтрак", "завтракать", "позавтракать",
        "еда", "перекус", "перекусить",
        "поесть", "кушать", "покушать",
        "meal", "ate", "lunch", "dinner", "breakfast"
      ]
    },
    "shower_words": {
      "note": "The shower, and the one set here matched EXACTLY rather than by lemma (V-586). The dictionary lemmatises \"душ\" to \"душа\", so a lemma test cannot tell a shower from a soul, and \"на душе легко\" is not a fact about washing. The accusative of an inanimate noun is its nominative, so \"принял душ\" and \"сходил в душ\" are both the bare form and exact matching loses nothing he actually says. The substring this replaced also fired on \"душно\".",
      "words": [
        "душ", "душем", "shower", "showered"
      ]
    },
    "break_words": {
      "note": "Taking a break, noun and verb (V-586). Closed like meal_words and for the same reason. \"отдых\" and \"отдыхать\" are both listed because the noun and the verb are separate lemmas; the perfective \"отдохнул\" lemmatises to \"отдохнуть\".",
      "words": [
        "перерыв", "отдых", "отдыхать", "отдохнуть", "передохнуть",
        "break", "rest"
      ]
    },
    "sleep_words": {
      "note": "Sleeping (V-586). The imperfective surface forms \"спал\" and \"спала\" are listed because the dictionary lemmatises them to \"спасть\", a different verb, and one entry for the pair is the honest fix; the prefixed forms lemmatise consistently and their infinitives cover them. \"сон\" is absent: the noun names a dream as readily as a night's sleep, and it was not in the pattern this replaces either.",
      "words": [
        "спать", "спал", "поспать", "поспал", "проспать", "выспаться",
        "sleep", "slept", "sleeping"
      ]
    },
    "confirm_no": {
      "note": "The answers that decline a parked confirm. Same matching rule as confirm_yes and the same reason. The multi-word members are here rather than assembled by a caller because \"надо\" alone is not an answer and \"не надо\" is the opposite of one: the two must land on opposite sides, and only the phrase says which. \"не\" on its own is NOT a member — \"не забудь купить хлеб\" is a reminder, not a refusal.",
      "words": [
        "нет", "неа", "нельзя", "отмена", "отмени", "отменить", "отставить",
        "стоп", "стой", "не надо", "не нужно", "не стоит", "не сейчас", "не хочу",
        "no", "nope", "nah", "negative", "cancel", "stop", "don't", "dont"
      ]
    }
  }
}
