2.3 KiB
2.3 KiB
Чистка: удалён мёртвый legacy-код загрузки напрямую (2026-08-26)
Контекст
При разборе стресс-тестов выяснилось: я (AI) гонял HTTP-стресс через POST /upload
(прямой multipart), тогда как реальная загрузка в проде идёт через ВМ-буфер
(PUT на ВМ WebDAV → POST /api/upload_refs → contracts_upload_sink).
Прямой /upload — мёртвый legacy-эндпоинт, который фронт не вызывает.
Что удалено (коммит aa58522, −176 строк)
site/routes/upload_bp.py:- эндпоинты
POST /uploadиPOST /unzip-upload; - функции
_check_ext,_unzip, константаALLOWED; - пустой blueprint
upload_bp.
- эндпоинты
site/routes/__init__.py: регистрацияupload_bp.site/static/app.js: мёртвые константыUPLOAD_URL,CONVERT_URL,UNZIP_URL.tests/test_upload_security.py— целиком (тестировал удалённые_check_ext/_unzip).tests/test_routes.py: классыTestUpload,TestUnzipUpload.
Что оставлено (рабочее)
contracts_upload_sink+_store_and_parse+_convert— sink для/api/upload_refs(VM-буфер).pages_bp /upload/<path:filename>— отдача ES-модулейupload/frontend(клиентский ZIP).
Почему ревью Sonnet не заметило
Ревью искало сломанное (трассировки ошибок), а не мёртвый код. /upload//unzip-upload
не падали и не давали 500 — просто не вызывались. Обнаруживаются только аудитом
«какие эндпоинты фронт реально дёргает».
Проверки
py_compile+node -c app.js— OK.import app— OK, 24 роута;/upload(POST) и/unzip-uploadотсутствуют,/api/upload_refsи/upload/<path>на месте.- Юнит-тесты: 92 passed (было 102).
Хвост
tests/load/stress_http.py всё ещё бьёт по удалённому /upload — нужен
переписывание на /api/upload_refs (PUT на ВМ → refs).