# Инструкция для ИИ-агента: аудит пакета INF-04 «Транспортная доступность»

Ты работаешь с проверяемым пакетом исследования. Всё, что заявлено на
лендинге, обязано воспроизводиться отсюда одной командой.

## Быстрый старт

```bash
bash code/run.sh   # Python >= 3.10, стандартная библиотека, ~1-2 мин
```

Ожидаемый финал: `Все 17 контрольных метрик воспроизведены в допусках.`

## Что проверять

1. **Сырьё**: sha256 файла `data/raw/osm/graph_edges.csv.gz` против
   `sources/registry.csv` (инварианты делают это автоматически).
   При доступе в сеть — скачай `belarus-latest.osm.pbf` с Geofabrik и
   сверь md5 с реестром; учти, что «latest» уезжает — совпадение md5
   гарантировано только для выгрузки от 2026-07-10.
2. **Граф своим кодом**: возьми 2–3 ребра из CSV, пересчитай гаверсинус
   и минуты (`длина_км / скорость * 60`) — должны сойтись.
3. **Дейкстра независимо**: посчитай кратчайший путь Минск → Брест
   любой библиотекой по тем же рёбрам — 211,8 мин до десятых.
4. **Детерминизм**: два прогона — байт-в-байт одинаковый access.json.
5. **Статусы границы**: у закрытых переходов в
   `data/curated/border_crossings.csv` есть дата и инициатор закрытия;
   сверь с registry_border.csv и, при доступе в сеть, с granica.gov.pl.

## Стресс-тесты допущений (params/assumptions.yaml)

Перед перезапуском с правками кода удаляй байткод-кэш
(`rm -rf etl/__pycache__`).

- **Скорости** (`SPEEDS` уже в графе, но веса пересчитываются в
  `load_graph` из speed_kmh): умножь все минуты на константу — пояса
  сдвинутся, порядок медиан (кольцо — дно) сохранится.
- **Границы поясов** (`BELTS`): сдвинь кольцо на 75–135 или 105–165 мин —
  немонотонность (кольцо хуже периферии) остаётся.
- **База регрессии**: замени базовый пояс — коэффициенты пересчитаются,
  разность «пригород − кольцо» инвариантна.
- **Надир**: убери из надира любой из 4 открытых переходов — потери
  соответствующего коридора вырастут.

## Ловушки

- `etl/census_age.py` включён ради словаря имён районов (RAION_RU2ID);
  его parse()/main() ссылаются на OLAP-дампы, которых в пакете нет, —
  не вызывай их, это не дефект.
- `etl/osm_graph.py` — документация шага извлечения графа из PBF;
  требует pyosmium и сам PBF (0,33 ГБ), в run.sh не вызывается.
- Времена — идеализированные (без пробок, ремонтов, очередей на
  границе): сравнивай с реальными поездками только по порядку величины,
  см. LIMITATIONS.md.
- Регрессионные пояса при HC1 незначимы — это честный результат, а не
  дефект; не «чини» его.
- Козловичи — грузовой переход (оба года), Переров — пешеходный: в
  легковую доступность не входят намеренно.
