feat(ET-009): activate EnduroRussia + Wikiloc GPS sources #16

Merged
admin merged 7 commits from feature/ET-009-et-009-gps-endurorussia-wikilo into main 2026-06-02 08:58:17 +03:00
Owner

Summary

Конфиг-only активация двух новых GPS-источников поверх pipeline ET-008.

  • EnduroRussia: enabled: true, URL исправлен на endurorussia.ru (без дефиса).
  • Wikiloc: новая запись в config/gps_sources.yaml с max_tracks_per_run: 50,
    activity_filter: [motorcycle, enduro]. Парсер расширен soft-cap'ом и извлечением
    created_at из GPX-metadata для корректной дедупликации.
  • UI: цвет wikiloc в GPS_SOURCE_COLORS, чекбокс источника, динамическая
    атрибуция через /api/gps-tracks/health.

Tests

  • 10 unit ER + 10 unit WL (UT-ER/UT-WL).
  • 5 integration через scripts.gps_collect.main + httpx.MockTransport
    (IT-ER-01, IT-WL-01, IT-WL-02, IT-DEDUP-01, IT-LIC-01).
  • 2 contract @pytest.mark.network (nightly only).
  • 2 новых JS-теста на wikiloc в SOURCE_COLORS / фильтрах.
  • 166 pytest passed, 24 JS-tests passed, ruff clean на новых файлах.

Test plan

  • Unit-тесты EnduroRussia парсера
  • Unit-тесты Wikiloc парсера (включая max_tracks_per_run cap и rate-limit)
  • Integration-тесты pipeline (3 GPX сценария, dedup-merge, licensing-guard)
  • Contract smoke (отключены по умолчанию)
  • JS-тесты для атрибуции/цвета wikiloc
  • Регрессия ET-008 (все 166 pytest зелёные)
  • Продакшн-прогон AC-09/AC-10 (после деплоя в test-среду — за деплоером)

🤖 Generated with Claude Code

## Summary Конфиг-only активация двух новых GPS-источников поверх pipeline ET-008. - **EnduroRussia**: `enabled: true`, URL исправлен на `endurorussia.ru` (без дефиса). - **Wikiloc**: новая запись в `config/gps_sources.yaml` с `max_tracks_per_run: 50`, `activity_filter: [motorcycle, enduro]`. Парсер расширен soft-cap'ом и извлечением `created_at` из GPX-metadata для корректной дедупликации. - **UI**: цвет `wikiloc` в `GPS_SOURCE_COLORS`, чекбокс источника, динамическая атрибуция через `/api/gps-tracks/health`. ## Tests - 10 unit ER + 10 unit WL (UT-ER/UT-WL). - 5 integration через `scripts.gps_collect.main` + `httpx.MockTransport` (IT-ER-01, IT-WL-01, IT-WL-02, IT-DEDUP-01, IT-LIC-01). - 2 contract `@pytest.mark.network` (nightly only). - 2 новых JS-теста на `wikiloc` в `SOURCE_COLORS` / фильтрах. - **166 pytest passed, 24 JS-tests passed, ruff clean** на новых файлах. ## Test plan - [x] Unit-тесты EnduroRussia парсера - [x] Unit-тесты Wikiloc парсера (включая max_tracks_per_run cap и rate-limit) - [x] Integration-тесты pipeline (3 GPX сценария, dedup-merge, licensing-guard) - [x] Contract smoke (отключены по умолчанию) - [x] JS-тесты для атрибуции/цвета wikiloc - [x] Регрессия ET-008 (все 166 pytest зелёные) - [ ] Продакшн-прогон AC-09/AC-10 (после деплоя в test-среду — за деплоером) 🤖 Generated with [Claude Code](https://claude.com/claude-code)
admin added 4 commits 2026-06-01 22:39:27 +03:00
docs: init ET-009 business request
Some checks failed
CI / lint (push) Failing after 4s
CI / test (push) Failing after 5s
CI / build (push) Has been skipped
9d7e5cd7e8
feat(ET-009): analyst artifacts — BRD, TRZ, AC, test plan
Some checks failed
CI / lint (push) Failing after 4s
CI / test (push) Failing after 5s
CI / build (push) Has been skipped
eaa6b4cd27
feat(ET-009): architect deliverables — ADR, infra requirements, data requirements, tech risks, wikiloc parser stub
Some checks failed
CI / lint (push) Failing after 4s
CI / test (push) Failing after 6s
CI / build (push) Has been skipped
4be7fbf3de
feat(ET-009): activate EnduroRussia + Wikiloc GPS sources
Some checks failed
CI / lint (push) Failing after 4s
CI / test (push) Failing after 5s
CI / build (push) Has been skipped
CI / lint (pull_request) Failing after 4s
CI / test (pull_request) Failing after 5s
CI / build (pull_request) Has been skipped
3577ff32ac
Конфиг-only активация двух новых источников GPS-треков поверх
pipeline ET-008. Не вводит новых компонентов, БД-таблиц, endpoint'ов.

