Files
enduro-trails/docs/work-items/ET-012/03-acceptance-criteria.md
claude-bot eb9adbc930
All checks were successful
CI / lint (push) Successful in 5s
CI / test (push) Successful in 7s
CI / build (push) Successful in 2s
analyst(ET): auto-commit from analyst run_id=72
2026-06-04 06:00:55 +00:00

9.3 KiB
Raw Blame History

type, work_item_id, title, version, status, created_at, updated_at, authors
type work_item_id title version status created_at updated_at authors
acceptance-criteria ET-012 Acceptance Criteria: Показывать пользовательские треки с зума z5 1 draft 2026-06-04 2026-06-04
agent:analyst

Acceptance Criteria — ET-012

Критерии в Gherkin-стиле. Все — обязательные. Задача считается принятой, когда каждый критерий прошёл проверку (автоматическую в CI или ручную в test-среде).

AC-01 — Константа GPS_TRACKS_MIN_ZOOM понижена до 5

Given ветка feature/ET-012-z5-z8 с правками When проверяется код Then:

  • В src/web/gps_tracks.js есть ровно одно объявление const GPS_TRACKS_MIN_ZOOM = 5; (с возможным trailing comment).
  • grep -R "GPS_TRACKS_MIN_ZOOM" src/web/ не находит других значений, кроме 5.

AC-02 — Vector-source gps-tracks-tiles имеет minzoom=5

Given test-среда после деплоя ET-012 When в DevTools выполнить

window._map.getSource('gps-tracks-tiles').minzoom

Then результат 5.

AC-03 — При z=5 слой публичных треков виден

Given пользователь на https://openclaw.mva154.duckdns.org/enduro/, включён чекбокс «Публичные треки», БД содержит ≥ 50 треков по ЦФО длиннее 10 км When установить zoom = 5 (через DevTools или панорамированием) и центр карты над ЦФО Then:

  • На карте видны линии треков (визуально — не менее 3 различимых линий в кадре).
  • window._map.getLayoutProperty('gps-tracks-layer-mvt', 'visibility') === 'visible'.
  • Hint #public-tracks-zoom-hint имеет display: none.

AC-04 — При z=6 и z=7 слой публичных треков виден

Аналогично AC-03 для z=6 (lim min_length = 5 км) и z=7 (min_length = 2 км). Количество видимых линий в кадре ≥ AC-03.

AC-05 — Hint «Зум 5+» появляется при z<5

Given включён чекбокс «Публичные треки» When установить zoom = 4 Then:

  • Hint #public-tracks-zoom-hint имеет display: inline (или иное ненулевое отображение).
  • Текст hint'а — «Зум 5+».
  • На карте нет линий публичных треков (vector-source не запрашивает тайлы при zoom < source.minzoom).

AC-06 — Регрессия z8-z11: слой работает как прежде

Given ветка после ET-012 When установить zoom = 8, 9, 10, 11 поочерёдно Then:

  • На каждом зуме слой gps-tracks-layer-mvt имеет visibility: visible.
  • Набор отображаемых треков не уже, чем до ET-012 (за вычетом того, что в z=8 включаются ВСЕ треки независимо от длины, как было).
  • Запросы /api/gps-tracks/tiles/{z}/x/y.mvt возвращают 200.

AC-07 — Регрессия z12+: GeoJSON-слой работает как прежде

Given включён чекбокс When установить zoom = 12, 13, 14, 15 Then:

  • gps-tracks-layer-mvt имеет visibility: none.
  • gps-tracks-layer-geo имеет visibility: visible.
  • На карте видны те же треки, что и до ET-012.

AC-08 — Читаемость карты на z5 (качественный критерий)

Given test-среда с ≥ 200 треками по ЦФО (после E2E-PROD-01/02 из ET-009) When скриншот при zoom = 5, центр над Москвой Then:

  • На скриншоте et012-z5-readable.png видны минимум 3 разных «нити» в разных квадрантах кадра.
  • Нет «сплошной заливки» одной зоны (треки не сливаются в кашу).
  • Допустимо отличать «нить» как любую видимую линию длиной ≥ 20 px в кадре.

Проверка ручная по скриншоту в 13-test-report.md.

AC-09 — Производительность endpoint z=5 в test-среде

