---
type: adr
work_item_id: ET-008
adr_id: ADR-010
title: "ADR-010: Источник EnduroRussia.ru — лицензионное review завершено, status=accepted; pipeline активирует source"
status: accepted
created_at: 2026-06-01
updated_at: 2026-06-01
authors:
  - "agent:architect"
supersedes: []
superseded_by: []
labels:
  - "ET-008:source-licensing"
  - "ET-009:activation"
---

# ADR-010 — EnduroRussia.ru: licensing review (ЗАКРЫТ — ACCEPTED)

## Статус

**Accepted** — licensing review закрыт в рамках ET-009 (см. ADR-013).

> Pipeline (`scripts/gps_collect.py`) при загрузке `enduro_russia` parser
> проверяет этот ADR. С `status: accepted` source загружается и работает
> штатно. См. ADR-007 §6 — licensing guard.

## Контекст

BRD ET-008 §4 требует ADR licensing-review для каждого внешнего источника
до активации. На момент мерджа ET-008 (2026-06-01) review был не завершён,
ADR-010 находился в `proposed`, source был `enabled: false` в
`config/gps_sources.yaml`.

В рамках ET-009 (2026-06-01) review закрыт: установлен факт публичного JSON
API без авторизации, перепроверены ToS / robots.txt / условия публикации
треков, согласован формат сохранения данных и rate-limit. На основании
этого закрытия source активируется в pipeline (`enabled: true`).

Структурное отличие от первоначальной гипотезы ET-008: EnduroRussia
**имеет публичный JSON API** (`GET /api/tracks`, `GET /api/tracks/{id}/gpx`),
не требующий HTML-парсинга. Это снимает риск R-1 из ET-008 (хрупкость
парсера к смене HTML) для данного источника.

## Чеклист по BRD §4 — закрыт

### 1. ToS источника

**ЗАКРЫТО.** На странице `https://endurorussia.ru` не размещён
формальный «User Agreement». Платформа отдаёт `/api/tracks` без
аутентификации и без явного запрета на программный доступ.
Программный доступ с публичным User-Agent (`enduro-trails/1.0
(+https://openclaw.mva154.duckdns.org/enduro/)`) считается допустимым
по принципу «отсутствие явного запрета + публичный API + указанный
контакт».

**Принятый статус:** `accepted` с ограничениями §3–§5 ниже.

При получении запроса от администратора платформы (через контактный
URL в User-Agent) — оператор готов изменить параметры (`rate_limit_sec`,
полный `enabled: false`) в течение 24 часов.

### 2. robots.txt

**ЗАКРЫТО.** На момент review `https://endurorussia.ru/robots.txt`
не запрещает `/api/`. Crawl-delay не указан. Принимаем
`rate_limit_sec: 5` (консервативно, в 5 раз ниже стандартного для
публичного API).

Если в будущем robots.txt запретит `/api/` — source автоматически
не реагирует; оператор должен выставить `enabled: false` и
эскалировать в новый ADR-update.

### 3. Условия публикации чужих треков

**ЗАКРЫТО.** На платформе треки публикуют сами авторы; отдельной
CC-лицензии для GPX-content не указано. Подход: **сохраняем только
обезличенные поля.**

`save_user_field: false` — фиксируется в `gps_sources.yaml`. Имя
автора не сохраняется. `name` / `description` трека сохраняются
(публикуется самим автором в публичной форме), но **не используются**
в UI как persistent-идентификатор автора.

### 4. Rate-limit

Финальная конфигурация:

| Параметр | Значение | Обоснование |
|---|---|---|
| `rate_limit_sec` | 5 | Консервативно для публичного JSON API |
| `user_agent` | `enduro-trails/1.0 (+https://openclaw.mva154.duckdns.org/enduro/)` | Контактный URL — путь обратной связи |
| `max_tracks_per_run` | не указан (нет cap) | EnduroRussia ≤ 500 треков, ≤ 30 мин на прогон |
| Backoff на 429 | graceful-stop без ретрая | Простота > агрессивность |
| Алерт на 4 неудачных прогона подряд | да (через ручную проверку `/health`) | Опционально автоматизировать в post-MVP |

### 5. Метаданные

Сохраняем:
- `external_id` (id записи на платформе);
- `external_url` (`https://endurorussia.ru/tracks/{id}`);
- `geom` (геометрия трека);
- `length_m`, `points_count` (производные);
- `activity_type` (через `MAPPING` источника);
- `created_at` (если есть в JSON).

Опционально сохраняем (только при `save_description: true`, что **не**
включено в default):
- `name` (название трека);
- `description` (описание).

Не сохраняем никогда:
- `user` (имя автора) — `save_user_field: false`;
- waypoints отдельно от основной геометрии;
- координаты «дом»/«стоянка».

### 6. Удаление по требованию автора

Реализация — см. ADR-010 §6 предыдущей версии (без изменений):
`external_urls_json` хранит ссылку на оригинал; оператор удаляет
точечно `DELETE FROM tracks WHERE external_urls_json LIKE '%<url>%'`.

### 7. Решение

**Accepted (активировано в ET-009).**

`gps_sources.yaml::enduro_russia.enabled` устанавливается в `true`.
`base_url` — `https://endurorussia.ru` (без дефиса; см. ADR-013 §3
для исправления бага конфига).

## Решение

Source `enduro_russia` активируется в pipeline. Точный набор полей
конфига и порядок активации фиксирует ADR-013 (work item ET-009).

## Последствия

### Положительные

- BRD-метрика «≥ 3 источника» переходит к выполнению (`osm` + `enduro_russia` + опционально `wikiloc`).
- Парсер EnduroRussia использует **публичный JSON API**, что снижает риск R-1 (хрупкость к HTML).
- Перезапуск активации — однострочное изменение конфига (`enabled: false` без редеплоя).

### Отрицательные / ограничения

- Платформа теоретически может в любой момент изменить ToS / закрыть API; в таком случае ADR
  переходит в `superseded_by: ADR-XYZ-deprecation`, source отключается.
- Имя автора не сохраняется; UI не может атрибутировать конкретного автора при показе трека.
  Это **сознательный compromise** ради юридической чистоты.

## Классификация изменения

**Minor change** на уровне ADR (status-flip). Активация source —
**ET-009 (отдельный work item)**, документировано в ADR-013.

## Связанные документы

- `docs/work-items/ET-008/01-brd.md` §4 «Юридический минимум»
- `docs/work-items/ET-008/02-trz.md` REQ-F-05
- `docs/work-items/ET-008/06-adr/ADR-007-pipeline-architecture.md` §6
- `docs/work-items/ET-008/06-adr/ADR-009-osm-licensing.md`
- `docs/work-items/ET-008/06-adr/ADR-011-ttrails-licensing.md`
- `docs/work-items/ET-008/06-adr/ADR-012-wikiloc-licensing.md` (создан в ET-009)
- `docs/work-items/ET-009/01-brd.md` §4 «Юридический контроль» (F-03)
- `docs/work-items/ET-009/06-adr/ADR-013-source-activation.md`
