Единый реестр требований симулятора «мир БВС»¶
Полный трассируемый реестр всех требований из всех доменных документов 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 без altitudeMode → KML_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); RTL→LAND — переключателем |
| 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_night → NIGHT_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 | Попытка изменить поля сценария с существующим run → 409 |
§3 | понижено до M2: следствие SIM-PLT-05 |
| SIM-PLT-08 | POST /api/plans парсит и валидирует KML/GeoJSON против схемы и справочников; идемпотентен по content_hash |
M1 | MUST | Повторная загрузка того же файла возвращает тот же plan_id; несуществующий uav_id → 400 с указанием поля |
§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 с clampToGround → ALT_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/;
каждое изменение отражено в колонке «Статус» и в таблице «замечание ревью → что сделано»
головного документа.