Перейти к содержанию

Единый реестр требований симулятора «мир БВС»

Полный трассируемый реестр всех требований из всех доменных документов simulate/docs/, со статусом после трёх ревью (80-review/) и с уровнем зрелости M0/M1/M2 — ответ на блокер Б-1/Д-01. Головной документ — 01-business-requirements.md.

Правило уровней: MUST разрешён только для M0 и M1. Требования, отнесённые к M2, переведены в SHOULD или COULD. Требования, забракованные или понижённые по итогам ревью, не удалены — помечены статусом и одной фразой причины.

Единственный источник правды по SIM-ID, вехам, приоритетам и числовым критериям приёмки — этот файл (90-final/02-requirements-registry.md). Доменные документы §9 и таблицы эталонов — справочные; при расхождении действует реестр (ревью D, 2026-09-16).

Сводка

Домен Документ-источник Требований M0 M1 M2 MUST после ревью
SIM-GEO 10-world/01-geodata-sources.md 24 9 6 9 14
SIM-WORLD 10-world/02-world-model-requirements.md 38 10 19 9 26
SIM-UAV 20-fleet/01-uav-model-requirements.md 40 12 21 6 33
SIM-CAM 30-sensors/01-camera-and-imagery.md 32 2 16 14 18
SIM-ENV 40-environment/01-weather-and-failures.md 40 1 15 23 15
SIM-MIS 50-mission/01-mission-execution.md 40 13 19 8 32
SIM-PLT 60-platform/01-api-and-nfr.md 36 4 16 16 20
SIM-UX 70-ux/01-frontend-3d-requirements.md 34 0 20 14 20
SIM-BIZ 00-brief/02-vision-and-business.md 34 10 14 9 24
SIM-FIN этот свод (новые) 20 5 13 2 18
Итого 338 67 160 110 220

Три требования (SIM-UAV-19 частично, SIM-ENV-03 частично, SIM-BIZ-34) имеют смешанный или внешний уровень и в разбивке по вехам учтены по старшей части. MUST в M2 — ноль: правило соблюдено механически, проверяется скриптом по этой таблице.

Приложения: INH-01…20 — наследуемые ограничения планировщика (00-brief/01-context-digest.md §1), SIM-01…18 — ранняя формулировка дыр (там же §6.1), поглощена доменными документами. Всего идентификаторов в проекте: 376.

Условные обозначения статуса: «принято» — без изменений; «переписано» — формулировка или критерий изменены ревью; «понижено» — приоритет/уровень снижен; «новое» — заведено сводом.


1. SIM-GEO — источники геоданных (24)

Документ-источник: simulate/docs/10-world/01-geodata-sources.md

ID Требование (кратко) Ур. Приор. Критерий приёмки Источник Статус после ревью
SIM-GEO-01 Базовый рельеф — Copernicus GLO-30 с заполнением из GLO-90 M0 MUST Для bbox в границах РФ мир собирается без внешней сети; покрытие 100 %; шаг ≤ 30 м; точность ≤ 4 м LE90 research принято
SIM-GEO-02 Севернее 60° с.ш. база замещается ArcticDEM v4.1 10 м M2 SHOULD Для полигона на 68° с.ш. итоговый шаг 10 м; факт замещения в манифесте research понижено: демо-полигон южнее 60°, ветка не нужна в M1
SIM-GEO-03 Импорт ЦМР/ЦММ заказчика GeoTIFF/COG с произвольным EPSG M2 SHOULD Файл ≤ 4 ГБ без ручной подготовки; в 20 точках высота совпадает ≤ 0,10 м; разрешение не ресемплится вниз ДОП-2, research понижено до M2: нужен только при наличии топосъёмки заказчика, которой нет
SIM-GEO-04 Импорт LAS/LAZ 1.2–1.4 и COPC с растеризацией M2 SHOULD Шаг 0,25–5,0 м; 100 млн точек ≤ 15 мин; доля пустых ячеек в отчёте ДОП-2 понижено: облаков точек от заказчика нет
SIM-GEO-05 Импорт векторных слоёв: GeoJSON/KML обязательно, SHP/DXF/SXF дополнительно M1 MUST (GeoJSON, KML) / SHOULD (прочие) Файл планировщика в KML и GeoJSON грузится без правки; round-trip ≤ 0,01 м ТЗ, schema принято; SHP/DXF/SXF → M2
SIM-GEO-06 Плановые СК: EPSG:4326, UTM 35N–60N, 4284 с ГК, 7683 с ГСК 3GK M2 SHOULD Round-trip ≤ 0,05 м на всех 4 семействах; площадь в проекции против геодезической ≤ 0,1 % ПП РФ № 1240 понижено до M2: семейства СК сверх WGS84/UTM нужны только для данных заказчика
SIM-GEO-07 МСК — только при явно переданных параметрах перехода; параметры не хранятся M2 SHOULD Импорт без параметров → CRS_MSK_KEYS_REQUIRED; grep не находит ключей МСК в репозитории ПП РФ № 262, R-11 понижено до M2: МСК-ключей от заказчика нет (ОВ-3)
SIM-GEO-08 Каждый слой хранит crs и vertical_datum; один датум на сцену M0 MUST Слой без vertical_datum отклоняется; смешение датумов → VDATUM_MISMATCH; конверсия только через PROJ с моделью геоида research принято
SIM-GEO-09 Любой обмен высотами несёт altitude_frame ∈ {AGL, AMSL, ELLIPSOIDAL} (единый enum — contracts/log_schema.json и схема плана; значение RELATIVE запрещено) M0 MUST Задание без фрейма отклоняется кодом ALT_FRAME_MISSING; регрессионный тест на 5 сценариях schema переписано ревью D, 2026-09-16: один enum вместо трёх словарей (SIM-MIS-03, UX-07); снята коллизия с четвёртым RELATIVE в коде
SIM-GEO-10 Возврат превышения (AGL) для каждой путевой точки задания M0 MUST Для задания из 112 точек — 112 значений AGL; совпадение с независимым расчётом по ЦМР ≤ 0,5 м РЭ-201, schema принято
SIM-GEO-11 Минимальный клиренс над рельефом и вертикальными препятствиями по всей траектории M1 MUST Для 201 клиренс < 100 м → violations.altitude ≠ 0; шаг дискретизации ≤ 10 м; для мультироторов порог из fleet.yaml, при отсутствии — assumed РЭ-201, fleet принято
SIM-GEO-12 Слой вертикальных препятствий из OSM (power, man_made, building) + MS ML Footprints M1 MUST На демо-полигоне ≥ 95 % объектов указанных типов в слое; объекты без height помечены height_source: assumed; публикуется obstacle_layer_completeness РЭ-201, ДОП-3 переписано: добавлен признак полноты слоя (Д-2 ревью 1)
SIM-GEO-13 Высота полога леса из ETH Canopy 10 м по маске WorldCover M2 SHOULD Разница DSM GLO-30 и (bare-earth + canopy) в классе Tree cover > 12 м → предупреждение research понижено
SIM-GEO-14 Ветер принимается профилем по высоте, а не скаляром M1 MUST Выдаётся ≥ 4 узла профиля; интерполяция линейна по геопотенциалу; конвенция «откуда дует» research, schema принято
SIM-GEO-15 Воспроизводимые прогоны на предвыгруженном ERA5 (0,25°, 1 ч, 37 уровней) M2 SHOULD Прогон «ветер на дату T» повторяется через неделю; NetCDF лежит локально research, validator понижено: доступность CDS из контура не подтверждена (R-03); manual-ветер остаётся MUST
SIM-GEO-16 Полный прогон демо-сценария без доступа в интернет M0 MUST docker compose up при отключённой сети поднимает сцену, выполняет задание, выдаёт метрики; 0 исходящих DNS ТЗ, R-10 принято
SIM-GEO-17 Манифест снапшота мира (world_manifest.json рядом с артефактами сборки): источник, релиз, дата выгрузки, bbox, CRS, датум, sha256 каждого файла M0 MUST Файл world_manifest.json содержит все поля; отсутствие любого поля — ненулевой RC сборщика мира validator переписано ревью D, 2026-09-16: критерий снят с API world/{id} (M2, SIM-PLT-03/05)
SIM-GEO-18 Детерминизм headless: world_snapshot_id + seed + задание → идентичные метрики M0 MUST Два прогона подряд — побитово совпадающий JSON; прогон через 7 суток — тоже validator принято
SIM-GEO-19 Фактический GSD по наклонной дальности до реальной поверхности M1 SHOULD Для полигона с перепадом ≥ 50 м — распределение GSD (min/median/max); превышение заданного > 10 % → предупреждение payloads, schema принято
SIM-GEO-20 Высота площадок сверяется с ЦМР M2 SHOULD Расхождение elevation_m с ЦМР > 5 м → ELEV_MISMATCH с обоими числами schema, research понижено до M2: сверка высот площадок нужна при данных заказчика
SIM-GEO-21 В сборку не входят наборы с NC-лицензией или запретом кэширования M0 MUST CI-проверка манифеста: нет FABDEM, Google 3D Tiles, ArcticDEM 2 м, Mapbox; список лицензий публикуется R-1…R-4 принято
SIM-GEO-22 Геоданные обновляются без пересборки образа M2 SHOULD Замена файлов снапшота в томе + рестарт меняют world_snapshot_id research понижено
SIM-GEO-23 Для 201 проверяется правило «не ниже точки старта» M1 MUST Точка ниже абсолютной высоты площадки старта → violations.altitude ≠ 0 РЭ-201, fleet принято
SIM-GEO-24 Все внешние наборы зеркалируются локально с проверкой контрольных сумм M0 MUST Сборка из зеркала при отключённом DNS проходит; несовпадение sha256 прерывает сборку R-6, R-7 принято; исполнение — SIM-FIN-07 (шаг 0 плана)

2. SIM-WORLD — модель мира (38)

Документ-источник: simulate/docs/10-world/02-world-model-requirements.md

