WEB board

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

P0: широкий вопрос в чате РЕДАКТОРА вешает event-loop сервера (504 всего прода)

Закрыт P0 · горит ведёт: backup-opus
Суть
06.08 ~02:17 owner задал «о чём дока» в чате внутри документа (Война и мир, 4.8M chars) → сервер перестал отвечать: ни строчки в журнале 02:16→02:21, systemd stop-sigterm timeout → SIGKILL, весь прод 504. Чат тетради защищён (WEB-230 перехват + WEB-243 конспект), но editor-chat путь chatWithSources со scope current_source / server-retrieval (WEB-229) минует гейт и синхронно обрабатывает полный текст. Найти синхронный проход по полному документу в этой ветке и поставить тот же bounded/outline-гейт, что в тетради. Воркер o245 на M4.
Как воспроизвести
Editor chat книги 4.8M chars + широкий вопрос («о чём этот файл») → event-loop блок
Замечен в сборке
v4-16cd4ae
Починено в
v4-3c7992e
Лента
2026-08-06T02:13:02.913Z · backup-opus
КОРЕНЬ НАЙДЕН И ЗАКРЫТ (воркер o245, волна CC собирается). Два разрыва, оба специфичны для редактора: (1) EditorModal на RAG-fallback приклеивает к сообщению до 500 символов выделения ([ВЫДЕЛЕНО: «...»]), а detectBroadOverviewIntent жёстко возвращает null для сообщений >400 символов — детектор молчал, конспект-роут не рассматривался; (2) «о чём дока» (дейктик single-document сцены) не было ни в DEICTIC_OVERVIEW, ни в DOCUMENT_REFERENCE. Из-за этого вопрос уходил в общую ветку ответа. Две горячие точки с замерами: HOT-1 computeDocumentStats по полному телу в FULL CONTEXT MODE (4.8M = 1282ms, +250MB, на КАЖДОЕ сообщение); HOT-2 resolveTextRangeAnchor строил таблицы диапазонов всего документа НА КАЖДУЮ цитату (20 цитат = 189ms, ×2 при strict repair). Фиксы: снятие префикса выделения перед детектом + дейктики; потолок синхронного скана 200K на ответном пути (точные потоковые счётчики, не выборка); выше потолка якоря цитат берутся из сохранённых chunk-anchors, тело не читается вообще; ниже — индекс один раз на документ с мемо; yield каждые 4 окна/4 цитаты. Замер на M1 после фикса: 4.8M тело = 357ms против 2706ms полного скана, счётчики совпадают до единицы. Тесты 36 новых. Один свидетель (спай на computeDocumentStats) под нашим ранером не перехватывал бы вовсе — сделал самопроверяющимся: тест сначала доказывает, что спай ловит, иначе честный skip с причиной, а не пустой зелёный.
2026-08-06T02:35:43.125Z · backup-opus
Села волной CC: прод = v4-3c7992e. Owner может снова задавать широкие вопросы в чате ВНУТРИ документа.
2026-08-06T15:00:17.448Z · backup-opus
ПРИНЯТО МНОЙ. Доказательство: замер на том же теле 4.8М символов — 357 мс против 2706 мс до фикса, счётчики совпадают до единицы; прод пережил широкие вопросы в чате редактора без единого 504.
Воркер
не привязан — привязать: curl -X POST https://bugs.wool2.online/api/web/assign -H 'content-type: application/json' \ -d '{"issueId":"WEB-245","session":"<имя tmux-сессии>","host":"m4"}'
Обновлён
2026-08-06T15:00:17.447Z