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

Симулятор «мир БВС» — бизнес-требования (головной документ)

Свод по восьми доменным документам simulate/docs/ и трём ревью 80-review/. Здесь сняты противоречия между доменами, расставлены уровни зрелости M0/M1/M2 и зафиксирован объём сдачи к 29.09.2026. Полный трассируемый реестр всех требований — 02-requirements-registry.md. Порядок работ — 03-next-steps.md.

Единицы: время — с/мин, скорость — м/с, длина и высота — м, площадь — км², энергия — Вт·ч, GSD — см/пикс, объём данных — МБ/ГБ/ТБ. Терминология — docs/task5/00-brief/03-glossary.md. ТТХ — docs/task5/10-hardware/fleet.yaml и payloads.yaml, единственный источник правды.


1. Резюме на одну страницу

Что это. Отдельный веб-сервис-симулятор «мир БВС»: 3D-модель реальной местности в настоящих географических координатах, в которой борта из парка Геоскан (201 / 801 / Gemini) исполняют полётное задание, выданное планировщиком geoscan, под действием ветра, погоды, отказов связи и бортовых отказов. На выходе — факт: сколько на самом деле длился вылет, какая доля площади реально снята кадрами, где траектория прошла ниже 100 м над рельефом, куда снесло парашют, где борт вышел из связи.

Кому. Первичный потребитель — команда проекта и жюри: симулятор даёт числа, которыми доказывается качество планировщика (критерии ТЗ «обоснованность подхода», «эффективность маршрутов и масштабируемость», «качество демонстрации»). Вторичный — оператор/планировщик работ заказчика: приёмка чужого плана до выезда на площадку.

Какую проблему решает. План планировщика арифметически корректен (длина / скорость + запас), но проверить его сегодня можно только вылетом. Вылет необратим: у Геоскан 201 после перевода в режим «Катапульта» «запрещается брать в руки и переносить БВС» (РЭ-201), ресурс — ТО через 80 полётов, АКБ ≥80 циклов, резервного борта в парке из трёх нет. Двенадцать классов ошибок (P-01…P-12, 00-brief/02) расчётом не ловятся вообще: клиренс 100 м против перепада рельефа 50 м на полигоне 5×5 км даёт фактические 50 м и GSD вдвое мельче расчётного; радиус разворота 137 м против шага галсов 41–123 м; 40 мин полёта Gemini против 105 мин заряда; 210 км маршрута 201 при 40 км радиодальности.

Чем измеряется успех. Пять чисел:

Метрика Целевое значение Почему это и есть успех
violations_found > 0 на наборе s01–s10 при violations = 0 у валидатора симулятор нашёл то, чего расчёт не видит — иначе он не окупился
детерминизм бит-в-бит при повторе (world_snapshot_id, plan, seed), 100 % запусков числа, которые нельзя воспроизвести, ничего не доказывают
plan_fact_divergence дельта makespan_s разложена по вкладам, сумма = дельта ±1 с «факт на 12 % больше» без разбора бесполезен планировщику
негативный контроль все 12 мутантов стартового набора детектируются, ложных срабатываний на эталонном корректном плане — 0 кто сторожит сторожа
офлайн-старт docker compose up без сети, 0 исходящих обращений на защите интернета нет

Честная граница достоверности. Симулятор доказуем максимум до уровня V5 (негативный контроль). Реальной телеметрии полётов не существует (Q-BIZ-02), поэтому формулировка, которую используем всюду: «модель сверена с руководством по эксплуатации и с независимой геометрией; с реальным полётом не сверялась». Любая формулировка сильнее — вранье.

Решение о запуске работ. Запускать стоит, если принимаются три условия: (1) объём сдачи — уровень M1 из §5, а не полный набор требований; (2) симулятор не блокирует сдачу планировщика — планировщик сдаётся целиком и самостоятельно; (3) первым пишется валидатор модели (эталонные кейсы V-1…V-14 и тест детерминизма), а не движок.


2. Контекст и связь с основным сервисом geoscan

Симулятор — второй сервис рядом с планировщиком (задача 5 ЛЦТ, docs/task5/), а не его часть.

Что Планировщик geoscan Симулятор (этот продукт)
Вопрос как разложить работы по парку оптимально что получится, если этот план действительно облететь
Выход план в KML/GeoJSON + расчётные метрики факт + дельта «план↔факт» + находки
Рамка ТЗ браузер на ПК, два критерия оптимизации 3D-мир, батч-прогоны, headless
Зависимость не знает о симуляторе читает выход планировщика

Направление зависимости строго одностороннее. Симулятор не импортирует код планировщика (coverage/, routing/) — общий код воспроизвёл бы общую ошибку и промолчал. Правило унаследовано от метода проекта «валидатор пишется раньше продукта» (docs/task5/70-plan/01-validator-first.md).

Интеграция — файловая: план скачивается из UI планировщика и загружается в симулятор (SIM-PLT §1). Прямой API-вызов «симулятор тянет план по id» — открытый вопрос Q-PLT-02.

Что симулятор возвращает планировщику (числа, которых у того нет): coverage_fraction_actual, t_out_of_link_max_s, endurance_actual_s, resurvey_required_km2, makespan_delta_s с разложением по вкладам, min_clearance_m, parachute_drift_m, min_separation_m, queue_wait_total_s.


3. Роли и сценарии использования

Сценарии U-01…U-12 описаны в 00-brief/02-vision-and-business.md §3. Здесь — сводка с честной пометкой, у кого из ролей есть живой потребитель до 29.09 (по ревью 1 §2).

Роль Сценарии Потребитель до 29.09 Решение по объёму
Разработчик алгоритмов планировщика, CI U-04 регрессия 100 сценариев да ядро, M1
Команда → жюри U-05 демо, U-12 перечень ограничений да ядро, M1
Планировщик работ U-02 сравнение планов, U-06 потеря связи, U-09 отказ борта да (роль исполняет команда) U-02 — M1; U-06 — M1; U-09 — M2
Заказчик съёмки U-11 покрытие по кадрам и GSD артефакт нужен жюри M1
Внешний пилот / оператор U-01 приёмка плана, U-07 старт под ветер, U-08 клиренс нет (операторов в контуре нет, Q-BIZ-04 не отвечен) U-08 — M1; U-07 — M1 (дёшев); U-01 — M1, но выход — отчёт о находках, не вердикт GO (см. §6, BR-19)
Обучаемый оператор U-03 учебный режим нет (Q-BIZ-06 не отвечен; A-BIZ-09: РЭ требует обучения только у производителя) M2, режется первым
Разработчик симулятора U-10 калибровка по телеметрии заблокирован (логов нет, Q-BIZ-02) COULD, вне M1/M2

4. Объём продукта

Область В объёме Вне объёма Обоснование границы
Динамика борта L1: кинематическая точка с ограничениями по скорости, скороподъёмности, крену + постоянные времени L2 (точка-масса), L3 (6-DOF аэродинамика) В РЭ-201 нет ни поляры, ни площади крыла, ни крена, ни скороподъёмности (сплошной поиск по 117 стр.). Модель L3 на выдуманных коэффициентах точнее не будет — будет убедительнее выглядеть
Энергия эмпирическая модель по двум якорным точкам: Gemini 144,7 Вт·ч / 217 Вт; 201 740 Вт·ч / 246,7 Вт физика расхода из поляры те же данные отсутствуют; у 801 Вт·ч нет вообще — модель по времени
Автопилот воспроизведение документированного поведения РЭ-201: коды отказов, пороги возврата 16,5–20,75 В, «Возврат» на текущей высоте, спираль, точка ожидания 300 с HIL/SITL с реальной прошивкой прошивка недоступна; SITL ArduPilot воспроизводит другую логику (НАРУШЕНИЕ ЗОНЫ: РЭ — камера off + полёт на посадку; ArduPilot — GUIDED + барражирование)
Графика 3D-сцена в реальных координатах: рельеф, объёмные зоны, борт, полоса захвата, вид из камеры борта фотореализм уровня Unreal, Google Photorealistic 3D Tiles у Google три независимых блокера: покрытие РФ ≈ 0, ToS запрещает кэш, Google Cloud закрыт для РФ с 20.03.2024. Плюс требование офлайн-старта
Камера геометрия кадра (footprint, GSD, перекрытие, смаз) + синтетический рендер по классу поверхности физическая радиометрия, дисторсия, шум матрицы, ИК-радиометрия радиометрия и дисторсия в источниках отсутствуют полностью; NETD 40 мК нечем питать
Метрики качества плана факт и дельта план↔факт coverage_fraction, makespan_s как оценка плана их считает валидатор планировщика; дублирование ломает независимость
Планирование нет построение маршрутов, раскладка галсов, назначение бортов это работа планировщика; иначе симулятор перестаёт быть независимой проверкой
Управление приём плана из файла, прогон, выдача чисел выдача команд на реальную НСУ, MAVLink в реальный канал безопасность полётов; сервис не сертифицирован
Метео ветер полем W(x,y,z,t), температура, пороги допуска; осадки/гроза/обледенение — как параметрические события физически корректная метеомодель, CFD слов «дождь», «снег», «туман», «обледенение», «молния», «гроза» в РЭ-201 нет ни разу; все пороги — назначенные
Данные GLO-30/90, ArcticDEM 10 м, WorldCover, ETH canopy, OSM, ERA5/Open-Meteo FABDEM (CC BY-NC-SA), ArcticDEM 2 м (education/research), Mapbox/Cesium ion (токен + ToS), НСПД (только ЕСИА) лицензионные и санкционные блокеры, разобраны в 10-world/01 §4
LiDAR / геофизика явная ошибка «нагрузки нет ни у одного борта»; режим terrain-following — COULD виртуальный LiDAR-сенсор как рабочая нагрузка payloads.yaml раздел gaps: носителя нет. Дорисовывать сенсор — обманывать жюри
Восстановление прогона падение воркера не теряет уже записанное checkpoint/resume с точки останова дорого для окна 14 дней; повтор = новый run_id (SIM-PLT-25)

5. Уровни зрелости M0 / M1 / M2

Это ответ на блокер Б-1 / Д-01 всех трёх ревью. 338 требований (из них ~250 в исходной редакции — MUST) на 14 дней не сходятся ни в какой продукт. Правило свода:

MUST разрешён только для M0 и M1. Всё, что отнесено к M2, переведено в SHOULD или COULD. Уровень каждого требования проставлен в реестре 02-requirements-registry.md, колонка «Уровень».

После расстановки: M0 — 67 требований (все MUST), M1 — 157 требований (из них MUST 153), M2 — 111 требований (MUST среди них — ноль). Объём сдачи к 29.09 — 224 требования вместо 338; MUST — 220 вместо ~250 в исходной редакции.