Given test-среда When 10 раз подряд curl -w '%{time_total}\n' -o /dev/null "https://openclaw.mva154.duckdns.org/enduro/api/gps-tracks/tiles/5/19/9.mvt", последовательно (первый — cold, последующие — cache hits) Then:

  • Cold-запрос ≤ 1.5 с (M-7 c запасом для сети).
  • Median последующих ≤ 200 мс (cache hit).
  • HTTP 200 на каждый запрос.
  • Размер тела ≤ 200 KB (после gzip-decompression).

AC-10 — Размер MVT-тайла z=5 не превышает 200 KB

Given test-среда When скачать тайл tiles/5/19/9.mvt (Москва) и tiles/5/20/9.mvt (восток ЦФО) Then размер тела ≤ 200 KB для каждого.

AC-11 — Unit-тесты zoom-tier зелёные

Given ветка When pytest tests/unit/test_gps_mvt_zoom_tiers.py -v Then все UT-Z5-, UT-Z6-, UT-Z7-, UT-Z8-, UT-Z12-* проходят.

AC-12 — Unit-тесты simplify зелёные

Given ветка When pytest tests/unit/test_gps_mvt_simplify.py -v Then все UT-SIMP-Z5-, UT-SIMP-Z6-, UT-SIMP-Z7-, UT-SIMP-Z10-, UT-SIMP-Z12-* проходят.

AC-13 — Integration-тесты endpoint z5-z7 зелёные

Given ветка When pytest tests/integration/test_gps_tile_z5_z7.py -v Then все IT-Z5-, IT-Z6-, IT-Z7-, IT-CACHE- проходят.

AC-14 — Регрессионные тесты ET-008/ET-009 зелёные

Given ветка When pytest tests/unit/ tests/integration/ -v (исключая perf-маркер) Then все существующие тесты ET-008 (U-01..U-62 / I-01..I-57) и ET-009 (UT-ER-, UT-WL-, UT-CFG-, IT-) проходят без регрессий.

AC-15 — Регрессия фильтров на z6

Given включён слой, на карте zoom = 6, видны треки трёх источников (osm/enduro_russia/wikiloc) When пользователь открывает #sheet-gps-filters и снимает галку «EnduroRussia» Then через ≤ 1.5 с (с учётом инвалидации MVT тайлов через map.setFilter) с карты исчезают линии цвета EnduroRussia, остальные остаются.

AC-16 — Регрессия popup на z6

Given включён слой, на карте zoom = 6 или 7, в кадре есть длинный (≥ 10 км) трек When пользователь кликает по линии трека Then:

  • Открывается popup .track-popup с названием, активностью, длиной, источниками.
  • Если трек из источника osm — в popup'е есть кнопка «Скачать GPX» (.track-popup-download-btn).
  • Клик по кнопке скачивает GPX-файл (контракт ET-011 не нарушен).

AC-17 — Halo на спутнике на z5 виден, но не «глушит» подложку

Given включён слой, переключена базовая подложка на спутник (#base-btn-satellite), zoom = 5 When скриншот Then:

  • Линии видны на тёмной спутниковой подложке (благодаря halo).
  • Halo-width ≤ 2 px (т.е. ореол не превращается в «пузырь»).
  • gps-tracks-halo-mvt-satellite.visibility === 'visible'.

AC-18 — Поведение на мобильном (375×667 viewport)

Given Playwright mobile viewport, включён слой, zoom = 5 When скриншот Then:

  • Линии видны.
  • Толщина линии по «зрительному ощущению» ≥ 1 пикселя.
  • Hint скрыт.

AC-19 — Performance-test PERF-Z5-01

Given ветка When pytest -m perf tests/performance/test_gps_mvt_z5_perf.py -v Then:

  • PERF-Z5-01 проходит: avg ≤ 200 мс, p95 ≤ 500 мс на CI-runner при БД 500 треков.

(Этот тест запускается отдельным джобом / pre-merge gate.)

AC-20 — Документация work item полная

Given репо после слияния ET-012 When проверка docs/work-items/ET-012/ Then существуют:

  • 00-business-request.md
  • 01-brd.md
  • 02-trz.md
  • 03-acceptance-criteria.md
  • 04-test-plan.yaml
  • 04b-ui-test-cases.md
  • 12-review.md (после Review)
  • 13-test-report.md (после Тестирования)
  • 14-deploy-log.md (после Деплоя)

AC-21 — make lint и make test зелёные

Given ветка When make lint и make test Then обе команды exit-code 0.