ID Требование (кратко) Ур. Приор. Критерий приёмки Источник Статус после ревью
SIM-WORLD-01 Фиксированный перечень 8 слоёв мира, каждый с 6 обязательными полями метаданных M0 MUST world_manifest.json перечисляет 8 слоёв; слой без любого поля — ненулевой RC сборки SIM-GEO-17 переписано ревью D, 2026-09-16: критерий на файл манифеста, не на HTTP API
SIM-WORLD-02 Рабочая СК — локальная ENU через ECEF; плоская аппроксимация запрещена M0 MUST Round-trip WGS84→ENU→WGS84 в радиусе 200 км ≤ 0,01 м; точка в 100 км имеет z = −785 ± 5 м ТТХ PPK 10 мм переписано: распространено на все домены (снято П-5/С-2 — ветер и динамика считались «в UTM»)
SIM-WORLD-03 Origin ENU задан явно, входит в world_snapshot_id M0 MUST Смена origin меняет id; повтор с тем же origin — тот же id validator принято
SIM-WORLD-04 UTM — только формат хранения растров и обмена M0 MUST Длина маршрута 210 км в UTM и ENU расходится ≤ 84 м; интегрирование шло в ENU; площадь в проекции ≤ 0,1 % fleet, schema принято
SIM-WORLD-05 Манифест объявляет бюджет геопривязки: georef_ce90_m, georef_le90_m M1 MUST Для GLO-30 манифест содержит 6,0 / 4,0; отсутствие полей — ошибка сборки SIM-GEO-01 принято
SIM-WORLD-06 Клиренс возвращается интервалом значение ± LE90; нарушение — по центральному значению, узкий запас — отдельным warning M1 MUST Клиренс 98 м → violations.altitude; клиренс 102 м при LE90 = 4 м → warning CLEARANCE_MARGIN_BELOW_GEOREF, не violation; оба числа и ширина интервала в ответе РЭ-201 (100 м) переписано ревью D, 2026-09-16: единое правило с реестром (домен §3.3 «по нижней границе» снят — см. 10-world/02)
SIM-WORLD-07 Пересчёт AGL ↔ AMSL ↔ эллипсоидальная через ЦМР и модель геоида M0 MUST На 5 сценариях перевод туда-обратно ≤ 0,01 м; конверсия константой отклоняется SIM-GEO-08/09 принято
SIM-WORLD-08 БСВ-77 (EPSG:5705) без модели квазигеоида не пересчитывается M2 SHOULD Импорт даёт VDATUM_MODEL_REQUIRED; пользовательский сдвиг помечается assumed ПП РФ № 1240 понижено до M2: БСВ-77 приходит только с топоосновой заказчика
SIM-WORLD-09 Номер зоны Гаусса-Крюгера распознаётся из ложного смещения и сверяется M2 SHOULD Файл зоны 7, помеченный как зона 6, отклоняется CRS_ZONE_MISMATCH SIM-GEO-06 понижено: нужен только при импорте архивной топоосновы заказчика
SIM-WORLD-10 Шаг рабочего ЦМР по масштабу: ≤ 1 / 10 / 30 / 90 м M1 MUST На s01 шаг ≤ 10 м (открытые данные) / ≤ 1 м (топосъёмка); на 200 км² ≤ 30 м; шаг каждого уровня в манифесте ДОП-W-01, payloads принято
SIM-WORLD-11 Мир строится с буфером 40 км вокруг bbox задач M1 SHOULD Профиль LOS на 40 км не упирается в границу данных; размер буфера в манифесте fleet, ДОП-W-02 принято
SIM-WORLD-12 Запрос высоты: билинейная интерполяция в float64, узловая точность бит-в-бит, непрерывность на стыках M0 MUST 20 узлов — значение без изменений; проход через 3 стыка ≤ 1e-6 м; прореживание вдвое — медиана ≤ 0,5 м при уклоне ≤ 20 % раздел 3.3 принято
SIM-WORLD-13 Производительность запроса высоты ≥ 1·10⁶ /с на ядре M1 SHOULD Бенчмарк на 2,1 млн точек ≤ 2,1 с ДОП-W-06 понижено: функция MUST, число производительности — SHOULD (ревью 1 §7)
SIM-WORLD-14 LOD только для рендера; физика читает нулевой уровень M2 SHOULD Клиренс на LOD0 и LOD2 сравниваются; ответ с уровнем ≠ 0 для физики — провал теста раздел 3.2 понижено до M2: правило LOD значимо только при 3D-стриминге (M2)
SIM-WORLD-15 Все нужные тайлы загружаются до старта прогона M0 MUST Трассировка ввода-вывода: 0 открытий новых тайлов после старта; при неполном наборе прогон не стартует раздел 8 принято
SIM-WORLD-16 Маска качества ЦМР обязательна: источник + признак заполнения на ячейку M1 MUST Число над заполненной ячейкой несёт terrain_quality ≠ measured; доля заполненных — в отчёте мира раздел 3.4 принято (образец для SIM-FIN-17)
SIM-WORLD-17 Правила заполнения дыр: ≤ 8 ячеек интерполяцией, больше — из следующего слоя; вода плоская M1 MUST Доля заполненных > 5 % → DEM_VOID_FRACTION_HIGH; > 20 % → ошибка сборки ДОП-W-03 принято
SIM-WORLD-18 Зона несёт altitude_frame; при отсутствии — документированный дефолт с предупреждением M1 MUST В обычном режиме зона без фрейма принимается с дефолтом AMSL, warning ZONE_ALT_FRAME_DEFAULTED, зависящие величины → fidelity_class: assumed; в --strict — отказ ZONE_ALT_FRAME_REQUIRED; тест показывает разные наборы нарушений для AGL и AMSL на перепаде 50 м schema (поля нет), airspace переписано: снят блокер Б-1 ревью 2 (жёсткий отказ отвергал каждый реальный сценарий планировщика)
SIM-WORLD-19 Шесть типов зон с собственными кодами нарушений M1 MUST Сценарий со всеми шестью типами даёт 6 различимых кодов ФП-138, airspace принято
SIM-WORLD-20 Две геометрии зоны: prism и volume M2 SHOULD Зона-«чаша» из трёх слоёв-призм пропускает траекторию над нижним слоем внутри 2D-следа airspace понижено: в M1 только prism; объёмные тела — M2
SIM-WORLD-21 Длина траектории внутри зоны считается аналитически, не дискретизацией M1 MUST Траектория, задевающая угол NFZ на 3 м, даёт violations.nfz ≠ 0; дискретизация шагом 10 м этот случай пропускает validator принято
SIM-WORLD-22 Временной режим зоны: вне окна [valid_from, valid_to] зона не действует M2 SHOULD Один маршрут в двух временах даёт нарушение внутри окна и не даёт вне airspace, schema понижено до M2: временные зоны не участвуют в s01–s10 и в демо
SIM-WORLD-23 Правило 150 м ФП-138 — виртуальная поверхность AGL, warning ALT_ABOVE_150M, не violation M1 MUST Gemini + PF1B при GSD 3 см (H = 153 м) даёт ровно один warning и ноль нарушений; код совпадает с кодом планировщика ФП-138, airspace принято
SIM-WORLD-24 Буфер = max(safety_buffer_m, zone.buffer_m, 2 × CE90); при меньшем — BUFFER_BELOW_GEOREF M2 SHOULD При буфере 5 м и CE90 = 6 м применяется 12 м, оба числа сообщаются schema, раздел 2.4 принято
SIM-WORLD-25 Импорт зон и полигонов: GeoJSON и KML/KMZ обязательно M1 MUST Файл планировщика грузится без ручной правки; round-trip зон ≤ 0,01 м ТЗ, schema принято (допуск 0,01 м для зон и 0,05 м для плана — разные механизмы, М-4 ревью 2)
SIM-WORLD-26 Валидация импорта: геометрия, СК, единицы, фрейм; молчаливых дефолтов нет M1 MUST Все 15 проверок таблицы 5.2 покрыты тестами с фикстурами; KML без altitudeModeKML_ALTITUDE_MODE_DEFAULT 40-formats/01 принято
SIM-WORLD-27 Редактор зон: полигон, прямоугольник, окружность, коридор, вырез; невалидную геометрию сохранить нельзя M2 SHOULD Полигон-«бабочка» не сохраняется, конфликтный сегмент подсвечен ТЗ (ввод зон) понижено: дублирует вход планировщика (ревью 1 §6); в M1 остаётся правка вертикальных границ и фрейма зоны
SIM-WORLD-28 Слой препятствий: здания-призмы, цилиндры мачт/труб/опор, связные пролёты ЛЭП M1 MUST Траектория между двумя опорами ниже их вершин даёт столкновение; в точечной модели — нет РЭ-201, SIM-GEO-12 принято
SIM-WORLD-29 Полог леса как дополнительный heightfield 10 м по маске WorldCover M2 SHOULD Клиренс над Tree cover уменьшается на высоту полога; расхождение > 12 м → предупреждение SIM-GEO-13 понижено
SIM-WORLD-30 Запрос столкновения segment A→B: факт, точка, объект, минимальная дистанция M1 MUST (функция) / SHOULD (≥ 4·10⁵ /с) Бенчмарк 2,1 млн сегментов ≤ 5,3 с на ядре ДОП-W-06 переписано: производительность отделена от функции
SIM-WORLD-31 Запрос LOS: профиль шагом ≤ ½ шага сетки (≤ 15 м на GLO-30), рефракция k = 4/3, зазор ≥ 0,6·F₁ M1 MUST (функция) / SHOULD (≥ 5·10³ /с) На 40 км при 869,75 МГц порог зазора 35,2 ± 0,5 м; ответ содержит visible, clearance_m, blocking_point, fresnel_ratio РЭ-201, ДОП-W-07/08/09 переписано: единое правило шага, снято П-7 (SIM-ENV-23 требовал 10 м)
SIM-WORLD-32 Слой площадок отвечает на запрос пригодности: сектор ±30°, правило 0,1·L, покров под эллипсом сноса M1 MUST Для курса ψ проверка на d ∈ [0, 1000 м] возвращает max(h(d) − 0,1·d); > 0 — непригодна с указанием объекта РЭ-201, ДОП-W-12 переписано: распространено на резервные площадки (SIM-FIN-02)
SIM-WORLD-33 Метео-поле — слой мира: 4D-решётка (x, y, z, t) с интерполяцией M1 MUST Запрос ветра в произвольной точке/времени возвращает вектор; по высоте — линейно по геопотенциалу, по времени — между часовыми срезами SIM-GEO-14/15 принято; решётка считается в ENU (BR-06)
SIM-WORLD-34 Масштаб мира: bbox до 120×120 км, рабочий набор ≤ 256 МБ, RSS ≤ 2 ГБ M2 SHOULD Прогон на 120×120 км при отключённом кэше рендера удерживает RSS ≤ 2 ГБ ДОП-W-06 принято; арифметика метео-решётки исправлена на 2,25 МБ (М-3 ревью 2)
SIM-WORLD-35 Владелец бюджета сборки мира: рабочие слои района ≤ 200 км² — ≤ 5 мин; полный мир с буфером 40 км (до 14 400 км²) — ≤ 15 мин; из кеша — ≤ 30 с; слой зон — ≤ 2 с M1 SHOULD Замеры в CI на эталонном bbox; превышение более чем в 1,5 раза — провал; точки замера 1 / 22 / 50 / 100 / 200 км², t(S)/S не растёт более чем на 20 % между соседними ДОП-W-06 переписано: сняты три несовместимых бюджета (П-1 ревью 1, В-1 ревью 2); SIM-BIZ-08 и SIM-PLT-03 ссылаются сюда
SIM-WORLD-36 world_snapshot_id = sha256(входы ‖ параметры ‖ версии); generated_at в хэш не входит M0 MUST Две сборки из одних входов — один id; смена PROJ, модели геоида, origin или шага сетки — другой id SIM-GEO-17/18 принято
SIM-WORLD-37 Детерминизм расчётов мира: float64, фиксированный порядок редукций, сортированный обход, запрет -ffast-math и неявного FMA M0 MUST Два прогона подряд — побитово одинаковый JSON; через 7 суток — тоже; в сборке нет флагов быстрой математики validator принято; выбор рантайма — SIM-FIN-15
SIM-WORLD-38 Ограничение воспроизводимости между архитектурами CPU объявлено явно M0 MUST «Известные ограничения» содержат пункт про x86-64 и один образ ДОП-W-11 принято

3. SIM-UAV — модель борта (40)

Документ-источник: simulate/docs/20-fleet/01-uav-model-requirements.md

ID Требование (кратко) Ур. Приор. Критерий приёмки Источник Статус после ревью
SIM-UAV-01 Уровень модели — L1 (кинематика с ограничениями и постоянными времени); L2 — опциональный бэкенд энергоканала M0 MUST Состояние борта содержит поля §2.1; переходы между режимами занимают ненулевое время; модуль движения не импортирует аэродинамических коэффициентов решение §1.2, РЭ-201 с. 115 принято
SIM-UAV-02 Отчёт план/факт печатает дельту по длительности и энергии с разложением на компоненты M1 MUST Таблица содержит planned, actual, delta_% и вклад Δ_wind, Δ_turns, …; пороги ±5 %/±10 % не применяются на M0 §1.2, SIM-MIS-30 переписано ревью D, 2026-09-16: снято из M0; точность против независимых точек V-5/V-6/дальности — M1
SIM-UAV-03 Фиксированный шаг dt, по умолчанию 0,1 с, параметр сценария M0 MUST При 36,1 м/с шаг даёт дискретизацию 3,61 м ≤ 10 м fleet, SIM-GEO-11 принято
SIM-UAV-04 Детерминизм телеметрии по (world_snapshot_id, seed, ПЗ, dt) M0 MUST sha256 файла телеметрии совпадает в 10 повторных прогонах метод проекта принято
SIM-UAV-05 ТТХ из fleet.yaml/payloads.yaml в рантайме, 0 литералов в коде M0 MUST Правка airspeed_cruise Gemini на 12 м/с меняет длительность без правки кода правило проекта принято
SIM-UAV-06 Каждый параметр вне YAML фиксируется в contracts/assumptions.yaml (алиасы A-01…A-09 и прочие нумерации) M0 MUST assumptions_used[] манифеста ссылается только на сквозные ASSUMP-*; отсутствие записи для применённого параметра — отказ запуска §2.2, SIM-FIN-10 переписано ревью D, 2026-09-16: единый реестр с SIM-FIN-10; критерий «≥ 9 записей A-01…A-09» снят
SIM-UAV-07 Дерейтинг ёмкости АКБ по температуре берётся из единой кривой env_profile.yaml M1 MUST Gemini при −10 °C = 30,0 ± 0,5 мин (кусочно-линейная кривая от +15 °C); собственной модели дерейтинга модуль борта не содержит РЭ-201, с. 61 («до 30 %») переписано: снят блокер Б-2 ревью 2 (было ×0,70 → 28 мин против 30 мин SIM-ENV-15); эталон V-11 пересчитан
SIM-UAV-08 Вылет вне температурного окна блокируется кодом TEMP_OUT_OF_RANGE M1 MUST Gemini при −20 °C не допускается; 201 с базовой АКБ при −30 °C — тоже; с АКБ «Арктика» — допускается fleet, РЭ-201 с. 12 принято
SIM-UAV-09 Поведение определяется type (fixed_wing/multirotor), не идентификатором модели M1 MUST Справочный geoscan_401_geodesy подключается одной строкой конфигурации fleet принято
SIM-UAV-10 Для can_fly_below_launch_point: false проверка h_above_launch ≥ 0 на каждом шаге M1 MUST Сценарий «старт на вершине, полигон в долине»: 201 даёт ≥ 1 нарушение BELOW_LAUNCH_POINT, Gemini — 0 РЭ-201, с. 11 принято
SIM-UAV-11 Для 201 клиренс ≥ 100 м над рельефом и над точечными объектами, шаг ≤ 10 м M1 MUST На ЦММ с вышкой 120 м под галсом на 150 м AGL — violation CLEARANCE РЭ-201 с. 11, SIM-GEO-11 принято; фикстура вышки — SIM-FIN-12
SIM-UAV-12 Радиус разворота R = V²/(g·tanφ), φ — параметр сценария M0 MUST При φ = 30° и V = 27,8 м/с R = 136,4 ± 0,5 м; при φ = 45° — 78,8 ± 0,5 м производная, A-06 принято
SIM-UAV-13 Курс катапультного старта и захода — функция ветра, не константа площадки M1 MUST При ветре 270° старт курсом 270° ± 0°; при курсе 90° в сценарии — warning TAKEOFF_HEADING_VS_WIND РЭ-201 с. 30/36/94, D-8/D-9 принято
SIM-UAV-14 Проверка сектора взлёта ±30° и правила 0,1·L M2 SHOULD Здание 25 м в 200 м по курсу (порог 20 м) → LAUNCH_SECTOR_OBSTRUCTED РЭ-201, с. 11 понижено до M2: проверка сектора взлёта требует полного слоя препятствий вокруг площадки
SIM-UAV-15 Проход всех фаз с фактической длительностью и дельтой план/факт по фазам M0 MUST Таблица planned_s, actual_s, delta_%; сумма фаз = длительности вылета ± 1 с 40-formats/03 принято
SIM-UAV-16 Парашютная посадка 201 со сносом drift = W·H_deploy/V_desc, H = 70 м M1 MUST При W = 12 м/с и V_desc = 5 м/с снос 168 ± 2 м по ветру; точка касания проверяется на NFZ и радиус автоотцепа РЭ-201 с. 104/98, A-05 принято; fidelity_class: assumed — коэффициента сноса нет в источниках
SIM-UAV-17 Маршрут посадки 201 из 3 точек с заходом против ветра; отсутствие — ошибка валидации M1 MUST План без фазы approach для 201 → LANDING_ROUTE_REQUIRED РЭ-201, с. 93 принято
SIM-UAV-18 Оба режима разворота lzp и flyby; при flyby считается площадь выпавших краёв M1 MUST На 1×1 км с шагом галсов 41 м coverage_fraction при flyby строго меньше, разница объяснена в м² РЭ-201, с. 90 принято
SIM-UAV-19 Набор/сброс высоты по спирали при недостижимости по прямой; проверка пересечения с объёмными NFZ M2 SHOULD «Две точки на 300 м по горизонтали, Δh = 200 м» даёт climb с признаком spiral РЭ-201, с. 91 понижено (объёмные NFZ — M2, SIM-WORLD-20)
SIM-UAV-20 Фаза prepare занимает ненулевое время, площадка занята одним бортом M1 MUST На s07 интервал между вылетами с одной площадки ≥ turnaround_time_min; в телеметрии есть queue_wait_s schema, D-10 принято
SIM-UAV-21 Энергомодель: мощность от воздушной и путевой скорости, вертикальной скорости, крена, массы ПН, температуры M0 MUST При встречном 12 м/с удельный расход на км пути ×1,76 ± 0,05 для 201 на крейсере треугольник скоростей, fleet принято
SIM-UAV-22 Калибровка по якорям; модель проверяется на не участвующих в калибровке точках M0 MUST После калибровки по endurance_max/energy_wh: survey_area_per_flight ∈ [7, 22] км² (V-5/V-6) и range_max = 210 км при 19,4 м/с (V-4) в допусках эталонов fleet переписано ревью D, 2026-09-16: снята тавтология «Gemini 40 ± 2 мин»
SIM-UAV-23 Для 801 энергоканал — счётчик времени; energy_left_wh возвращается null M1 MUST Телеметрия 801 содержит endurance_left_s и energy_left_wh: null; в отчёте — пометка «модель по времени» fleet, A-07 принято
SIM-UAV-24 Вылет несостоявшийся при расходе более (1 − energy_reserve); событие с координатой и task_id M1 MUST s07 даёт ≥ 1 прерванный вылет с долей невыполненного галса в % energy_reserve принято
SIM-UAV-25 Сообщается, какой предел связал вылет: продолжительность, дальность или энергия M2 SHOULD Для крейсера 27,8 м/с указан limit: range на 126 мин; для 19,4 м/с — limit: endurance R4, §5.2 принято
SIM-UAV-26 Компенсация сноса углом sin β = W⊥/V_a; курс и путевой угол пишутся раздельно M0 MUST При боковом 10 м/с и V_a = 27,8 м/с β = 21,1° ± 0,5°; track_deg совпадает с азимутом галса ± 1° треугольник скоростей принято
SIM-UAV-27 СКО поперечного отклонения от ЛЗП на survey: ≤ 5 м для самолёта, ≤ 3 м для мультиротора M1 MUST На s06 (ветер 8 м/с) отчёт содержит xtrack_rms_m по каждому галсу, максимум ≤ 5 м вывод §6.1 переписано: 3 м для мультиротора — выбор с запасом, а не вывод (таблица даёт 9,0 м для Gemini + PF1B) — С-4 ревью 2
SIM-UAV-28 Единый порог невыполнимости галса: norm(W⊥) ≥ V_a → violation WIND_EXCEEDS_AIRSPEED; 0,85·V_a ≤ norm(W⊥) < V_a → warning WIND_MARGIN_LOW M1 MUST Мультиротор с V_a = 10 м/с при боковом 11 м/с даёт нарушение на всех галсах направления; при 8,6 м/с — предупреждение треугольник скоростей, валидатор переписано ревью D, 2026-09-16: сняты три разных порога (В-6 ревью 2); запас 15 % — параметр env_profile.yaml
SIM-UAV-29 Срабатывание затвора по пройденной дистанции; фактическое перекрытие по реальным центрам кадров M1 MUST Отчёт даёт overlap_forward_actual и overlap_side_actual в %; при ветре отличаются от номинальных, разница объяснена Mission Planner, payloads принято
SIM-UAV-30 Лестница приоритетов: порог АКБ > нарушение зоны > потеря связи > продолжение; каждая сработка в телеметрии M1 MUST При одновременной потере связи и падении напряжения борт выполняет посадку (дефолт по РЭ-201 с. 98), а не возврат; в логе оба события РЭ-201, с. 109–110 переписано: дефолт согласован с SIM-ENV (было противоречие В-5 ревью 2); RTLLAND — переключателем
SIM-UAV-31 При НАРУШЕНИЕ ЗОНЫ камера выключается, борт идёт на посадку; кадры после сработки не засчитываются M1 MUST photos после события = 0; coverage_fraction пересчитан РЭ-201, с. 109 принято
SIM-UAV-32 Потеря связи запускает возврат по таймеру «Время автономного полёта»; параметр обязателен, дефолта нет M1 MUST Запуск без таймера → AUTONOMOUS_TIME_REQUIRED; при 60 с борт начинает return ровно через 60 с РЭ-201 с. 98, A-16 принято как победившее; ДОП-ENV-20 приведено в соответствие (снято П-2 ревью 3)
SIM-UAV-33 «Цена деградации»: uncovered_km2 и aborted_transects по каждому событию M1 MUST Отчёт содержит оба поля дыра № 8 принято
SIM-UAV-34 Моделируется напряжение пакета 201, а не только процент остатка M2 SHOULD Телеметрия 201 содержит voltage_v; при 16,5 В борт инициирует посадку без внешней команды РЭ-201 с. 98/115, D-1 понижено до M2: модель напряжения сверх порога возврата в M1 не нужна
SIM-UAV-35 Одновременное моделирование не менее 20 бортов в едином модельном времени M1 MUST 20 бортов × 3 ч модельного времени ≤ 3600 с на одном ядре (однопоточный прогон); результат детерминирован сценарии sc-* переписано: снят блокер Б-5 ревью 2 / Б-2 ревью 1 (было «≤120 с на 8 ядрах» — противоречило однопоточности SIM-MIS §3.4)
SIM-UAV-36 Детекция опасных сближений: 3D-расстояние по парам, порог d_h < 150 м и d_v < 50 м M2 SHOULD Два пересекающихся маршрута на одной высоте дают ≥ 1 событие PROXIMITY; отчёт содержит min_separation_m, proximity_events A-17 понижено: чисел D_min нет ни в ТЗ, ни в РЭ — критерия безопасности нет, только измерение
SIM-UAV-37 Разделение по высотам и очередь на площадке явные, без «телепортации» M2 SHOULD На s03 сумма queue_wait_s ненулевая, makespan факта больше плана §4, SIM-UAV-20 понижено: базовая очередь покрыта SIM-UAV-20 (M1)
SIM-UAV-38 Набор эталонных кейсов V-1…V-14 исполняется одной командой в CI M0 MUST Команда возвращает ненулевой код при любом FAIL; reference — литерал первоисточника с пунктом; вычисление reference вызовом движка запрещено (AST-граф в CI); история прогонов: каталог artifacts/validate/ с retention ≥ 30 дней метод проекта переписано ревью D, 2026-09-16: независимость эталонов (SIM-BIZ-05); V-11 = 30 мин, V-9 при V_a = airspeed_max
SIM-UAV-39 Выигрыш галсов поперёк ветра получается из траекторной модели, формула — только эталон M1 MUST V-9: для Gemini при V_a = 15 м/с (максимальная, как в s06) и W = 8 м/с выигрыш 18,2 % ± 1 п.п.; слово «крейсер» в формулировке не употребляется §9.3, s06 переписано: снято П-9 (при крейсере 10 из fleet.yaml множитель 1,67, а не 1,18)
SIM-UAV-40 Отчёт по вылету: дельта план/факт по makespan, налёту, покрытию и энергии; метрики качества плана не пересчитываются M0 MUST Таблица planned, actual, delta_% по 4 метрикам; валидатор планировщика не импортируется правило проекта принято