Честная оговорка к этим числам: сокращение MUST на 12 % само по себе проблему не решает — многие требования атомарны и являются свойствами одного и того же кода («0 литералов ТТХ», «0 рёбер импорта», «один sha256»). Настоящее сокращение в другом: 111 требований официально не блокируют сдачу, каждый MUST теперь привязан к вехе, а M0 (67 требований) — это отдельно проверяемый первый работающий кусок. И единственный честный измеритель объёма в этом проекте — не число требований, а агенто-заходы и итерации ревью: 52 базовых захода, ≈130 с итерациями, 20–25 часов ревью (03-next-steps.md).

M0 — доказуемое ядро

Что умеет headless-прогон одной командой; один борт (Gemini + PF1B — единственная честная энергомодель парка); рельеф GLO-30 в локальной ENU через ECEF (не UTM — см. §6/BR-06); ветер константой + профиль по высоте; исполнение плана по фазам takeoff…landing; факт по времени, длине, энергии; покрытие по полосам; отчёт «план / факт / дельта» одной таблицей; манифест прогона
Чего не умеет 3D-фронт, кадры камеры, отказы, метео-события, несколько бортов, препятствия
Критерий выхода s01 (Gemini + PF1B, прямоугольник 1×1 км, GSD 3 см, штиль) прогоняется одной командой; два прогона с одним seed дают бит-в-бит одинаковый журнал (sha256); площадь полигона в проекции против геодезической ≤ 0,1 %; round-trip WGS84→ENU→WGS84 ≤ 0,01 м; ветровой треугольник V_g = √(V_a²−W⊥²)+W∥ воспроизводится ≤ 0,5 %; эталоны V-1…V-4, V-7, V-8, V-12, V-13, V-14 — PASS

M1 — сдаваемое 29.09

Что умеет всё из M0 + три борта парка со своими ТТХ; препятствия (здания, мачты, связные пролёты ЛЭП) и клиренс с маской качества ЦМР; покрытие по кадрам, карта фактического GSD, список пропусков; катапультный старт против ветра и парашютная посадка со сносом; два failsafe — порог напряжения и потеря связи с LOS по рельефу; 3D-сцена с объёмными зонами, планом/фактом двумя линиями и видом из камеры борта; кадр в «сухом» геометрическом режиме для всех кадров + растр для подвыборки GUI; батч s01–s10; мутационный набор из 12 планов; fidelity_class на каждом числе; docker compose up офлайн; комплект документации по п. 5 ТЗ; подготовленный демо-полигон и сценарий защиты
Критерий выхода docker compose up без интернета и без ключей поднимает стенд; батч s01–s10 проходит за ≤ 30 мин; демо-прогон 5 мин воспроизводится по (world_snapshot_id, plan, seed)журнал и числа бит-в-бит, картинка «визуально та же» по тесту SIM-UX-03 (позиции бортов ≤ 0,1 м); числа на экране совпадают с fact_report до последнего знака; все 12 мутантов детектируются, ложных срабатываний на эталонном плане 0; доля выходных величин без fidelity_class0 %; эталоны V-1…V-14 — PASS; на s01–s10 найдено ≥1 нарушение, невидимое валидатору
Что НЕ входит гроза, осадки, обледенение, ротор, турбулентность; учебный режим и интервенции; branch/replay; SSE-телеметрия; сравнение по 20 сидам; деконфликтация; тепловизор и потоковый режим 801; EXIF/TIFF-контракты кадров; 100 сценариев за ночь; редактор зон как GIS-инструмент

M2 — после хакатона

Что умеет 100 сценариев sc-* за ночь; грозовая зона, шквал, осадки, видимость, обледенение, орографический ротор, турбулентность; деконфликтация; эллипс сноса с полученным от заказчика коэффициентом; очередь на площадке и фактический оборот; SSE-телеметрия и интерактивный режим; учебный режим с интервенциями и branch; сравнение планов по 20 парным сидам; отчёт чувствительности к допущениям; авто-генерация перечня ограничений; синтетический тепловизор; полный контракт файлов кадров
Критерий выхода 100 сценариев за ≤ 8 ч при ≥4 параллельных прогонах; каждое допущение имеет измеренную чувствительность выходных метрик к ±20 %; при наборе ≥20 мутантов детекция ≥95 %

Что понижено по итогам ревью и почему

Что понижено Было Стало Почему
Учебный режим: SIM-BIZ-24, интервенции SIM-MIS-38/39, branch, keyframes SIM-MIS-27, инъекция событий в идущий прогон SHOULD/MUST, M1 COULD, M2 роли не существует (Q-BIZ-06 без ответа), A-BIZ-09 признаёт противоречие с РЭ («обучение только на базе ООО „Геоскан“»); формат interventions[] как детерминированный вход оставлен (дёшев)
Гроза: SIM-ENV-18/19/20/21 MUST SHOULD, M2 вся модель стоит на ДОП-ENV-11 (радиус 10 км — из авиационной практики, не от заказчика); трактовка «молния → грозовая зона» не подтверждена заказчиком (Q-NEW-01)
Осадки и видимость: SIM-ENV-12/13 MUST (6 полей) MUST только temperature_c и ветер; остальное SHOULD, M2 в РЭ-201 порогов нет ни одного; шесть полей как MUST — обязательство без основания
Обледенение, ротор, турбулентность, оптическое позиционирование: SIM-ENV-06/07/08/14/17 SHOULD/COULD M2 подтверждено как не входящее в сдачу
Контракты файлов кадра: SIM-CAM-19 (EXIF/XMP), SIM-CAM-20 (TIFF16×5) MUST SHOULD, M2 доказательную ценность (покрытие, GSD, дыры) даёт «сухой» режим SIM-CAM-24; файлы с EXIF — витрина, хватает сотен кадров демо
Тепловизор и потоковый 801: SIM-CAM-16/21 SHOULD M2 заведомо нефизичная картинка по WorldCover не добавляет доказательной силы; матрицу совместимости закрывает SIM-CAM-17
Редактор зон: SIM-WORLD-27 (undo 50 шагов, snap, коридоры) MUST SHOULD, M2; в M1 — только правка вертикальных границ и фрейма зоны дублирует вход планировщика; инструменту независимой проверки нужен импорт + валидация (SIM-WORLD-25/26), а не второй GIS-редактор
SSE-телеметрия: SIM-PLT-15/16 MUST/SHOULD SHOULD, M2 для демо достаточно воспроизведения журнала (SIM-UX-33, MUST и надёжнее вживую)
Сравнение по 20 сидам: SIM-MIS-40 SHOULD M2 для U-02 на защите хватает 1 seed при общих потоках ГПСЧ
Деконфликтация: SIM-UAV-36 MUST SHOULD, M2 чисел D_min нет ни в ТЗ, ни в РЭ (A-17); симулятор измеряет и сообщает, критерия безопасности нет
30 FPS на встроенной графике: SIM-UX-24 MUST SHOULD, M1 «Intel Iris Xe или аналог» — референсное железо не определено, критерий неизмерим; мерим на конкретной машине с указанием модели в отчёте
Дашборды Grafana в день релиза: SIM-PLT-30 MUST в таблице продукта правило инфраструктуры, из продуктовой таблицы убрано требование корневого CLAUDE.md, не продуктовое требование
100 сценариев за ночь: SIM-BIZ-07 MUST SHOULD, M2 бюджет выведен из одного примера makespan_s = 5280; в M1 батч — s01–s10 (≤30 мин)
Отчёт чувствительности и авто-перечень ограничений: SIM-BIZ-15/33 SHOULD M2; в M1 перечень ограничений составляется вручную по реестру допущений автогенерация требует готового отчёта чувствительности, которого в M1 нет
Второй проход сокращения — ещё 42 требования переведены в M2, из них 28 с MUST на SHOULD: импорт данных заказчика (SIM-GEO-03/06/07/20, SIM-WORLD-08, SIM-PLT-34), API-поверхность сверх минимума (SIM-PLT-03/05/06/07/11/14/24), правила инфраструктуры (SIM-PLT-29/30/31/35), второстепенная физика и каталоги (SIM-ENV-11/22/27/28/33/34/36/37, SIM-CAM-23/26/28, SIM-UAV-14/34), режимы и экраны сверх демо (SIM-MIS-08/18/37, SIM-UX-07/18/24, SIM-WORLD-14/22), SIM-BIZ-08/17/21, SIM-FIN-18 MUST/SHOULD, M1 SHOULD/COULD, M2 причина у каждого требования записана в колонке «Статус» реестра: либо нет входных данных (топосъёмка, МСК-ключи, ортофото заказчика), либо возможность обслуживает функцию, уже отнесённую к M2, либо это правило инфраструктуры, а не продуктовое требование

6. Ключевые бизнес-требования верхнего уровня

25 требований. Каждое — обобщение доменных ID; доменные критерии приёмки не дублируются, а наследуются. Приоритет и уровень — итоговые после ревью.

