WEB board

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

[bigfiles P0-03/04] Поиск и Nudge: DOM Range + getClientRects на КАЖДОЕ совпадение

Закрыт P1 · важно ведёт: backup-opus эпик: WEB-221
Суть
GPT Pro ревизия (P0-03/04): EditorModal.tsx:2872-2963 — все совпадения поиска/nudge конвертируются в Range и меряются getClientRects; частое слово само вешает документ. Действие: индексировать все совпадения, но декорировать только активное + viewport/overscan, жёсткий потолок; общий примитив проекции для поиска и nudge; CSS Highlight API как опция. Gate: стоимость ограничена вьюпортом, не числом совпадений.
Починено в
v4-6e7a840
Лента
2026-08-06T15:05:41.550Z · backup-opus
БУХГАЛТЕРИЯ: код в боевом коммите, волна BW 6e7a8401b (проекция совпадений по видимой области для поиска и подсказок). Сборка проставлена. Остаётся МОЯ приёмка замером.
2026-08-06T15:15:14.763Z · backup-opus
ПРИНЯТО МНОЙ. Зонд против serving-дерева de34437.
Документ 2 млн символов, 20 000 совпадений поиска, окно прокручено на середину. Отбор занял 0.17 мс и выбрал к измерению 12 совпадений из 20 000 — остальные 19 988 отброшены как невидимые. Потолок 300 измерений за проход соблюдён. Активное совпадение измеряется безусловно, даже если оно вне экрана: иначе переход к найденному не подсветил бы его.
Видимый диапазон посчитан пропорционально (символы 449700-450700 с запасом 600 px) — намеренная ОЦЕНКА, а не измерение, потому что точный ответ потребовал бы измерить ровно те диапазоны, которых мы избегаем.
ПОЛОЖИТЕЛЬНЫЙ КОНТРОЛЬ: пустой вход даёт пустой выход и флаг limited=false — зонд читает настоящий результат, а не рапортует успех.
ЧЕГО НЕ ДОКАЗЫВАЕТ: измерение прямоугольников в реальном DOM (measureSelectedMatches) здесь не проверялось — проверена ВЫБОРКА, то есть та часть, которая и вызывала лавину.
Воркер
не привязан — привязать: curl -X POST https://bugs.wool2.online/api/web/assign -H 'content-type: application/json' \ -d '{"issueId":"WEB-225","session":"<имя tmux-сессии>","host":"m4"}'
Обновлён
2026-08-06T15:15:14.762Z