{
  "schema_version": 1,
  "name": "ru_recall_v1",
  "notes": [
    "Held-out note-recall fixture. Each case is a fresh semantic store: insert every note, embed the query, take the top 3 — the same read path cmd/mavend/voice.go runs for IntentQuery.",
    "Queries paraphrase their note on purpose. A query that repeats the note's words measures string matching, not recall. TestFixtureIsParaphrased enforces a ceiling on word overlap.",
    "want:\"\" means the query must recall NOTHING. Those cases measure false recall — the direction the spec calls out (a confident wrong fact is worse than a known gap).",
    "The distractor tag marks cases where a second note is plausible and only one is right. The hard tag marks cases with little or no shared vocabulary.",
    "Content is written for this operator: his preferences, his homelab, things he said once and would expect Maven to remember weeks later."
  ],
  "filler": [
    {"id": "f1", "text": "в субботу ходил в баню", "kind": "note"},
    {"id": "f2", "text": "купил новые кроссовки сорок третьего размера", "kind": "note"},
    {"id": "f3", "text": "сериал закончился на третьем сезоне", "kind": "note"},
    {"id": "f4", "text": "сосед сверху делает ремонт", "kind": "note"},
    {"id": "f5", "text": "билеты в театр брал заранее", "kind": "note"},
    {"id": "f6", "text": "выучил пару аккордов на гитаре", "kind": "note"},
    {"id": "f7", "text": "записался к стоматологу", "kind": "note"},
    {"id": "f8", "text": "поменял лампочку в коридоре", "kind": "note"},
    {"id": "f9", "text": "погулял вдоль реки", "kind": "note"},
    {"id": "f10", "text": "the balcony door sticks in winter", "kind": "note"},
    {"id": "f11", "text": "the neighbour's dog barks at cyclists", "kind": "note"},
    {"id": "f12", "text": "i finished the book about volcanoes", "kind": "note"}
  ],
  "cases": [
    {
      "id": "ru-pref-001",
      "lang": "ru",
      "tags": ["preference", "paraphrase"],
      "query": "какой кофе мне наливать",
      "want": "n1",
      "notes": [
        {"id": "n1", "text": "я пью кофе без сахара", "kind": "note"},
        {"id": "n2", "text": "по утрам бегаю в парке", "kind": "note"},
        {"id": "n3", "text": "не люблю громкую музыку", "kind": "note"}
      ]
    },
    {
      "id": "ru-pref-002",
      "lang": "ru",
      "tags": ["preference", "homelab", "paraphrase", "hard"],
      "query": "когда запускать резервное копирование",
      "want": "n1",
      "note": "The docs/design.md preference-seam example, phrased as the operator would ask it later.",
      "notes": [
        {"id": "n1", "text": "бэкапы лучше делать ночью в три часа", "kind": "note"},
        {"id": "n2", "text": "обновления ставлю по субботам", "kind": "note"},
        {"id": "n3", "text": "логи храню месяц", "kind": "note"}
      ]
    },
    {
      "id": "ru-home-003",
      "lang": "ru",
      "tags": ["homelab", "paraphrase"],
      "query": "что помогло от мерцания монитора",
      "want": "n1",
      "notes": [
        {"id": "n1", "text": "мерцание экрана прошло после обновления драйвера amdgpu", "kind": "note"},
        {"id": "n2", "text": "вентилятор шумит на полной нагрузке", "kind": "note"},
        {"id": "n3", "text": "поставил новый ssd в ноутбук", "kind": "note"}
      ]
    },
    {
      "id": "ru-home-004",
      "lang": "ru",
      "tags": ["homelab", "distractor", "hard"],
      "query": "адрес домашнего сервера",
      "want": "n2",
      "note": "Two notes carry an IP. Only one is the server.",
      "notes": [
        {"id": "n1", "text": "роутер живёт на 192.168.1.1", "kind": "note"},
        {"id": "n2", "text": "домашний сервер на 192.168.1.104", "kind": "note"},
        {"id": "n3", "text": "принтер подключен по usb", "kind": "note"}
      ]
    },
    {
      "id": "ru-home-005",
      "lang": "ru",
      "tags": ["homelab"],
      "query": "где искать настройки nginx",
      "want": "n1",
      "notes": [
        {"id": "n1", "text": "конфиг nginx лежит в /etc/nginx/sites-enabled", "kind": "note"},
        {"id": "n2", "text": "сертификаты обновляет certbot по расписанию", "kind": "note"},
        {"id": "n3", "text": "порт 8080 занят вебкой", "kind": "note"}
      ]
    },
    {
      "id": "ru-pref-006",
      "lang": "ru",
      "tags": ["preference", "distractor", "hard"],
      "query": "что мне нельзя есть",
      "want": "n1",
      "note": "The Friday-meat note is a plausible second answer but it is a habit, not a restriction.",
      "notes": [
        {"id": "n1", "text": "у меня аллергия на орехи", "kind": "note"},
        {"id": "n2", "text": "не ем мясо по пятницам", "kind": "note"},
        {"id": "n3", "text": "люблю острую еду", "kind": "note"}
      ]
    },
    {
      "id": "ru-pers-007",
      "lang": "ru",
      "tags": ["distractor", "paraphrase"],
      "query": "когда мамин праздник",
      "want": "n1",
      "notes": [
        {"id": "n1", "text": "день рождения мамы четырнадцатого марта", "kind": "note"},
        {"id": "n2", "text": "у брата день рождения в июле", "kind": "note"},
        {"id": "n3", "text": "годовщина в сентябре", "kind": "note"}
      ]
    },
    {
      "id": "ru-home-008",
      "lang": "ru",
      "tags": ["homelab", "hard", "paraphrase"],
      "query": "чем ускоряется языковая модель",
      "want": "n1",
      "notes": [
        {"id": "n1", "text": "модель крутится на встройке через vulkan", "kind": "note"},
        {"id": "n2", "text": "whisper работает на процессоре", "kind": "note"},
        {"id": "n3", "text": "голос у piper русский", "kind": "note"}
      ]
    },
    {
      "id": "ru-pref-009",
      "lang": "ru",
      "tags": ["preference", "distractor"],
      "query": "во сколько я обычно засыпаю",
      "want": "n1",
      "notes": [
        {"id": "n1", "text": "ложусь спать около часа ночи", "kind": "note"},
        {"id": "n2", "text": "встаю в семь утра", "kind": "note"},
        {"id": "n3", "text": "днём не сплю", "kind": "note"}
      ]
    },
    {
      "id": "ru-home-010",
      "lang": "ru",
      "tags": ["homelab", "paraphrase"],
      "query": "где у меня хранятся пароли",
      "want": "n1",
      "notes": [
        {"id": "n1", "text": "пароли держу в keepassxc", "kind": "note"},
        {"id": "n2", "text": "двухфакторку сделал через totp", "kind": "note"},
        {"id": "n3", "text": "ssh ключи лежат на юбикее", "kind": "note"}
      ]
    },
    {
      "id": "ru-home-011",
      "lang": "ru",
      "tags": ["homelab", "hard", "paraphrase"],
      "query": "из-за чего кончилось место",
      "want": "n1",
      "notes": [
        {"id": "n1", "text": "диск забился логами докера в июне", "kind": "note"},
        {"id": "n2", "text": "рейд собрал из двух дисков", "kind": "note"},
        {"id": "n3", "text": "бэкап на внешний диск раз в неделю", "kind": "note"}
      ]
    },
    {
      "id": "ru-pref-012",
      "lang": "ru",
      "tags": ["preference", "distractor"],
      "query": "какой чай мне нравится",
      "want": "n1",
      "notes": [
        {"id": "n1", "text": "чай пью только зелёный", "kind": "note"},
        {"id": "n2", "text": "кофе пью без сахара", "kind": "note"},
        {"id": "n3", "text": "воду пью из фильтра", "kind": "note"}
      ]
    },
    {
      "id": "ru-silent-013",
      "lang": "ru",
      "tags": ["silent"],
      "query": "какая погода будет в пятницу",
      "want": "",
      "notes": [
        {"id": "n1", "text": "роутер живёт на 192.168.1.1", "kind": "note"},
        {"id": "n2", "text": "бэкапы лучше делать ночью", "kind": "note"},
        {"id": "n3", "text": "у меня аллергия на орехи", "kind": "note"}
      ]
    },
    {
      "id": "ru-silent-014",
      "lang": "ru",
      "tags": ["silent"],
      "query": "как зовут сестру моего коллеги",
      "want": "",
      "notes": [
        {"id": "n1", "text": "конфиг nginx лежит в /etc/nginx/sites-enabled", "kind": "note"},
        {"id": "n2", "text": "порт 8080 занят вебкой", "kind": "note"},
        {"id": "n3", "text": "сертификаты обновляет certbot", "kind": "note"}
      ]
    },
    {
      "id": "ru-silent-015",
      "lang": "ru",
      "tags": ["silent"],
      "query": "сколько я заплатил за машину",
      "want": "",
      "notes": [
        {"id": "n1", "text": "чай пью только зелёный", "kind": "note"},
        {"id": "n2", "text": "ложусь спать около часа ночи", "kind": "note"},
        {"id": "n3", "text": "не люблю громкую музыку", "kind": "note"}
      ]
    },
    {
      "id": "ru-home-016",
      "lang": "ru",
      "tags": ["homelab", "paraphrase"],
      "query": "откуда берётся токен бота",
      "want": "n1",
      "notes": [
        {"id": "n1", "text": "токен телеграма лежит в deploy/telegram.env", "kind": "note"},
        {"id": "n2", "text": "вебхуки не использую, только long-poll", "kind": "note"},
        {"id": "n3", "text": "уведомления приходят в личку", "kind": "note"}
      ]
    },
    {
      "id": "ru-hard-017",
      "lang": "ru",
      "tags": ["hard", "paraphrase", "homelab"],
      "query": "как я восстановил конфиги",
      "want": "n1",
      "note": "No shared word between query and note beyond none at all. This is the case a lexical embedder cannot win.",
      "notes": [
        {"id": "n1", "text": "после переустановки системы вернул все настройки из git", "kind": "note"},
        {"id": "n2", "text": "разделы на диске резал вручную", "kind": "note"},
        {"id": "n3", "text": "загрузчик поставил заново", "kind": "note"}
      ]
    },
    {
      "id": "ru-dist-018",
      "lang": "ru",
      "tags": ["distractor"],
      "query": "чем кормить кота",
      "want": "n1",
      "notes": [
        {"id": "n1", "text": "кот ест только сухой корм", "kind": "note"},
        {"id": "n2", "text": "собаке даю мясо", "kind": "note"},
        {"id": "n3", "text": "рыбок кормлю раз в день", "kind": "note"}
      ]
    },
    {
      "id": "ru-home-019",
      "lang": "ru",
      "tags": ["homelab", "hard", "paraphrase"],
      "query": "как контейнер получает доступ к видеокарте",
      "want": "n1",
      "notes": [
        {"id": "n1", "text": "docker compose пробрасывает /dev/dri внутрь", "kind": "note"},
        {"id": "n2", "text": "контейнеры рестартуют сами", "kind": "note"},
        {"id": "n3", "text": "образы чищу вручную", "kind": "note"}
      ]
    },
    {
      "id": "ru-pref-020",
      "lang": "ru",
      "tags": ["preference", "distractor"],
      "query": "когда мне нельзя звонить",
      "want": "n1",
      "notes": [
        {"id": "n1", "text": "не звони мне после десяти вечера", "kind": "note"},
        {"id": "n2", "text": "утром не трогай меня до кофе", "kind": "note"},
        {"id": "n3", "text": "по выходным не работаю", "kind": "note"}
      ]
    },
    {
      "id": "en-pref-021",
      "lang": "en",
      "tags": ["preference", "paraphrase"],
      "query": "which colour scheme do i like",
      "want": "n1",
      "notes": [
        {"id": "n1", "text": "i prefer dark theme everywhere", "kind": "note"},
        {"id": "n2", "text": "font size 14 is fine", "kind": "note"},
        {"id": "n3", "text": "i use vim keybindings", "kind": "note"}
      ]
    },
    {
      "id": "en-home-022",
      "lang": "en",
      "tags": ["homelab", "distractor"],
      "query": "where is the big disk mounted",
      "want": "n1",
      "notes": [
        {"id": "n1", "text": "the nas drive is mounted at /mnt/hdd1", "kind": "note"},
        {"id": "n2", "text": "models live on the ssd", "kind": "note"},
        {"id": "n3", "text": "backups go to the nas nightly", "kind": "note"}
      ]
    },
    {
      "id": "en-silent-023",
      "lang": "en",
      "tags": ["silent"],
      "query": "what is my bank account number",
      "want": "",
      "notes": [
        {"id": "n1", "text": "the nas drive is mounted at /mnt/hdd1", "kind": "note"},
        {"id": "n2", "text": "i prefer dark theme everywhere", "kind": "note"},
        {"id": "n3", "text": "the router runs openwrt", "kind": "note"}
      ]
    },
    {
      "id": "en-hard-024",
      "lang": "en",
      "tags": ["hard", "paraphrase"],
      "query": "what fixed the screen problem",
      "want": "n1",
      "notes": [
        {"id": "n1", "text": "the flicker went away once i swapped the display cable", "kind": "note"},
        {"id": "n2", "text": "the laptop fan is loud", "kind": "note"},
        {"id": "n3", "text": "the second monitor is 1440p", "kind": "note"}
      ]
    },
    {
      "id": "en-pref-025",
      "lang": "en",
      "tags": ["preference", "hard"],
      "query": "should i be offered wine",
      "want": "n1",
      "notes": [
        {"id": "n1", "text": "i do not drink alcohol", "kind": "note"},
        {"id": "n2", "text": "i skip breakfast", "kind": "note"},
        {"id": "n3", "text": "i like spicy food", "kind": "note"}
      ]
    },
    {
      "id": "ru-home-026",
      "lang": "ru",
      "tags": ["homelab", "paraphrase"],
      "query": "какая модель распознавания речи мне подходит",
      "want": "n1",
      "notes": [
        {"id": "n1", "text": "whisper модель small хватает для русского", "kind": "note"},
        {"id": "n2", "text": "голос ирина звучит лучше остальных", "kind": "note"},
        {"id": "n3", "text": "слово активации маven", "kind": "note"}
      ]
    },
    {
      "id": "ru-fact-027",
      "lang": "ru",
      "tags": ["distractor", "hard", "paraphrase"],
      "query": "когда я последний раз обслуживал машину",
      "want": "n1",
      "note": "A fact, not a note — both share the vector index, so a fact can win a recall.",
      "notes": [
        {"id": "n1", "text": "последний раз менял масло в мае", "kind": "fact"},
        {"id": "n2", "text": "шины поменял осенью", "kind": "fact"},
        {"id": "n3", "text": "страховка до декабря", "kind": "fact"}
      ]
    },
    {
      "id": "ru-pref-028",
      "lang": "ru",
      "tags": ["preference", "hard", "paraphrase"],
      "query": "как мне присылать оповещения",
      "want": "n1",
      "notes": [
        {"id": "n1", "text": "терпеть не могу уведомления со звуком", "kind": "note"},
        {"id": "n2", "text": "вибрацию оставь включённой", "kind": "note"},
        {"id": "n3", "text": "письма читаю вечером", "kind": "note"}
      ]
    },
    {
      "id": "ru-silent-029",
      "lang": "ru",
      "tags": ["silent"],
      "query": "во сколько отходит поезд",
      "want": "",
      "notes": [
        {"id": "n1", "text": "кот ест только сухой корм", "kind": "note"},
        {"id": "n2", "text": "люблю острую еду", "kind": "note"},
        {"id": "n3", "text": "пароли держу в keepassxc", "kind": "note"}
      ]
    },
    {
      "id": "en-home-030",
      "lang": "en",
      "tags": ["homelab", "paraphrase"],
      "query": "what firmware is on the router",
      "want": "n1",
      "notes": [
        {"id": "n1", "text": "the router runs openwrt", "kind": "note"},
        {"id": "n2", "text": "wifi channel is 6", "kind": "note"},
        {"id": "n3", "text": "the guest network is off", "kind": "note"}
      ]
    },
    {
      "id": "ru-mixed-031",
      "lang": "ru",
      "tags": ["mixed", "paraphrase", "hard"],
      "note": "notes and facts in one store and the note is the answer — the daemon indexes both (Vikunja #373)",
      "query": "куда я спрятал второй ключ от квартиры",
      "want": "n1",
      "notes": [
        {"id": "n1", "text": "запасной ключ от квартиры лежит в синей коробке на полке", "kind": "note"},
        {"id": "x1", "text": "поменял замок в двери двадцатого июня", "kind": "fact"},
        {"id": "x2", "text": "отдал ключ соседке в мае", "kind": "fact"}
      ]
    },
    {
      "id": "ru-mixed-032",
      "lang": "ru",
      "tags": ["mixed", "distractor"],
      "note": "the mirror of ru-mixed-031: the fact answers and the notes are the distractors",
      "query": "когда я в последний раз заливал бензин",
      "want": "x1",
      "notes": [
        {"id": "x1", "text": "залил полный бак в четверг вечером", "kind": "fact"},
        {"id": "n1", "text": "на заправке у моста дешевле бензин", "kind": "note"},
        {"id": "n2", "text": "надо поменять зимние шины", "kind": "note"}
      ]
    },
    {
      "id": "ru-silent-033",
      "lang": "ru",
      "tags": ["silent", "hard"],
      "note": "Observed through the whole-assistant E2E with only n1 stored: routing called an ordinary past-tense report a query and the single-hit recall gate spoke n1 at cosine 0.825. A report is not a request to read a semantically nearby note.",
      "query": "я отменил напоминание про молоко",
      "want": "",
      "notes": [
        {"id": "n1", "text": "запомни: запасной ключ лежит в синей коробке", "kind": "note"},
        {"id": "n2", "text": "домашний сервер на 192.168.1.104", "kind": "note"},
        {"id": "n3", "text": "чай пью только зелёный", "kind": "note"}
      ]
    },
    {
      "id": "ru-silent-034",
      "lang": "ru",
      "tags": ["silent", "hard", "locative"],
      "note": "V-719 whole-assistant adversarial: with only n1 stored, the open personal question scored 0.817 against it. An explicit location request must not substitute a semantically nearby object's location for the named target.",
      "query": "где мой паспорт?",
      "want": "",
      "notes": [
        {"id": "n1", "text": "запомни: запасной ключ лежит в синей коробке", "kind": "note"},
        {"id": "n2", "text": "домашний сервер на 192.168.1.104", "kind": "note"},
        {"id": "n3", "text": "чай пью только зелёный", "kind": "note"}
      ]
    },
    {
      "id": "ru-silent-035",
      "lang": "ru",
      "tags": ["silent", "hard", "locative"],
      "note": "V-719 adversarial neighbour: a locative interrogative must not reopen the report-shaped false recall; the unrelated single note scored 0.806.",
      "query": "где я отменил напоминание про молоко?",
      "want": "",
      "notes": [
        {"id": "n1", "text": "запомни: запасной ключ лежит в синей коробке", "kind": "note"},
        {"id": "n2", "text": "домашний сервер на 192.168.1.104", "kind": "note"},
        {"id": "n3", "text": "чай пью только зелёный", "kind": "note"}
      ]
    },
    {
      "id": "ru-silent-036",
      "lang": "ru",
      "tags": ["silent", "hard", "locative", "incidental-overlap"],
      "note": "V-719 adversarial: blue is only an incidental shared modifier; shirt and spare key are different targets despite cosine 0.838.",
      "query": "где лежит синяя рубашка?",
      "want": "",
      "notes": [
        {"id": "n1", "text": "запомни: запасной ключ лежит в синей коробке", "kind": "note"},
        {"id": "n2", "text": "домашний сервер на 192.168.1.104", "kind": "note"},
        {"id": "n3", "text": "чай пью только зелёный", "kind": "note"}
      ]
    },
    {
      "id": "ru-silent-037",
      "lang": "ru",
      "tags": ["silent", "hard", "locative", "incidental-overlap"],
      "note": "V-719 adversarial: blue is only an incidental shared modifier; folder and spare key are different targets despite cosine 0.837.",
      "query": "где лежит синяя папка?",
      "want": "",
      "notes": [
        {"id": "n1", "text": "запомни: запасной ключ лежит в синей коробке", "kind": "note"},
        {"id": "n2", "text": "домашний сервер на 192.168.1.104", "kind": "note"},
        {"id": "n3", "text": "чай пью только зелёный", "kind": "note"}
      ]
    },
    {
      "id": "ru-silent-038",
      "lang": "ru",
      "tags": ["silent", "hard", "locative", "incidental-overlap"],
      "note": "V-719 adversarial: spare is only an incidental shared modifier; passport and key are different targets despite cosine 0.832.",
      "query": "где мой запасной паспорт?",
      "want": "",
      "notes": [
        {"id": "n1", "text": "запомни: запасной ключ лежит в синей коробке", "kind": "note"},
        {"id": "n2", "text": "домашний сервер на 192.168.1.104", "kind": "note"},
        {"id": "n3", "text": "чай пью только зелёный", "kind": "note"}
      ]
    },
    {
      "id": "ru-silent-039",
      "lang": "ru",
      "tags": ["silent", "hard", "locative", "incidental-overlap"],
      "note": "V-719 adversarial: spare is only an incidental shared modifier; flash drive and key are different targets despite cosine 0.839.",
      "query": "где лежит запасная флешка?",
      "want": "",
      "notes": [
        {"id": "n1", "text": "запомни: запасной ключ лежит в синей коробке", "kind": "note"},
        {"id": "n2", "text": "домашний сервер на 192.168.1.104", "kind": "note"},
        {"id": "n3", "text": "чай пью только зелёный", "kind": "note"}
      ]
    },
    {
      "id": "ru-silent-040",
      "lang": "ru",
      "tags": ["silent", "hard", "locative", "incidental-overlap"],
      "note": "V-719 adversarial: blue box overlaps, but the candidate does not corroborate the documents qualifier despite cosine 0.867.",
      "query": "где находится синяя коробка с документами?",
      "want": "",
      "notes": [
        {"id": "n1", "text": "запомни: запасной ключ лежит в синей коробке", "kind": "note"},
        {"id": "n2", "text": "домашний сервер на 192.168.1.104", "kind": "note"},
        {"id": "n3", "text": "чай пью только зелёный", "kind": "note"}
      ]
    },
    {
      "id": "ru-silent-041",
      "lang": "ru",
      "tags": ["silent", "hard", "locative", "incidental-overlap"],
      "note": "V-719 adversarial: key overlaps, but the candidate does not corroborate the car qualifier despite cosine 0.844.",
      "query": "где лежит ключ от машины?",
      "want": "",
      "notes": [
        {"id": "n1", "text": "запомни: запасной ключ лежит в синей коробке", "kind": "note"},
        {"id": "n2", "text": "домашний сервер на 192.168.1.104", "kind": "note"},
        {"id": "n3", "text": "чай пью только зелёный", "kind": "note"}
      ]
    },
    {
      "id": "ru-silent-042",
      "lang": "ru",
      "tags": ["silent", "hard", "locative", "location-object"],
      "note": "V-719 adversarial: the requested blue box occurs in n1 only as the spare key's location, not as the proposition subject. Arbitrary whole-note overlap must not turn it into the box's own location.",
      "query": "где синяя коробка?",
      "want": "",
      "notes": [
        {"id": "n1", "text": "запомни: запасной ключ лежит в синей коробке", "kind": "note"},
        {"id": "n2", "text": "домашний сервер на 192.168.1.104", "kind": "note"},
        {"id": "n3", "text": "чай пью только зелёный", "kind": "note"}
      ]
    }
  ]
}
