# 2026-09-06: жёсткий полный тест релиза 0.2.2 ## Объём проверки Проверен опубликованный релиз `0.2.2`, commit `df0576a` на `origin/master`. - frontend build; - весь Node test suite; - весь Python test suite с `-vv --tb=long`; - синтаксис всех исходных Python и JavaScript файлов; - runtime запуск Flask; - HTTP endpoints и раздача собранных бандлов; - отрицательные API-сценарии безопасности и целостности транзита. ## Результаты - `npm run build` — PASS; - `npm test` — `10/10` PASS; - `python3 -m pytest tests/ -vv --tb=long` — `10/10` PASS; - `py_compile` — `22` Python-файла PASS; - `node --check` — `13` JavaScript-файлов PASS; - `git diff --check` — PASS; - `/health` — HTTP 200, тело `ok`; - `/` — HTTP 200; - `/file-picker/file-picker.esm.js` — HTTP 200; - `/file-picker/file-picker.iife.js` — HTTP 200; - `/upload-frontend/index.js` — HTTP 200; - Flask слушает `0.0.0.0:5000`. ## Отрицательные сценарии Отдельный smoke-набор подтвердил: - пустой `upload_refs` возвращает HTTP 400; - malformed JSON возвращает HTTP 400; - traversal-имя не попадает в сессию и не удаляет файл из буфера; - SSRF URL вне разрешённого prefix пропускается без pull; - валидный файл создаёт новую RAM-сессию; - файл переносится в RAM; - callback Layer 3 вызывается; - файл удаляется из mock buffer после успешного pull; - повторное чтение удалённого файла возвращает 404. ## Исправления harness во время проверки Два первых запуска расширенного smoke-набора остановились в тестовом harness, не в приложении: 1. Для in-process Flask pull не был задан `httpx.WSGITransport`, поэтому backend получил `Connection refused`. 2. Следующий запуск передал несуществующий `session`; API корректно вернул сценарий `Session not found` вместо создания сессии. Новая сессия создаётся при отсутствии поля `session`. После исправления harness smoke-набор завершился `strict_negative_smoke=PASS`. ## Итог Релиз `0.2.2` прошёл полный автоматический, синтаксический, runtime и отрицательный security-тест. Код не изменялся, поэтому версию не повышали.