Files
ik c6fdc969c2
CI / backend-and-migrations (push) Canceled after 0s
CI / astro-build (push) Canceled after 0s
CI / compose-e2e (push) Canceled after 0s
fix: separate admin page and API authentication
2026-09-09 07:29:39 +07:00

6.4 KiB

Исправления аудита 7 сентября 2026

Дополнено полным аудитом 8 сентября: выявлены production-блокеры T01–T03. Исторические отметки ниже не означают закрытие новых пограничных случаев; актуальная очередь находится в ROADMAP.

Исправлено в рабочей версии

  • T02: разделены Basic для административных страниц и Bearer для admin API. 9 сентября проверены положительные/отрицательные сценарии через Caddy; API сохраняет обязательную проверку токена и no-store.

  • T01 полного аудита: маршруты /api/report и /api/report-screenshot достигают Astro через Caddy; FastAPI получает /api/v1/*, health/readiness. 9 сентября: sh deploy/test-proxy-routing.sh проходит на локальном стенде с корректным Origin; создание реальной заявки через production proxy остаётся частью T06.

  • Очередь внешних наблюдений фильтруется в SQL до limit/offset; UI показывает по 50 записей с навигацией, опубликованные записи не вытесняют ожидающие проверки.

  • Таймаут SSR-запроса к API: 8 секунд. Все пять страниц каталогов возвращают 503, Retry-After и no-store при сбое API; отсутствие сущности по-прежнему даёт 404.

  • Убрать выдуманный процент полноты, зависящий от числа уловов.

  • Различать время улова и поступления; показывать точное время UTC.

  • Объединять только повтор одного ID источника, а не похожие события.

  • Ограничить кэш 128 ключами и защитить запись от устаревшего поколения.

  • Запретить браузерное кэширование активности; серверный TTL сохраняется.

  • Перенести фильтрацию активности в SQL.

  • Строить шкалу по полной выборке одобренных записей, с явными 12-часовыми интервалами по reported_at.

  • Возвращать 404 для отсутствующей точки и 503 для недоступности API.

  • Захватывать блокировку scheduler до чтения cooldown и фиксировать резервирование до HTTP.

  • Выполнять rollback перед сохранением ошибки scheduler.

Остаётся

  • Довести общий cooldown до критериев D01–D03 нового аудита. В 486b4e9 добавлены доменная блокировка и резервирование до HTTP, но disabled-сосед блокирует ротацию, research CLI не атомарен и не разделяет PostgreSQL-state.
  • Межпроцессная инвалидация: сейчас фоновая публикация видна после TTL.
  • Изменённая публикация снимается с активности и отправляется на ручное сопоставление. Подтверждение обновляет прежний CatchReport без дубликата; старый снимок сохраняется до подтверждения. Изменения видны в API после TTL кэша.
  • Обнаружение удалённых оригиналов и долговременная история всех редакций источника.
  • Sitemap постоянных страниц с пагинацией, без ограничения активности 72 часами. Последняя успешная версия хранится в памяти процесса; после перезапуска при недоступном API возвращается 503.
  • Подключить API подсказок алиасов к административному UI: кнопка показывает подтверждённые русские названия; выбор и сохранение остаются отдельными действиями.
  • Web Dockerfile использует npm ci; инструменты проверки/тестирования перенесены в devDependencies и удаляются перед копированием runtime. Обновлён lock-файл без сети. Сборка Docker-образа остаётся проверкой перед деплоем.
  • Удалить pytest из Python production-зависимостей; локальная среда и CI используют отдельный requirements-dev.txt (8 сентября 2026).
  • Hero переведён в WebP (1,6 МБ → 71 КБ), PNG-иконка переупакована (368 КБ → 69 КБ), изображения получили явные размеры и приоритет LCP. Pillow нужен в runtime: API декодирует и повторно кодирует пользовательские изображения для проверки формата, удаления EXIF и безопасного хранения.
  • Завершить визуальную приёмку U01/U07 нового аудита. В 731eade проверено отсутствие горизонтального переполнения и исправлен заголовок на 320 px, но desktop-фильтры и наполненные состояния требуют проверки/исправления.
  • Согласовать остальные формулировки README/roadmap с фактическим поведением.

Существовавшие перед этим пакетом незакоммиченные изменения кэша и карточек сохранены.