ID Требование Приор. Уровень Критерий приёмки Доменные ID
BR-01 Вход прогона — комплект (scenario, plan, world_snapshot_id, run_config); план без сценария не исполняется MUST M0 запуск с одним KML без сценария возвращает SCENARIO_MISSING и код выхода ≠ 0 SIM-MIS-01, SIM-BIZ-01
BR-02 Приём выхода планировщика без ручной правки в трёх форматах: наша схема JSON, GeoJSON RFC 7946, KML OGC 2.2 MUST M1 три формата одного плана дают идентичный список путевых точек и метрики, расходящиеся ≤ 0,1 %; KML без altitudeMode даёт ALT_FRAME_MISSING, а не молчаливое обнуление высот SIM-BIZ-01, SIM-MIS-02/03/08
BR-03 Детерминизм: результат однозначно определяется (world_snapshot_id, plan, seed, run_config, interventions) MUST M0 10 повторов подряд дают один sha256 журнала; добавление четвёртого борта не меняет траекторию первых трёх; три режима часов дают байт-идентичный журнал SIM-BIZ-03, SIM-MIS-18/19/20/21, SIM-ENV-35, SIM-WORLD-37, SIM-UAV-04
BR-04 Headless-режим: полный прогон одной командой, без GUI, без GPU и без сети MUST M0 docker compose up + одна команда на изолированной машине; исходящих сетевых обращений — 0; кадры в headless выдаются в «сухом» геометрическом режиме SIM-BIZ-02/09, SIM-GEO-16, SIM-MIS-33, SIM-PLT-17, SIM-CAM-11/24
BR-05 ТТХ борта и нагрузки читаются только из fleet.yaml / payloads.yaml; в коде нет ни одного числового литерала ТТХ MUST M0 правка airspeed_cruise Gemini на 12 м/с меняет длительность эталонного вылета без единой правки кода; uav_model_version = хеш обоих YAML SIM-BIZ-26, SIM-UAV-05, SIM-MIS-04, SIM-PLT-27
BR-06 Рабочая СК движка — локальная геодезическая ENU через ECEF во всех доменах (физика, ветер, коллизии, LOS); UTM — только хранение растров и обмен MUST M0 round-trip WGS84→ENU→WGS84 в радиусе 200 км ≤ 0,01 м; точка в 100 км от origin имеет z = −785 ± 5 м; ни один домен не считает физику в UTM SIM-WORLD-02/03/04, снято противоречие с SIM-ENV §1.2 и SIM-UAV §2.1
BR-07 Клиренс над рельефом и над точечными/линейными препятствиями с дискретизацией ≤ 10 м, с маской качества ЦМР и признаком полноты слоя препятствий MUST M1 для geoscan_201 клиренс < 100 м → violations.altitude с координатой; полоса [клиренс−LE90, клиренс], пересекающая 100 м, даёт warning CLEARANCE_MARGIN_BELOW_GEOREF, не violation; число над заполненной ячейкой ЦМР несёт terrain_quality ≠ measured; отчёт содержит obstacle_layer_completeness SIM-WORLD-06/16/17/28, SIM-GEO-11/12, SIM-UAV-11, SIM-FIN-17
BR-08 Зоны: шесть типов, обе геометрии (призма и объём), временнóе действие, обязательный фрейм высот с документированным дефолтом; длина траектории внутри зоны считается аналитически MUST M1 зона без altitude_frame принимается с дефолтом AMSL, warning ZONE_ALT_FRAME_DEFAULTED и пометкой зависящих величин fidelity_class: assumed; в --strict — отказ ZONE_ALT_FRAME_REQUIRED; траектория, задевающая угол NFZ на 3 м, даёт violations.nfz ≠ 0 SIM-WORLD-18/19/20/21/22/23, SIM-MIS-01
BR-09 Модель борта — L1 (кинематика с ограничениями и постоянными времени); погрешность по длительности вылета ≤ 5 %, по энергии ≤ 10 % MUST M0 все эталоны V-1…V-14 PASS в объявленных допусках; отчёт содержит колонку «отклонение, %»; ни одна строка не превышает порог SIM-UAV-01/02/38
BR-10 Энергомодель калибруется по двум якорным точкам парка; ветер входит через путевую скорость; холод — единой кривой дерейтинга MUST M1 Gemini 40,0 ± 2,0 мин и 201 180 ± 9 мин при 19,4 м/с в штиль при +20 °C; встречный ветер 12 м/с даёт удельный расход на км пути ×1,76 ± 0,05 для 201; Gemini при −10 °C — 30,0 ± 0,5 мин (единая кусочно-линейная кривая в env_profile.yaml) SIM-UAV-21/22, SIM-ENV-15, снято противоречие SIM-UAV-07 × SIM-ENV-15
BR-11 Исполнение по фазам плана с фактической длительностью каждой и дельтой «план − факт» по фазам MUST M0 таблица фаз с planned_s, actual_s, delta_%; сумма фаз = длительности вылета ± 1 с SIM-UAV-15, SIM-MIS-06/13
BR-12 Ветер — поле W(x, y, z, t), а не скаляр; допуск к вылету проверяется по фактическому ветру на высоте полёта MUST M1 ветер 8 м/с на 10 м при α = 0,143 даёт 11,1 м/с на 100 м и не допускает 801/Gemini (wind_max 10), хотя скаляр сценария 8 м/с; высота нормирования wind_max помечена как ДОПУЩЕНИЕ (в РЭ не указана) SIM-ENV-01/02/09/10, SIM-WORLD-33
BR-13 Связь: радиовидимость по рельефу с зоной Френеля, потеря связи не прерывает задание, возврат только по таймеру «Время автономного полёта» MUST M1 на сценарии с грядой 80 м связь рвётся на 12 км вместо 40 км; 201 проходит 170 из 210 км вне связи и выполняет задание целиком; отчёт содержит t_out_of_link_max_s; таймер — обязательный параметр без дефолта, запуск без него → AUTONOMOUS_TIME_REQUIRED SIM-ENV-23/24/25, SIM-WORLD-31, SIM-UAV-32, снято противоречие с ДОП-ENV-20
BR-14 Покрытие считается по фактическим кадрам, а не по полосам; выдаются карта фактического GSD и список пропусков с кодом причины MUST M1 coverage_fraction_actual = объединение footprint ∩ полигон; отчёт содержит _planned, _actual, delta; сумма площадей пропусков + coverage_actual × area сходится с площадью полигона ≤ 0,1 %; доля площади вне ±10 % от заданного GSD показана числом SIM-BIZ-18, SIM-CAM-07/08/10/29/30/31
BR-15 Изображение из камеры борта: «сухой» геометрический режим — для 100 % кадров всегда; растровый кадр — для GUI и подвыборки, без требования GPU в headless MUST M1 headless-прогон на 153 000 расчётных кадров выдаёт 100 % метаданных и 0 растров; GUI-прогон выдаёт растры с потолком ≤ 5000 кадров с равномерным прореживанием; растр помечен source_mode: synthetic_render, фотореализм явно не заявляется SIM-CAM-11/12/18/24/25, SIM-PLT-12/23, SIM-MIS-33
BR-16 Каждая выходная величина несёт value, unit, fidelity_class, depends_on, validation_level; для величин, зависящих от слоя данных, — ещё и полноту слоя MUST M1 схема выхода отвергает величину без любого из пяти полей; доля величин без fidelity_class = 0 %; величина с fidelity_class: assumed не может быть основанием вердикта SIM-BIZ-04, SIM-FIN-17
BR-17 Отчёт «план / факт / дельта» именами метрик валидатора планировщика; дельта makespan раскладывается на компоненты MUST M1 diff имён полей отчёта симулятора и валидатора пуст; сумма компонент = полной дельте ± 1 с (ветер / развороты / набор / оборот / contingency / прочее) SIM-MIS-28/29/30, SIM-BIZ-06 (переписан с «≤5 %» на «±1 с»)
BR-18 «Находки»: случаи, где план валиден у валидатора, а факт — нет, выделены отдельным разделом с местом, временем и ссылкой на журнал MUST M1 на сценарии с перепадом рельефа ≥ 50 м отчёт даёт cfit_events > 0 при violations.altitude = 0 у валидатора; пакетный прогон возвращает код выхода ≠ 0 при появлении таких находок SIM-MIS-31/35
BR-19 Вердикт приёмки плана — трёхзначный: NO-GO / UNRESOLVED / NO-FINDINGS, с указанием полноты данных; бинарный GO не выдаётся MUST M1 NO-GO — нарушение на величине класса measured/derived; UNRESOLVED — проверка упирается в assumed или в слой неизвестной полноты, с перечнем причин; NO-FINDINGS — формулировка «нарушений не найдено на данных полноты X», где X — доля объектов слоя препятствий с известной высотой SIM-FIN-16, снят блокер Б-3 ревью 1
BR-20 Достоверность доказывается пирамидой V1…V5 с негативным контролем; V6 объявлен недостижимым MUST M1 9 тождеств V1 в допусках; 7 инвариантов V2; сверка V3 с валидатором по длине маршрута ≤ 1 %; 100 % документированных порогов РЭ покрыты тестами V4; все 12 мутантов стартового набора детектируются при 0 ложных срабатываний SIM-BIZ-10/11/12/13/14, SIM-UAV-38
BR-21 Независимость от планировщика: симулятор не импортирует его код и не считает метрики качества плана MUST M0 CI-проверка графа импортов: 0 рёбер из simulate/ в coverage/, routing/; в выходе метрики валидатора присутствуют только в колонках «план / факт / дельта», не как собственная оценка плана SIM-BIZ-05/27 (переформулирован), SIM-MIS-28
BR-22 Паспорт прогона и манифест мира обязательны и неполны быть не могут MUST M0 по паспорту прогон воспроизводится на другой машине с тем же образом бит-в-бит; манифест мира содержит источник, релиз, дату, bbox, CRS, вертикальный датум, sha256 каждого слоя, georef_ce90_m/georef_le90_m SIM-BIZ-32, SIM-PLT-26, SIM-GEO-17, SIM-WORLD-05/36
BR-23 3D-интерфейс: объёмные зоны, план и факт двумя линиями, полоса захвата по рельефу, вид из камеры борта по расчётному FOV, зона связи по фактической LOS, а не кругом MUST M1 все четыре элемента (3D, карта, телеметрия, таймлайн) видны одновременно на 1366×768; поверхность связи строится по link_quality/blocking_point из журнала, круг радиуса radio_range_km показывается только как справочный максимум с подписью; вид из камеры Pollux — диагональный FOV 43,0° ± 0,5°, горизонтальный 34,5° SIM-UX-08/09/10/17/19/20/22, снят блокер Б-4 ревью 2
BR-24 Единый бюджет производительности: прогон однопоточный и детерминированный, параллелизм — только по независимым прогонам MUST M1 1 борт-час модельного времени ≤ 60 с реального на одном ядре; отсюда прогон из 3 бортов идёт ≥ 20× реального времени, из 20 бортов × 3 ч — ≤ 3600 с на ядре; батч s01–s10 ≤ 30 мин; ≥ 4 параллельных прогона на узле SIM-PLT-21/22 (владелец числа), SIM-MIS-34, SIM-UAV-35 (переписан), SIM-BIZ-07
BR-25 Комплект сопроводительной документации по п. 5 ТЗ: архитектура, алгоритм, инструкция по запуску, описание API, руководство пользователя, перечень известных ограничений MUST M1 все шесть артефактов существуют в репозитории; инструкция по запуску проверена на чистой машине; перечень ограничений содержит все величины fidelity_class: assumed из сквозного реестра допущений SIM-FIN-03/04/05, SIM-BIZ-29/33, §11 этого документа

7. Достоверность симулятора: чем доказываем, что его числам можно верить

Симулятор, которому нельзя верить, хуже отсутствия симулятора: он даёт ложную уверенность, и его числа попадают в презентацию. Поэтому достоверность — не свойство, а иерархия уровней с явными критериями перехода, и каждое выходное число знает свой уровень.

7.1 Пирамида V1…V6

Уровень Что доказывает Порог приёмки Доступен
V1. Аналитические тождества модель воспроизводит формулы с закрытым решением ошибка ≤ 0,5 % (GSD и площадь — ≤ 0,1 %, round-trip СК — ≤ 0,01 м) да, M0
V2. Инварианты и консервация модель не течёт и не дрейфует детерминизм бит-в-бит; дрейф ≤ 1 м на 100 кругов; невязка энергобаланса ≤ 0,1 %; V_g > 0 и T > L/V_g строго; dt → dt/2 меняет makespan ≤ 0,5 % и coverage ≤ 0,2 п.п. да, M0
V3. Независимая перепроверка геометрия факта считается двумя независимыми путями длина маршрута расходится с валидатором ≤ 1 %; множество нарушений симулятора ⊇ множества нарушений валидатора да, M1
V4. Сверка с первоисточником поведение борта соответствует РЭ, а не нашим представлениям 100 % документированных порядков и порогов РЭ-201 покрыты тестом со ссылкой на пункт да, M1
V5. Негативный контроль симулятор ловит плохие планы, а не просто не падает все 12 мутантов стартового набора детектируются, ложных срабатываний 0 да, M1
V6. Сверка с реальностью модель совпадает с фактическим полётом ошибка по времени вылета ≤ 5 %, по длине трека ≤ 2 % нет — телеметрии не существует (Q-BIZ-02)