4. SIM-CAM — камера и изображения (32)

Документ-источник: simulate/docs/30-sensors/01-camera-and-imagery.md

ID Требование (кратко) Ур. Приор. Критерий приёмки Источник Статус после ревью
SIM-CAM-01 Геометрия камеры только из payloads.yaml, ни одно число не хардкодится M0 MUST Тест сверяет payloads.yaml с константами рендера — 0 расхождений payloads, INH-12 принято
SIM-CAM-02 Модель проекции — pinhole; FOV 2·atan(S/(2f)) по трём осям M1 MUST Диагональный FOV Pollux 43,0° ± 0,5° (диагональ берётся из sensor_diagonal_mm: 6.3 явно); горизонтальный 34,5° Gemini Specs переписано: источник диагонали указан явно (М-6 ревью 2)
SIM-CAM-03 GSD и footprint по формулам 30-domain/01 M0 MUST Контрольные числа PF1B/Pollux/тепловизора воспроизводятся ≤ 0,6 % (таблица эталонов округляет Bx; формула даёт до 0,55 % расхождения с колонкой Bx) 30-domain/01 переписано ревью D, 2026-09-16: допуск 0,1 % снят как недостижимый против собственной таблицы
SIM-CAM-04 Ориентация камеры = ориентация борта + углы подвеса; выход за диапазон — явная ошибка M2 SHOULD Запрос pitch = 40° для 801 (вне [−97,5; 32,5]) → GIMBAL_OUT_OF_RANGE fleet понижено: подвес нужен только для 801, который в M1 участвует без ненадирной съёмки
SIM-CAM-05 Для 201 — два слота установки и углы надир/15°/20° M2 COULD Конфиг 201 содержит camera_mount, либо ограничение «только nadir/left» записано явно D-12 принято
SIM-CAM-06 Lever arm камеры: при отсутствии данных в источниках — запись ASSUMP-CAM-LEVER с value=0 и явным rationale; точность геопривязки кадра не заявляется выше GSD/2 M1 MUST В contracts/assumptions.yaml есть ASSUMP-CAM-LEVER; в метаданных кадра поле position_accuracy_m ≤ GSD/2 или отсутствует раздел 1.3 переписано ревью D, 2026-09-16: позитивная формулировка; коллизия «А-5» с A-05 в других реестрах снята (отдельный ASSUMP-CAM-LEVER)
SIM-CAM-07 Фактический AGL пересчитывается по DEM под каждой точкой трассы и под углами кадра M1 MUST Перепад рельефа 50 м даёт разброс фактического GSD не менее Δh·k раздел 2 принято
SIM-CAM-08 Шаг дискретизации трассы для пересчёта AGL ≤ 10 м M1 MUST Расстояние между соседними точками пересчёта ≤ 10 м SIM-GEO-11 принято
SIM-CAM-09 Footprint при ненадирной установке — проекция 4 лучей (трапеция) M2 SHOULD Для pitch = −70° площади ближней и дальней половин кадра различаются раздел 2 понижено вместе с SIM-CAM-04
SIM-CAM-10 Фактическое перекрытие по вычисленным footprint, не по номинальным By/Bx M1 MUST На плоском участке отклонение факт/номинал ≤ 1 %; на уклоне > 20 % отклонение показано явно раздел 2 принято
SIM-CAM-11 Кадр доступен для 100 % сценариев офлайн: «сухой» геометрический режим — дефолт headless, растровый рендер — GUI и по запросу M1 MUST Headless-прогон без GPU выдаёт метаданные для 100 % кадров и 0 растров; GUI-прогон выдаёт растры при docker compose up офлайн INH-19, SIM-GEO-16 переписано: снят блокер П-3/R-04 ревью 3 (противоречие с SIM-MIS-33 «без GPU»); CPU-растеризатор нужен только для GUI-подвыборки
SIM-CAM-12 Рендер не заявляется фотореалистичным: текстура по WorldCover + hillshade, явная пометка M1 MUST Поле source_mode = synthetic_render в каждом кадре; строка про отсутствие фотореализма в ограничениях раздел 3а принято
SIM-CAM-13 Тени по реальному положению солнца M2 SHOULD Два кадра одной точки с разницей 6 ч дают азимут тени ≥ 60° раздел 3а понижено
SIM-CAM-14 Режим вырезки из ортофото только при наличии ortho-слоя; внешние подложки не используются M2 SHOULD Без ortho-слоя запрос возвращает ORTHO_LAYER_MISSING, не тихий откат 10-world/01 понижено: ортофото заказчика нет (Q-CAM-02)
SIM-CAM-15 Вырезка — геометрическая передискретизация, без дорисовки за пределами покрытия M2 SHOULD Часть footprint вне extent маркируется NODATA, overlap_out_of_ortho = true раздел 3б понижено
SIM-CAM-16 Тепловизор — синтетическая температурная карта по классу поверхности, без физики теплопереноса M2 SHOULD Карта содержит ≥ 4 класса; source_mode = synthetic_thermal_by_landcover раздел 3в понижено: заведомо нефизичная картинка не добавляет доказательной силы (ревью 1 §6)
SIM-CAM-17 ИК-кадр доступен только связке 801 + geoscan_801_thermal M1 MUST Запрос ИК для 201/Gemini → PAYLOAD_INCOMPATIBLE payloads, INH-13 принято
SIM-CAM-18 Каждый кадр — с JSON-сайдкаром, обязательные поля раздела 4.1 M1 MUST JSON проходит валидацию по фиксированной схеме; ни одно MUST-поле не null раздел 4.1 принято
SIM-CAM-19 RGB-кадры — JPEG с EXIF GPS и XMP-блоком углов подвеса M2 SHOULD exiftool показывает непустые GPS-теги и ≥ 3 XMP-тега ориентации раздел 4.2 понижено: витрина; доказательную ценность даёт «сухой» режим (ревью 1 §6)
SIM-CAM-20 Мультиспектральные кадры — TIFF 16 бит, 5 каналов M2 SHOULD Файл для survey_type = multispectral.tiff, 16 бит, 5 каналов payloads понижено вместе с SIM-CAM-19
SIM-CAM-21 801 в потоковом профиле — непрерывная эмиссия кадров на фазе survey M2 SHOULD Число кадров ≥ duration_s × min_stream_fps (1 Гц, ДОПУЩЕНИЕ) раздел 4.3 понижено
SIM-CAM-22 201/Gemini — пакетный режим; число кадров сверяется с photos плана M1 MUST Число кадров фазы survey совпадает с plan.phases[].photos, иначе warning с причиной 40-formats/03 принято
SIM-CAM-23 Объём кадров/хранилища оценён заранее и проверяется односторонним инвариантом M2 SHOULD Фактическое число кадров тестового прогона ≤ 1,3× оценки (5000 кадров ≈ 100 ГБ для 201 + RX1RM2 на 22 км²), иначе прогон помечается превышением бюджета хранилища раздел 4.4 переписано ревью D, 2026-09-16: единая редакция с SIM-PLT-23 (100 ГБ, не 20 ГБ)
SIM-CAM-24 «Сухой» геометрический режим: footprint/GSD/покрытие и метаданные без кодирования растра M1 MUST 153 000 сухих кадров (эталонный объём §4.4) обрабатываются ≤ 12 мин на одном ядре x86-64 без GPU; метаданные — для 100 % расчётных кадров раздел 4.4 переписано ревью D, 2026-09-16: абсолютный порог вместо отношения к необязательному полному рендеру (M2)
SIM-CAM-25 Настраиваемая подвыборка эмиссии растров при 100 % метаданных M1 MUST При stride = 10 сохраняется 1/10 растров, сайдкары есть для 100 % кадров раздел 4.4 повышено с SHOULD: требуется политикой хранения SIM-PLT-23
SIM-CAM-26 Смаз smear = V_g·t_exp; для камер без документированной выдержки — явное допущение M2 SHOULD Поле smear_m в метаданных каждого RGB/ИК кадра; при smear_m > GSD — warning SMEAR_EXCEEDS_GSD раздел 5 понижено до M2: смаз требует выдержки, которой нет ни для одной нагрузки; принято; пара «камера + её выдержка» согласована (С-9 ревью 2)
SIM-CAM-27 Осадки/туман/обледенение физически не моделируются; допустим помеченный косметический эффект M2 COULD Если реализовано — пометка «визуальный эффект, не физическая модель»; если нет — строка в ограничениях раздел 5, РЭ-201 принято
SIM-CAM-28 Ночной вылет по умолчанию запрещён (Класс G ФП-138 требует светлого времени) M2 SHOULD Сценарий между заходом и восходом без permit_nightNIGHT_FLIGHT_REQUIRES_PERMIT ФП-138 понижено до M2: ночных сценариев в M1-наборе нет
SIM-CAM-29 coverage_fraction_actual по объединению фактических footprint ∩ полигон; расхождение план/факт обязательно M1 MUST Отчёт по s01–s10 содержит _planned, _actual, delta для каждого INH-07, раздел 6 принято
SIM-CAM-30 Карта фактического GSD со сводкой min/mean/max и долей площади вне ±10 % M1 MUST Для сценария с перепадом доля площади вне ±10 % > 0 и показана явно раздел 6 принято
SIM-CAM-31 Список пропусков с кодом причины из фиксированного словаря M1 MUST Сумма площадей списка + coverage_actual × area сходится с площадью задания ≤ 0,1 % раздел 6 принято
SIM-CAM-32 Детерминизм метаданных кадра бит-в-бит; кросс-GPU идентичность растра не гарантируется M1 MUST Два прогона на одной машине дают идентичные JSON-сайдкары; ограничение по растру записано в «известные ограничения» INH-06 принято; согласовано с SIM-BIZ-25 (снято противоречие «идентичная картинка»)

