⌂ все дашборды/Мозг и волт← Orphan-Sweep-Decisions · Vault-Orphans →

Второй мозг перестал терять заметки, которые в нём есть

Узел HP17-ZBook · оператор Антон · 4 августа 2026 · движки brain_ask.py · ask_server.py · chat_search.py · индекс 14 493 чанка / 6 168 файлов
7-еместо контрольной заметки
(было: нет в выдаче)
+0.34 сцена на запрос
0.73 → 1.07 с
18инвариантов в регресс-тесте
0 FAIL
⚠️вердикт /tt
(рельса gemini пропущена)

1. Диагноз 28.07 был неверный

❌ «Воронка первой ступени узкая — 60 файлов мало» опровергнуто замером
На прод-движке (openai, дефолт) контрольная заметка приходит с первой ступени кандидатом №1 из 250. Первая ступень исправна. Замер 28.07 шёл по запасному движку e5 — отсюда и увело.
Подъём воронки не помогает вообще: заметки нет в топ-12 при K = 60 / 150 / 250 / 400.
✅ Настоящий корень: файл представлял НЕ ТОТ абзац доказано
Дедуп по файлу стоял ДО реранкера: из файла оставался один чанк, выбранный косинусом, и кросс-энкодер судил весь файл по нему.
чанк заметкикосинусесть спрошенная фразаоценка реранкера
#4298 — его и выбирал косинус+0.4674 ← лучшийнет−10.25 (последнее место)
#4303+0.4310да — «Компилятор производного слоя»−4.94
Файл проигрывал не потому, что нерелевантен, а потому что его представлял абзац без ответа. Реранкер ставил −10.25 честно — ему показали не то.

2. Что сделано

В реранкер идёт до 3 чанков каждого файла, дедуп — ПОСЛЕ реранка
Представителя файла теперь выбирает тот, кто умеет читать запрос, а не косинус. Воронка осталась 60: её подъём вредит и стоит latency. Ручки вынесены в env (BRAIN_CHUNKS_PER_FILE, BRAIN_TOPK_RETRIEVE) и клампятся к минимуму 1.
конфигурацияконтрольный запрос в топ-12реранк
K=60, 1 чанк/файл (было)❌ нет0.73 с
K=250, 1 чанк/файл❌ нет1.64 с
K=400, 1 чанк/файл❌ нет2.48 с
K=60, 3 чанка/файл (стало)✅ 7-е место1.07 с
K=250, 3 чанка/файл❌ шум вытесняет обратно4.52 с
На 5 контрольных запросах верхняя оценка не ухудшилась ни разу, у двух выросла: +8.66 → +9.48 и −0.20 → +2.68.

3. Побочный результат: порог-обрезка (circuit breaker) закрыта

Разделение «свои vs чужие» вопросы ИСЧЕЗЛО перемер §4 после фикса
вопросответ в волте?27.0704.08
правило что причина такой же claim как выводесть+8.66+9.48
как мы синхронизируем машины через Syncthingесть+5.87+5.87
архитектура памяти цифрового двойникаесть+1.57+1.57
компилятор производного слоя — фраза из тела заметкиесть дословно−4.54−4.21 ← ниже всех «чужих»
рецепт неаполитанской пиццынет−1.03−1.03
билет на автобус в Куала-Лумпуренет−3.82−4.14
глубина батискафа «Триест»нет−4.53−2.22
Порог rr = 0 заглушил бы вопрос, на который система только что дала правильный ответ, и пропустил бы батискаф. Чистое разделение 27.07 было артефактом выборки: все три «своих» вопроса совпадали с ЗАГОЛОВКАМИ заметок. Вывод: оценка реранкера не годится как мера «есть ли ответ в волте». Вариант C3 закрыт по существу, а не «до выяснения».

4. Сторонние глаза

Codex — нашёл настоящую дыру починено
BRAIN_CHUNKS_PER_FILE=0 давало пустой пул кандидатов: ноль хитов, а пустая выдача читается сессией как «в волте про это ничего нет». Нечисловое значение роняло модуль на импорте — сразу три движка. Теперь кривое значение = громкая строка в stderr + дефолт.
Grok — 2 претензии из 3 опровергнуты замером 1 принята
⛔ «в реранкер уходит ~20 файлов вместо 60» — замерено ровно 60 файлов / 169 чанков.
⛔ «сняли circuit breaker → мусор» — обрезка никогда не была включена, снимать было нечего.
⚠️ «топ-12 забьётся длинными заметками» — подтвердилось частично. Средний размер файла в топ-12 вырос в 5 запросах из 6 (напр. 4.83 → 7.08 чанка при среднем по индексу 2.35); у контрольного упал 18.50 → 10.42. Перекос был и ДО фикса, фикс его слегка усиливает. Лечится нормировкой на число чанков — пока цена не оправдывает усложнение.
Gemini — рельса пропущена явно вердикт → ⚠️
У t3 нет локальной CLI-двери, только браузерная с ручной вставкой, а прогон был безлюдный по расписанию. Вендор не мёртв — закрыта дверь. По канону явный скип опускает вердикт /tt до ⚠️, поэтому фикс помечен ⚠️, несмотря на зелёные тесты.

5. Раскатка на флот

Круг потребителей — 2 узла, назван по факту, а не по памяти
Живой API Syncthing: папка claude-imports = E:\Obsidian\_imports, sendreceive, ровно два устройства — хаб A-2022BayArea и HP17-ZBook. Остальные узлы флота эту папку не держат, движка у них нет.
узелстатусчем доказано
HP17-ZBook (этот)применено и провереноDONE-маркер, verify exit 0, 18 инвариантов зелёные
Хаб A-2022BAYAREAждёт примененияпосылка brain-recall-chunkfix-20260804 в PENDING, .py едут Syncthing'ом
Сторож от отката — _imports/_test_brain_recall.py, в ночной регресс-сетке. Отдельный инвариант гоняет тот же путь со сломанной настройкой и требует, чтобы заметка ПОТЕРЯЛАСЬ: если тест зелёный и так, он ничего не доказывает.