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

Известные ограничения симулятора «мир БВС»

Шестой обязательный артефакт документации (п. 5 ТЗ). Каждая строка — осознанное решение с ID требований и доказательством в коде или прогоне. Обновлено по коду ветки fix/sim-limitations после волн 1–6 (merge-log волны 7 в docs/94-waves/ отсутствует; стенд/batch/вердикт — параллельные пакеты).

BRD §11 (docs/90-final/01-business-requirements.md) описывает целевую модель (в т.ч. Copernicus GLO-30 как DSM). Фактическое состояние поставки и кода — только в таблицах ниже.

Сводный реестр: docs/90-final/02-requirements-registry.md (docs/90-final/02-requirements-registry.md). Корзина C аудита: docs/93-audit/00-CHECKLIST.md §2.


Таблица ограничений (корзина C)

Ограничение Затронутые SIM-ID Почему так Что вместо этого Как снять
Реальные геоданные (GLO-30, WorldCover, ArcticDEM) SIM-GEO-01/02/03/04/13/15, SIM-FIN-07/18, SIM-GEO-24 Спайк 0.1 не пройден: зеркало в статусе blocked, в репозитории 0 байт внешних растров. Доказательство: fixtures/mirror/manifest.json:3 ("status": "blocked"); tests/test_terrain.py::test_mirror_blocked_stubMirrorNotAvailable Синтетические миры с манифестом (world_manifest.json: CRS, exported_at, sha256 слоёв); загрузка через WorldRuntime в прогоне (tests/test_world_runtime.py) Выгрузить зеркало демо-района, снять blocked, ingestion GeoTIFF/COG (SIM-GEO-03)
Зона Френеля, рефракция k=4/3, модель потерь пакетов SIM-WORLD-31 (часть), SIM-ENV-23 (часть) Профиль LOS по рельефу есть (env/los.py), но fresnel_clearance_m=0.0, refractivity_k=None (los.py:29-30); ветка k=4/3 — заглушка (los.py:86-88). Модели PER/Gilbert в src/ нет: grep -riE 'gilbert\|packet.?loss\|PER' src/geoscan_sim → 0 LOS по ЦМР с шагом ≤15 м и terrain_blocks (tests/test_link_los.py); круг радиодальности как запасной порог в env/link.py Включить расчёт 0,6·F₁ и k=4/3 в LosProfiler; добавить модель потерь в канал KTRL
Полный каталог погодных сценариев W-01…W-24 и дословные коды РЭ SIM-ENV-28/40 В коде нет реестра W-xx: grep -r 'W-0' src/geoscan_sim → 0. Имена сценариев только в комментариях генератора миров (tools/gen_synthetic_worlds.py:6). Кириллические коды отказов РЭ не выведены в error_codes.yaml целиком Поле ветра/температуры из плана и сценария (env/scenario.py), коды из contracts/error_codes.yaml, фикстуры миров под отдельные кейсы (ridge_80m — W-21) Отдельная волна: YAML-каталог W-01…W-24 + mapping на weather_event.kind
Мультиспектр TIFF, EXIF/XMP, тени по солнцу, смаз, обледенение кадра SIM-CAM-13/16/19/20/26, SIM-ENV-14 Headless-режим — сухая геометрия (fidelity_class: dry_geometric, без растра): tests/test_frames.py. В src/ нет exif/tiff/xmp: grep -riE 'exif\|xmp\|\.tiff' --include='*.py' src → 0. Тени/смаз/обледенение на кадре не моделируются Футпринт, GSD, JSON-сайдкар и frames.jsonl (camera/frames.py); объём и покрытие — по геометрии Рендер-пайплайн M2; EXIF/TIFF — SIM-CAM-19/20
Prometheus/Grafana-наблюдаемость и SSE/live SIM-PLT-15/29/30/31, SIM-UX-30 /metrics на базе prometheus_client (api/metrics.py:5), но нет scrape-конфигов, дашбордов Grafana и алертов в репозитории. SSE/live: grep -riE 'text/event-stream\|EventSource' src/geoscan_sim/api → 0; воспроизведение — плеер по telemetry.jsonl (web/src/playback/TelemetryPlayer.ts) Health + REST API + офлайн-просмотрщик (web/) Деплой на n2 + docs/05-monitoring.md; live-поток — отдельный M2-ID
Кросс-платформенная бит-идентичность и «через 7 суток» SIM-WORLD-38, SIM-GEO-18 (часть) CI и прогоны только x86-64 Linux в этом worktree; второй OS/ARM не гонялись. Детерминизм заявлен при отсутствии стохастики (tests/test_fact_report.py::test_determinism_manifest_declares_no_stochastic) Фиксация версий Python/зависимостей (uv.lock); повторяемость sha256 телеметрии на одной платформе Прогон регрессии на второй архитектуре + soak 7 суток (SIM-WORLD-38)
100 сценариев за ночь, ≥4 параллельных прогона, checkpoint/resume SIM-PLT-22/25, SIM-BIZ-07 sim batch появился (пакет Б-1, tests/defects/test_b6_stand.py::test_sim_batch_subcommand_registered зелёный), но прогон последовательный: пула воркеров и checkpoint/resume нет (src/geoscan_sim/batch/runner.py — цикл по заданиям; SIM-PLT-25 задокументирован как «не делаем» в реестре). Ночной прогон 100 сценариев не измерялся sim batch по каталогам сценариев и планов (CSV/JSON-сводка) и HTTP POST /runs с одним worker (api/run_store.py) Пул воркеров, manifest checkpoint, замер ночного прогона
Полное дерево contingency (12 действий), предикат P1–P6 сверх ветки связи SIM-ENV-37/38 (часть) В прогоне — единичные события contingency/link (engine/integrator.py, journal/writer.py:168), не 12 веток РЭ. Предикаты P1–P6 не сведены в отдельный модуль: grep -r 'P[1-6]' src/geoscan_sim/env → 0 Failsafe по таймеру автономии, коды связи в preflight (env/admission.py) Каталог contingency + P1–P6 после закрытия B3
Потоковая запись телеметрии и бюджет памяти SIM-PLT-24, SIM-MIS-25 Запись построчная (telemetry.jsonl), но оценка объёма на 180 мин sim-time ≈ 24,28 МБ при текущем наборе полей интегратора: вывод ESTIMATED_TELEMETRY_180MIN_MB=24.28 (tests/test_journal_schema.py::test_journal_volume_estimate_180min_report_only). Критерий реестра ≤20 МБ (SIM-MIS-25) не выполнен; в схеме больше опциональных полей (contracts/log_schema.json:212+) Децимация и явный telemetry_hz в манифесте Пересчёт бюджета в реестре (корзина D) + сжатие/колоночный формат
Опасные сближения, очередь на площадке, разделение по высотам SIM-UAV-36/37, SIM-MIS-38/39/40 M2; требует одновременного мультиборта с деконфликтацией. Сейчас sorties идут последовательно (mission/runner.py::_iter_sorties), без модели очереди ЗУ и vertical separation Один борт в sim-time за раз; энергия/оборот — по календарю sortie A6 мультиборт + SIM-MIS-38…40
Гроза, снег, обледенение как воздействия на борт SIM-ENV-12…21 0 строк предметной логики в src/geoscan_sim/env/ (есть только ветер/температура: tests/test_env_wind.py). grep -riE 'гроз\|storm\|lightning\|снег\|snow\|icing\|обледен' src/geoscan_sim → 0 Ветер и температура (+ дерейтинг Gemini): tests/test_env_derating.py Модели воздействий ENV-12…21; отдельные SIM-ID на каждое явление