5. SIM-ENV — внешняя среда и отказы (40)

Документ-источник: simulate/docs/40-environment/01-weather-and-failures.md

ID Требование (кратко) Ур. Приор. Критерий приёмки Источник Статус после ревью
SIM-ENV-01 Ветер — поле W(x, y, z, t) в рабочей СК движка, а не скаляр сценария M1 MUST На W-01 значение на H = 100 м отличается от заданного на 10 м; поле опрашивается в ≥ 3 точках по высоте на каждом шаге ТЗ, ДОП-ENV-01 переписано: «локальная метрическая проекция (UTM)» заменена на ENU (снято П-5/С-2)
SIM-ENV-02 Степенной (α) и логарифмический (z0, d) профили; z0 по WorldCover, d по ETH canopy M1 MUST Для z0 = 0,03 м отношение v(100)/v(10) = 1,40 ± 0,01; для леса — 1,99 ± 0,02 ДОП-ENV-01 принято; помечено validation_level: V2 — циркулярная приёмка (Д-4 ревью 1)
SIM-ENV-03 Три способа задания поля ветра: вручную, ERA5, Open-Meteo M1 MUST (manual) / SHOULD (ERA5, Open-Meteo) Режим manual работает без сети; режимы reanalysis и forecast — после подготовки снапшота ERA5, Open-Meteo переписано ревью D, 2026-09-16: уровень M1; смешанный приоритет только в колонке «Приор.»
SIM-ENV-04 Данные ветра входят в снапшот мира и привязаны к world_snapshot_id M1 MUST Повторный прогон того же снапшота даёт тот же ветер при отключённой сети; sha256 поля ветра в манифесте SIM-GEO-17/18 принято
SIM-ENV-05 Порывы: коэффициент G, длительность, время нарастания; приоритет wind_gusts_10m M2 SHOULD На W-03 ≥ 5 порывов за вылет; максимальное отклонение от ЛЗП в отчёте ДОП-ENV-02 понижено
SIM-ENV-06 Турбулентность по спектру Драйдена M2 SHOULD Включение меняет фактическое боковое перекрытие ≥ 1 п.п.; при фиксированном seed повторяется бит-в-бит ДОП-ENV-03 понижено; помечено как smoke-test, не валидация спектра (ревью 1 §4)
SIM-ENV-07 Сдвиг ветра с отчётом ∂W/∂z при превышении 0,1 (м/с)/м M2 SHOULD На W-05 смещение точки приземления ≥ 20 м против прогона без сдвига ДОП-ENV-04 понижено
SIM-ENV-08 Орографика: ускорение над гребнем и подветренный ротор M2 SHOULD На W-04 зона ротора построена по ЦМР; вертикальная скорость ≤ −3 м/с; вне зоны w ≈ 0 ДОП-ENV-05 понижено
SIM-ENV-09 V_g = √(V_a² − W⊥²) + W∥; при norm(W⊥) ≥ V_a — TRACK_LOST M0 MUST На W-02 отношение времён галсов поперёк/вдоль = 1,182 ± 0,02 при W = 8, V_a = 15 м/с (максимальная) 30-domain/01, валидатор переписано ревью D, 2026-09-16: скорость эталона названа явно; символ norm(W⊥) без символа «|» в ячейке (парсинг реестра)
SIM-ENV-10 wind_max из fleet.yaml проверяется по фактическому ветру на высоте полёта M1 MUST На W-06 при 11 м/с допущен только 201; на W-01 при скаляре 8 м/с Gemini не допущен fleet, РЭ-201 переписано: интерпретация высоты нормирования помечена ДОП-ENV-23 (в РЭ высоты нет), заведён вопрос Q-ENV-12 (В-7 ревью 2)
SIM-ENV-11 (ссылка) Старт против ветра — NO-GO по SIM-UAV-13 / SIM-BIZ-20 M2 COULD Критерий приёмки — в SIM-UAV-13: запуск по ветру не происходит; старт против ветра допустим РЭ-201, D-ENV-03 переписано ревью D, 2026-09-16: собственная реализация не требуется (как INH-*); не входит в % готовности
SIM-ENV-12 Поля осадков и видимости: precip_rate, precip_type, visibility_mor, lwc, mvd, cloud_base_agl M2 SHOULD Все шесть полей задаются сценарием и читаются моделью ТЗ, ДОП-ENV-06/10 понижено: в M1 обязательны только temperature_c и ветер — порогов по осадкам в РЭ нет ни одного (ревью 1 §7)
SIM-ENV-13 Видимость влияет на пригодность кадра через контраст Кошмидера и смаз M2 SHOULD На W-09 кадры с C/C₀ < 0,6 помечены; смаз считается на согласованной паре «камера + её выдержка» ДОП-ENV-10 понижено; исправлена химера «выдержка Riebo + GSD Pollux» (С-9 ревью 2)
SIM-ENV-14 Обледенение: накопление массы, рост C_D, сокращение продолжительности M2 SHOULD На W-12 за 10 мин при LWC = 0,2 г/м³ накапливается 0,29 кг ± 10 % ДОП-ENV-06 понижено
SIM-ENV-15 Владелец кривой дерейтинга ёмкости АКБ по температуре: кусочно-линейная от +15 °C, потеря 30 % на нижней границе M1 MUST При T = −10 °C Gemini даёт 30,0 ± 0,5 мин против 40; число возвращается как endurance_actual_s; SIM-UAV-07 и эталон V-11 ссылаются сюда РЭ-201 («до 30 %»), ДОП-ENV-19 принято как победившее в конфликте (Б-2 ревью 2); validation_level: V2 — циркулярная приёмка
SIM-ENV-16 Рабочее окно ЗУ Gemini 0…+40 °C: при T < 0 оборот через зарядку невозможен M2 SHOULD На W-11 оборот только через запасную АКБ; makespan отличается от прогона при +10 °C Gemini Specs, D-7 понижено
SIM-ENV-17 Деградация оптического позиционирования 801 над однотекстурной поверхностью M2 COULD На W-13 ошибка положения растёт; задание продолжается на GNSS ДОП-ENV-08 принято
SIM-ENV-18 Гроза — динамическая бесполётная зона с движением, радиусом безопасности и временем жизни M2 SHOULD На W-15/W-16 борт не входит в safety_radius; зона смещается; в отчёте t_decision_s ТЗ, ДОП-ENV-11 понижено: вся модель на ДОП-ENV-11 (радиус 10 км — авиационная практика, не от заказчика); трактовка не подтверждена (Q-NEW-01)
SIM-ENV-19 Поле шквала у грозовой ячейки: скачок ветра на фронте и нисходящий поток M2 SHOULD На W-17 ветер на фронте превышает wind_max всех бортов; ни один борт не под ним ДОП-ENV-11 понижено
SIM-ENV-20 Электростатика грозовой зоны повышает вероятность ОШИБКА КОМПАСА / ОШИБКА ГНСС M2 SHOULD На W-18 код возникает внутри зоны и не возникает вне при том же seed ДОП-ENV-11, РЭ-201 понижено
SIM-ENV-21 Прямое попадание молнии — терминальное событие с вероятностью 0, только явной инъекцией M2 SHOULD На W-14 вылет терминирован, отчёт сформирован, процесс не упал; в стохастическом режиме не возникает за 100 прогонов обоснование §3.1 понижено; принято вопреки замечанию R-09: трактовка сохранена, добавлен вопрос Q-NEW-01
SIM-ENV-22 Четыре канала связи (KTRL, VIDEO, GNSS, NET) моделируются независимо M1 MUST Каждый канал отключается отдельно в сценарии; в M1 полная физика — для KTRL (SIM-ENV-23); остальные каналы — флаги доступности + различимые коды событий РЭ-201, fleet, R5 переписано ревью D, 2026-09-16: веха M1 (выровнено с ENV-23/24/25); детальная матрица реакций — M2
SIM-ENV-23 Доступность KTRL — по дальности из fleet.yaml, прямой радиовидимости по ЦМР с зазором ≥ 0,6·F₁ и модели потерь M1 MUST На W-21 связь рвётся на 12 км при гряде 80 м, а не на 40 км; шаг профиля ≤ 15 м (единое правило SIM-WORLD-31) РЭ-201 (40 км LOS, 867,75–872,25 МГц) переписано: шаг приведён к 15 м (П-7 ревью 3); уровень M1, не M2 (С-10 ревью 2)
SIM-ENV-24 Потеря KTRL не прерывает задание; возврат только по таймеру «Время автономного полёта» M1 MUST На W-19 борт проходит 170 км вне связи и выполняет задание целиком; на W-20 возврат начинается ровно по таймеру ±1 с РЭ-201 (ОШИБКА КРЛ) принято
SIM-ENV-25 Возврат планировщику t_out_of_link_max_s M1 MUST Значение в отчёте по каждому вылету; при T_auto ≤ t_out_of_link_max_s — WARNING §4.3, fleet принято
SIM-ENV-26 Потеря и деградация GNSS: пропадание, затенение рельефом, спуфинг; участки помечаются как непригодные для PPK M2 SHOULD На W-22 полёт продолжен на счислении, ошибка в отчёте, кадры участка помечены РЭ-201, ДОП-ENV-13 понижено
SIM-ENV-27 Недоступность наземной сети: просроченный файл зон блокирует вылет M2 SHOULD На W-23 ни один борт не взлетел, код ЗОНЫ ИСТЕКЛИ, сдвиг makespan посчитан РЭ-201 — единственная документированная связь «нет сети → нет полёта» понижено до M2: блокировка вылета по файлу зон не участвует в s01–s10; принято (дёшев и документирован — ревью 1 §7)
SIM-ENV-28 Каталог отказов использует буквальные коды РЭ-201; реакции вне РЭ помечены ДОПУЩЕНИЕМ M2 SHOULD Все ~30 кодов в машиночитаемом каталоге; для каждого указан источник реакции РЭ-201 понижено до M2: полный каталог ~30 кодов нужен для M2-сценариев; в M1 достаточно 4 кодов SIM-ENV-30
SIM-ENV-29 Отказы камеры не прерывают полёт; потерянная площадь → resurvey_required_km2 M1 MUST Сумма покрытой и resurvey_required площадей равна плановой ± 0,1 % РЭ-201, требование заказчика принято
SIM-ENV-30 АВАРИЯ и ОШИБКА КОМПАСА → немедленная посадка; НАРУШЕНИЕ ЗОНЫ → камера off + полёт к месту посадки M1 MUST Снижение начато ≤ 1 с после кода; после НАРУШЕНИЕ ЗОНЫ снято 0 кадров; длина трека внутри NFZ = 0 РЭ-201 принято
SIM-ENV-31 Диапазоны предстартовых параметров валидируются: 16,5–20,75 В, 100–4000 м, 0–300 м M1 MUST Значения вне диапазонов отклоняются; при 20,75 В возврат наступает раньше, чем при 16,5 В РЭ-201 принято; дефолт реакции на порог — LAND (согласовано с SIM-UAV-30, В-5 ревью 2)
SIM-ENV-32 Отказ двигателя мультиротора — терминальное событие; отсутствие данных зафиксировано M2 SHOULD Событие завершает вылет; в отчёте пометка ДОП-ENV-16 ДОП-ENV-16 принято
SIM-ENV-33 Единый контракт события воздействия (класс, тип, триггер, цель, параметры, длительность, источник, поток ГПСЧ) M2 SHOULD Любое воздействие каталога выражается контрактом без расширений; схема валидируется раздел 6.2 понижено до M2: единый контракт события нужен для инъекций (M2)
SIM-ENV-34 Два режима инъекции: детерминированный и стохастический M2 SHOULD Оба отрабатывают на W-24; детерминированный не обращается к ГПСЧ метод проекта понижено до M2: стохастический режим инъекций — M2; в M1 только детерминированный
SIM-ENV-35 Бит-в-бит воспроизводимость по (world_snapshot_id, plan_sha256, seed) M0 MUST На W-24 повтор каждого seed даёт совпадающий sha256; добавление четвёртого борта не меняет реализации для первых трёх R-PS-28/29 принято
SIM-ENV-36 Журнал всех сработавших событий; поданный как сценарий, даёт тот же результат (replay) M2 SHOULD sha256 результата исходного и повторного прогона совпадают; ГПСЧ во втором не вызывался раздел 6.3 понижено до M2: replay журнала как сценария нужен для каталога W-xx (M2)
SIM-ENV-37 Дерево реакций с полным набором действий и строгой лестницей приоритетов; отвергнутые действия логируются M2 SHOULD На каждом событии в журнале есть выбранное действие и список отвергнутых с причиной ТЗ, РЭ-201 понижено до M2: полное дерево реакций нужно для метео-событий (M2); в M1 два failsafe
SIM-ENV-38 Предикат «продолжение возможно» по шести условиям P1–P6; нарушение только P6 полёт не прерывает M1 MUST На W-09 полёт не прерван при полностью непригодных кадрах; в журнале шесть числовых значений, не булевы флаги требование заказчика, раздел 7.3 принято — прямой ответ на фразу заказчика «обработал и продолжил»
SIM-ENV-39 Все пороги среды в env_profile.yaml с тегом источника; значения из fleet.yaml не дублируются M1 MUST grep по коду не находит числовых порогов; в отчёте перечислены использованные пороги с тегами и доля assumed правило проекта принято
SIM-ENV-40 Каталог W-01…W-24 прогоняется одной командой headless без сети M2 SHOULD Время полного прогона в CI ≤ 15 мин; отчёт — одна таблица R-PS-28/29 понижено: большинство сценариев каталога относятся к M2-возможностям; в M1 гоняется подмножество W-01/02/06/19/20/21/23

