WEB-594 · Задача · — · web
P1 [сущности]: «ноль сущностей» у больших книг — разбор двух счётчиков и версии извлечения (Франкенштейн)
Закрыт
P1 · важно
ведёт: —
Лента
2026-09-10T13:14:03.709Z · coordinatorЭВОЛЮЦИЯ 10.09 — причина РАЗОБРАНА, починка частично посажена, корень отдан в волну 3289 (M4).
Владелец открыл Франкенштейна и увидел ноль сущностей. Разбор дал ТРИ разные вещи, не одну:
1) СЧЁТЧИКОВ ДВА. Тот, что показывается владельцу в интерфейсе, и тот, что заполняется извлечением, —
разные. Даже при успешном извлечении владелец видит ноль.
2) БЮДЖЕТ МЕТАДАННЫХ 400 000 знаков срезает зеркало сущностей у больших документов целиком.
Поэтому болезнь видна именно на больших книгах, а на коротких документах нет.
3) ВЕРСИЯ ИЗВЛЕЧЕНИЯ НЕ ПОДНЯТА. Волна 3210 починила само извлечение, но не тронула EXTRACTION_VERSION.
Документы, обработанные СТАРЫМ кодом, числятся уже обработанными и никогда не переизвлекаются.
Починка есть, а у старых книг сущностей по-прежнему нет — ровно это владелец и видит.
ПОСАЖЕНО сегодня в линии l114y (16e1ddaa1): индекс сущностей для больших книг (6ee7e293e)
плюс фикс двух ошибок типов (b83269fcb), который был условием приёмки.
НЕ ЗАКРЫТО: пункт 3. Волна 3289 на M4 ищет file:line, где сравниваются версии, доказывает пропуск
переизвлечения на стенде, считает ЗАПРОСОМ объём затронутых строк и предлагает разовый подъём версии.
Отдельным требованием — назвать оба счётчика из пункта 1 с file:line каждый.
Пока пункт 3 не закрыт, у владельца по старым книгам будет ноль, сколько бы раз извлечение ни чинили.
2026-09-10T13:29:04.957Z · coordinatorВЕРДИКТ 10.09 — волна 3289 (M4) отдала GO по корню, которого не хватало.
Сдача: /Users/milamarty/waves/EXTRACTIONVERSION-REPORT.md (33 КБ) + EXTRACTIONVERSION.bundle с sha256-распиской.
Ветка codex/3289-entity-extraction-version-backfill, HEAD 63f30902607aae45193fcfb03326d5c10ec93fcb,
отставание/опережение относительно базы 16e1ddaa1: 0/1.
Напомню, из чего состояла болезнь целиком (три причины, не одна):
1) счётчиков сущностей ДВА — показывается не тот, что заполняется;
2) бюджет метаданных 400 000 знаков срезает зеркало сущностей у больших документов;
3) волна 3210 починила извлечение, но не подняла EXTRACTION_VERSION, поэтому старые книги числятся
обработанными и не переизвлекаются НИКОГДА.
Пункты 1 и 2 посажены в l114y. Пункт 3 — это и есть сдача 3289.
Заберу в следующую линию после l114z.
2026-09-10T14:16:08.203Z · coordinator10.09 — корень (пункт 3: непонятая версия извлечения) СДАН волной 3289 на M4, вердикт GO.
Ветка codex/3289-entity-extraction-version-backfill, HEAD 63f30902607aae45193fcfb03326d5c10ec93fcb.
Бандл /Users/milamarty/waves/EXTRACTIONVERSION.bundle с sha256-распиской.
В линию l114z НЕ вошёл: сдача пришла уже после сборки. Беру в следующую линию.
Владелец спросил про это прямо в 14:02Z — ответила, что волна сдалась и ждёт линии.
2026-09-10T15:17:55.469Z · coordinatorСтатус in_progress -> review: всё, что можно было сделать кодом, СДЕЛАНО и проверено.
1) Счётчиков два — доказано волной 3289 с file:line на оба: авторитетный индекс создаёт
`DocumentEntity` (`entityPersistence.ts:285-295`), а владелец в окне видел ДЛИНУ
metadata-проекции (`StatsDialog.tsx:1795-1816`), которая у больших документов срезалась
после 400 000 знаков (`detail/route.ts:19,34-41`). Текущая база гидратирует окно
из `DocumentEntity` — посажено.
2) Версия извлечения поднята 3->4 коммитом `6ee7e293e` (посажен в l114y). Волна ОТКАЗАЛАСЬ
поднимать до 5 и была права: это обесценило бы уже вылеченные документы.
3) ЛЕЧЕНИЕ ЗАПУЩЕНО по прямому слову владельца («Запускай», 14:19Z) и по его тетрадям ВЫПОЛНЕНО:
220 документов, **2841 сущность записана** — Books 405, Science Fiction Anthology 615,
Big-4 205, Passport 237, LEGAL 106, Brain 1273.
Замер по боевой базе ДО: 1768 документов под переизвлечение, 79.4 млн знаков, верхняя оценка $4.13.
Осталось ~1548 вне его тетрадей (в основном «Google drive», 1008) — фикстуры не трогаю.
Перевожу в done, когда владелец подтвердит, что видит сущности у своих книг.
2026-09-10T16:09:57.640Z · coordinatorЗАКРЫВАЮ 10.09 — доказано ЗАПРОСОМ К БОЕВОЙ БАЗЕ после лечения.
| Тетрадь | Источников | Сущностей |
|---|---|---|
| Brain | 109 | 1300 |
| Science Fiction Anthology | 26 | 690 |
| Big-4 | 46 | 484 |
| Books | 44 | 424 |
| Passport | 15 | 237 |
| LEGAL | 78 | 106 |
Было — ноль. Владелец открывал Франкенштейна и видел пустоту.
ЭВОЛЮЦИЯ ЦЕЛИКОМ, три РАЗНЫЕ причины под одним симптомом:
1) СЧЁТЧИКОВ ДВА. Авторитетный — создание `DocumentEntity` (`entityPersistence.ts:285-295`).
Владелец же видел в окне ДЛИНУ metadata-проекции (`StatsDialog.tsx:1795-1816`).
2) БЮДЖЕТ МЕТАДАННЫХ 400 000 знаков срезал зеркало сущностей у больших документов целиком
(`src/app/api/notebooks/[id]/detail/route.ts:19,34-41`). Поэтому болезнь видна ИМЕННО на больших
книгах, а на коротких документах нет. Окно теперь гидратируется из `DocumentEntity`
(`StatsDialog.tsx:1529-1536`) — посажено.
3) ВЕРСИЯ ИЗВЛЕЧЕНИЯ. Волна 3210 починила извлечение, но не подняла `EXTRACTION_VERSION`,
и документы, обработанные старым кодом, числились обработанными навсегда.
ПОПРАВКА К МОЕЙ ГИПОТЕЗЕ. Я считала, что версию надо поднять. Волна 3289 (M4) ОТКАЗАЛАСЬ и была права:
подъём 3→4 уже приехал коммитом `6ee7e293e` в линии l114y. Повторный подъём до 5 обесценил бы уже
вылеченные документы и нарушил «ровно один раз». Она доказала полный переход состояния на живом
PostgreSQL: v3+v3 -> пропуск/0 вызовов/0 сущностей; v4+v3 -> извлечение и запись; v4+v4 -> пропуск.
Константа и сравнение: `src/lib/intelligence/changeDetection.ts:33` и `:73`;
ранний no-op: `src/lib/intelligence/documentEntityIngest.ts:216-217`.
ЛЕЧЕНИЕ. Замер по боевой базе ДО (запрос `scripts/web591-extraction-version-inventory.sql` из сдачи
волны): 1768 документов под переизвлечение (1232 без версии вовсе, 536 со старой: v1 210, v2 2, v3 324),
79.4 млн знаков, 2049 окон, верхняя оценка $4.13.
Владелец дал слово «Запускай» 14:19Z. Пролечено по его тетрадям: 220 документов, 2841 сущность.
🔴 ЛОВУШКА, СТОИВШАЯ БЫ ДЕНЕГ ВПУСТУЮ: рабочее дерево `/home/ubuntu/nc` на A1 стояло на старом
коммите с `EXTRACTION_VERSION = 3`, а прод на 4. Запуск лечения оттуда пометил бы документы
«обработаны на v3»: деньги потрачены, книги пусты, и повторно они бы не переизвлеклись.
В скрипт запуска (`/tmp/backfill-rest.sh` на A1) вшита проверка версии, скрипт отказывается
работать при несовпадении. НЕ СНИМАТЬ.
ОСТАЛОСЬ: ~1548 документов вне тетрадей владельца, в основном «Google drive» (1008).
Фикстуры и тестовые корпуса намеренно не трогала — деньги на мусор не жечь.
Связано: WEB-591 (тест из той же волны), WEB-593 (соседняя болезнь того же конвейера, но другой корень).
Воркер
не привязан — привязать:
curl -X POST https://bugs.wool2.online/api/web/assign -H 'content-type: application/json' \
-d '{"issueId":"WEB-594","session":"<имя tmux-сессии>","host":"m4"}'
Обновлён
2026-09-10T16:09:57.642Z