Files
upload-platform/HISTORY/2026-09-05-gemini-3.8-flash-review.md
T

5.7 KiB
Raw Blame History

Ревью Gemini 3.8 Flash — 2026-09-05

Контекст

Ревью ограничивалось проектом upload-platform. Проверены frontend-модули универсального browser-only picker-а, Flask-обёртка, конфигурация и структура проекта. Ниже зафиксированы findings ревью; исправления по этим пунктам в рамках данной записи не выполнялись.

Критические ошибки и логические баги (High)

  1. Не сбрасывается fileInputEl.value при выборе файлов. Файл: upload/frontend/table/on_files_change.js. После удаления файла повторный выбор того же файла может не вызвать событие change, если значение input не сброшено.

  2. Распаковка лишних файлов и преждевременный OOM в ZIP-фильтре. Файл: upload/frontend/zip/list_zip_files.js. Callback filter проверяет размер и бюджет, но до декомпрессии не отбрасывает записи с неразрешёнными расширениями. Бинарные файлы могут быть распакованы в память, хотя затем будут отброшены.

  3. Синхронная блокировка UI при распаковке архивов. Файл: upload/frontend/zip/list_zip_files.js. unzipSync выполняется в главном потоке браузера и может замораживать UI на больших архивах. Предложенное направление: async unzip с чанками или Web Worker.

Архитектурные недочёты и надёжность (Medium)

  1. Нарушается семантика File.name для файлов из папок и ZIP. Файлы: upload/frontend/table/rebase_tree.js, upload/frontend/zip/list_zip_files.js. При создании нового File полный логический путь может попасть в file.name, хотя путь должен храниться отдельно в метаданных узла.

  2. Не выполняется слияние папок с одинаковыми путями. Файл: upload/frontend/table/add_file_with_dedup.js. Повторное добавление корневого узла с тем же путём может создать два отдельных узла вместо объединения их дочерних элементов.

  3. Потенциально небезопасная вставка HTML в статус. Файл: upload/frontend/table/set_status.js. Прямое присваивание innerHTML требует гарантировать экранирование всех передаваемых значений либо заменить его на безопасную работу с текстом.

  4. Молчаливый пропуск ошибок ZIP без cfg.onError. Файлы: upload/frontend/table/on_files_change.js, upload/frontend/table/on_folder_change.js. При отсутствии callback интегратор может не получить индикацию ошибки повреждённого архива или превышения лимита.

  5. Падение app.py при отсутствии или повреждении config.json. Файл: site/app.py. Чтение конфигурации выполняется на уровне импорта без обработки исключений; при ошибке Flask-приложение не запускается.

Мёртвый код и гигиена (Low)

  1. Дубликат init_upload_table.js. Файл выглядит неиспользуемым и дублирует логику текущего picker API. Предложенное направление: удалить либо явно пометить как deprecated после проверки всех импортов.

  2. Пустые служебные каталоги backend. Каталоги session и upload_refs содержат только старые __pycache__. Требуется отдельное решение о сохранении или очистке структуры.

  3. Недостаточная обработка ошибок сборки в build.mjs. Файл: build.mjs. Предложено добавить явную обработку ошибки сборки с process.exit(1) и определить поведение каталога dist/ перед сборкой.

Итог

Gemini 3.8 Flash создал 4 задачи: три high/medium направления по ZIP и событиям выбора, а также дополнительный набор архитектурных и гигиенических проверок. Эта запись фиксирует результаты ревью как backlog. Код проекта и рабочая реализация picker-а в рамках документирования не изменялись.

Проверка записи

  • Файл ревью создан в HISTORY/.
  • Исходники проекта не изменялись.
  • Findings сохранены в исходной классификации High, Medium и Low.