Дословные фразы заказчика и их состояние

Источник фраз — docs/00-brief/02-vision-and-business.md, BRD §5. Статусы перепроверены по коду после волн 1–6 на ветке разработки (не копия стартового аудита 2026-09-16 утра).

Фраза заказчика Статус по факту кода ID и доказательство
«Карта местности и топосъёмка» НЕ РЕАЛИЗОВАНО (реальные данные) SIM-GEO-01/24: fixtures/mirror/manifest.jsonblocked; 0 байт GLO-30/WorldCover
«3D-мир с настоящими координатами» ЧАСТИЧНО SIM-GEO-10, SIM-WORLD-03: lon/lat в телеметрии (tests/test_journal_schema.py); 3D-сцена — офлайн-просмотрщик web/src/components/map/RunScene3D.tsx, без photoreal-тайлов реального рельефа
«Зоны (НФЗ, разрешённое воздушное пространство)» ЧАСТИЧНО SIM-WORLD-21/28/30: полигоны из мира + analyze_plan (tests/test_preflight_detection.py::test_nfz_corner_fixture_detects_intrusion); нет полного набора слоёв ВП из ТЗ
«Несколько типов БВС со своими ТТХ» ЧАСТИЧНО SIM-UAV-05/09: fleet.yaml/payloads.yaml, совместимость нагрузок (tests/test_exit_codes.py); последовательные sorties, не параллельный парк
«Камера и получение изображений» ЧАСТИЧНО SIM-CAM-11/24: сухие кадры и сайдкары (tests/test_frames.py); нет JPEG/TIFF/EXIF
«Облёт полётного задания» ЧАСТИЧНО SIM-MIS-06: sorties и фазы есть, но makespan_s.actual не измеряется — суммируется плановая длительность sortie (mission/runner.py:263-291, engine/phases.py:76-98); открытый дефект Б-3. Не полный эталон U-01…U-12
«Молния» НЕ РЕАЛИЗОВАНО SIM-ENV-18…21: grep по src/geoscan_sim → 0
«Ветер» ЧАСТИЧНО SIM-ENV-10/15: ветер в прогоне и WIND_EXCEEDS_FLEET_MAX (tests/test_env_wind.py, tests/defects/test_b3_env.py сняты частично)
«Снег / осадки» НЕ РЕАЛИЗОВАНО SIM-ENV-12…14: 0 строк в src/geoscan_sim
«Недоступность сети» ЧАСТИЧНО SIM-ENV-23/24: LOS по рельефу (tests/test_link_los.py); полная модель KTRL+PER — см. таблицу выше
«Борт обрабатывает воздействие и продолжает маршрут» НЕ РЕАЛИЗОВАНО (демонстрация) SIM-ENV-37/38: нет полного contingency; единичные события не покрывают формулировку заказчика
«Фронт и бэкенд на 3D-технологиях» ЧАСТИЧНО SIM-UX-*, SIM-PLT-01: simulate/web/ (Three.js/map), FastAPI (tests/test_api.py); не полный набор 7 экранов реестра

Счёт: полностью 0 · частично 8 · не реализовано 4 (из 12 формулировок).


Требования, признанные негодными

16 SIM-ID помечены «ТРЕБОВАНИЕ НЕГОДНОЕ» в аудите: критерии неисполнимы, противоречат друг другу или описывают не тот канал риска (например SIM-BIZ-05 про coverage/ вместо независимости validator/).

Что сделано Где читать
Полный разбор с вердиктом «подтверждаю / частично / отклоняю» и переформулировками docs/93-audit/91-review-requirements.md (docs/93-audit/91-review-requirements.md) §1
Корзина D чеклиста (ID → что не так → что сделать) docs/93-audit/00-CHECKLIST.md §2, корзина D
Целевое состояние реестра после правок docs/90-final/02-requirements-registry.md (docs/90-final/02-requirements-registry.md) (колонка «Статус»)

Код под «негодные» MUST не подгонялся: вместо этого — новые ID (например AST-граница валидатора в A0) и понижение в M2/SHOULD в BRD §5.