Проверяемый пакет исследования «Цена пустеющей карты: материальный навес городов, 1975–2020». Спутниковый ряд застройки GHSL × ряды населения × ночные огни × срез OSM; весь итоговый расчёт — стандартная библиотека Python, воспроизведение за секунды; растровые шаги воспроизводимы отдельно (скрипты и контрольные суммы приложены).
Первый релиз: панель 94 городов × 10 эпох GHSL 1975–2020, морфологические контуры в 9 сценариях границ, ядро/край, ночные огни 1992–2024, современный срез OSM (дороги, сервисы, админ-границы), типология, сопоставленные пары, 17 контрольных метрик.
by-maps-urban-overhang-v1.0.0/
├── README.md вопрос, вывод, как воспроизвести
├── REPORT.md основной лонгрид исследования
├── EXECUTIVE_BRIEF.md краткий бриф
├── METHODS.md · LIMITATIONS.md · VALIDATION.md
├── DATA_DICTIONARY.md · PROVENANCE.md · PREREGISTRATION.md
├── AGENT.md 12 заданий для LLM-аудитора и формат отчёта
├── claims.yaml реестр утверждений с типами и источниками
├── manifest.json · CHANGELOG.md · CITATION.cff · LICENSE.md
├── sources/registry.csv реестр источников (URL, лицензии, sha256)
├── sources/raw/ вендоренные агрегаты: морфология (9 сценариев),
│ население 94 городов, свет, дороги, POI, админ-границы
├── code/run.sh единственная точка входа (stdlib, ~секунды)
├── code/build.py · verify.py · fetch.py
├── code/extract/ растровые шаги (GHSL → морфология → свет → OSM)
├── params/assumptions.yaml все допущения с обоснованиями
├── data/final/ метрики, интервалы, типология, story.json
└── checks/ инварианты, ожидаемые результаты, контрольные суммыunzip by-maps-urban-overhang-v1.0.0.zip && cd by-maps-urban-overhang-v1.0.0
bash code/run.sh
# == 1/3 Расчёт от sources/raw до data/final ==
# == 2/3 Инварианты данных ==
# == 3/3 Сверка с заявленными результатами ==
# Все 17 контрольных метрик воспроизведены в допусках.Глобальные тайлы GHSL (~0,8 ГБ) и снимок OSM (~0,35 ГБ) не вкладываются: они фиксируются URL и sha256, скачиваются code/fetch.py, а их зональные агрегаты завендорены — быстрое воспроизведение не требует загрузок. Валидация в CI: каждый пуш пересобирает пакет и сверяет с опубликованным байт-в-байт.