6. SIM-MIS — миссия: вход, исполнение, журнал, отчёт (40)

Документ-источник: simulate/docs/50-mission/01-mission-execution.md

ID Требование (кратко) Ур. Приор. Критерий приёмки Источник Статус после ревью
SIM-MIS-01 Вход — комплект (scenario, plan, world_snapshot_id, run_config); план без сценария не исполняется M0 MUST Запуск с одним KML без сценария → SCENARIO_MISSING, код выхода ≠ 0 40-formats/03, ТЗ принято; приём сценария без altitude_frame у зон разрешён дефолтом (SIM-WORLD-18)
SIM-MIS-02 Импорт плана: наша схема, GeoJSON RFC 7946, KML OGC 2.2 — обязательно; .plan — SHOULD, .waypoints — COULD M1 MUST На s01–s10 три обязательных формата дают идентичный список путевых точек ТЗ п. 2, 40-formats/01 принято
SIM-MIS-03 Фрейм высоты обязателен; clampToGround — фатальная ошибка M0 MUST KML без altitudeMode отклоняется кодом ALT_FRAME_MISSING; в CI есть негативный тест 40-formats/01, SIM-GEO-09 принято; код принят как единый для проекта (П-6)
SIM-MIS-04 ТТХ борта и нагрузки только из fleet.yaml/payloads.yaml M0 MUST Правка airspeed_cruise меняет makespan_s; неизвестная модель → UAV_MODEL_UNKNOWN 10-hardware/ принято
SIM-MIS-05 Валидация импорта в трёх уровнях; строгий режим по умолчанию, без молчаливых исправлений M1 MUST Для каждого кода §1.5 есть тест; в строгом режиме import_fixups[] пуст всегда 70-plan/01 принято
SIM-MIS-06 Фазы разворачиваются в путевые точки закрытого словаря из 10 типов M0 MUST Тип каждой точки принадлежит словарю; неизвестный тип — ошибка импорта 40-formats/01, РЭ-201 принято
SIM-MIS-07 На фазе survey ровно один способ триггера камеры: интервал в секундах ИЛИ шаг в метрах M1 MUST Одновременное задание обоих → CAMERA_TRIGGER_AMBIGUOUS; отсутствие обоих — ошибка 40-formats/03, РЭ-201 принято
SIM-MIS-08 Round-trip импорта: KML/GeoJSON → модель → экспорт сохраняет геометрию и атрибуты M2 SHOULD Координаты ≤ 0,05 м, высоты ≤ 0,1 м, атрибуты phase/speed_ms/altitude_m побитово 40-formats/01 понижено до M2: обратный экспорт плана в M1 не требуется; принято; разница с допуском зон 0,01 м объяснена (М-4 ревью 2)
SIM-MIS-09 Радиус достижения точки — параметр пер-класс планера; галсы ограничиваются створом, не кругом M1 MUST Удвоение/уполовинивание радиуса меняет coverage_fraction ≤ 0,5 п.п., иначе флаг ACCEPTANCE_SENSITIVE Mission Planner, A-MIS-01 принято
SIM-MIS-10 Два типа разворота с расчётом R = V²/(g·tanφ) по фактической скорости M1 MUST При шаге галсов 70–120 м lzp даёт coverage_fraction выше flyby, разница показана числом; R для 201 на 27,8 м/с и 30° = 137 м ± 1 м РЭ-201, A-MIS-03 принято
SIM-MIS-11 Камера на развороте по умолчанию выключена M1 MUST При выключенной камере photos_out_of_transect = 0 .plan, РЭ-201 принято
SIM-MIS-12 Недостижимая точка не пропускается молча: спираль, таймаут 120 с, событие, contingency после 3 подряд M1 MUST В сценарии с \|W⊥\| ≥ V_a в журнале есть WAYPOINT_UNREACHABLE, в отчёте — unphotographed_area_km2 > 0 РЭ-201, A-MIS-04 принято
SIM-MIS-13 Перелёт по правилам Planner: равные высоты — на этой, разные — на наибольшей; при Δh > 30 м участок выделяется M1 MUST Тест на паре элементов 150 и 300 м: перелёт на 300 м, в журнале climb длительностью > 0 РЭ-201, «Перелет» принято
SIM-MIS-14 Посадка — 3 точки с заходом против ветра; для 201 парашют с 70 м, автоотцеп 0–300 м, снос M1 MUST landing_offset_m и parachute_drift_m в отчёте; при смене направления ветра меняется курс захода РЭ-201 принято
SIM-MIS-15 Возврат — к точке взлёта на текущей высоте, но не ниже минимальной высоты возврата (100–4000 м) M1 MUST Прогон с командой return ниже минимальной показывает набор до минимальной РЭ-201 принято
SIM-MIS-16 Единые модельные часы и фиксированный шаг dt для всех бортов и подсистем M0 MUST В run_config один dt; шаг пер-борт отклоняется 70-plan/01, A-MIS-05 принято
SIM-MIS-17 Автоматическая проверка сходимости по шагу интегрирования M0 MUST Прогон с dt_s из манифеста и повтор с dt_s/2: norm(Δmakespan) ≤ 0,5 %, norm(Δcoverage) ≤ 0,2 п.п.; иначе DT_NOT_CONVERGED A-MIS-05, SIM-MIS-23 переписано ревью D, 2026-09-16: явный параметр dt_s; согласовано с SIM-MIS-16
SIM-MIS-18 Три режима часов (1×, ускоренный, headless) дают идентичный журнал M2 SHOULD sha256 обоих потоков журнала совпадает для 1× и headless на s04 70-plan/01 понижено до M2: в M1 работает только headless-режим часов; принято; набор множителей приведён к 1×/5×/10×/30× (С-8 ревью 2)
SIM-MIS-19 Полный детерминизм по seed: единый PRNG, подпотоки на (подсистема, uav_id), фиксированный порядок обновления M0 MUST 10 повторов → один sha256; добавление четвёртого борта не меняет траекторию первых трёх 70-plan/01, R-PS-28 принято; прогон однопоточный — параллелизм только по прогонам (BR-24)
SIM-MIS-20 События внутри шага упорядочены по (t_event, uav_id, seq) с интерполяцией внутри шага M0 MUST Порядок событий одинаков при перестановке бортов во входном файле §3.3 принято
SIM-MIS-21 Физика не обращается к системным часам и не зависит от частоты рендера M1 MUST Прогон с искусственным замедлением рендера вдвое даёт тот же sha256 журнала §3.1 принято
SIM-MIS-22 Журнал = манифест + поток событий + телеметрия; append-only M0 MUST Все три части читаются независимо; повторная запись существующего run_id отклоняется §4 принято; log_schema_version добавлен требованием SIM-FIN-11
SIM-MIS-23 Манифест содержит все хеши входа, seed, dt, версии образа и YAML парка, import_fixups[], assumptions_used[] M0 MUST По манифесту прогон воспроизводится на другой машине с тем же образом и даёт тот же sha256 SIM-GEO-17/18 принято
SIM-MIS-24 Поток событий покрывает закрытый словарь §4.3, каждое — с модельным временем и координатой M1 MUST Ни одно изменение режима, нарушение или срабатывание contingency не происходит без события РЭ-201, ТЗ принято
SIM-MIS-25 Телеметрия пишется с частотой 10 Гц (= шагу dt_s), набор полей по contracts/log_schema.json (31 поле в telemetry_record) M0 MUST 108 000 ± 20 записей на 180-минутный вылет 201; объём ≤ 65 МБ на вылет (экстраполяция 21,55 МБ на 11 полях → ~61 МБ на 31; JSONL); поля clearance_m, xtrack_error_m — NOT NULL начиная с M1 A-MIS-06, РЭ-201 переписано ревью D, 2026-09-16: бюджет пересчитан под 31 поле; 5 Гц/10 МБ сняты
SIM-MIS-26 Каждый кадр порождает паспорт: позиция, углы, наклонная дальность, фактический GSD, footprint, смаз M1 MUST photos_total факта сходится с числом паспортов; gsd_actual_cm считается по наклонной дальности РЭ-201, payloads принято
SIM-MIS-27 Keyframes каждые 60 с модельного времени M2 SHOULD Seek в произвольную точку журнала на 3 борт-часа ≤ 1 с A-MIS-07 понижено: нужен только учебному режиму и branch, оба M2
SIM-MIS-28 Имена метрик отчёта — из словаря 70-plan/01; кросс-сверка с валидатором — M1 M0 MUST M0: только идентификаторы из словаря, diff неизвестных имён пуст; M1 (SIM-BIZ-12): diff с валидатором пуст на s01–s10 70-plan/01 переписано ревью D, 2026-09-16: разделены локально проверяемая часть (M0) и кросс-сверка (M1)
SIM-MIS-29 Допуски дельт заданы явно и проверяются; превышение — флаг, а не молчание M1 MUST Для каждой метрики §5.2 колонка «в допуске / вне допуска»; пороги в конфигурации A-MIS-08, Q-17 принято
SIM-MIS-30 Дельта makespan раскладывается на компоненты (ветер, развороты, набор, оборот, contingency, прочее) M1 MUST Сумма компонент = полной дельте ± 1 с §5.4 принято как победившее (SIM-BIZ-06 переписан с «≤5 %»)
SIM-MIS-31 Фактические нарушения при валидном плане — в раздел «находки» с местом, временем и ссылкой на журнал M1 MUST На сценарии с перепадом ≥ 50 м отчёт показывает cfit_events > 0 при violations.altitude = 0 у валидатора §5.5, SIM-GEO-11 принято
SIM-MIS-32 Отчёт содержит 11 метрик, недоступных планировщику, с единицами M1 MUST Все 11 метрик присутствуют; для 801 energy_* = null, endurance_remaining_s заполнен fleet, Q-19 принято; добавлена reserve_reachable_frac (SIM-FIN-01)
SIM-MIS-33 Пакетный режим: N сценариев × M планов одной командой, без интерфейса, GPU и интернета M0 MUST docker compose up в изолированной сети проходит s01–s10 × 2 плана и выдаёт CSV/JSON ТЗ, SIM-GEO-16 принято; совместимость с кадрами обеспечена «сухим» режимом SIM-CAM-11/24
SIM-MIS-34 Единый бюджет производительности: 1 борт-час модельного времени ≤ 60 с реального на ядро, прогон однопоточный M1 MUST Замер на s04; из него выводится: 3-борт прогон ≥ 20× реального времени, 20 бортов × 3 ч ≤ 3600 с; батч s01–s10 ≤ 30 мин A-MIS-09 повышено до MUST и объявлено единственным числом — сняты три несовместимых бюджета (Б-2 ревью 1, Б-5 ревью 2)
SIM-MIS-35 Пакетный прогон возвращает код выхода ≠ 0 при появлении фактических нарушений, отсутствующих в плане M1 MUST Регрессионный прогон в CI падает на сценарии с намеренно заниженной высотой 70-plan/01 принято; warning CLEARANCE_MARGIN_BELOW_GEOREF код выхода не меняет (Б-3 ревью 2)
SIM-MIS-36 Интерактивный режим: отклик ≤ 200 мс, ≥ 30 FPS при 5 бортах, рендер не влияет на журнал M2 SHOULD Замер отклика и FPS; sha256 журнала совпадает с headless A-MIS-09, ТЗ понижено
SIM-MIS-37 Режим разбора записанного прогона без пересчёта физики M2 SHOULD Загрузка журнала без сценария и плана невозможна; перемотка не меняет ни одного числа §6.3 понижено до M2: режим разбора обслуживает экраны, отнесённые к M2; принято (нужен для демо и разбора находок)
SIM-MIS-38 Команды оператора записываются в журнал и interventions[]; повтор воспроизводится байт-в-байт M2 COULD Интерактивный сеанс → экспорт interventions[] → headless-повтор даёт тот же sha256 §7.1 понижено: учебный режим целиком M2; формат interventions[] во входном контракте сохранён
SIM-MIS-39 Команда доходит до борта только при наличии связи; отклонённая даёт событие с причиной M2 COULD При уходе за радиогоризонт команда return отклоняется command_rejected, борт уходит на автономный возврат РЭ-201, fleet понижено вместе с SIM-MIS-38
SIM-MIS-40 Сравнительный прогон двух планов: общие случайные числа, K = 20 парных сидов, вердикт по интервалу разностей M2 SHOULD При plan_A == plan_B вердикт «различие не подтверждено», попарные разности = 0 §8, A-MIS-10 понижено; явно записано: серию из 40 прогонов оркестрирует CLI, API отдаёт только GET /runs/compare (В-9 ревью 2)

7. SIM-PLT — платформа: API и НФТ (36)

Документ-источник: simulate/docs/60-platform/01-api-and-nfr.md