Config:
- config/gps_sources.yaml: enduro_russia enabled=true, base_url исправлен
  на endurorussia.ru (без дефиса); добавлена запись wikiloc с
  max_tracks_per_run=50, activity_filter=[motorcycle, enduro].
- config/gps_regions.yaml: wikiloc добавлен в tsfo_plus_chuvashia.sources.

Parser:
- wikiloc.py: добавлен soft-cap max_tracks_per_run в collect(),
  извлечение created_at из GPX metadata/первого trkpt — для корректной
  межисточниковой дедупликации с EnduroRussia.

UI (src/web/gps_tracks.js):
- GPS_SOURCE_COLORS: добавлен цвет wikiloc (#4363d8).
- Дефолтный фильтр sources включает wikiloc.
- GPS_SOURCE_ATTRIBUTIONS: маппинг source_id → строка атрибуции;
  _updateGpsAttribution() подтягивает /api/gps-tracks/health и
  выставляет attribution с теми источниками, у которых tracks > 0.
- _buildGpsFiltersUI: чекбокс «Wikiloc» в #gps-source-grid.

Tests:
- Fixtures: 7 файлов в tests/fixtures/gps-tracks/.
- Unit: 10 UT-ER + 10 UT-WL — парсеры, MAPPING, bbox-фильтр,
  pagination, 429/403 graceful-stop, rate-limit, max_tracks_per_run.
- Integration: IT-ER-01, IT-WL-01, IT-WL-02, IT-DEDUP-01, IT-LIC-01
  через scripts.gps_collect.main + httpx.MockTransport.
- Contract: 2 CT-ER с маркером @pytest.mark.network (nightly only).
- JS: 2 новых теста на наличие wikiloc в SOURCE_COLORS и в фильтрах.

Linters/Tests: ruff clean (новые файлы), 166 pytest passed,
24 JS-tests passed.

Refs: ET-009
Acceptance: AC-01..AC-08, AC-14..AC-17 (для AC-09..AC-13 — продакшн-прогон)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
admin added 1 commit 2026-06-02 00:12:39 +03:00
fix(ET-009): dynamic source filter + working attribution (F-01, F-02)
Some checks failed
CI / lint (push) Failing after 5s
CI / test (push) Failing after 6s
CI / build (push) Has been skipped
CI / lint (pull_request) Failing after 4s
CI / test (pull_request) Failing after 5s
CI / build (pull_request) Has been skipped
fc03746e4f
F-01 (P1): _buildGpsFiltersUI больше не хардкодит список источников —
подтягивает source_id из /api/gps-tracks/health.tracks_by_source
(ADR-013 §3 Решение D, опция D2). Маппинг source_id → label вынесен
в JS-константу GPS_SOURCE_LABELS. Активация четвёртого источника
теперь не требует изменений в этом коде.

F-02 (P1): attribution фиксируется в момент addSource, а не мутацией
src.attribution после. MapLibre AttributionControl не реагирует на
прямое присвоение — потому до этого фикса AC-15 проваливался бы в
UI-тестах. Теперь onPublicTracksCheckbox / restorePublicTracksState
сначала await _fetchGpsHealth() → _buildGpsAttributionString(),
потом _ensureGpsSources(map, attribution).

Добавлен кэш + in-flight Promise (window.gpsTracksLayer._healthCache /
_healthFetchPromise) — переоткрытие sheet'а фильтров не плодит
дублирующих сетевых запросов.

Все 24 node-теста gps_tracks.test.js зелёные.

Refs: ET-009
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
admin added 1 commit 2026-06-02 08:27:10 +03:00
docs(ET-009): reviewer round 2 — F-01/F-02 CLOSED, APPROVED
Some checks failed
CI / lint (push) Failing after 4s
CI / test (push) Failing after 6s
CI / build (push) Has been skipped
CI / lint (pull_request) Failing after 4s
CI / test (pull_request) Failing after 4s
CI / build (pull_request) Has been skipped
94f6517742
admin added 1 commit 2026-06-02 08:55:59 +03:00
test(ET-009): test report — 25/25 pytest, 24/24 js, PASS, ready to deploy
Some checks failed
CI / lint (push) Failing after 4s
CI / test (push) Failing after 5s
CI / build (push) Has been skipped
CI / lint (pull_request) Failing after 3s
CI / test (pull_request) Failing after 5s
CI / build (pull_request) Has been skipped
45f3a95b91
admin merged commit b5ba7b24f6 into main 2026-06-02 08:58:17 +03:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: admin/enduro-trails#16