Files
contracts-flask/History/2026-08-26-cleanup-legacy-upload.md
T

2.3 KiB
Raw Blame History

Чистка: удалён мёртвый legacy-код загрузки напрямую (2026-08-26)

Контекст

При разборе стресс-тестов выяснилось: я (AI) гонял HTTP-стресс через POST /upload (прямой multipart), тогда как реальная загрузка в проде идёт через ВМ-буфер (PUT на ВМ WebDAV → POST /api/upload_refscontracts_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).