7.2 Максимальный достижимый уровень по классам величин

Ответ на находку Д-1 ревью 1: V3 покрывает только геометрию, и это надо показывать таблицей, а не по одному числу за раз.

Класс выходных величин Пример Макс. уровень сегодня Почему выше нельзя
Геометрия плана и траектории total_distance_m, transects_total, площадь полигона V3 считается независимо валидатором и симулятором
Геометрия кадра gsd_actual_cm, footprint_polygon, перекрытие V3 сверяется с контрольными числами 30-domain/01 и с полосным расчётом валидатора
Время вылета и makespan makespan_s, turn_time_fraction V2 + V4 независимого счётчика времени нет; пороги фаз сверены с РЭ
Клиренс над рельефом min_clearance_m, cfit_events V2, до V3 после сверки GLO-30 против ArcticDEM/ALOS (SIM-FIN-18) эталонной ЦМР на демо-полигон нет (QW-02)
Клиренс над препятствиями obstacle_clearance_m V1 + признак полноты слоя полнота OSM не квантифицирована; «0 столкновений» на неполном слое — derived-число, вводящее в заблуждение сильнее assumed
Энергия и остаток хода energy_remaining_wh, endurance_actual_s V1 (две якорные точки) + V4 независимой перепроверки нет; поляра отсутствует
Дерейтинг по холоду 30,0 мин Gemini при −10 °C V2 (циркулярный) тест проверяет реализацию собственного допущения ДОП-ENV-19; в отчёте помечается validation_level: V2 и не подаётся как сверенный с источником
Профиль ветра по высоте wind_at_position V2 (циркулярный) 1,40 и 1,99 — проверка формулы против самой себя; α и z0 — ДОП-ENV-01
Время вне связи t_out_of_link_max_s V1 + V4 геометрия LOS проверяема, пороги Френеля и рефракции — ДОП-W-07/08/09
Снос парашюта parachute_drift_m V1 при fidelity_class: assumed коэффициента сноса нет ни в одном источнике (A-10, Q-ENV-08); скорость снижения 5 м/с — A-05
Цена contingency resurvey_required_km2, Δ_contingency V2 зависит от таймеров и порогов, которых в РЭ нет
Пороги грозы/осадков/обледенения safety_radius_m, precip_rate V0 — параметрическое допущение слов «гроза», «снег», «обледенение» в РЭ-201 нет ни разу; не используются в вердиктах

Правило. Величина с fidelity_class: assumed или validation_level ≤ V2 не может быть основанием для вердикта NO-GO — она выводится, помечается и попадает в перечень ограничений. Вердикты опираются только на measured/derived с validation_level ≥ V3.

7.3 Негативный контроль — кто сторожит сторожа

Симулятор, который «всё прогнал и ничего не нашёл», неотличим от симулятора, который ничего не проверяет. Стартовый набор — 12 мутантов заведомо корректного плана (00-brief/02 §6.2/V5): галс внутрь NFZ; высота 60 м AGL над холмом; подмена AGL на AMSL без пересчёта; курс старта по ветру; turnaround_time_min: 1 для Gemini; ИК на Gemini; убранный маршрут посадки из 3 точек; вылет 201 на 200 мин; ветер 13 м/с; точка посадки под ЛЭП; интервал затвора вдвое реже нужного; шаг галсов 200 м при футпринте 117 м.

Порог формулируется честно (снята находка Д-3 ревью 1 / С-5 ревью 2): все 12 мутантов стартового набора детектируются; ложных срабатываний на эталонном корректном плане — 0. Процентный порог ≥ 95 % применяется только при наборе ≥ 20 мутантов. Каждый реальный дефект, который симулятор пропустил, превращается в нового мутанта.

7.4 Что говорим на защите дословно

«Модель сверена с руководством по эксплуатации Геоскан 201 и с независимой геометрией валидатора; с реальным полётом она не сверялась — реальных логов у нас нет. Достоверность доказана до уровня V5 включительно. Числа, которые зависят от допущений, помечены и перечислены в разделе известных ограничений.»


8. Критерии приёмки продукта в целом

Продукт принят, если все строки ниже дают PASS на одном прогоне сборки.

# Критерий Число Проверка
A-01 Офлайн-старт 0 исходящих сетевых обращений при docker compose up сетевой трейс на изолированной машине
A-02 Детерминизм 10 повторов → один sha256 телеметрии и fact_report; манифест идентичен после исключения generated_at из хэшируемой части sim run --seed 42 ×10
A-03 Независимость от шага dt → dt/2: \|Δmakespan\| ≤ 0,5 %, \|Δcoverage\| ≤ 0,2 п.п. автотест сходимости
A-04 Тождества V1 все 9 (V1-01…V1-09) в допусках: ветровой треугольник ≤ 0,5 %, GSD ≤ 0,1 %, площадь ENU/геодезическая ≤ 0,1 %, round-trip СК ≤ 0,01 м, R = 136,4 ± 0,5 м sim validate --reference
A-05 Эталоны модели борта V-1…V-14 PASS; Gemini 40,0 ± 2,0 мин; 201 180 ± 9 мин при 19,4 м/с; 7,3 и 22,0 км² воспроизводятся из независимых параметров; Gemini при −10 °C = 30,0 ± 0,5 мин тот же прогон
A-06 Сверка V3 с валидатором длина маршрута ≤ 1 %; violations симулятора ⊇ violations валидатора на всех s01–s10 сравнение двух отчётов
A-07 Трассировка V4 100 % документированных порогов РЭ-201 из таблицы §6.2/V4 покрыты тестом со ссылкой на пункт отчёт покрытия
A-08 Негативный контроль V5 12 из 12 мутантов детектированы; 0 ложных срабатываний на эталонном плане sim mutate --set base
A-09 Полезность M1: на s01–s10 (когда каталог полон) найдено ≥ 1 нарушение, невидимое валидатору, с координатой и временем; предусловия: SIM-BIZ-12, фикстуры s02…s10 раздел «находки» отчёта
A-10 Разложение дельты сумма компонент Δ_wind + Δ_turns + Δ_climb + Δ_turnaround + Δ_contingency + Δ_other = полной дельте ± 1 с автотест
A-11 Покрытие по кадрам сумма площадей пропусков + coverage_actual × area = площади полигона ± 0,1 % автотест на s01 и на полигоне с перепадом ≥ 50 м
A-12 Маркировка достоверности доля выходных величин без fidelity_class0 %; ни один вердикт не опирается на assumed схема выхода + автотест
A-13 Производительность батч s01–s10 ≤ 30 мин; 1 борт-час ≤ 60 с на ядре замер в CI
A-14 Независимость кода 0 рёбер AST из geoscan_sim.validator в engine/, mission/, uav/, camera/, env/; 0 рёбер симулятора в coverage/, routing/ планировщика CI-проверка графа импортов (SIM-BIZ-05)
A-15 Демо 5-минутный прогон воспроизводится по паспорту: журнал и числа бит-в-бит, позиции бортов при повторном рендере ≤ 0,1 м sim replay + тест SIM-UX-03
A-16 Документация 6 артефактов п. 5 ТЗ существуют; инструкция по запуску проверена на чистой машине ручная проверка по чеклисту

9. Риски и решения, принятые вопреки риску

Сводно по ревью 3 §4. «Принято вопреки» — там, где риск осознан и не устраняется.

# Риск Вер-ть Последствие Что делаем
R-01 Объём не влезает в 14 дней была высокая нет ни M1, ни честного M0 устранён: §5 — каждое требование привязано к вехе; 111 требований отнесены к M2 и официально не блокируют сдачу; MUST в M2 — ноль; объём выражен в агенто-заходах (52 базовых, ≈130 с итерациями)
R-02 Планировщик не даёт планы вовремя; схема 40-formats/03 плывёт средняя–высокая нечего исполнять, V3 невозможна заморозка schema_version: 1; рукописные планы-фикстуры s01/s04/s07 в репозитории симулятора (SIM-FIN-08)
R-03 Внешние геоданные/погода недоступны из контура (CDS/ERA5, dataspace.copernicus.eu, бакеты AWS) средняя мир не из чего собирать выгрузка зеркала демо-района первым шагом (SIM-FIN-07); ERA5 понижен до SHOULD/M2, manual-ветер остаётся MUST
R-04 Headless-рендер кадра без GPU не спроектирован была высокая SIM-CAM-11 невыполним устранён решением: «сухой» геометрический режим — MUST и дефолт headless; растр — только GUI/подвыборка (BR-15)
R-05 Ресурсы узла n2 неизвестны числом (Q-PLT-05) средняя ночное окно срывается, демо тормозит kubectl --context n2 describe node — шаг 0 плана; при <8 ядрах батч уменьшается до s01–s10
R-06 Противоречия MUST между доменами доживают до кода была высокая несовместимые модули устранён: §13 — все 10 противоречий сняты правкой проигравшего требования
R-07 Бит-в-бит детерминизм не достигается в выбранном рантайме средняя падает главное продающее свойство рантайм с управляемой FP-семантикой выбирается решением SIM-FIN-15; тест детерминизма — первый написанный тест
R-08 Демо-полигон без нужных данных (нет ЛЭП в OSM, нет перепада ≥50 м) средняя «находки» пустые: план валиден, факт совпал подбор полигона по чеклисту свойств (SIM-FIN-06); при бедном OSM — препятствия вносятся как source: operator
R-09 Переформулировка «молнии» не принята заказчиком низкая–средняя претензия «требование не выполнено» вопрос Q-NEW-01 уходит в первом батче; на защите показывается и W-14 (буквальный удар как терминальная инъекция), и грозовая зона
R-10 61 вопрос заказчику при отсутствии канала Q&A высокая ключевые числа остаются assumed топ-12 §10 уходит первым батчем; остальное фоном
R-11 Итерации движка делают старые журналы нечитаемыми средняя сравнение с baseline ломается молча log_schema_version + смоук «открой журнал недельной давности» (SIM-FIN-11)
R-12 Порог V5 не достигается к сроку средняя «сторож не сторожит» порог — цель, не гейт сдачи; в отчёт идёт фактическое число детекции

