test: make activity index deterministic
This commit is contained in:
@@ -6,9 +6,9 @@ RF4 Spotter — неофициальный сервис свежих точек
|
||||
|
||||
- этапы 0 и 1 завершены;
|
||||
- этап 2, официальный импорт, завершён технически; автоматический профиль остаётся выключенным до явного разрешения владельца источника;
|
||||
- этап 3 выполнен частично: форма, MinIO, модерация, удаление с аудитом и постоянный rate limit готовы;
|
||||
- ближайшие задачи — сквозной тест полного пользовательского сценария и раздельные состояния ошибок формы;
|
||||
- затем начинается этап 4: формализация и расширенное тестирование индекса клёва.
|
||||
- этап 3 функционально завершён: форма, раздельные ошибки создания/скриншота с повторной загрузкой, MinIO, модерация, удаление с аудитом и постоянный rate limit готовы;
|
||||
- для полного пользовательского сценария добавлен E2E-тест `отправка → pending → модерация → публичная статистика`;
|
||||
- начат этап 4: формула индекса зафиксирована, детерминированные агрегаты и правила включения данных покрыты тестами; далее — состояния карточек и сквозная проверка фильтров.
|
||||
|
||||
Подробный план и актуальные чекбоксы находятся в [`docs/ROADMAP.md`](docs/ROADMAP.md).
|
||||
|
||||
@@ -54,10 +54,12 @@ docker compose up --build
|
||||
- справочники рыб, водоёмов и приманок;
|
||||
- Astro SSR-интерфейс с адаптивным дизайном из `design-reference` без переноса React/Vinext-стека;
|
||||
- объяснимые индексы активности и уверенности по формуле спецификации;
|
||||
- документированная формула и детерминированные тесты окон 6/12/24/72 часа;
|
||||
- состояния «нет данных» и «источник недоступен»;
|
||||
- идемпотентный импорт официальных записей с журналом запусков;
|
||||
- публичная страница `/records` с источником и временем последнего импорта;
|
||||
- форма `/report`, защищённые admin API и журнал модерации;
|
||||
- отдельные состояния ошибки создания заявки и загрузки скриншота; неудачный скриншот можно добавить повторно по ID уже сохранённой заявки;
|
||||
- honeypot и постоянный rate limit в PostgreSQL с HMAC-отпечатками вместо исходных IP;
|
||||
- скриншоты уловов в MinIO/S3 с проверкой MIME, расширения, размера и фактического содержимого, повторным кодированием и очисткой метаданных;
|
||||
- административная очередь `/admin/moderation` с одобрением, отклонением и обезличенным удалением записи с аудитом.
|
||||
@@ -75,7 +77,7 @@ python3 -m venv .venv
|
||||
.venv/bin/pytest -q
|
||||
```
|
||||
|
||||
На текущем этапе набор содержит 21 backend/parser-тест.
|
||||
Актуальное число тестов выводит команда `pytest`; набор включает backend, импорт, расчёт активности и исследовательский парсер.
|
||||
|
||||
Frontend:
|
||||
|
||||
@@ -125,6 +127,8 @@ curl -H "Authorization: Bearer change-me-in-production" \
|
||||
|
||||
Перед внешним развёртыванием обязательно замените демонстрационные `ADMIN_TOKEN`, `RATE_LIMIT_SECRET`, `S3_ACCESS_KEY` и `S3_SECRET_KEY`. Форма принимает JPEG, PNG и WebP до 8 МБ; API сверяет MIME и расширение с фактическим форматом, повторно кодирует изображение и удаляет EXIF перед сохранением в MinIO. Модератор получает временную подписанную ссылку через admin API.
|
||||
|
||||
Если создание записи прошло успешно, а загрузка скриншота завершилась ошибкой, форма сохраняет ID заявки и предлагает повторить только загрузку изображения. Повторно отправлять сам улов не требуется.
|
||||
|
||||
Очередь модерации доступна по адресу <http://localhost:4321/admin/moderation>. Администратор вводит `ADMIN_TOKEN`; интерфейс держит его только в памяти открытой страницы и не сохраняет в URL или браузерном хранилище.
|
||||
|
||||
Администратор может одобрить, отклонить или удалить сообщение. Удаление очищает ник, комментарий, исходную ссылку и объект скриншота, исключает запись из статистики, но сохраняет обезличенный факт действия в журнале аудита.
|
||||
|
||||
Reference in New Issue
Block a user