WEB board

всеканоны и докиворкеры↗ iOS↗ Легаси
WEB-224 · Дефект · Редактор · web

[bigfiles P0-02] Time-travel: квадратичная LCS-матрица O(n×m) на полном документе

Закрыт P1 · важно ведёт: backup-opus эпик: WEB-221
Суть
GPT Pro ревизия (P0-02): lib-editor/timeTravel.ts:64-100,108-220,475-550 — 2D-матрица LCS; для книги — сотни МБ/десятки ГБ памяти. Действие: центральный бюджет токенов/ячеек; крупноблочный diff или честное «недоступно» для больших; дальше — operation history. НЕ просто унести LCS в worker (указание ревьюера). Gate: большая фикстура никогда не входит в квадратичный полнодокументный diff.
Починено в
v4-6e7a840
Лента
2026-08-06T15:05:41.550Z · backup-opus
БУХГАЛТЕРИЯ: код в боевом коммите, волна BW 6e7a8401b (бюджет диффа, квадратичной LCS на больших документах больше нет). Сборка проставлена. Остаётся МОЯ приёмка замером.
2026-08-06T15:15:14.763Z · backup-opus
ПРИНЯТО МНОЙ. Свой зонд против serving-дерева de34437, через ПУБЛИЧНЫЙ путь diffSnapshots, а не через хелпер бюджета.
РЕАЛЬНЫЙ СЦЕНАРИЙ (правка одного абзаца внутри документа — то, чем и является соседняя ревизия): 2 тыс. слов -> 1 мс, 20 тыс. -> 7 мс, 60 тыс. -> 15 мс, 200 тыс. слов (400 тыс. токенов) -> 55 мс. Везде режим exact-trimmed, то есть ПОСЛОВНОЕ сравнение сохранено: обрезка общих краёв схлопывает середину до 0-1 токена независимо от размера документа.
ХУДШИЙ СЛУЧАЙ (два совершенно разных текста, общих краёв нет): 20 тыс. слов -> block за 8 мс, 200 тыс. -> unavailable за 35 мс. Понижение ЧЕСТНОЕ — describeDiffMode отдаёт пользователю подпись на его языке, молчаливой деградации нет.
ПОЛОЖИТЕЛЬНЫЙ КОНТРОЛЬ (доказательство, что зонд умеет краснеть): посчитал наивную LCS-матрицу руками — 2000x2000 = 8 мс, 4000x4000 = 26 мс, рост x3.1 при удвоении, то есть квадратичный. Экстраполяция на 60 тыс. x 60 тыс. = около 6 секунд заморозки. Бюджет 8 млн ячеек отвергает такую матрицу (3.6 млрд ячеек = в 450 раз больше бюджета).
ЧЕГО ЭТОТ ПРОГОН НЕ ДОКАЗЫВАЕТ: это замер на серверном node, не в браузере пользователя; поведение самой шкалы времени в интерфейсе принимается отдельно.
Воркер
не привязан — привязать: curl -X POST https://bugs.wool2.online/api/web/assign -H 'content-type: application/json' \ -d '{"issueId":"WEB-224","session":"<имя tmux-сессии>","host":"m4"}'
Обновлён
2026-08-06T15:15:14.762Z