WEB board

всеканоны и докиворкеры↗ iOS↗ Легаси
WEB-096 · Задача · Инфраструктура · web

[ARCH-P0.3] Нет индекса DocumentChunk(documentId,index) — бьёт по очереди, дедупу и детали блокнота

Закрыт P0 · горит ведёт: backup-opus
Суть
DocumentChunk без индексов: `prisma/schema.prisma:1884-1903`; три потребителя: `src/lib/ingest/sourceIndexingQueue.ts:169-172`, `src/lib/ingest/contentDedup.ts:306-312`, `src/app/api/notebooks/[id]/detail/route.ts:23-34`.
СДЕЛАТЬ: добавить индекс ОНЛАЙН; снять EXPLAIN (ANALYZE,BUFFERS) до/после на трёх запросах.
ОЦЕНКА: малая кровь, меньше дня. Это самый дешёвый пункт с реальным эффектом.

Источник: аудит архитектуры (волна archaudit, sol/xhigh, 21.08), отчёт M4 `/Users/milamarty/work/ARCHAUDIT-REPORT.md`, снимок кода `a9b2440d`. Вердикт аудита: годимся для роста 25→1000 после короткого P0/P1-hardening; переписывать не надо.

**Документы эпика (обогащение по требованию owner 21.08):**
- Первичный аудит (ОТДАН РЕВИЗОРУ owner-ом): ~/Downloads/АУДИТ-АРХИТЕКТУРЫ-20260821.md на ноутбуке; оригинал M4 /Users/milamarty/work/ARCHAUDIT-REPORT.md (365 строк, снимок кода a9b2440d, каждое утверждение со ссылкой file:line).
- Раздел с полной таблицей чеклиста — §1; детальный разбор базового слоя — §2; 10 массовых запросов и минимальный индексный пакет — §3; распределённость и гонки — §4; observability — §5; выкатка/rollback/health — §6; ТОП-5 рисков — §7; ЧТО НЕ ДЕЛАТЬ — §8; backlog по риску — §9; rollout по когортам — §10.
- Смежные документы: план переезда ~/Downloads/prodplan-20260810/PROD-MIGRATION-PLAN-R4.md (Intel), аудит миграции M4 MIGAUDIT-REPORT.md, репетиция переезда A1 ~/waves/GATE514-REPORT.md (измеренные RTO), эпик миграции WEB-282.
- Ветка работ: archp0 (worktree A1 wt-archp0, от посадки-30 23e0b944).

## 21.08 ~12:40 СДЕЛАНО: коммит 174236c7 «index DocumentChunk(documentId, index)». Самый дешёвый пункт аудита закрыт.
Ветка archp0/fcsrc2/migfix от посадки-30 (23e0b944), worktree на A1. Отчёты: ~/waves/ARCHP0-REPORT.md, FCSRC2-REPORT.md, MIGFIX-REPORT.md.

## 21.08 — ВЫЕХАЛО НА ПРОД
**Посадка 30 состоялась 21.08 03:53 IST.** serving = `v4-504af77f`, релиз `arm64-504af77f-20260821T025311Z`, артефакт sha `a0afc41415db60377aeb4cf399d91b98a4c407217fc8839b0b1369a2542af362`, аттестация v18. Проверено после переключения: `active`, `NRestarts=0`, `paidReady=true`, `posture=enforce_ready`, `mode=enforce`, `failures=[]`, фатальных строк boot-контракта **0**, секрет сторожа файл≡процесс (`cbabe4a2b16008e3`), nft переприменены, канон проштампован (`CANON.json: serving=504af77f marker=v4-504af77f`).
Проверка байтов релиза и живая проба выполнены после переключения; подробный трейл посадки — в WEB-282.

## 2026-08-23 BOARDSWEEP: STALE-NOT-DEPLOYED
- Evidence: buildFixed is empty. Canonical inspection found the requested migration/index artifacts in prisma/schema.prisma and prisma/migrations/20260820120000_web096_document_chunk_document_id_index/migration.sql; no deployed build pointer or EXPLAIN receipt is recorded.
- buildFixed: <empty>; canonical: v4-081ff4fb5 / 081ff4fb5f6110f8001daec7ed910ccef2e395dc.
- Status preserved by sweep: review.
Доказательства

[2026-08-24 STALEREV против 61bc04462; в проде с посадки 45 v4-5a4edbac3] Вердикт STILL-OPEN: снять фактический EXPLAIN ANALYZE BUFFERS before/after по трём запросам. Отчёт: A1 /home/ubuntu/waves/STALEREVIEW-REPORT.md (STALEREVIEW_DONE).

[2026-08-25 ~11:00] EXPLAIN на проде: Index Scan using DocumentChunk_documentId_index_idx (cost 284 vs seq 22163, exec 16.8ms) — индекс живой И используется планировщиком; миграция applied 20.08. WEB-096 доказан на проде → кандидат на done.

[25.08 ~12:25] ЗАКРЫТО: индекс в проде с 20.08 (миграция applied), EXPLAIN подтверждает использование (scripts/web096-explain.sql, 240f04b), код-скрипты в проде посадкой 53 (v4-c3fb44e). Полный цикл: миграция→индекс→EXPLAIN→код. По ГО owner на чистку доски.
Лента
2026-08-25T08:48:32.399Z · fable-ops
В РАБОТЕ (A1 Luna, ветка web096, wt-web096). Добавляю @@index([documentId,index]) на DocumentChunk + миграция CREATE INDEX CONCURRENTLY (онлайн) + bench-запросы EXPLAIN ANALYZE для 3 потребителей (sourceIndexingQueue:169, contentDedup:306, notebooks detail:23). Additive. Соберётся в батч-лендинг после фактчека.
2026-08-25T09:16:05.351Z · fable-ops
КОД ГОТОВ (A1, ветка web096, commit 240f04b): @@index на DocumentChunk + миграция CREATE INDEX CONCURRENTLY (онлайн) + EXPLAIN-планы для 3 потребителей в scripts. Прод/флаги не трогались. ОСТАЁТСЯ: EXPLAIN (ANALYZE,BUFFERS) before/after снять на проде при посадке (нужна живая БД). Входит в батч-лендинг (с landing-53 + WEB-341).
Воркер
не привязан — привязать: curl -X POST https://bugs.wool2.online/api/web/assign -H 'content-type: application/json' \ -d '{"issueId":"WEB-096","session":"<имя tmux-сессии>","host":"m4"}'
Обновлён
2026-08-25T11:24:19.518Z