--- type: trz work_item_id: ET-001 title: "ТЗ: Исключить шлагбаумы и тротуары из OSRM" version: 1 status: approved created_at: 2026-05-15 authors: - "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: ```lua -- Блокируемые типы препятствий (полный запрет проезда) 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, добавить: ```lua -- Исключаемые типы дорог (тротуары, пешеходные зоны) 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-профиля — пересобрать граф: ```bash 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) ```python # 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)