Files
enduro-trails/CHANGELOG.md
claude-bot 726d7bb4ca
All checks were successful
CI / lint (pull_request) Successful in 5s
CI / test (pull_request) Successful in 10s
CI / build (pull_request) Successful in 2s
deployer(ET-012): tag v0.0.4 + deploy log (FAILED — host repo state blocker)
Tag v0.0.4 создан и запушен, PR #24 смерджен в main (commit 8da09e6),
но deploy-hook упал на git pull origin main: host-репо
/home/slin/repos/enduro-trails имеет root-owned файл
src/api/gps_tracks/mvt.py (Permission denied при unlink) и
конфликтующие модификации tracked-файлов + untracked work-items.
У slin нет беспарольного sudo (наследие ET-011 §3). Rollback также
провалился (нет .deploy-prev-image).

Backend контейнер enduro-trails-app продолжает работать на до-ET-012
образе (Up 7 hours, unhealthy). Фронт ET-012 уже отдаётся живой
test-средой через mounted host-файлы (ручная правка ops после
ET-011), но tier-фильтр build_gps_mvt не применён.

Healthcheck/smoke: PARTIAL — все 4 URL отвечают 200, но это не
подтверждает применение ET-012 в backend. Контракт API не сломан
(REQ-F-15).

deploy_status: FAILED — корректный возврат через QG.check_deploy_status.

Что нужно от ops: см. docs/work-items/ET-012/14-deploy-log.md §6.

Refs: ET-012, ET-011 (тот же класс блокеров).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-04 06:45:46 +00:00

6.8 KiB
Raw Blame History

Changelog

All notable changes to this project will be documented in this file. Format: Keep a Changelog

[Unreleased]

[v0.0.4] — 2026-06-04 (tagged, NOT deployed)

⚠️ Тег создан и запушен, PR #24 смерджен в main, но docker-образ на test не задеплоен: deploy-hook упал на git pullerror: unable to unlink old 'src/api/gps_tracks/mvt.py': Permission denied

  • конфликт с локальными модификациями working tree host-репо (/home/slin/repos/enduro-trails). Файл mvt.py принадлежит root:root; у slin нет беспарольного sudo. Подробности и инструкция для ops: docs/work-items/ET-012/14-deploy-log.md. Фронт-часть ET-012 уже отдаётся test-средой через mounted host-файлы (ручная правка ops после ET-011), но backend tier-фильтр НЕ применён.

Changed

  • ET-012: Слой публичных GPS-треков теперь виден с зума z=5 (раньше — с z=8). Калибровка существующей tier-структуры build_gps_mvt/_simplify_coords (ADR-016): для z≤5 фильтр min_length=10 км, limit=1500; для z=6 — 5 км/2000; для z=7 — без изменений (2 км/3000). DP-tolerance расширен парой стопов: z=6 → 0.018° (~2 км), z≤5 → 0.04° (~4 км). На клиенте константа GPS_TRACKS_MIN_ZOOM понижена до 5; line-width/halo-stops в MapLibre получили stop на z=5 (0.8/1.8 px), hint обновлён с «Зум 8+» на «Зум 5+». Контракт API /api/gps-tracks/tiles/{z}/{x}/{y}.mvt не изменился (REQ-F-15); z≥8 не затронут (регрессия). Тесты: 18 unit zoom-tier+simplify, 9 integration endpoint z5-z7, 2 perf (PERF-Z5-01/02; avg ~64 мс, p95 ~89 мс при 500 треках — ниже бюджета 200 мс/500 мс по M-6). Refs: ET-012. PR #24, tag v0.0.4.

[v0.0.3] — 2026-06-03 (tagged, NOT deployed)

⚠️ Тег создан и запушен, PR смерджен в main, но docker-образ на test не задеплоен: deploy-hook /home/slin/bin/enduro-deploy-hook.sh упал на Permission denied при записи в /var/log/enduro-trails/ (каталог root-owned, у slin нет права записи и нет NOPASSWD sudo). Подробности и инструкция для ops: docs/work-items/ET-011/14-deploy-log.md.

Added

  • ET-011: Скачивание GPX из popup публичного трека. Новый эндпоинт GET /api/gps-tracks/{track_id}/download собирает GPX 1.1 из геометрии трека и отдаёт с Content-Disposition: attachment (UTF-8 имя файла по RFC 5987). В popup на карте появилась кнопка «Скачать GPX» (32×32 CSS px, mobile-friendly). Реализация: новый модуль src/api/gps_tracks/export.py (build_gpx, safe_filename); расширение config/gps_sources.yaml per-source флагом download_allowed (default-deny; MVP whitelist = osm, см. ADR-015); helper load_download_allowed_sources в config.py. Тесты: 13 unit GPX-builder + 10 unit filename + 11 integration download. ADR-014, ADR-015. Refs: ET-011.

[v0.0.2] — 2026-06-02

Added

  • ET-009: Активация GPS-источников EnduroRussia и Wikiloc — config/gps_sources.yaml включает оба источника (enabled: true), для Wikiloc добавлен soft-cap max_tracks_per_run: 50 и activity-фильтр; config/gps_regions.yaml подписывает wikiloc на регион tsfo_plus_chuvashia. Парсер wikiloc.py извлекает время из GPX-metadata (для корректной дедупликации) и поддерживает max_tracks_per_run cap. UI: цвет wikiloc, чекбокс источника, динамическая атрибуция (GPS_SOURCE_ATTRIBUTIONS) подтягивается с /api/gps-tracks/health. Тесты: 10 unit ER + 10 unit WL + 5 integration + 2 contract (nightly only). PR #16, tag v0.0.2.

Fixed

  • ET-009: исправлен URL enduro_russia в config/gps_sources.yaml (https://enduro-russia.ruhttps://endurorussia.ru, без дефиса).

[v0.0.1] — 2026-06-01

Added

  • ET-008: GPS-треки с публичных платформ на карте — новый модуль src/web/gps_tracks.js с отображением публичных GPS-треков (OSM Traces, enduro_russia, ttrails) в виде MVT-тайлов (z 811) и GeoJSON (z ≥ 12); фильтрация по активности и источнику, попап с мета-данными трека, z-order ниже личных GPX-треков (AC-10). Backend: FastAPI-пакет src/api/gps_tracks/ (endpoint, MVT, LRU-кэш, дедупликация), миграция migrations/gps_tracks_001_init.sql, pipeline-скрипт scripts/gps_collect.py, Docker-сервис gps-collector. PR #12, tag v0.0.1.

[Unreleased]

  • Initial project structure
  • CLAUDE.md project passport
  • Agent system prompts (architect, developer, reviewer, tester, deployer)
  • CI pipeline (Gitea Actions)
  • Docker configuration
  • ET-002: чекбокс «POI» в попапе рельефа — показ/скрытие маркеров POI с сохранением состояния в localStorage (ключ poi-visible)
  • ET-005: переключатель единиц измерения расстояний (км/мили) в попапе рельефа — новый модуль src/web/units.js с централизованным форматтером Units.formatDistance(); выбор сохраняется в localStorage (ключ distance_unit), пересчёт всех видимых расстояний выполняется единым оркестратором по событию unitchange
  • ET-006: загрузка и визуализация GPX-треков — новый модуль src/web/gpx.js с клиентским парсингом GPX 1.1 (DOMParser, чанковая конвертация), отрисовкой треков и waypoints на карте, панелью #sheet-gpx со списком треков, статистикой и canvas-профилем высот; GPX-слои восстанавливаются после смены стиля карты через rebuildMapOverlays(). Данные треков хранятся только в памяти сессии