feat(gpx): загрузка и визуализация GPX-треков (ET-006) #7
Reference in New Issue
Block a user
Delete Branch "feature/ET-006-gpx-upload"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Реализует ET-006 — загрузка и визуализация GPX-треков (стадия development).
src/web/gpx.js— новый модуль фичи (ADR-002): клиентский парсинг GPX 1.1 черезDOMParserс чанковой конвертацией DOM → модель (ADR-003), модельwindow.gpxTracks, отрисовка треков и waypoints на карте, bottom sheet#sheet-gpx, статистика трека и canvas-профиль высот.index.html/app.css— кнопка загрузки в правой панели карты, кнопка «GPX» в нижнем тулбаре, панель#sheet-gpx, toast-уведомления, индикатор парсинга.app.js— одна строка-хук:rebuildGpxOverlays()вrebuildMapOverlays()— восстановление GPX-слоёв послеmap.setStyle()(REQ-F-13), защищёнtypeof.Покрыты функциональные требования REQ-F-01..F-13 и нефункциональные REQ-NF-01..NF-04.
Test plan
ruff check— без замечанийpytest tests/— 51 passed, 4 skipped (skip — OSRM-интеграции без живого OSRM)node --test tests/unit/gpx.test.js— 27 passed (группы U-01..U-21)docker build— образ собираетсяТесты
tests/unit/gpx.test.js— поведенческие JS unit-тесты модуля (парсер, статистика, палитра, GeoJSON, bbox); браузерныйDOMParserподменён компактным мок-парсером.tests/unit/test_gpx_upload.py— pytest-обёртка: статические проверки структурыgpx.js/index.html/app.css/app.js+ запуск JS-тестов черезnode --test(паттерн ET-005).Заметки для ревью
gpx.js, ET-006 — атомарный work-item на одной ветке; разбиение модуля было бы архитектурным решением без ADR.04-test-plan.yaml(сам ТЗ §5 корректен — расходятся лишь оценочные числа аналитика; артефакт не правил, см. комментарии вgpx.test.js):app.js haversineKm) для шага 0.1°×0.1° даёт ≈25.5 км, а не 28.3 км.ele [100,150,120,200,180]сброс высоты = 30+20 = 50 м (как в расшифровке самого кейса), а не 70 м.origin/main(включает ET-005). Один merge-коммит стратегиейours— синхронизация с устаревшим удалённым состоянием ветки без force-push.Refs: ET-006
🤖 Generated with Claude Code
P1-1: Math.min.apply RangeError on large arrays. Fix required.
APPROVED v2 - all P1/P2 fixed. Ready for testing.
New commits pushed, approval review dismissed automatically according to repository settings
All tests PASS. Ready to merge.