ID Требование (кратко) Ур. Приор. Критерий приёмки Источник Статус после ревью
SIM-PLT-01 Единственная публичная точка входа; воркеры наружу не публикуются M1 MUST В k3s-манифестах Ingress ссылается ровно на один Service A-01 принято
SIM-PLT-02 Ops-контракт /healthz, /readyz, /status, /metrics на каждом процессе M1 MUST Автопроверка обходит регистрации HTTP-маршрутов и падает при лишнем A-02 принято
SIM-PLT-03 POST /api/worlds асинхронно (202), время ingestion — по бюджету SIM-WORLD-35 M2 SHOULD Рабочие слои района ≤ 200 км² — ≤ 5 мин p95; полный мир с буфером — ≤ 15 мин §2.1 понижено до M2: в M1 мир собирается CLI, асинхронная ручка не нужна; переписано: собственного числа не задаёт, ссылается на владельца бюджета (П-1 ревью 1, В-1 ревью 2)
SIM-PLT-04 Манифест мира (world_manifest.json) содержит источник, релиз, дату выгрузки, bbox, CRS, вертикальный датум, sha256 каждого слоя M0 MUST Файл манифеста после сборки содержит все поля; HTTP GET /api/worlds/{id} — M1 (SIM-PLT-03) SIM-GEO-17 переписано ревью D, 2026-09-16
SIM-PLT-05 Мир иммутабелен после ready; изменение источника создаёт новый world_snapshot_id M2 SHOULD Повторный ingestion с другим содержимым не переиспользует id SIM-GEO-18 понижено до M2: иммутабельность мира обеспечивается хешем снапшота (SIM-WORLD-36)
SIM-PLT-06 POST /api/scenarios — синхронная валидация ≤ 2 с p95 M2 SHOULD Нагрузочный тест на типовом sc-* §2.1 понижено до M2: в M1 сценарий подаётся файлом
SIM-PLT-07 Сценарий иммутабелен после первого прогона M2 SHOULD Попытка изменить поля сценария с существующим run409 §3 понижено до M2: следствие SIM-PLT-05
SIM-PLT-08 POST /api/plans парсит и валидирует KML/GeoJSON против схемы и справочников; идемпотентен по content_hash M1 MUST Повторная загрузка того же файла возвращает тот же plan_id; несуществующий uav_id400 с указанием поля §2.1, A-09 принято
SIM-PLT-09 POST /api/runs — асинхронный запуск, 202 немедленно M1 MUST Ответ 202 без ожидания завершения физики §2.1, A-07 принято
SIM-PLT-10 GET /api/runs/{id} отдаёт статус, sim_time_s, progress_fraction ≤ 200 мс p95 M1 MUST Нагрузочный тест на 4 параллельных прогонах §2.1 принято
SIM-PLT-11 GET /api/runs/{id}/log постраничен с фильтром по типу, страница ≤ 1000 записей ≤ 1 с p95 M2 SHOULD Нагрузочный тест на прогоне с максимальным журналом §2.1 понижено до M2: постраничный журнал нужен UI-экранам M2
SIM-PLT-12 GET /api/runs/{id}/frames отдаёт метаданные для 100 % кадров независимо от политики хранения растров M1 MUST На прогоне с прореженными изображениями число элементов списка равно числу отснятых кадров по плану §5.2, U-11 принято — краеугольный камень «сухого» режима
SIM-PLT-13 Контракт кадра включает поля §4.1 SIM-CAM целиком M1 MUST Схема ответа проходит валидацию против перечня полей SIM-CAM §4.1 принято
SIM-PLT-14 GET /api/runs/compare возвращает comparable: false с перечнем расходящихся полей паспорта M2 SHOULD Сравнение прогонов на разных world_snapshot_id даёт comparable: false и не публикует таблицу дельт как достоверную §6, U-02 понижено до M2: операция сравнения прогонов обслуживает экран M2
SIM-PLT-15 Поток живой телеметрии — SSE, тики ≥ 10 Гц модельного времени M2 SHOULD Замер интервалов между событиями потока §2.2, ДОПУЩЕНИЕ понижено: для демо достаточно воспроизведения журнала (SIM-UX-33, MUST); поток отдаёт тот же 10-герцевый журнал (П-8 снято)
SIM-PLT-16 Задержка «сгенерировано → отрисовано» ≤ 150 мс p95 в тайлнете M2 COULD sim_telemetry_stream_lag_seconds p95 на нагрузочном тесте с указанием числа клиентов и длительности замера §2.2 понижено; доспецифицировано условие замера (ревью 1 §4)
SIM-PLT-17 Headless-режим не открывает телеметрийный канал и не требует сети M0 MUST docker compose up без интернета проходит регрессию полностью §2.2, U-04 принято
SIM-PLT-18 Физика считается исключительно на сервере; клиент не производит вычислений динамики M1 MUST В коде фронтенда нет модуля интегрирования уравнений движения/энергобаланса — статическая проверка §4.3 принято
SIM-PLT-19 Headless-движок и движок под GUI — один исполняемый артефакт M1 MUST CLI-прогон и GUI-прогон с одинаковым паспортом дают побитово одинаковые метрики §4.3 принято
SIM-PLT-20 Движок поддерживает до 20 бортов в одном прогоне M1 MUST Прогон sc-* с 20 бортами завершается без деградации точности интегрирования §5.1 принято
SIM-PLT-21 Владелец бюджета скорости: 1 борт-час модельного времени ≤ 60 с на ядро; прогон однопоточный M1 MUST sim_run_speedup_ratio ≥ 20 на эталонном 3-бортовом прогоне; ≥ 3 на 20-бортовом; батч s01–s10 ≤ 30 мин §5.1 переписано: «≥20× на ядро» переформулировано как производная от борт-часа; сняты три несовместимых бюджета
SIM-PLT-22 ≥ 4 параллельных прогона на узле; ночная регрессия 100 сценариев ≤ 8 ч M2 SHOULD Регрессионный прогон 100 сценариев укладывается в 8 ч §5.1, U-04 понижено: ресурсы n2 неизвестны числом (Q-PLT-05, R-05)
SIM-PLT-23 Политика хранения: растры только для GUI/демо, потолок ≤ 5000 кадров/прогон с равномерным прореживанием; headless — только метаданные M1 MUST На прогоне с > 153 000 расчётных кадров занятое место не превышает потолка; на headless-прогоне файлов изображений на диске нет §5.2 переписано: пересчитано по единому справочнику размеров (RX1RM2 ≈ 20 МБ → 5000 кадров ≈ 100 ГБ, не 20 ГБ) — П-4/В-2
SIM-PLT-24 Падение воркера не теряет журнал/телеметрию/кадры до момента t; прогон помечается failed с sim_time_at_failure M2 SHOULD Принудительное убийство воркера — после рестарта артефакты до t читаются §5.4 понижено до M2: устойчивость воркера значима для ночного батча (M2)
SIM-PLT-25 Checkpoint/resume не реализуется; ограничение зафиксировано явно M2 COULD Пункт присутствует в перечне известных ограничений §5.4 принято; согласовано с branch SIM-MIS (оба M2) — С-7 ревью 2
SIM-PLT-26 Паспорт прогона обязателен и неполон быть не может M0 MUST Любой completed-прогон без одного из 7 полей паспорта не проходит проверку целостности при записи §6 переписано ревью D, 2026-09-16: согласовано с PLT-28
SIM-PLT-27 uav_model_version — хеш fleet.yaml/payloads.yaml; правка файлов меняет хеш M0 MUST Правка любого поля fleet.yaml меняет вычисляемый uav_model_version §6 принято
SIM-PLT-28 engine_version — 8-символьный git sha сборки; в Docker — тег образа; в CLI — sim_version из пакета + тот же sha M1 MUST engine_version не пуст; для CLI-прогона без контейнера значение = {sim_version}+{git_sha8} правило CLAUDE.md переписано ревью D, 2026-09-16: CLI больше не неопределён
SIM-PLT-29 В Prometheus публикуются 9 метрик §7.1 M2 SHOULD curl .../metrics содержит все имена с первого релиза §7.1 понижено до M2: правило инфраструктуры, не продуктовое требование; понижено до SHOULD как правило инфраструктуры, не продуктовое требование
SIM-PLT-30 Дашборды «Симулятор — обзор» и «Симулятор — телеметрия» + алерты заведены вместе с сервисом M2 SHOULD Дашборды видны в Grafana, алерты активны в Prometheus docs/05-monitoring.md понижено до M2: правило инфраструктуры, не продуктовое требование
SIM-PLT-31 Логи структурированы, каждая строка несёт x-request-id/run_id M2 SHOULD grep run_id восстанавливает хронологию одного прогона A-05 понижено до M2: правило инфраструктуры, не продуктовое требование
SIM-PLT-32 Сервис публикуется только в tailnet с тем же whitelist Ingress, что у geoscan.ff M1 MUST Ingress-манифест содержит идентичную аннотацию whitelist docs/01-infra.md принято
SIM-PLT-33 Доступ к API по единому сервисному ключу из creds-store M1 MUST Запрос без валидного ключа → 401; ключ в project/geoscan, не в коде §8, A-04 принято; отсутствие квот признано ограничением (Д-12)
SIM-PLT-34 При source: customer_survey исходящих сетевых вызовов не происходит M2 SHOULD Сетевой трейс ingestion не содержит исходящих соединений, кроме записи в хранилище §8 понижено до M2: значимо только при импорте топосъёмки заказчика
SIM-PLT-35 Кадры, журналы, планы, манифесты не выдаются за пределы tailnet M2 SHOULD В коде нет маршрута с публичным доступом к артефактам прогона §8 понижено до M2: обеспечивается whitelist Ingress (SIM-PLT-32)
SIM-PLT-36 Все секреты — только в creds-store M1 MUST grep по репозиторию не находит значений ключей/токенов правило CLAUDE.md принято

8. SIM-UX — интерфейс оператора (34)

Документ-источник: simulate/docs/70-ux/01-frontend-3d-requirements.md

ID Требование (кратко) Ур. Приор. Критерий приёмки Источник Статус после ревью
SIM-UX-01 Интерфейс не пересчитывает клиренс/CFIT/деконфликтацию/энергобаланс/покрытие; числа приходят из headless-журнала M1 MUST grep по фронтенду на V_g, GSD и прочие формулы даёт 0 совпадений вне тестовых фикстур 04-frontend-3d.md, метод проекта принято
SIM-UX-02 3D-движок инкапсулирован за императивной «ручкой»; UI не обращается к внутренним объектам сцены M1 MUST Модуль рендера экспортирует один фабричный вызов с фиксированным набором методов code-in0game принято
SIM-UX-03 Клиент-плеер воспроизводит позиции из telemetry.jsonl M1 MUST На каждой записи 10 Гц расхождение позиции плеера и журнала ≤ 0,1 м (ENU); live-SSE не требуется log_schema.json, SIM-UAV-04 переписано ревью D, 2026-09-16: снято сравнение headless/live
SIM-UX-04 Экран «Подготовка мира» блокирует переход, пока манифест не прошёл проверку M2 SHOULD При отсутствующем vertical_datum кнопка «Далее» неактивна, виден код VDATUM_MISMATCH SIM-GEO-08 понижено: экран подготовки мира — M2, в M1 мир собирается CLI
SIM-UX-05 Редактор сценария показывает высотный слой NFZ и не даёт сохранить зону без него M2 SHOULD Форма зоны требует оба поля; пустой altitude_max_m — ошибка валидации схема сценария понижено вместе с SIM-WORLD-27
SIM-UX-06 Предупреждение, если курс взлёта/захода не согласован с направлением ветра M2 SHOULD При ветре с севера и курсе взлёта на север — баннер «запуск против ветра нарушен» РЭ-201, D-8 понижено
SIM-UX-07 Экран загрузки плана отклоняет файл без фрейма высот с явным кодом M2 SHOULD Загрузка KML без altitudeMode показывает ALT_FRAME_MISSING, план не принимается SIM-GEO-09 понижено до M2: в M1 план валидируется CLI (SIM-MIS-03); экран загрузки — M2; переписано: код унифицирован (был ALTITUDE_FRAME_MISSING) — П-6
SIM-UX-08 Экран прогона объединяет 3D, 2D-карту, телеметрию и таймлайн без переключения вкладок M1 MUST Все четыре элемента видны одновременно на ≥ 1366×768 без прокрутки ТЗ п. 4, 04-frontend-3d.md принято
SIM-UX-09 Ровно четыре вида камеры, переключение без перезагрузки сцены M1 MUST Переключение ≤ 1 с и не сбрасывает состояние воспроизведения §2.1 принято
SIM-UX-10 Вид «из камеры борта» строит FOV из расчётных параметров нагрузки M1 MUST Для Pollux диагональный FOV 43,0° ± 0,5°, горизонтальный 34,5° SIM-CAM-02 переписано: критерий был неверен — 43° это диагональ, не горизонталь (С-1 ревью 2)
SIM-UX-11 Для 801 выбор канала (EO широкий/узкий, тепловизор) M2 COULD Переключатель виден только для geoscan_801 payloads понижено вместе с SIM-CAM-16/21
SIM-UX-12 Таймлайн показывает маркеры всех событий журнала и позволяет перейти кликом M1 MUST Клик по маркеру перематывает модельное время на t события ± 1 шаг Δt §2.2 принято
SIM-UX-13 Множители 1×/5×/10×/30× и пауза; покадровый шаг равен шагу интегрирования M1 MUST При 30× секунда модельного времени проходит за ≤ 34 мс; покадровая перемотка сдвигает время ровно на 0,1 с (журнал 10 Гц) 04-frontend-3d.md, SIM-UAV-03 переписано: стало выполнимо после перевода журнала на 10 Гц (В-4 ревью 2)
SIM-UX-14 Панель телеметрии использует те же имена полей, что contracts/log_schema.json M1 MUST UI читает battery_voltage_v, endurance_remaining_s, energy_remaining_wh, energy_remaining_frac — без параллельного словаря log_schema.json, SIM-MIS-28 переписано ревью D, 2026-09-16: один словарь с журналом
SIM-UX-15 Halo борта и баннер события появляются не позже следующего отрендеренного кадра M1 MUST Задержка между временем события в журнале и первым кадром с halo ≤ 1 кадр рендера §2.5 принято; невыполнимая оговорка «юзабилити-тест с реальными операторами» удалена (ревью 1 §4)
SIM-UX-16 Код причины показывается дословно кириллицей, как в РЭ-201 M1 MUST Баннер и панель показывают ровно строки таблицы §7 20-fleet/01 глоссарий проекта принято
SIM-UX-17 Плановая и фактическая трассы — две визуально различимые линии одного цвета M1 MUST Для одного борта всегда ровно 2 линии: сплошная (план) и пунктирная (факт) §3 принято
SIM-UX-18 Вертикальное преувеличение рельефа настраивается и отображается числом M2 SHOULD При изменении слайдера подпись меняется синхронно; дефолт 1.5× §3, A-UX-05 понижено до M2: визуальная настройка, на числа не влияет
SIM-UX-19 Зоны рисуются как экструдированные тела от altitude_min_m до altitude_max_m M1 MUST Борт выше потолка зоны визуально проходит над её телом §3 принято
SIM-UX-20 Полоса захвата драпируется по рельефу M1 MUST На полигоне с перепадом 50 м полоса повторяет профиль рельефа §3, SIM-CAM-09 принято
SIM-UX-21 Вектор ветра — в направлении «откуда дует» M1 MUST При wind_direction_deg = 0 вектор указывает остриём на юг схема сценария принято
SIM-UX-22 Зона связи отображается по фактической LOS-видимости из журнала; круг радиуса radio_range_km — только справочный максимум с подписью M1 MUST На сценарии W-21 (гряда 80 м) граница зоны связи проходит на 12 км, а не на 40 км; для 801 подпись явно отличает «видеоканал 10 км» от канала управления §3, R5, SIM-ENV-23 переписано: снят блокер Б-4 ревью 2 (UI показывал «связь есть» ровно во флагманском сценарии её потери)
SIM-UX-23 Пирамида FOV камеры строится геометрически и обрезается пересечением с рельефом M2 SHOULD Для 201 в надире на плоском участке пирамида совпадает с footprint ± 5 % §3, SIM-CAM-02/04 понижено
SIM-UX-24 30 FPS при 20 бортах M2 COULD Вне объёма M1 — см. §11 свода; при замере: синтетическая сцена 25 км², эталон — CPU i7-12700, встроенная графика §4, A-UX-02/04 переписано ревью D, 2026-09-16: не MUST; не входит в % готовности M1
SIM-UX-25 Свыше порога площади terrain переходит на потайловый LOD-стриминг M2 SHOULD Сценарий 200 км² не выгружает DEM целиком — подтверждается Range-запросами к PMTiles §4, 10-world/01 понижено
SIM-UX-26 Деградация идёт в фиксированном порядке и не искажает телеметрию/позицию/контингенси-индикацию M2 SHOULD При искусственном ограничении GPU порядок отключения соответствует списку §4 §4 понижено
SIM-UX-27 Переключение вида камеры и переход между экранами ≤ 1 с M2 SHOULD Замер от клика до завершения анимации ≤ 1000 мс в 95 % случаев §4 понижено
SIM-UX-28 Загрузка сценария (мир + план + телеметрия) ≤ 5 с для 25 км² / 20 бортов M2 SHOULD Замер от клика «Открыть сценарий» до готовности ≤ 5000 мс §4, A-UX-03 понижено
SIM-UX-29 Весь интерфейс работает без внешней сети: тайлы, шрифты, glTF-модели раздаются из состава стенда M1 MUST При отключённом внешнем доступе экран прогона загружается без ошибок на внешние домены SIM-GEO-16, SIM-CAM-11 принято
SIM-UX-30 При разрыве соединения — явный индикатор «нет соединения», не молчаливая заморозка сцены M2 SHOULD При обрыве дольше 2 с индикатор появляется; после восстановления воспроизведение продолжается без скачка позиции §5 понижено вместе с SSE (M2)
SIM-UX-31 Экран сравнения прогонов показывает 5 метрик рядом с явным знаком дельты M2 SHOULD Дельта каждой метрики со знаком и единицей измерения §1 понижено: Q-UX-05 не отвечен — обязательность для защиты не подтверждена
SIM-UX-32 Экран покрытия показывает карту фактического GSD с долей площади вне ±10 % M1 MUST Для сценария с перепадом доля отображается числом, отличным от 0 SIM-CAM-30 принято — главный продуктовый артефакт U-11
SIM-UX-33 Клиент загружает журнал, посчитанный отдельным headless-прогоном, и воспроизводит его M1 MUST Файл журнала CLI-прогона открывается через экран разбора без модификации формата §0, метод проекта принято — заменяет SSE в демо
SIM-UX-34 Терминология интерфейса — русская отраслевая из глоссария; идентификаторы данных латиницей M1 MUST Тексты кнопок, подписей и баннеров проходят проверку по списку терминов глоссария глоссарий проекта принято