Принято вопреки риску

Решение Риск, который принимается Почему принято
Строить мир только на открытых данных (GLO-30 4 м LE90 / 6 м CE90) клиренс доказуем лишь до самосогласованности; эталонной ЦМР нет топосъёмки заказчика нет и не обещано; альтернатива — не строить мир вообще. Суррогат эталона — сверка GLO-30 против ArcticDEM/ALOS на демо-полигоне (SIM-FIN-18)
Отказ от фотореализма кадра претензия «картинка не похожа на снимок» радиометрии и дисторсии в источниках нет; Google 3D Tiles заблокированы трижды. Кадр служит проверкой геометрии покрытия, и это написано в метаданных каждого кадра
Модель L1 вместо L2/L3 эксперт спросит про аэродинамику данных нет: ни поляры, ни площади крыла, ни крена. L3 на выдуманных коэффициентах точнее не станет
Вся логика деградаций 801/Gemini — экстраполяция РЭ-201 реакции мультироторов могут быть другими РЭ на 801 и Gemini нет. Каждая строка таблицы реакций несёт пометку ДОПУЩЕНИЕ (SIM-FIN-14) + вопрос Q-NEW-02
«Время автономного полёта» — параметр без дефолта прогоны W-19/W-20 не стартуют без явного значения значения в РЭ нет вообще; молчаливый дефолт превратил бы допущение в факт. Симулятор гоняет параметр развёрткой
Бит-в-бит гарантия — в пределах x86-64 и одного образа прогоны на ARM дадут расхождение в младших разрядах порядок FMA не контролируется кросс-архитектурно; ограничение объявлено явно, а не замалчивается
Симулятор не реализует checkpoint/resume падение длинного прогона = полный перезапуск дорого для окна; повтор детерминирован, поэтому дёшев

10. Открытые вопросы к заказчику, по влиянию на объём работ

61 уникальный вопрос после дедупликации 77 собранных (ревью 3 §5). Первым батчем уходят 12.

Ранг Вопрос Что меняет в объёме работ
1 Q-BIZ-10. Симулятор — отдельный продукт или внутренний инструмент проверки планировщика? судьба API, ролей, половины SIM-UX и SIM-PLT; при «инструмент» весь фронт уходит в демо-режим
2 Q-CAM-01 (+Q-UX-03). Достаточен ли геометрически верный кадр с текстурой по классу поверхности, или нужен фотореализм? исход развилки стека SIM-UX §6 и весь пайплайн рендера
3 Q-UX-05. Экраны разбора и сравнения прогонов обязательны для защиты? 2 экрана из 7 и SIM-UX-31/32/33 — MUST или SHOULD
4 Q-01 (+Q-MIS-08). Живой контур «сервер ↔ НСУ ↔ борт» или офлайн «файл → Planner»? появление/отсутствие целого слоя исполнения
5 Q-ENV-03. Значение и диапазон «Времени автономного полёта»; тот же это таймер, что порождает ОШИБКА КРЛ, или другой? вся модель U-06 / W-19 / W-20; сейчас параметр без значения, вердикты по потере связи — только сравнительные
6 Q-BIZ-07. Что для вас достаточное доказательство, что симулятор не врёт: совпадение с РЭ, с Geoscan Planner или с реальным полётом? целевой уровень пирамиды V1…V6 = объём работ по валидации
7 Q-MIS-10 (+Q-BIZ-02). Есть ли записанный реальный полёт (трек + паспорта фотографий + журнал отказов)? единственный путь V5 → V6; один такой файл ценнее десяти синтетических сценариев
8 Q-ENV-05. Какие метеопороги сверх ветра 12 м/с применяются на практике (дождь, мокрый снег, туман, обледенение)? весь раздел осадков SIM-ENV из assumed в derived
9 Q-BIZ-03. Время полного цикла подготовки 201 (сборка ПУ, укладка парашюта, натяжение жгутов) и оборота между вылетами? makespan многовылетных планов — один из двух критериев ТЗ; дефолт turnaround_time_min: 10 для катапультного борта заведомо недостижим
10 Q-UAV-07 (+Q-UAV-01). Максимальный эксплуатационный крен и фактический радиус разворота 201; реальные крейсерские скорости? R = V²/(g·tanφ): при 20° R = 216 м, при 45° — 79 м, разброс ×2,7 — центральное число модели галса
11 Q-NEW-02. Бортовая логика failsafe у 801 и Gemini (потеря связи, низкий заряд, geofence) — есть ли РЭ или параметры автопилота? модель половины парка в демо-сценариях s04/s05
12 QW-08 (+Q-25). Реальный максимум района работ: площадь, число зон, площадок, бортов в одном задании? все бюджеты производительности SIM-WORLD §7 и SIM-PLT §5

Новые вопросы, которых не было ни в одном доменном списке: Q-NEW-01 (принимается ли трактовка «эмуляции молнии» как грозовой обстановки), Q-NEW-02 (failsafe мультироторов), Q-NEW-03 (есть ли канал Q&A и лимит вопросов), Q-NEW-04 (появится ли носитель LiDAR/геофизики и нужен ли режим полёта с огибанием рельефа), Q-ENV-12 (на какой высоте нормируется wind_max — в РЭ высота измерения не указана), Q-MIS-11 (семантика speed_ms в плане: воздушная или путевая).


11. Перечень известных ограничений

Обязательный раздел сопроводительной документации по п. 5 ТЗ хакатона (hackathon/5. Геоскан.html). Написан честно: по этому разделу отличают инженерную работу от демонстрации. Формат: что НЕ моделируется или моделируется упрощённо → чем это грозит при интерпретации результатов → что нельзя утверждать на основании прогонов.

11.1 Модель борта и полёта

Что упрощено Чем грозит при интерпретации Что нельзя утверждать
Динамика — L1 (кинематическая точка), без аэродинамики: нет поляры, площади крыла, срыва, реакции на порыв быстрее постоянной времени Переходные процессы учтены константами; поведение на пределе крена и при сваливании не моделируется вообще Что борт «выполнит этот манёвр». Симулятор говорит только о времени и геометрии, не об управляемости
Крейсерские скорости всех трёх бортов — ДОПУЩЕНИЕ (airspeed_cruise_source: assumed): 27,8 / 10 / 10 м/с Ошибка крейсера 20 % даёт ~20 % по времени вылета и ~25 % по радиусу разворота (R ∝ V²) Что makespan точен до процентов. Он точен до класса «±5 % при верном крейсере»
Максимальный крен 201 — ДОПУЩЕНИЕ 30°; в РЭ крена нет R = 136,4 м при 30°, 216 м при 20°, 79 м при 45° — разброс ×2,7. Это самое дорогое допущение проекта Что разворот при шаге галсов 41 м выполним/невыполним. Можно утверждать только «при крене 30°»
Скороподъёмность 201 и 801 — ДОПУЩЕНИЕ (1,5 и 5 м/с); физический потолок 201 = 220 Вт/(8,5 кг·9,81) = 2,64 м/с Время набора смещено; на 150 м это ±40 с на вылет (<1 % от 180 мин) Ничего существенного — риск умеренный, но число помечено
Энергомодель 801 — по времени, не по энергии: Вт·ч в буклете нет Влияние ветра и набора высоты на продолжительность 801 не моделируется Что «801 хватит энергии». Для 801 есть только endurance_remaining_s; energy_left_wh возвращается как null
Средняя мощность 201 (246,7 Вт) больше паспортных 220 Вт двигателя Либо 220 Вт — номинал вала без авионики, либо 180 мин и 740 Вт·ч несовместимы Что энергобаланс 201 согласован с паспортом. Калибровка ведётся по паре (энергия, продолжительность)
endurance_max = 180 мин и range_max = 210 км совместно дают 19,4 м/с — ниже принятого крейсера Оба предела одновременно достижимы только на 19,4 м/с Что 201 пролетит 210 км за 180 мин на крейсере. Симулятор сообщает, какой предел сработал
Отказоустойчивость мультироторов при отказе двигателя не задокументирована Принято: терминальный отказ Что 801/Gemini «сядут на трёх» или «упадут» — данных нет
Логика failsafe 801 и Gemini — экстраполяция РЭ-201 РЭ на эти борта нет; каждая строка таблицы реакций — допущение Что мультиротор поведёт себя именно так при потере связи или низком заряде
Режим terrain-following (постоянный AGL с огибанием рельефа) отсутствует Геофизический профиль ТЗ (1,5–5 м AGL) неисполним даже при появлении носителя Что сервис поддержит геофизическую съёмку

11.2 Мир, рельеф, препятствия

Что упрощено Чем грозит Что нельзя утверждать
Рельеф — Copernicus GLO-30: 4 м LE90 / 6 м CE90, шаг 30 м. Это ЦМП (DSM), лес и застройка включены со сглаживанием 30-метровой ячейки 4 м LE90 против допуска клиренса 100 м — 4 %; отдельная опора ЛЭП в такой сетке не видна вообще Что клиренс измерен. Он возвращается интервалом значение ± LE90, и это не одно и то же
Слой препятствий — OSM + Microsoft ML Footprints; полнота не квантифицирована; объекты без height=* получают дефолт с пометкой height_source: assumed «0 столкновений» на неполном слое — derived-число, вводящее в заблуждение сильнее любого assumed Что маршрут безопасен по препятствиям. Можно утверждать только «столкновений не найдено на слое полноты X %»
Провис провода ЛЭП по цепной линии не моделируется: пролёт задан «стеной» до высоты меньшей из опор Препятствие завышено (консервативно), часть допустимых траекторий отвергается Что все отвергнутые траектории действительно опасны
Дыры в ЦМР заполняются: ≤ 8 ячеек — интерполяцией, больше — из GLO-90/ArcticDEM; вода — плоской поверхностью на медиане береговой линии На протяжённых реках с уклоном появляется ступенька; число над заполненной ячейкой не измерено Что клиренс над заполненной ячейкой достоверен. Он несёт terrain_quality ≠ measured
Балтийская 1977 без модели квазигеоида не пересчитывается; PROJ-data не содержит модели для РФ Импорт слоя в БСВ-77 отклоняется или требует пользовательского сдвига-константы (assumed) Что высоты приведены к государственной системе высот
Бит-в-бит воспроизводимость гарантируется в пределах x86-64 и одного образа контейнера На ARM возможно расхождение в младших разрядах из-за порядка FMA Что результат воспроизводим на любой машине
Приграничная полоса 25 км и район аэродрома 5 км автоматически не строятся — приходят зонами на вход Реестра аэродромов и границы в контуре нет Что сервис сам проверит регуляторные зоны
Актуализация бесполётных зон с fpln.ru отсутствует — API нет Зоны приходят из сценария либо рисуются оператором; источник фиксируется полем source Что зоны актуальны на дату прогона

11.3 Камера и покрытие

