Files
enduro-trails/docs/work-items/ET-001/02-trz.md
claude-bot b35fa30a49
All checks were successful
CI / lint (push) Successful in 5s
CI / test (push) Successful in 5s
CI / build (push) Successful in 3s
docs(ET-001): business request, BRD, TRZ, acceptance criteria, test plan
2026-05-15 21:56:57 +03:00

4.2 KiB
Raw Blame History

type, work_item_id, title, version, status, created_at, authors
type work_item_id title version status created_at authors
trz ET-001 ТЗ: Исключить шлагбаумы и тротуары из OSRM 1 approved 2026-05-15
agent:stream

Техническое задание — ET-001

1. Что менять

Файл: OSRM профиль enduro.lua

Расположение на сервере: /home/slin/enduro-trails/osrm/enduro.lua В репо: infra/osrm/enduro.lua (скопировать текущий + внести изменения)

Изменение 1: process_node — блокировка шлагбаумов

В функции process_node заменить текущую обработку barriers:

-- Блокируемые типы препятствий (полный запрет проезда)
local blocked_barriers = {
  gate = true,
  bollard = true,
  lift_gate = true,
  chain = true,
  cycle_barrier = true,
  motorcycle_barrier = true,
  border_control = true,
  block = true,
}

function process_node(profile, node, result)
  local barrier = node:get_value_by_key("barrier")
  if barrier and blocked_barriers[barrier] then
    result.barrier = true
    result.forward_mode = mode.inaccessible
    result.backward_mode = mode.inaccessible
    return
  end
end

Изменение 2: process_way — исключение тротуаров

В начале функции process_way, после получения highway, добавить:

-- Исключаемые типы дорог (тротуары, пешеходные зоны)
local excluded_highways = {
  footway = true,
  pedestrian = true,
  steps = true,
  corridor = true,
}

-- В process_way, после local highway = way:get_value_by_key("highway"):
if excluded_highways[highway] then return end

Также удалить footway, pedestrian, steps из таблицы highway_rate (если есть).

2. Пересборка графа

После изменения lua-профиля — пересобрать граф:

cd /home/slin/enduro-trails/osrm
docker run --rm -v $(pwd):/data ghcr.io/project-osrm/osrm-backend:latest osrm-extract -p /data/enduro.lua /data/enduro.osm.pbf
docker run --rm -v $(pwd):/data ghcr.io/project-osrm/osrm-backend:latest osrm-partition /data/enduro.osrm
docker run --rm -v $(pwd):/data ghcr.io/project-osrm/osrm-backend:latest osrm-customize /data/enduro.osrm
docker restart osrm-osrm-routed-1

Время: ~40 мин (extract) + ~5 мин (partition + customize).

3. Что добавить в репо

  1. infra/osrm/enduro.lua — обновлённый профиль
  2. scripts/rebuild-osrm.sh — скрипт пересборки графа
  3. tests/integration/test_routing_barriers.py — тесты

4. Тесты

Unit/Integration тесты (pytest + httpx)

# tests/integration/test_routing_barriers.py

import pytest
from httpx import AsyncClient, ASGITransport
from src.api.main import app

OSRM_URL = "http://172.22.0.1:5559"

@pytest.mark.asyncio
async def test_route_avoids_barrier():
    """Маршрут через точку с известным шлагбаумом должен обходить его"""
    # Точка с шлагбаумом: 55.7558, 37.6173 (пример)
    # Тест проверяет что маршрут не проходит через эту ноду
    pass  # Architect определит конкретные координаты

@pytest.mark.asyncio
async def test_route_no_footway():
    """Маршрут в городе не должен проходить по тротуарам"""
    pass  # Architect определит конкретные координаты

@pytest.mark.asyncio
async def test_route_allows_cattle_grid():
    """Маршрут через cattle_grid должен работать (не заблокирован)"""
    pass

5. Ограничения

  • НЕ менять веса существующих дорог (только добавить блокировку)
  • НЕ трогать scenic/link/recon логику
  • cattle_grid и ford — НЕ блокировать
  • Пересборка графа — отдельный ручной шаг (не в CI)