9. SIM-BIZ — продуктовые требования (34)

Документ-источник: simulate/docs/00-brief/02-vision-and-business.md

ID Требование (кратко) Ур. Приор. Критерий приёмки Источник Статус после ревью
SIM-BIZ-01 Приём выхода планировщика без ручной правки: наша схема, KML, GeoJSON M1 MUST Три формата одного плана дают fact_report с расхождением метрик ≤ 0,1 %; KML с clampToGroundALT_FRAME_MISSING 40-formats/01/03, ТЗ принято; приём сценария без фрейма зон обеспечен SIM-WORLD-18
SIM-BIZ-02 Headless-режим: полный прогон одной командой, без GUI и без сети M0 MUST sim run fixtures/plans/s01.json --seed N на машине с отключённой сетью; сетевых обращений 0; sim batch --scenarios sc/ — M1 после появления каталога fixtures/scenarios/sc/ метод проекта, SIM-GEO-16 переписано ревью D, 2026-09-16: критерий не ссылается на несуществующий sc/ на M0
SIM-BIZ-03 Детерминизм по тройке (world_snapshot_id, plan, seed) M0 MUST Два прогона дают бит-в-бит идентичный отчёт; изменение любого элемента тройки отражается в run_manifest метод проекта, R-PS-28 принято
SIM-BIZ-04 Каждая выходная величина несёт value, unit, fidelity_class, depends_on, validation_level M1 MUST Схема выхода отвергает величину без любого из пяти полей; доля величин без fidelity_class = 0 % §6.2 переписано: добавлен признак полноты слоя для величин, зависящих от слоя данных (SIM-FIN-17)
SIM-BIZ-05 Пакет validator/ не импортирует engine/, mission/, uav/, camera/, env/ M0 MUST CI-проверка AST-графа: 0 рёбер из geoscan_sim.validator в перечисленные пакеты; отдельно: 0 рёбер симулятора в coverage/, routing/ планировщика (если появятся) 70-plan/01 переписано ревью D, 2026-09-16: реальный канал заражения — валидатор→движок
SIM-BIZ-06 Отчёт «план vs факт» с разложением дельты по вкладам M1 MUST Сумма вкладов равна полной дельте ± 1 с; каждая дельта makespan > 10 % имеет разложение §6.1, U-02 переписано: допуск «≤5 %» заменён на «±1 с» по SIM-MIS-30 (П-3 ревью 1; на makespan 5280 с расхождение было 260×)
SIM-BIZ-07 Батч-производительность: 100 сценариев sc-* за ночной прогон ≤ 8 ч M2 SHOULD 100 сценариев ≤ 8 ч (≤ 288 с/сценарий), медиана ≤ 60 с §6.1, A-BIZ-04 понижено: в M1 батч — s01–s10 за ≤ 30 мин; ночное окно 8 ч — организационное допущение
SIM-BIZ-08 Сборка мира: время первичное и из кеша M2 SHOULD По бюджету SIM-WORLD-35; рост времени от площади проверяется на точках 1/22/50/100/200 км², t(S)/S не растёт более чем на 20 % между соседними §6.1, A-BIZ-05 понижено до M2: бюджет сборки мира принадлежит SIM-WORLD-35; переписано: собственного числа не задаёт; «не хуже линейного» доспецифицировано (ревью 1 §4)
SIM-BIZ-09 Стенд поднимается docker compose up без интернета и без ключей тайл-сервисов M0 MUST На изолированной машине фронт открывается, рельеф отображается, прогон проходит SIM-GEO-16 принято
SIM-BIZ-10 Аналитические тождества V1 (атомарные V1-01…V1-09) M0 MUST Каждое тождество — отдельная строка sim validate: ветровой треугольник ≤0,5 %; GSD ≤0,1 %; геодезическая/ENU площадь ≤0,1 %; round-trip ENU/WGS84 ≤0,01 м; остальные — см. §6.2 BRD §6.2, payloads переписано ревью D, 2026-09-16: 9 атомарных ID V1-01…V1-09; UTM снят; один допуск round-trip 0,01 м
SIM-BIZ-11 Инварианты V2 (атомарные V2-01…V2-06) M0 MUST V2-01 детерминизм бит-в-бит; V2-02 дрейф ≤1 м/100 кругов; V2-03 энергобаланс: Σ(P·Δt) по фазам vs ΔE ≤0,1 % (ветер и состав фаз явно); V2-04 V_g>0; V2-05 T>L/V_g строго; V2-06 dt→dt/2, makespan ≤0,5 % (без требования «независимости от UTM») §6.2/V2 переписано ревью D, 2026-09-16: 6 атомарных ID; состав баланса определён
SIM-BIZ-12 Независимая сверка V3 с валидатором планировщика M1 MUST Длина маршрута расходится ≤ 1 %; множество нарушений симулятора ⊇ множества валидатора на s01–s10 §6.2/V3 принято; область применимости V3 ограничена геометрией (§7.2 свода)
SIM-BIZ-13 Трассировка «пункт первоисточника → тест» M1 MUST Таблица §6.2/V4 реализована на 100 %; каждый тест ссылается на пункт РЭ/спецлиста РЭ-201, спецлисты принято
SIM-BIZ-14 Негативный контроль: мутационное тестирование планов M1 MUST Все 12 мутантов стартового набора детектируются; ложных срабатываний на эталонном корректном плане — 0. Порог ≥ 95 % применяется при наборе ≥ 20 мутантов §6.2/V5 переписано: снята псевдо-статистика «≥95 % из ≥12» (Д-3 ревью 1, С-5 ревью 2)
SIM-BIZ-15 Отчёт чувствительности к допущениям (±20 %) M2 SHOULD Для каждого A-xx измерен отклик метрик; метрика с откликом > 10 % на assumed-допущение помечается недостоверной §6.2, ТЗ п. 5 понижено
SIM-BIZ-16 Модель потери связи: радиовидимость по рельефу и поведение по логике РЭ M1 MUST Участки вне связи отмечены; по таймеру запускается возврат на точку старта на текущей высоте; отчёт содержит остаток задания и энергии РЭ-201, U-06 принято
SIM-BIZ-17 Модель отказа борта в момент t по кодам РЭ M2 SHOULD АВАРИЯ и ОШИБКА КОМПАСА → посадка; ОШИБКА КРЛ → полёт продолжается; НАРУШЕНИЕ ЗОНЫ → камера off + посадка; отчёт даёт недоснятую площадь в км² и сдвиг makespan РЭ-201, s10 понижено до M2: полная модель отказов по кодам РЭ — M2 (SIM-ENV-28)
SIM-BIZ-18 Покрытие считается по кадрам, а не по полосам M1 MUST Футпринт каждого кадра строится по payloads.yaml с учётом крена и сноса; coverage_delta к полосному покрытию выводится всегда P-01, U-11 принято
SIM-BIZ-19 Клиренс над рельефом и препятствиями с дискретизацией ≤ 10 м M1 MUST «< 100 м AGL» для 201 → violation с координатой; «ниже точки старта» → violation; профиль клиренса по всему маршруту РЭ-201, SIM-GEO-11/23 принято; правило узкого запаса — SIM-WORLD-06
SIM-BIZ-20 Катапультный старт: курс строго против ветра, сектор ±30°, объекты ≤ 0,1·L M1 MUST Старт по ветру — NO-GO; объект выше 0,1·L в секторе — NO-GO с координатой; допустимый диапазон курсов выводится РЭ-201, D-8 принято; форма вердикта — трёхзначная (SIM-FIN-16)
SIM-BIZ-21 Парашютная посадка: снижение с 70 м, эллипс сноса, проверка пересечений M2 SHOULD Эллипс строится и пересекается с NFZ, дорогами, водой, застройкой; коэффициент сноса — fidelity_class: assumed РЭ-201, A-09 понижено до M2: коэффициента сноса нет ни в одном источнике
SIM-BIZ-22 Учёт оборота на площадке по фактическим ТТХ АКБ M2 SHOULD Для Gemini интервал между вылетами ≥ 105 мин при заряде и ≥ времени снятия/установки АКБ и предстартовой при смене; при T < 0 °C заряд невозможен fleet, D-7/D-10 понижено; формулировка «≥ 0 при смене АКБ» исправлена (М-5 ревью 2); базовая очередь покрыта SIM-UAV-20 (M1)
SIM-BIZ-23 Сравнение двух планов бок о бок на одном мире и seed M1 MUST Оба критерия ТЗ прогоняются одной командой; выход — одна таблица с дельтами ТЗ, U-02 принято; статистика по 20 сидам — M2 (SIM-MIS-40)
SIM-BIZ-24 Учебный режим: редактируемые параметры мастера предстартовой подготовки 201 M2 COULD Доступны 4 параметра с валидацией диапазонов; значение вне диапазона отвергается РЭ-201, U-03 понижено: роль не существует (Q-BIZ-06), противоречие с РЭ признано (A-BIZ-09); валидация диапазонов сохранена в SIM-ENV-31 (M1)
SIM-BIZ-25 Демо-режим: воспроизводимый 5-минутный пролёт в реальных географических координатах M1 MUST Журнал и числа — бит-в-бит; картинка — «визуально та же» (позиции бортов ≤ 0,1 м по SIM-UX-03); числа на экране совпадают с fact_report в сравнимых колонках; работает без сети критерий жюри, U-05 переписано: «идентичная картинка» невыполнима — SIM-CAM-32 снимает кросс-GPU бит-идентичность растра (ревью 1 §4); «до последнего знака» ограничено сравнимыми колонками (М-7 ревью 2)
SIM-BIZ-26 ТТХ только из fleet.yaml/payloads.yaml, ничего не хардкодится M0 MUST CI-проверка: 0 числовых литералов ТТХ в коде; подмена значения в YAML меняет результат правило проекта принято
SIM-BIZ-27 Симулятор не считает метрики качества плана — только факт и дельту M0 MUST Метрики валидатора присутствуют исключительно в колонках plan / fact / delta; собственной оценки плана симулятор не публикует 70-plan/01, §4 переписано: снято противоречие с SIM-MIS-28 (требовал те же имена метрик) — П-4 ревью 1
SIM-BIZ-28 Симулятор не управляет реальными бортами и не подключается к НСУ M0 MUST В коде и конфигурации нет интерфейсов к железу и MAVLink-выхода в реальный канал; документировано в ограничениях §4, безопасность полётов принято
SIM-BIZ-29 Класс модели объявлен явно: кинематика + энергия по средней мощности M1 MUST В README и в отчёте есть раздел «класс модели и её границы» с перечнем неучтённых эффектов §4 принято; раздел — §11 свода
SIM-BIZ-30 Три борта парка со своими ТТХ и совместимостью нагрузок M1 MUST ИК на не-801 → нарушение совместимости; LiDAR/геофизика → явная ошибка «нагрузки нет ни у одного борта»; мультиспектр только на 201 и Gemini fleet, payloads принято
SIM-BIZ-31 Метео-события как пороги допуска и деградация ТТХ M2 SHOULD Ветер 201 ≤ 12 м/с и 801/Gemini ≤ 10 м/с — жёсткие; при T < 0 °C применяется дерейтинг по единой кривой; прочие пороги assumed РЭ-201, A-BIZ-03 понижено (ветер и температура остаются MUST через SIM-ENV-10/15)
SIM-BIZ-32 run_manifest на каждый прогон: sha256 входов, world_snapshot_id, seed, версии источников M0 MUST По манифесту прогон воспроизводится на другой машине бит-в-бит SIM-GEO-17/18 принято
SIM-BIZ-33 «Перечень известных ограничений» генерируется из данных, а не пишется руками M2 SHOULD Раздел собирается автоматически из всех величин fidelity_class: assumed и отчёта чувствительности; ручных строк 0 ТЗ п. 5, U-12 понижено: в M1 перечень составлен вручную (§11 свода) — автогенерация требует отчёта чувствительности SIM-BIZ-15 (M2)
SIM-BIZ-34 Калибровка по реальной телеметрии, если заказчик её передаст вне вех COULD При наличии лога: ошибка по времени вылета ≤ 5 %, по длине трека ≤ 2 %; уровень поднимается до V6 §6.2/V6, Q-BIZ-02 переписано ревью D, 2026-09-16: условное; в проценты готовности не входит