Что упрощено Чем грозит Что нельзя утверждать
Рендер кадра — не фотореалистичный: текстура по классу ESA WorldCover (общая точность 76,7 %) + отмывка рельефа. Нет микротекстуры, фасадов, техники, состояния поверхности Кадр пригоден для проверки геометрии покрытия, не для оценки дешифровочных свойств Что снимок выглядит как реальный. Каждый кадр несёт source_mode: synthetic_render
Радиометрия, дисторсия, шум матрицы, атмосферное рассеяние не моделируются; ИК — статичная температура по классу поверхности без физики теплопереноса; NETD 40 мК не воспроизводится ИК-кадр различает типы поверхности, но не является измерением температуры Что тепловой контраст соответствует реальному
Минимальный интервал срабатывания затвора не указан ни для одной нагрузки — ограничение V_g ≤ Bx/Δt_min не проверяется Реальный борт может быть вынужден лететь медленнее расчётного; продольное перекрытие 70/80 % может быть недостижимо Что заданное продольное перекрытие физически достижимо на расчётной скорости
Выдержка Pollux, тепловизора и 801 EO не задокументирована; смаз считается на допущении При более длинной реальной выдержке смаз занижен Что заявленный GSD достигается в плохих условиях освещения
Смещение оптического центра камеры относительно точки телеметрии (lever arm) неизвестно ни для одного борта Принято «точка съёмки = точка телеметрии» Субпиксельную точность геопривязки кадра
Углы подвеса Gemini не задокументированы; принята жёсткая надирная установка Ненадирные сценарии для Gemini не проверены Что Gemini может/не может снимать под углом
Кросс-GPU бит-идентичность растра не гарантируется (только метаданных и геометрии кадра) Картинка на разных машинах может отличаться в младших битах Что изображение воспроизводится пиксель-в-пиксель
Мультиспектральный профиль Pollux на 22 км² требует ≈1420 км суммарной длины галсов при дальности 201 в 210 км Паспортные «7–22 км² за вылет», видимо, калиброваны под RGB-профиль Что 22 км² мультиспектра снимаются за один вылет 201

11.4 Среда, связь, отказы

Что упрощено Чем грозит Что нельзя утверждать
Слов «дождь», «снег», «туман», «обледенение», «молния», «гроза» в РЭ-201 нет ни разу. Все пороги по осадкам, видимости, обледенению, грозе — назначенные, в env_profile.yaml с тегом assumed Доля «нелётных» окон целиком определяется нашими числами Что вылет допустим/недопустим по погоде сверх ветра и температуры
«Эмуляция молнии» переформулирована в грозовую обстановку: динамическая запретная зона + шквал + электростатика; прямой удар — терминальное событие с вероятностью 0 Трактовка не подтверждена заказчиком (Q-NEW-01) Что вероятность поражения борта молнией оценена
Профиль ветра по высоте — степенной (α = 0,143) либо логарифмический по классу WorldCover При α = 0,25 ветер 8 м/с на 10 м даёт 14,2 м/с на 100 м — за пределом всех трёх бортов Что фактический ветер на высоте съёмки известен. Это модель, а не измерение
Высота нормирования wind_max (12 / 10 / 10 м/с) в РЭ не указана; принято «на высоте полёта» Радикально меняет допуск к вылету: прогноз 7,2 м/с на 10 м уже отсекает мультироторы Что порог производителя применяется именно так
Турбулентность — модель Драйдена (MIL-F-8785C), созданная для пилотируемой авиации Для БВС массой 1,5–8,5 кг масштабы могут быть меньше, турбулентность заметнее Что отклонение от ЛЗП оценено консервативно
Орографика — параметрическая модель, не CFD (k_s = 2,0, длина ротора 3·H_ridge, w = −0,3·v) В сложном рельефе форма и положение ротора будут отличаться Что подветренный склон безопасен
Дальность командного канала 801 неизвестна: 10 км — дальность видеоканала Full HD Принято равенство каналов Что 801 управляем на 10 км
Зона Френеля считается на 869,75 МГц (середина диапазона 201); частот каналов 801 и Gemini в источниках нет Для 801 и Gemini расчёт Френеля не имеет основания Что зона связи мультироторов рассчитана
Коэффициент рефракции k = 4/3 и критерий 0,6·F₁ — стандартная радиоинженерная практика, в источниках проекта отсутствуют Граница «видно / не видно» смещается на единицы процентов, при инверсии — больше Что дальность связи предсказана точно
Коэффициент сноса парашюта отсутствует полностью; скорость снижения 5 м/с — допущение При 3 м/с снос при W = 12 м/с растёт со 168 до 280 м — это меняет вывод «сядет в водоём / не сядет» Что точка приземления 201 предсказана. Эллипс сноса — целиком наша модель
Интервалы деконфликтации (150 м горизонтально, 50 м вертикально) — не нормативные Служат порогом отчётности Что борта разведены безопасно. Симулятор измеряет и сообщает, не разводит
Реакции на коды НЕТ ДВИГ, ОШИБКА АКСЕЛ, ОШИБКА ГИРОСКОПА, ПЕРЕЗАГРУЗКА — инженерная догадка (РЭ предписывает «свяжитесь со службой поддержки», что в полёте неисполнимо) Поведение борта при этих отказах не проверяемо Что живучесть плана оценена по всем отказам

11.5 Продукт и контур

Что упрощено Чем грозит Что нельзя утверждать
Симулятор не сверялся с реальным полётом — реальных логов не существует (Q-BIZ-02); достоверность доказана до V5 Все числа — модельные «Симулятор соответствует реальности»
Симулятор не управляет реальными бортами и не подключается к НСУ; интерфейсов к железу и MAVLink-выхода в реальный канал нет Что сервис пригоден для оперативного управления полётами
Симулятор не планирует: он только исполняет чужой план Что сервис может заменить планировщик
Checkpoint/resume не реализован: повтор — новый run_id Падение длинного прогона = полный перезапуск
Один сервисный ключ на всех, пользовательской аутентификации нет; квот на очередь прогонов нет Любой потребитель может насытить очередь Что сервис многопользовательский
Разбор входных файлов ограничен лимитами размера/времени/памяти, но полного аудита парсеров (zip-бомба в KMZ, XXE в KML, битый GeoTIFF) не проводилось Битый файл может повесить ingestion Что импорт устойчив к враждебному входу
Ресурсы узла n2 не зафиксированы числом (Q-PLT-05) Параллелизм ≥4 и ночное окно — целевые, не проверенные Что регрессия 100 сценариев уложится в 8 ч

12. Соответствие ТЗ хакатона

ТЗ (hackathon/5. Геоскан.html) написано про планировщик. Симулятор — второй сервис; колонка «чем поддержан» отвечает на вопрос, усиливает ли он пункт ТЗ или уводит в сторону.

Пункт ТЗ Чем поддержан симулятором ID Статус
Вход: координаты ВПП (произвольные) слой sites мира; проверка пригодности площадки — сектор ±30°, объекты ≤ 0,1·L, старт строго против ветра SIM-MIS-01, SIM-WORLD-32, SIM-UAV-13/14, SIM-BIZ-20 закрыт, M1
Вход: перечень доступных БВС fleet.yaml — единственный источник; три борта + расширяемость по type SIM-BIZ-26/30, SIM-UAV-05/09 закрыт, M1
Вход: область съёмки tasks[].area; покрытие по кадрам считается против неё SIM-CAM-29/31, SIM-MIS-01 закрыт, M1
Вход: тип съёмки RGB полный контур: геометрия кадра, «сухой» режим, покрытие, карта GSD, список пропусков SIM-CAM-07/10/24/29/30/31 закрыт, M1
Вход: тип съёмки мультиспектральная Pollux, шаг галсов 15,5 м на 100 м; находка: ≈1420 км галсов на 22 км² при дальности 210 км SIM-CAM-03/20, Q-CAM-06 закрыт, M1 (контракт TIFF16×5 — M2)
Вход: тип съёмки ИК только 801; синтетический тепловизор по классу поверхности SIM-CAM-16/17 совместимость — M1 (MUST); тепловизор — M2
Вход: тип съёмки LiDAR носителя в парке нет — явная ошибка «нагрузки нет ни у одного борта» SIM-BIZ-30, INH-13, SIM-FIN-20 вне объёма. Причина: payloads.yaml раздел gaps — LiDAR не несёт ни один из трёх бортов ТЗ. Виртуальный сенсор — COULD, только как явно помеченная assumed-нагрузка
Вход: тип съёмки геофизическая то же + отсутствие режима terrain-following SIM-BIZ-30, SIM-FIN-20 вне объёма. Причина: нет носителя и нет режима полёта 1,5–5 м AGL с огибанием рельефа; при появлении носителя — новый режим в SIM-UAV (Q-NEW-04)
Вход: границы разрешённого ВП inclusion-зона, аналитический счёт длины вне полигона SIM-WORLD-19/21, INH-08 закрыт, M1
Вход: бесполётные зоны шесть типов, объёмная и призматическая геометрия, временнóе действие, фрейм высот SIM-WORLD-18…23 закрыт, M1
Вход: резервные площадки посадки landing_sites.reserve; действие DIVERT с проверкой достижимости по энергии; новая метрика reserve_reachable_frac — достижимость ближайшей резервной площадки из каждой точки маршрута; проверка пригодности reserve-площадок наравне с launch SIM-FIN-01/02, SIM-ENV §7.1, SIM-WORLD-32 восстановлен (был потерян: ни один SIM-* ID не подхватывал Q-11)
Учёт скорости ветра поле W(x,y,z,t), профиль по высоте, порывы, треугольник скоростей, допуск по фактическому ветру на высоте SIM-ENV-01…11 закрыт сильнее ТЗ, M1
ПЗ: маршрут и ключевые точки фазы → путевые точки закрытого словаря из 10 типов SIM-MIS-06 закрыт, M0
ПЗ: высота altitude_frame обязателен, три фрейма, пересчёт через ЦМР и модель геоида SIM-MIS-03, SIM-WORLD-07 закрыт, M0
ПЗ: скорость speed_ms пер-фаза, конверт скоростей, воздушная и путевая различаются SIM-MIS §1.3, SIM-UAV-26 закрыт, M0 (семантика speed_ms — допущение, Q-MIS-11)
ПЗ: место старта и посадки launch_site / landing_site пер-вылет; курс старта — функция ветра SIM-UAV-13, SIM-MIS §1.3 закрыт, M1
ПЗ: последовательность этапов полёта словарь phase из 9 значений, факт пер-фаза, дельта план/факт по фазам SIM-UAV-15, SIM-MIS-06/24, INH-11 закрыт, M0
Выгрузка KML / GeoJSON оба формата обязательны на вход; clampToGround — фатальная ошибка; round-trip ≤ 0,05 м SIM-BIZ-01, SIM-MIS-02/03/08 закрыт, M1
Два критерия оптимизации симулятор их не меняет, а измеряет факт; два плана прогоняются на одном мире и seed SIM-BIZ-23, INH-04 закрыт, M1 (сравнение по 20 сидам — M2)
Браузер на ПК (п. 3.1) фронт на встроенной графике, офлайн, 1366×768 SIM-UX-08/24/29 закрыт, M1
Рекомендуемый стек (п. 3.2): Leaflet/OpenLayers симулятор использует MapLibre GL JS + deck.gl SIM-UX §6 осознанное отклонение. Причина: Leaflet/OpenLayers — 2D-библиотеки, 3D-мир из них не строится; стек в ТЗ назван «рекомендуемым», не обязательным. Зафиксировано, чтобы вопрос на защите не был неожиданным
Демонстрация (п. 4): тестовый сценарий, визуализация маршрутов, выбор критерия, экспорт демо-полигон по чеклисту свойств, поминутный сценарий 5 мин, прекомпьютнутые прогоны, фолбэк-видео SIM-BIZ-25, SIM-FIN-06 восстановлен (демо как управляемый артефакт отсутствовало во всех доменах)
Документация (п. 5): архитектура, алгоритм, инструкция по запуску, описание API, руководство пользователя, перечень известных ограничений шесть артефактов; перечень ограничений — §11 этого документа SIM-FIN-03/04/05, SIM-BIZ-29/33, §11 восстановлен (было покрыто только «перечнем ограничений»)
Сдача (п. 7.1): концепция, архитектура, прототип UI, описание алгоритма доменные документы = концепция; архитектура — SIM-PLT; прототип UI — SIM-UX закрыт документами
Сдача (п. 7.2): код, демо, презентация, документация, инструкция по запуску M1 + SIM-FIN-03…06 закрыт планом
Критерии жюри (п. 8) обоснованность — числа «план/факт» вместо утверждений; качество алгоритмов — детерминированный headless и регрессионные барьеры; соответствие задаче — вход ровно KML/GeoJSON планировщика; эффективность и масштабируемость — фактический makespan на смешанном парке; качество демонстрации — воспроизводимый 3D-пролёт с проверяемыми числами вся таблица §6 закрыт

