WEB-040 · Дефект · Видео · web
P0 регрессия 23-й: падение в видео-пути — Cannot access ay before initialization
Закрыт
P0 · горит
ведёт: backup-opus
Суть
Найдено 19.08 на живом прогоне (Playwright, залогиненный владелец) сразу после прикрепления файла в видео-модалке. Консоль: ReferenceError: Cannot access ay before initialization в chunks/58389.853a0ac9ca0c31a8.js:6:3776, стек через react-dom; поймано [ErrorBoundary]. Пруфы: /home/ubuntu/waves/VIDEOMAX-SHOTS/crash-errors.json, x-21-crash.png (A1). Чанк 58389 в 22-й посадке имел хеш abeea8ef…, в 23-й 853a0ac9… — содержимое изменено этой посадкой; в чанке встречается VideoDoc. Рабочая гипотеза: круговой импорт от новых общих модулей 23-й (ReportReadyCeremony.tsx, reportSnapshot/reportSnapshotShared.ts, VideoDocViewer.tsx, providerCaptions.ts) — temporal dead zone. Волна cyclefix запущена: обязана найти ТОЧНЫЙ цикл, починить разрывом, добавить статический тест на отсутствие цикла и собрать артефакт.
Как воспроизвести
1) залогиниться на nb.wool2.online; 2) открыть видео-модалку; 3) прикрепить mp4; 4) в консоли ReferenceError + ErrorBoundary.
Чем закрывается (приёмка)
На проде видео-модалка проходит прикрепление файла без ошибок в консоли; статический тест ловит возврат цикла; полный tsc даёт тот же набор ошибок, что baseline.
Замечен в сборке
v4-f730532
Починено в
v4-80e8b5a
Лента
2026-08-19T12:25:04.517Z · backup-opusКОРЕНЬ НАЙДЕН ТОЧНО (не круговой импорт, гипотеза была неверна). src/components/media/MediaImport.tsx: внутри submitPipelineUrlRun массив зависимостей на строке 1343 перечисляет normalizeVideoProgress, а объявление const normalizeVideoProgress = useCallback(...) стоит НИЖЕ, на строке 2727. Зависимости вычисляются на рендере -> temporal dead zone -> ReferenceError. В чанке 58389: ссылка на ay на смещении 34623, объявление на 54323. ВНЕСЕНО КОММИТОМ a4d9a2a (WEB-325, 17.08) — то есть дефект жил в исходнике ДО 23-й посадки, но стал фатальным при её раскладке чанков. МАСШТАБ ХУЖЕ, ЧЕМ ДУМАЛ: мастер импорта видео недоступен ЦЕЛИКОМ, любой UI-импорт видео сейчас невозможен (главная -> Додати джерело -> положить mp4 = падение, воспроизводится стабильно). Пруфы: VIDEOMAX-SHOTS/crash-errors.json, x-21-crash.png, разбор в VIDEOMAX-REPORT.md. Волна cyclefix перезапущена с точным корнем: починить порядок объявления + статический тест на «идентификатор из массива зависимостей объявлен выше по файлу».
2026-08-19T12:45:25.285Z · backup-opusФИКС ГОТОВ, коммит 80e8b5ae2ccda9f8a5439d181126f8d359dd0474 (дерево cyclefix-tree). Разбор подтвердил: НЕ круговой импорт. `ay` = минифицированный normalizeVideoProgress; смещение 3775 строки 6 чанка — это массив зависимостей submitPipelineUrlRun [eE,eT,rd,ay,ak,...], а биндинг инициализируется ~20k символов позже. Массив зависимостей — обычное выражение-аргумент, вычисляется на рендере, поэтому MediaImport() бросал из TDZ на первом рендере. ВАЖНО: тот же use-before-declaration ПРИСУТСТВУЕТ и в чанке 22-й посадки (58389.abeea8ef) — то есть 22-я была сломана так же, откат бы НЕ помог; хеш чанка сменился по несвязанным причинам (переводы + перетасовка имён минификатором). Внесено a4d9a2a (WEB-325, 17.08). ФИКС: перенос пяти мемоизированных хелперов (normalizeVideoProgress, normalizeVideoRunEvents, parseApiJson, logTikTokEvent, setTikTokItem) ВЫШЕ submitPipelineUrlRun — чистая релокация, ни одно тело/сигнатура/deps не тронуты; церемония, снапшот и пооператорные подписи не затронуты. ТЕСТ НА ВОЗВРАТ: src/components/media/__tests__/hookDepsTemporalDeadZone.static.test.ts — парсит ВЕСЬ src/ через TypeScript AST и падает на любом массиве зависимостей хука, называющем const/let/class, объявленный ниже в той же области видимости (было 6 нарушений, стало 0). ⭐ ГЛАВНЫЙ УРОК: tsc ВСЁ ЭТО ВРЕМЯ ОРАЛ про этот дефект — 12 ошибок TS2448 Block-scoped variable used before its declaration в MediaImport.tsx в baseline, 0 после фикса. Они тонули в 421 предсуществующей ошибке, которые мы пропускали как не регрессия. Гейт нет НОВЫХ ошибок недостаточен: среди старых лежат фатальные пользовательские баги.
2026-08-19T19:14:26.376Z · backup-opusПроверено живьём на 24-й (v4-80e8b5a): pageerror=0, console.error внутри страницы=0, вхождений «Cannot access … before initialization»=0, текста ErrorBoundary нет. Мастер импорта открывается и принимает mp4. Пруф: VIDEOVERIFY-SHOTS/04-errors.json. ЗАКРЫВАЮ.
Воркер
не привязан — привязать:
curl -X POST https://bugs.wool2.online/api/web/assign -H 'content-type: application/json' \
-d '{"issueId":"WEB-040","session":"<имя tmux-сессии>","host":"m4"}'
Обновлён
2026-08-19T19:14:26.404Z