10. SIM-FIN — требования, заведённые сводом (20)

Закрывают дыры, найденные ревью 3 (разделы 0 и 2) и блокеры Б-3 ревью 1 / Б-1 ревью 2. Источник — этот свод.

ID Требование (кратко) Ур. Приор. Критерий приёмки Источник Статус
SIM-FIN-01 Достижимость резервной площадки из каждой точки маршрута как метрика прогона M1 MUST Отчёт содержит reserve_reachable_frac — долю модельного времени вылета, из которой достижима хотя бы одна площадка landing_sites.reserve по остатку энергии с резервом 20 %; точки с false перечислены с координатой и временем ТЗ («резервные площадки посадки»), Q-11 новое: требование ТЗ было потеряно — ни один SIM-* ID его не подхватывал (ревью 3 §0)
SIM-FIN-02 Проверка пригодности резервных площадок наравне со стартовыми M1 MUST SIM-WORLD-32 применяется к каждой landing_sites[].reserve: покров под точкой посадки и под эллипсом сноса, уклон, отсутствие дорог/ЛЭП/воды; непригодная резервная площадка даёт warning RESERVE_SITE_UNSUITABLE РЭ-201, SIM-WORLD-32 новое (ревью 3 §0)
SIM-FIN-03 Инструкция по запуску как сдаваемый артефакт M1 MUST README с командами docker compose up и sim batch; проверен на чистой машине без сети; воспроизводит демо-прогон с нуля за ≤ 15 мин ТЗ п. 5 новое (Д-05 ревью 3)
SIM-FIN-04 Руководство пользователя (оператора) как сдаваемый артефакт M1 MUST Справка по 7 экранам SIM-UX: что делает экран, какие решения принимает оператор, как читается каждый визуальный элемент из таблицы §3 70-ux/01 ТЗ п. 5 новое (Д-05 ревью 3)
SIM-FIN-05 Описание API как сдаваемый артефакт M1 MUST OpenAPI-спецификация всех 8 операций SIM-PLT §2.1 + описание SSE-канала; генерируется из кода, не пишется руками; расхождение схемы и реализации падает в CI ТЗ п. 5, SIM-PLT §2 новое (Д-05 ревью 3)
SIM-FIN-06 Демонстрация на защите (FIN-06.1 полигон · FIN-06.2 сценарий 5 мин · FIN-06.3 прекомпьют/видео) M1 MUST 06.1 полигон по чеклисту SIM-WORLD-28/MIS-31/W-21 (блокируется FIN-07); 06.2 сценарий 300 ± 5 с; 06.3 журналы в fixtures/demo/ + фолбэк-видео ≤ 200 МБ Д-03, критерий жюри переписано ревью D, 2026-09-16: три атомарных критерия в одном ID
SIM-FIN-07 Локальное зеркало геоданных и погоды с проверенной доступностью источников M0 MUST Для каждого источника (GLO-30, GLO-90, WorldCover, ETH canopy, OSM-экстракт, ERA5/Open-Meteo) зафиксирован результат проверки доступа из рабочего контура; зеркало демо-района выгружено, объём и sha256 записаны; сборка мира из зеркала при отключённом DNS проходит SIM-GEO-24, Д-04/R-03 ревью 3 новое; исполняется шагом 0 плана
SIM-FIN-08 Заморозка контракта с планировщиком и планы-фикстуры M0 MUST schema_version: 1 зафиксирован двусторонним соглашением; в репозитории симулятора лежат рукописные планы-фикстуры для s01, s04, s07, проходящие импорт без import_fixups[]; они же — негативные и позитивные тесты импорта Д-06/R-02 ревью 3 новое
SIM-FIN-09 Единый реестр кодов ошибок и событий M0 MUST Один машиночитаемый файл: код, класс (fatal/repairable/warning/violation), домен, текст, ссылка на источник; grep по коду не находит строковых литералов кодов вне реестра; дубликатов по смыслу нет (проверка: ALT_FRAME_MISSING — единственный код фрейма высот) Д-02/П-6 ревью 3 новое
SIM-FIN-10 Сквозной реестр допущений M0 MUST Один файл сводит четыре независимые нумерации (A-01…A-18, A-MIS-01…13, ДОП-W-01…15, ДОП-ENV-01…23) в сквозные ID с сохранением исходных как алиасов; каждая запись несёт value, unit, rationale, question_id, affects[]; assumptions_used[] прогона ссылается на сквозные ID Д-02 ревью 3, SIM-UAV-06 новое
SIM-FIN-11 Версионирование, совместимость и retention журнала прогона M1 MUST Манифест журнала содержит log_schema_version; вьюер читает журналы с той же мажорной версией («минорные читаются вперёд»); в CI есть смоук «открыть журнал 7-дневной давности»; retention — последние 30 прогонов батча и 10 демо-прогонов Д-08 ревью 3 новое
SIM-FIN-12 Генератор синтетических тестовых миров M1 MUST Детерминированный генератор строит фикстуры: плоскость, гауссов хребет 300 м (W-04), гряда 80 м (W-21), цилиндр-вышка 120 м (SIM-UAV-11), NFZ со срезаемым углом (SIM-WORLD-21); каждая фикстура весит < 5 МБ и воспроизводится по seed Д-11 ревью 3 новое: иначе приёмочные тесты повиснут на поиске реального района с нужным рельефом
SIM-FIN-13 Лимиты и защита разбора входных файлов M1 MUST Растр ≤ 4 ГБ, вектор ≤ 200 МБ, время импорта ≤ 15 мин, память ≤ 4 ГБ; внешние сущности XML отключены; KMZ с коэффициентом распаковки > 100 отклоняется ARCHIVE_RATIO_EXCEEDED; превышение любого лимита — явная ошибка, не зависание Д-09 ревью 3 новое
SIM-FIN-14 Бортовая логика failsafe 801 и Gemini объявлена явной таблицей допущений M1 MUST Таблица «событие → реакция» для multirotor: потеря связи, низкий заряд, нарушение зоны, отказ двигателя, температура; каждая строка несёт пометку ДОПУЩЕНИЕ и ссылку на Q-NEW-02; ни одна реакция мультиротора не подаётся как документированная Д-10 ревью 3 новое: вся модель деградаций была экстраполяцией РЭ-201 без пометки
SIM-FIN-15 Решение о рантайме движка принимается до написания движка M0 MUST Документ с выбором языка/рантайма, хранилища и CPU-растеризатора; критерий выбора — управляемая FP-семантика (запрет -ffast-math, контроль FMA, фиксированный порядок редукций) и возможность прогнать тест детерминизма первым; альтернативы и причина отказа зафиксированы Д-07 ревью 3, R-07 новое
SIM-FIN-16 Трёхзначный вердикт приёмки плана вместо бинарного GO/NO-GO M1 MUST Вердикт ∈ {NO-GO, UNRESOLVED, NO-FINDINGS}: NO-GO — нарушение на величине measured/derived с validation_level ≥ V3; UNRESOLVED — проверка упирается в assumed или в слой неизвестной полноты, с перечнем причин; NO-FINDINGS — формулировка «нарушений не найдено на данных полноты X %». Строка «GO» в выходе отсутствует Б-3 ревью 1 новое
SIM-FIN-17 Признак полноты слоя данных на выходных величинах M1 MUST Величина, зависящая от слоя препятствий, несёт layer_completeness — долю объектов слоя с известной (не assumed) высотой и дату экстракта OSM; вердикт SIM-FIN-16 обязан называть это число Д-2 ревью 1 новое: fidelity_class описывает происхождение числа, но не полноту слоя
SIM-FIN-18 Сверка рельефа с независимым набором как суррогат эталона M2 SHOULD На демо-полигоне GLO-30 сверяется с ArcticDEM 10 м и/или ALOS AW3D30; публикуются медиана и p95 расхождения по высоте; при медиане ≤ 4 м величины клиренса поднимаются до validation_level: V3 Д-13 ревью 3, QW-02 понижено до M2: требует выгрузки второго набора ЦМР на демо-полигон; новое
SIM-FIN-19 Приоритет интерактивных прогонов над пакетными M2 SHOULD Либо число: интерактивный старт ≤ 30 с при занятой очереди батча; либо явная запись в §11 «квот нет» Д-12 ревью 3 переписано ревью D, 2026-09-16: критерий без числа снят
SIM-FIN-20 LiDAR, геофизика и terrain-following объявлены вне объёма с причиной M1 MUST В перечне известных ограничений есть строки: носителя LiDAR и геофизики нет ни у одного борта ТЗ (payloads.yaml, раздел gaps); режим полёта с постоянным AGL и огибанием рельефа не реализован; попытка задать такой тип съёмки даёт явную ошибку, а не молчаливый план ТЗ (типы съёмки), Q-NEW-04 новое; принято вопреки замечанию: COULD-ветка «виртуальный сенсор» не реализуется — она порождает числа, которые нечем проверить

Приложение А. INH-01…20 — наследуемые ограничения планировщика

Источник: simulate/docs/00-brief/01-context-digest.md §1. Это рамка, а не собственные требования симулятора: каждое реализовано одним или несколькими SIM-* ID.

ID Ограничение Где реализовано Статус
INH-01 Приём полётных заданий в KML и GeoJSON SIM-BIZ-01, SIM-MIS-02 действует
INH-02 WGS84 [lon, lat, alt]; геометрия в метрической проекции SIM-WORLD-02/04 уточнено: рабочая СК — ENU через ECEF, UTM только хранение (BR-06)
INH-03 Фрейм высоты указывается явно; clampToGround — ошибка SIM-GEO-09, SIM-MIS-03 действует
INH-04 Два критерия оптимизации фиксированы, симулятор их измеряет SIM-BIZ-23, SIM-MIS-28 действует
INH-05 Метод «валидатор раньше продукта» SIM-BIZ-02, SIM-UAV-38 действует
INH-06 Детерминизм по seed SIM-BIZ-03, SIM-MIS-19 действует; послабление по растру кадра — SIM-CAM-32
INH-07 Симулятор даёт факт, валидатор — расчёт; расхождение само является выходом SIM-BIZ-27, SIM-MIS-28/31 действует
INH-08 Модель ВП: inclusion/exclusion, объёмные и временные зоны SIM-WORLD-18…22 действует
INH-09 Порог 150 м — флаг, не запрет SIM-WORLD-23 действует
INH-10 violations и warnings — разные категории SIM-MIS-24/35 действует; узкий запас клиренса отнесён к warning (Б-3 ревью 2)
INH-11 Этапы полёта размечены явно SIM-MIS-06, SIM-UAV-15 действует
INH-12 Каталог бортов и нагрузок — данные, не код SIM-BIZ-26, SIM-UAV-05 действует
INH-13 Матрица совместимости разреженная и жёсткая; ИК только 801 SIM-CAM-17, SIM-BIZ-30 действует
INH-14 Ветер — жёсткий отсекатель, а не только замедлитель SIM-ENV-10 действует
INH-15 Резерв энергии, дефолт 20 % SIM-UAV-24 действует
INH-16 Время не считается как «длина / скорость» SIM-BIZ-11, SIM-UAV-15 действует
INH-17 wind_direction_deg — откуда дует SIM-UX-21, SIM-ENV-01 действует
INH-18 Целевая платформа — браузер на ПК SIM-UX-08/24 действует
INH-19 Запуск демо без внешней сети и ключей SIM-GEO-16, SIM-BIZ-09, SIM-UX-29 действует
INH-20 Обязательный перечень известных ограничений SIM-BIZ-33, §11 свода действует; в M1 перечень ручной

Приложение Б. SIM-01…18 — ранняя формулировка дыр планировщика

Источник: simulate/docs/00-brief/01-context-digest.md §6.1. Поглощены доменными документами; сохранены для трассируемости, самостоятельными требованиями не являются.

ID Что требовал Поглощён Статус
SIM-01 Фактическое покрытие по отпечаткам кадров SIM-CAM-29, SIM-BIZ-18 поглощён
SIM-02 Минимальный клиренс над рельефом на каждом шаге SIM-GEO-11, SIM-WORLD-06 поглощён
SIM-03 Точечные и линейные препятствия как третий тип ограничений SIM-WORLD-28, SIM-GEO-12 поглощён
SIM-04 Потеря связи и возврат по таймеру SIM-ENV-24, SIM-UAV-32 поглощён
SIM-05 Два типа разворота с физически корректным радиусом SIM-UAV-18, SIM-MIS-10 поглощён
SIM-06 Снос под ветром и отклонение от ЛЗП SIM-UAV-26/27, SIM-ENV-09 поглощён
SIM-07 Эллипс сноса при парашютировании SIM-UAV-16, SIM-BIZ-21 поглощён
SIM-08 Срабатывание порога возврата и неснятые галсы SIM-UAV-24/33, SIM-ENV-31 поглощён
SIM-09 Минимальные интервалы между бортами SIM-UAV-36 поглощён; понижен до SHOULD/M2
SIM-10 Погодные факторы применяются к борту SIM-ENV-10/12/15 поглощён; осадки и гроза понижены до M2
SIM-11 Профиль набора и снижения, спираль, объёмные NFZ SIM-UAV-19, SIM-MIS-13 поглощён; спираль понижена до M2
SIM-12 Оборот на площадке: замена АКБ, зарядка, лимит бортов SIM-UAV-20, SIM-BIZ-22 поглощён; зарядный цикл понижен до M2
SIM-13 Инъекция отказа борта и состояние мира для перепланирования SIM-ENV-32/34, SIM-BIZ-17 поглощён
SIM-14 Пригодность площадки для катапультного старта SIM-UAV-14, SIM-WORLD-32 поглощён
SIM-15 Радиовидимость с учётом рельефа SIM-ENV-23, SIM-WORLD-31 поглощён; повышен до M1 (С-10 ревью 2)
SIM-16 Камера выдаёт изображение с корректной геометрией SIM-CAM-02/03/11 поглощён
SIM-17 Сравнение «план / факт» по трём метрикам SIM-MIS-28/30, SIM-UAV-40 поглощён
SIM-18 Возмущения задаются детерминированным сценарием с seed SIM-ENV-34/35 поглощён

Составлено 15.09.2026. 338 требований в основном реестре + 38 в приложениях. Изменения относительно доменных документов внесены только по результатам ревью 80-review/; каждое изменение отражено в колонке «Статус» и в таблице «замечание ревью → что сделано» головного документа.