13. Замечание ревью → что сделано

Каждый блокер отработан: либо требование исправлено в своде, либо записано «принято вопреки» с обоснованием. Ни одно замечание не проигнорировано молча.

Ревью 1 — бизнес и ценность (80-review/01-business-review.md)

Замечание Что сделано
Б-1. ~244 MUST из 294 не привязаны к M0/M1/M2 Исправлено. §5: уровень проставлен каждому требованию в реестре; MUST разрешён только для M0/M1; M2-требования переведены в SHOULD/COULD. Итог: M0 — 67, M1 — 157, M2 — 111; MUST — 220 (все в M0/M1, в M2 их ноль). Перечень понижений — §5, таблица «Что понижено»; проверка «MUST только в M0/M1» выполняется скриптом по сводной таблице реестра
Б-2. Три несовместимых бюджета скорости движка (UAV-35 / MIS-34 / PLT-21) Исправлено. BR-24: единый бюджет, владелец — SIM-PLT. Прогон однопоточный; 1 борт-час ≤ 60 с на ядро; отсюда 3-борт прогон = ≥20× (совпадает с SIM-PLT-21), 20 бортов × 3 ч = ≤3600 с на ядре. SIM-UAV-35 переписан («≤120 с на 8 ядрах» удалено — противоречило детерминизму)
Б-3. Вердикт GO невыдаваем по собственному правилу «assumed не основание GO» Исправлено. BR-19 + новое требование SIM-FIN-16: трёхзначный вердикт NO-GO / UNRESOLVED / NO-FINDINGS с указанием полноты данных. Формулировка «нарушений не найдено на данных полноты X» заменяет «безопасно»
SIM-BIZ-25 против SIM-CAM-32: «повтор даёт идентичную картинку» невыполним Исправлено. M1-критерий: журнал и числа — бит-в-бит; картинка — «визуально та же» через SIM-UX-03 (позиции ≤ 0,1 м). Кросс-GPU бит-идентичность растра вынесена в §11.3
SIM-BIZ-06 (≤5 %) против SIM-MIS-30 (±1 с) — расхождение в 260 раз Исправлено. Принята формулировка MIS: сумма компонент = дельте ± 1 с (BR-17, A-10). SIM-BIZ-06 переписан
Три бюджета сборки мира (BIZ-08 / PLT-03 / WORLD-35) Исправлено. Владелец числа — SIM-WORLD. Единый: рабочие слои района ≤ 200 км² — ≤ 5 мин; полный мир с буфером 40 км (до 14 400 км², слой ≤ 90 м только для LOS) — ≤ 15 мин; повторно из кеша — ≤ 30 с. SIM-BIZ-08 и SIM-PLT-03 ссылаются
Размер RGB-кадра 20 МБ против 4 МБ Исправлено. Единый справочник размеров: PF1B (6000×4000, JPEG) ≈ 6 МБ; RX1RM2 (7952×5304, JPEG) ≈ 20 МБ; Pollux (TIFF16 × 5 каналов, 1440×1080) ≈ 15 МБ. Расчёт вылета 201 на 22 км² ведётся по RX1RM2 → 5000 кадров ≈ 100 ГБ. SIM-PLT-23 пересчитан
Анкер +18,2 % построен на «крейсере 15 м/с» Gemini, тогда как fleet.yaml даёт 10 Исправлено. В эталонах V-9 и W-02 явно записано: V_a = 15 м/с = airspeed_max, как в сценарии s06 планировщика; слово «крейсер» удалено. При крейсере 10 множитель был бы 1,67
SIM-BIZ-14: «≥95 % из ≥12 мутантов» — процент изображает статистику Исправлено. §7.3: «все 12 мутантов стартового набора; порог ≥95 % применяется при наборе ≥20»
SIM-CAM-23: самосбывающийся критерий («иначе оценка актуализируется») Исправлено. Переписан в односторонний инвариант: фактическое число кадров ≤ 1,3× оценки, иначе бюджет хранилища превышен и прогон помечается — эталон не правится по результату теста
V3 покрывает только геометрию; энергия, t_out_of_link, снос парашюта не имеют независимой сверки Исправлено. §7.2 — таблица «класс величин → максимальный достижимый уровень V»
fidelity_class не отражает полноту слоя данных Исправлено. BR-16 + SIM-FIN-17: признак layer_completeness для слоя препятствий, по образцу маски качества ЦМР SIM-WORLD-16; вердикт BR-19 обязан его называть
Учебный режим висит на неотвеченном Q-BIZ-06 и противоречии с РЭ Исправлено. §5: учебный режим целиком понижен до COULD/M2; формат interventions[] как детерминированный вход оставлен
SIM-UX §2.5: «юзабилити-тест с реальными операторами до защиты» невыполним Исправлено. Невыполнимая оговорка удалена; остаются машинные критерии SIM-UX-15/16 (halo и баннер не позже следующего кадра, код причины без доп. клика)
Редактор зон дублирует вход планировщика Исправлено. SIM-WORLD-27 понижен до SHOULD/M2; в M1 остаётся импорт + валидация + правка вертикальных границ и фрейма зоны
SIM-ENV-15 и SIM-ENV-02 — циркулярные приёмки, записанные как факт Исправлено. §7.2: обе величины несут validation_level: V2 и не подаются как сверенные с источником
SIM-UX-24: «Intel Iris Xe или аналог» — неизмеримо Исправлено. Понижено до SHOULD; замер ведётся на конкретной машине, модель указывается в отчёте
SIM-BIZ §5 M0 «рельеф в локальной UTM» против SIM-WORLD-02/04 Исправлено. §5/M0 переписан на ENU через ECEF; BR-06 объявляет ENU единственной рабочей СК во всех доменах
SIM-BIZ-27 против SIM-MIS-28 (имена метрик) Исправлено. Контракт: колонки plan / fact / delta при именах метрик валидатора. BR-21 переформулирован
SIM-BIZ-08 «не хуже линейного» без точек замера Исправлено. Точки 1 / 22 / 50 / 100 / 200 км²; t(S)/S не растёт более чем на 20 % между соседними точками
SIM-ENV-06 «эффект не менее 1 п.п.» — критерий заметности, не верности Исправлено. Помечен как smoke-test, validation_level: V2, не валидация спектра Драйдена

Ревью 2 — техническая состоятельность (80-review/02-tech-review.md)

