reviewer(ET): auto-commit from reviewer run_id=41
All checks were successful
CI / lint (push) Successful in 4s
CI / test (push) Successful in 6s
CI / lint (pull_request) Successful in 4s
CI / build (push) Successful in 1s
CI / test (pull_request) Successful in 5s
CI / build (pull_request) Successful in 1s

This commit is contained in:
2026-06-01 12:17:33 +00:00
parent bd8f60879e
commit a0284e046b

View File

@@ -0,0 +1,189 @@
---
type: code-review
work_item_id: ET-008
title: "Review: GPS-треки с публичных платформ на карте"
version: 1
status: REQUEST_CHANGES
created_at: 2026-06-01
authors:
- "agent:reviewer"
reviewed_branch: feature/ET-008-gps
base_branch: main
verdict: REQUEST_CHANGES
findings_summary:
P0: 1
P1: 0
P2: 0
P3: 0
---
# Code Review — ET-008
## Verdict: **REQUEST_CHANGES**
Причина: на ветке `feature/ET-008-gps` **нет ни одной строки кода**,
реализующего ТЗ. PR содержит только artefacts стадий Analyst и Architect
(BRD, ТЗ, AC, TestPlan, UI-кейсы, 7 ADR, infra/data/risks). Development
stage не произвёл выхода — review.review невозможно провести как код-ревью,
потому что нет кода. Отдельные оси (соответствие ТЗ / соответствие ADR /
качество кода / качество тестов) — все «не выполнено», т.к. артефактов
реализации не существует.
## Что проверено
Согласно регламенту reviewer'а:
1.`docs/work-items/ET-008/02-trz.md` (v2, status: draft) — прочитан.
2.`docs/work-items/ET-008/03-acceptance-criteria.md` (v2, draft) — прочитан.
3.`docs/work-items/ET-008/06-adr/` — все 7 ADR (ADR-005…011) прочитаны.
4.`CLAUDE.md` — прочитан.
5. ✅ Git diff `main...feature/ET-008-gps` — проанализирован.
## Состояние ветки
`git diff main...feature/ET-008-gps --name-status` (19 файлов):
| Статус | Файл |
|--------|------|
| M | `.task.md` |
| M | `docs/architecture/README.md` |
| M | `docs/architecture/adr/README.md` |
| M | `docs/work-items/ET-008/00-business-request.md` |
| M | `docs/work-items/ET-008/01-brd.md` |
| M | `docs/work-items/ET-008/02-trz.md` |
| M | `docs/work-items/ET-008/03-acceptance-criteria.md` |
| M | `docs/work-items/ET-008/04-test-plan.yaml` |
| M | `docs/work-items/ET-008/04b-ui-test-cases.md` |
| A | `docs/work-items/ET-008/06-adr/ADR-005-storage-schema.md` |
| A | `docs/work-items/ET-008/06-adr/ADR-006-dedup-algorithm.md` |
| A | `docs/work-items/ET-008/06-adr/ADR-007-pipeline-architecture.md` |
| A | `docs/work-items/ET-008/06-adr/ADR-008-tile-vs-geojson-strategy.md` |
| A | `docs/work-items/ET-008/06-adr/ADR-009-osm-licensing.md` |
| A | `docs/work-items/ET-008/06-adr/ADR-010-enduro-russia-licensing.md` |
| A | `docs/work-items/ET-008/06-adr/ADR-011-ttrails-licensing.md` |
| A | `docs/work-items/ET-008/07-infra-requirements.md` |
| A | `docs/work-items/ET-008/08-data-requirements.md` |
| A | `docs/work-items/ET-008/10-tech-risks.md` |
Команды для воспроизведения:
```
git -C enduro-trails diff main...feature/ET-008-gps -- src/ tests/ migrations/ scripts/ config/
# (empty output — нет ни одного изменения вне docs/)
```
Итого: **0 строк** в `src/`, `tests/`, `migrations/`, `scripts/`, `config/`,
`docker-compose.yml`. Все изменения — в `docs/` и `.task.md`.
## Findings
### F-01 [P0]: Отсутствует реализация ТЗ — все 20 REQ-F и все REQ-NF не выполнены
**Severity:** P0 (blocker — «не реализовано требование ТЗ»).
**Ссылка на правило:** регламент Reviewer'а, секция Severity: «не реализовано
требование ТЗ → P0».
**Что ожидалось** (по ТЗ §5 «Файловая структура изменений», ст. 742799):
Backend (Python):
- `src/api/gps_tracks/__init__.py`
- `src/api/gps_tracks/models.py` — Pydantic + `ACTIVITY_TYPES` (REQ-F-07)
- `src/api/gps_tracks/db.py` — SQLite/Spatialite обвязка (REQ-F-09, ADR-005)
- `src/api/gps_tracks/dedup.py``compute_dedup_key()` (REQ-F-08, ADR-006)
- `src/api/gps_tracks/mvt.py` — MVT-генерация (REQ-F-11, ADR-008)
- `src/api/gps_tracks/endpoint.py` — FastAPI routes для REQ-F-10/11/12
- `src/api/gps_tracks/config.py` — загрузка YAML
- `src/api/gps_tracks/sources/{base,osm,enduro_russia,ttrails}.py`
REQ-F-04/05/06 (ADR-009/010/011)
- Регистрация роутов в `src/api/main.py` — не сделана
- Обновление `src/api/requirements.txt` (`defusedxml`, `lxml`) — не сделано
Pipeline:
- `scripts/gps_collect.py` — CLI-entry для REQ-F-03 (ADR-007) — отсутствует
Frontend (Web):
- `src/web/gps_tracks.js` — слой/фильтры/popup (REQ-F-13…F-18) — отсутствует
- Правки `src/web/app.js``restorePublicTracksState()` (REQ-F-19),
расширение `rebuildMapOverlays()`, halo по паттерну ET-007 (REQ-F-17, §7.2) — не сделаны
- Правки `src/web/index.html` — чекбокс «Публичные треки» и
`#sheet-gps-filters` (REQ-F-13, REQ-F-14, ТЗ §3) — не сделаны
- Правки `src/web/app.css``.terrain-link-btn`, `.gps-filter-grid`,
`.gps-stats-row` (ТЗ §3.1) — не сделаны
- Правки `src/web/style.json`, `src/web/style-dark.json` — halo для
спутника (REQ-F-17) — не сделаны
Конфигурация:
- `config/gps_sources.yaml` (REQ-F-01) — отсутствует
- `config/gps_regions.yaml` (REQ-F-02) — отсутствует
- Директория `config/` вообще не существует в репозитории
Миграции:
- `migrations/gps_tracks_001_init.sql` (REQ-F-09, ADR-005) — отсутствует
Тесты (ТЗ §5, ст. 782787):
- `tests/api/test_gps_tracks_endpoint.py` — отсутствует
- `tests/api/test_gps_tracks_mvt.py` — отсутствует
- `tests/api/test_gps_tracks_dedup.py` — отсутствует
- `tests/api/test_gps_tracks_sources_osm.py` — отсутствует
- `tests/web/gps_tracks.test.js` — отсутствует
Инфраструктура (`07-infra-requirements.md`):
- Сервис `gps-collector` в `docker-compose.yml` с `profiles: ["batch"]`
(`docs/architecture/README.md` ст. 12, 4146) — не добавлен
- Cron-конфигурация на mva154 Mon/Thu 03:00 UTC — не сделана
**Покрытие AC** (`03-acceptance-criteria.md`): из всех Gherkin-сценариев
AC-01…AC-NN ни один не может быть исполнен — нет ни runtime, ни pipeline,
ни схемы БД.
**Действие:** вернуть в стадию Development. Реализовать в порядке,
рекомендованном ADR-007 §pipeline-architecture (config + db/migration →
dedup → один source (OSM, ADR-009 accepted) → endpoints → MVT → UI),
затем добавить тесты по `04-test-plan.yaml` и запустить ревью повторно.
## Замечания на полях (НЕ блокирующие, к доработке вне этого ревью)
Эти пункты НЕ являются P-findings против реализации (её нет), просто
служат напоминанием для следующего ревью, когда код появится:
- ADR-010 (EnduroRussia) и ADR-011 (ttrails) согласно
`docs/architecture/README.md` ст. 5360 и ТЗ ст. 59 имеют статус
`proposed/blocked`. Согласно ADR-007 §6 «licensing guard» — pipeline
ОБЯЗАН пропускать источник без `status: accepted`. Это поведение должно
иметь покрытие тестом (`test_pipeline_skips_unaccepted_source`).
- В `src/api/main.py` (`route-line`, `trails-*` слои) при подключении
нового слоя `gps-tracks-layer` важно сохранить z-order, который ТЗ
фиксирует в §7.1: `gps-tracks-layer < gpx-layer-*`. В коде должен быть
явный `beforeId` в `map.addLayer(...)`.
- В `applyBaseLayer()` (ET-007) необходимо добавить шаг по ТЗ §7.2.
Reviewer проверит, что halo `gps-tracks-halo-satellite` переключается
по тому же паттерну, что `trails-track-halo-satellite`.
- Bbox-валидация на endpoint (REQ-NF-01): диапазон координат + площадь.
Должен быть unit-тест на отказ при невалидном bbox.
- `defusedxml` для серверного GPX-парсинга (REQ-NF-01): обязательное
требование, проверится grep'ом на `lxml.etree.parse` без defusedxml.
## Subjective / Style
Не применимо — кода нет.
## Тесты
Не применимо — тестов нет. После реализации reviewer проверит покрытие
относительно `04-test-plan.yaml` и `04b-ui-test-cases.md`.
## Заметки по соответствию ADR
Не применимо для кода. Сами ADR-005…011 не ревьюились в этом проходе
(это работа архитектора/Owner); по PR-changes — приняты как контекст.
## Рекомендация для CI
- `04-test-plan.yaml` ссылается на тесты, которых нет → CI должен упасть
на сборе (pytest collection error) или на отсутствии модулей.
- `make lint` пройдёт (нет нового Python-кода), `make test` упадёт.
- Не закрывать ET-008 в Plane как Done.
---
**Итог:** REQUEST_CHANGES. Возврат на стадию Development.