Pipeline: PR #26 merged → tag v0.0.5 on origin/main → deploy hook RC=0
→ healthcheck HTTP 200 → smoke PASS (index + 5 static assets + terrain
endpoints `hillshade`/`tri`). Deployed app.js (142 964 B) содержит ET-013
маркеры (interpolate, raster-opacity, ET-013) — zoom-aware paint реально
доехал, не остался image-кэшом.
Артефакты:
- CHANGELOG: ET-013 entries (главный feat + F-1 + F-2) перенесены из
[Unreleased] в новый [v0.0.5] — 2026-06-04; добавлен placeholder-блок
[v0.0.4] (ET-012 deploy log пишется в отдельном PR #25 / `deploy/ET-012-v0.0.4-log`,
его entries я НЕ трогаю — остаются под [Unreleased]).
- docs/work-items/ET-013/14-deploy-log.md с YAML-frontmatter
`deploy_status: SUCCESS` (читается оркестратором, см. QG check_deploy_status).
Refs: ET-013, PR #26 (merge be7a052), tag v0.0.5.
9.0 KiB
Changelog
All notable changes to this project will be documented in this file. Format: Keep a Changelog
[Unreleased]
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.
[v0.0.5] — 2026-06-04
Деплой задеплоен на test (https://openclaw.mva154.duckdns.org/enduro/). Healthcheck + smoke PASS. См.
docs/work-items/ET-013/14-deploy-log.md.
Added
- ET-013: Zoom-aware paint для terrain-слоёв
hillshadeиtri(Terrain Ruggedness Index) на z9-z11. UI-минзумhillshadeпонижен с 10 до 9; raster-paint обоих слоёв переведён в zoom-aware форму через MapLibreinterpolate. На z9-z11 — пикraster-opacity/raster-contrast(видимость рельефа сопоставима с z8); на z12-z14 — возврат к исходным значениям (регрессия по AC-10). TRI на z8 сохранил opacity 0.70 (регрессия по AC-06), пик 0.80-0.85 на z9-z11. Файлы:src/web/app.js(константыHILLSHADE_PAINT/TRI_PAINT,applyTerrainLayerрасширена для поддержки object-paint, обратно-совместимо),src/web/index.html. Тесты: 17 unittests/unit/test_terrain_paint.py(валидация interpolate-stops, инварианты opacity/contrast по zoom), 6 integrationtests/integration/test_terrain_z9_tiles.py((hillshade, tri) × (z9, z10, z11)). ADR-017. Refs: ET-013. - ET-013 (review F-1 fix): Слой
triдобавлен в whitelist FastAPI-endpoint'аGET /terrain/{layer}/{z}/{x}/{y}.png(src/api/main.py). На test/prod-среде nginx перехватывает/enduro/terrain/*и отдаёт PNG напрямую с диска, но в dev-режиме (make dev→ FastAPI на :5556 без nginx) endpoint должен поддерживатьtriнативно. Изменение аддитивное: ответ-контракт и заголовки идентичны существующим слоям (hypso,hillshade); REQ-F-18 «API contract без изменений» не нарушен. Регрессия: integration-тестtest_known_terrain_layer_accepted_by_whitelistпараметризован по(hypso, hillshade, tri)и проверяет, что для заведомо отсутствующего файла возвращаетсяdetail: "Tile not found", а не"Unknown layer". Refs: ET-013, review F-1.
Changed
- ET-013 (review F-2 fix): Integration-тест
tests/integration/test_terrain_z9_tiles.pyпараметризован по(layer ∈ {hillshade, tri}) × (zoom ∈ {9, 10, 11})— 6 кейсов вместо 3, покрывает оба слоя на расширенном диапазоне зумов (ранее покрывался толькоhillshade). Refs: ET-013, review F-2.
[v0.0.4] — 2026-06-04 (tagged earlier, deploy log pending)
Тег
v0.0.4создан в рамках ET-012 deploy, но 14-deploy-log пишется в отдельном PRdeploy/ET-012-v0.0.4-log(см. PR #25). Артефакты ET-012 живут под[Unreleased]до закрытия того PR — не трогаю.
[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.yamlper-source флагомdownload_allowed(default-deny; MVP whitelist =osm, см. ADR-015); helperload_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-capmax_tracks_per_run: 50и activity-фильтр;config/gps_regions.yamlподписываетwikilocна регионtsfo_plus_chuvashia. Парсерwikiloc.pyизвлекает время из GPX-metadata (для корректной дедупликации) и поддерживаетmax_tracks_per_runcap. 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.ru→https://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 8–11) и 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(). Данные треков хранятся только в памяти сессии