Замечание Что сделано
Б-1. SIM-WORLD-18 (отказ без altitude_frame) против SIM-MIS-01/SIM-BIZ-01 — схема планировщика поля не имеет Исправлено. BR-08: зона без фрейма принимается с документированным дефолтом AMSL, warning ZONE_ALT_FRAME_DEFAULTED, зависящие величины помечаются fidelity_class: assumed. Жёсткий отказ ZONE_ALT_FRAME_REQUIRED остаётся только в режиме --strict. Отдельно — просьба к планировщику внести поле в schema_version 1.1 (односторонность зависимости сохраняется: это просьба, не требование)
Б-2. Дерейтинг холода: 28 мин (SIM-UAV-07/V-11) против 30 мин (SIM-ENV-15) Исправлено. Одна кривая на весь проект — кусочно-линейная от +15 °C, в env_profile.yaml. Gemini при −10 °C = 30,0 ± 0,5 мин. Эталон V-11 пересчитан с 28 на 30; SIM-UAV-07 ссылается на кривую, собственной модели не задаёт
Б-3. Клиренс по нижней границе ±LE90 против «0 ложных срабатываний» Исправлено. BR-07: hard-violation ставится по центральному значению клиренса; случай «клиренс − LE90 < 100 ≤ клиренс» — отдельный класс CLEARANCE_MARGIN_BELOW_GEOREF со статусом warning. Оба числа и ширина интервала присутствуют в ответе. SIM-WORLD-06 переписан
Б-4. SIM-UX-22 рисует связь кругом, физика считает LOS по рельефу Исправлено. BR-23: поверхность связи строится по фактической LOS-изолинии из полей link_quality / blocking_point журнала; круг radio_range_km показывается только как справочный максимум с явной подписью (для 801 — «видеоканал 10 км»)
Б-5. SIM-UAV-35 (8 ядер на прогон) против SIM-MIS-19/§3.4 (однопоточность ради детерминизма) Исправлено. См. Б-2 ревью 1: прогон однопоточный, параллелизм только по прогонам; SIM-UAV-35 приведён к «20 бортов × 3 ч ≤ 3600 с на одном ядре»
В-1. Три бюджета сборки мира Исправлено — см. ревью 1
В-2. Размер кадра ×5 Исправлено — см. ревью 1
В-3. V_a Gemini в анкоре +18,2 % Исправлено — см. ревью 1
В-4. SIM-UX-13 (шаг 0,1 с) против SIM-MIS-25 (телеметрия 5 Гц, интерполяция запрещена) Исправлено. Телеметрия поднята до 10 Гц (без децимации, = шагу dt = 0,1 с): 108 000 записей и ≈ 13 МБ на 180-минутный вылет 201 — укладывается в бюджет ≤ 20 МБ. Это снимает и П-8, и С-8: SSE-канал отдаёт тот же поток, покадровый шаг UI = 0,1 с
В-5. Порог напряжения: SIM-UAV-30 («посадка») против SIM-ENV строка 21 (RTLLAND) Исправлено. Дефолт — по букве РЭ-201, с. 98: LAND (борт сам начинает посадку). Вариант RTLLAND доступен переключателем сценария; расхождение D-ENV-01 остаётся открытым вопросом Q-ENV-01
В-6. Три порога невыполнимости галса (< V_a / ≥ V_a / ≥ 0,85·V_a) Исправлено. Единый порог: \|W⊥\| ≥ V_a → violation WIND_EXCEEDS_AIRSPEED (совпадает с валидатором); 0,85·V_a ≤ \|W⊥\| < V_a → warning WIND_MARGIN_LOW. Запас 15 % — параметр env_profile.yaml
В-7. SIM-ENV-10: высота нормирования wind_max подана как факт Исправлено. Помечено как ДОП-ENV-23 («в РЭ высота измерения не указана; принято — на высоте полёта»), добавлен вопрос Q-ENV-12
В-8. SIM-MIS §1.3: переопределение семантики speed_ms Исправлено. Занесено как допущение A-MIS-13 + вопрос Q-MIS-11; в схеме 40-formats/03 различения нет, расхождение зафиксировано
В-9. Сравнение 20 сидов не выражается объявленным API Исправлено. Явно записано: серию из 40 прогонов оркестрирует CLI/клиент, API отдаёт только GET /runs/compare двух готовых прогонов. SIM-MIS-40 → M2
С-1. SIM-UX-10: 43° — диагональ, не горизонталь Исправлено. Критерий: диагональный FOV Pollux 43,0° ± 0,5°, горизонтальный 34,5° (BR-23)
С-2. Рабочая СК не пронесена через домены Исправлено — BR-06
С-3. Невязка разложения дельты Исправлено — ±1 с
С-4. σ ≤ 3 м для мультиротора «выводится», но из таблицы не следует Исправлено. Помечено как выбор с запасом: таблица даёт 9,0 м для Gemini + PF1B; 3 м принято консервативно и объявлено допущением
С-5. Порог 95 % при 12 мутантах Исправлено — см. ревью 1
С-6. Шаг LOS 15 м против 10 м Исправлено. Единое правило: шаг профиля ≤ ½ шага рабочей сетки ЦМР — ≤ 15 м на GLO-30, ≤ 5 м на топосъёмке 10 м. Бюджет производительности 5·10³ запросов/с посчитан под 15 м
С-7. branch против SIM-PLT-25 (checkpoint/resume вне объёма) Исправлено. Оба — M2/COULD; согласовано
С-8. SSE 10 Гц против журнала 5 Гц; два набора множителей скорости Исправлено. Журнал 10 Гц (см. В-4); набор множителей UI приведён к 1× / 5× / 10× / 30×, режимы часов симулятора используют тот же набор
С-9. Пример смаза сшит из двух камер (выдержка Riebo + GSD Pollux) Исправлено. Обе величины помечены assumed; критерий SIM-ENV-13 переписан на согласованную пару «камера + её выдержка», Riebo из расчётов исключены (R8: FOV несовместим с f = 40 мм)
С-10. Радиовидимость по рельефу: M2 в vision, MUST в SIM-ENV Исправлено. Отнесена к M1 (на ней стоит флагманский сценарий W-21 и failsafe потери связи); vision-текст исправлен
М-1…М-7 (страница цитаты, диапазон шага галсов, арифметика метео-решётки, допуски round-trip, «≥0 при смене АКБ», источник диагонали Pollux, «до последнего знака») Исправлено попутно: страница цитаты о 30 % — с. 61; шаг галсов указывается с профилем («41–123 м для 201 + RX1RM2 на 100–300 м»); метео-решётка — 2,25 МБ по собственной формуле; round-trip: зоны ≤ 0,01 м, план ≤ 0,05 м (разные механизмы, объяснено); «смена АКБ ≥ 0» заменено на «≥ времени снятия/установки/предстартовой»; диагональ Pollux берётся из sensor_diagonal_mm: 6.3 явно; критерий «до последнего знака» применяется только к сравнимым колонкам

Ревью 3 — полнота и риски (80-review/03-completeness-and-risks.md)

Замечание Что сделано
Д-01. 294 требования без маппинга на вехи Исправлено — §5 и колонка «Уровень» в реестре
Д-02. Домены противоречат друг другу в MUST (П-1…П-9); нет единого реестра кодов ошибок и допущений Исправлено. Все девять противоречий сняты (см. таблицу ревью 2 выше); заведены требования SIM-FIN-09 (единый реестр кодов ошибок и событий) и SIM-FIN-10 (сквозной реестр допущений: четыре нумерации A-xx / A-MIS-xx / ДОП-W-xx / ДОП-ENV-xx сводятся в один файл с сохранением исходных ID как алиасов). Единый код фрейма высот — ALT_FRAME_MISSING (вместо трёх вариантов)
П-3/R-04. SIM-CAM-11 (кадры офлайн, MUST) против SIM-MIS-33 («без GPU», MUST) Исправлено. BR-15: «сухой» геометрический режим — MUST и дефолт headless для 100 % кадров; растровый кадр — GUI/по запросу, CPU-растеризатор с потолком ≤ 5000 кадров/прогон. SIM-CAM-11 переписан
Д-04/R-03. Выгрузка зеркала геоданных и погоды не запланирована, доступность источников не проверена Исправлено. SIM-FIN-07 + шаг 0 плана 03-next-steps.md: проверка доступности каждого источника из рабочего контура и выгрузка зеркала демо-района до начала кодирования. ERA5 понижен до SHOULD/M2
Д-06/R-02. Контракт 40-formats/03 не заморожен; нет планов-фикстур Исправлено. SIM-FIN-08: заморозка schema_version: 1 двусторонним соглашением + рукописные планы-фикстуры s01/s04/s07 в репозитории симулятора (они же — тесты импорта)
Д-05. Комплект документации по п. 5 ТЗ не покрыт требованиями Исправлено. SIM-FIN-03 (инструкция по запуску), SIM-FIN-04 (руководство пользователя по 7 экранам), SIM-FIN-05 (описание API); перечень ограничений — §11; архитектура и алгоритм — доменные документы
Потеряно требование ТЗ «резервные площадки посадки» Исправлено. SIM-FIN-01 (метрика reserve_reachable_frac — достижимость ближайшей резервной площадки из каждой точки маршрута по остатку энергии) и SIM-FIN-02 (проверка пригодности reserve-площадок по SIM-WORLD-32)
Д-03. Нет домена «демонстрация на защите» Исправлено. SIM-FIN-06: демо-полигон по чеклисту свойств (ЛЭП в OSM, перепад ≥ 50 м, аэродром в 5 км), поминутный сценарий 5 мин, прекомпьютнутые прогоны, фолбэк-видео
Д-07. Серверный стек симулятора не выбран Исправлено частично. SIM-FIN-15: решение о рантайме движка принимается до написания движка, критерий — управляемая FP-семантика (запрет -ffast-math, контроль FMA, фиксированный порядок редукций) и возможность прогнать тест детерминизма первым. Сам выбор — отдельный документ, шаг 1 плана
Д-08. Журнал без schema_version, совместимости и retention Исправлено. SIM-FIN-11: log_schema_version в манифесте; правило «минорные версии читаются вперёд»; retention числом — последние 30 прогонов батча и 10 демо-прогонов
Д-09. Безопасность разбора входных файлов Исправлено. SIM-FIN-13: лимиты размера (≤ 4 ГБ растр, ≤ 200 МБ вектор), времени (≤ 15 мин) и памяти на импорт; отключение внешних сущностей XML; отказ от распаковки KMZ с коэффициентом сжатия > 100
Д-10. Бортовая логика failsafe 801/Gemini не определена Исправлено. SIM-FIN-14: явная таблица «событие → реакция 801/Gemini» с пометкой ДОПУЩЕНИЕ на каждой строке + вопрос Q-NEW-02
Д-11. Синтетические тестовые миры нигде не порождаются Исправлено. SIM-FIN-12: детерминированный мини-генератор (плоскость + гауссов хребет 300 м + гряда 80 м + цилиндр-вышка 120 м + NFZ со срезаемым углом) как CI-фикстура
Д-12. Нет квот и приоритетов прогонов Исправлено. SIM-FIN-19: интерактивные прогоны имеют приоритет над батчем; остальное признано ограничением (§11.5)
Д-13. Приёмка мира против эталона отсутствует Исправлено. SIM-FIN-18: сверка GLO-30 против ArcticDEM 10 м и ALOS AW3D30 на демо-полигоне как дешёвый суррогат эталона; результат поднимает клиренс до V3
Д-14. AGPL-обязательства Open-Meteo self-host не разобраны Исправлено. Строка в §11.5 и в реестре: self-host без модификаций, исходники — апстрим; при модификации сервера действует сетевая оговорка AGPL-3.0
R-09. Переформулировка «молнии» не подтверждена Принято вопреки замечанию с митигацией: трактовка сохраняется (прямой удар — терминальное событие с вероятностью 0, потому что после него нечего продолжать), но добавлен вопрос Q-NEW-01 и демо-сценарий W-14 «молния буквально» рядом с грозовой зоной
Дыра: LiDAR не имеет даже COULD-требования Принято вопреки замечанию. SIM-FIN-20 фиксирует LiDAR и геофизику как вне объёма с причиной («носителя нет в парке ТЗ») и как COULD-ветку «виртуальный сенсор с пометкой assumed» — реализовывать её в M1/M2 не планируется, потому что она порождает числа, которые нечем проверить
Дыра: terrain-following отсутствует как режим полёта Принято вопреки замечанию. Режим не вводится: без носителя он не проверяем ни одним эталоном. Записано в §11.1 и в SIM-FIN-20; вопрос Q-NEW-04
77 вопросов с ~16 дублями Исправлено. Дедуплицировано до 61; топ-12 по влиянию на объём — §10; 6 новых вопросов заведены

Составлено 15.09.2026 по восьми доменным документам simulate/docs/ и трём ревью 80-review/. Числа без ссылки на источник в этом документе отсутствуют; всё помеченное ДОПУЩЕНИЕМ продублировано в §11 «Перечень известных ограничений».