All checks were successful
Закрывает findings из docs/work-items/ET-011/12-review.md (REQUEST_CHANGES,
попытка 3/3):
P1-01 — добавлены поведенческие JS unit-тесты UI download-flow
- tests/web/track_download.test.js — 28 кейсов (node --test):
• _parseFilenameFromCD — RFC 5987 приоритет, plain fallback,
битый percent-encoding, null/empty (REQ-F-05.2, AC-2 UI)
• _handleDownloadError — 400/403/404/413/5xx тосты, defensive
при отсутствии showToast, поддержка flat (ADR-015 §G) и legacy
wrapped 403-форм (REQ-F-05.4, AC-7 UI)
• _renderTrackPopupHtml — наличие кнопки, aria-label «Скачать GPX»,
data-track-id, отсутствие при невалидном id, регрессия прочих
полей (REQ-F-01, AC-1)
- tests/web/test_track_download.py — pytest-обёртка (статические
проверки + запуск Node-раннера), исполняется в обычном pytest tests/
- 04b-ui-test-cases.md: AC-13 (mobile-bbox) явно маркирован как
MANUAL release-smoke (Playwright-раннер в проекте не настроен;
альтернатива согласована reviewer'ом в P1-01).
P2-01 — устранено расхождение «doc vs runtime» по контракту 403
- endpoint.py: HTTPException(detail={...}) → JSONResponse(content={...}),
чтобы FastAPI не оборачивал dict во второй слой «detail». Контракт
теперь совпадает с ADR-015 §G и ADR-014 §6:
{"detail":"source_forbidden","external_urls":[...]}
- test_gps_tracks_download.py IT-05: упрощено — body уже плоский,
без двухуровневого `body.get("detail", body)` workaround.
- gps_tracks.js::_handleDownloadError: flat-форма стала приоритетной,
wrapped-форма оставлена как defensive fallback (с комментарием).
Регрессия: 89/89 API-тестов + 24/24 предыдущих JS-тестов + 28 новых
JS-тестов download-flow проходят. ruff check — clean.
Refs: ET-011
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Документация Enduro Trails
Навигация
- architecture/ — архитектура, ADR, диаграммы
- work-items/ — артефакты по задачам
- design/ — дизайн-токены, компоненты
- operations/ — runbook, мониторинг
- api/ — OpenAPI спецификация
Фазы
- PH-1.mvp — MVP: карта грунтовок + MVT тайлы
- PH-2.routing — OSRM роутинг + базовый UI
- PH-3.smart-route — Альтернативы, статистика, GPX
- PH-4.advanced-routing — Красивый маршрут, связка, разведка
- PH-5.redesign — Тёмная тема, mobile UI, UX
- PH-6.terrain — Hillshade + гипсометрия + TRI
- PH-7.barriers — Шлагбаумы, тротуары, слой препятствий
- PH-8.elevation-profile — Профиль высот, режим «Горка»
- PH-9.pwa — Офлайн режим
Задачи (Work Items)
| ID | Название | Статус | Ветка |
|---|---|---|---|
| ET-001 | Слой шлагбаумов | ✅ Done | main |
| ET-002 | POI и маршруты | ✅ Done | main |
| ET-005 | Переключатель единиц | ✅ Done | main |
| ET-006 | Загрузка GPX-треков | ✅ Done | main |
| ET-007 | Спутниковый слой | ✅ Done | main |
| ET-008 | GPS-треки с публичных платформ | ✅ Done | main |
Инфраструктура
- URL: https://openclaw.mva154.duckdns.org/enduro/
- Host: mva154 (82.22.50.71)
- App container: enduro-trails-app-1 (port 5558)
- GPS collector: docker compose --profile batch run --rm gps-collector
- Deploy: автоматически через orchestrator deployer (SSH hook)
- Логи deploy: /var/log/enduro-trails/deploy-hook.log
- Pipeline: Multi-Agent Orchestrator (port 8500)