Files
airdef/docs/IMPLEMENTATION-STATUS.md
T
chexit d45629ae29
build / mod (push) Failing after 22s
Fix the UI-event fuel trap on a second large raid order
The Windows log for #122 showed the mod stopping in the UI event
(fuel budget 1e9, remaining 0) with known_units <- order_raid <-
launch_wave <- ui_select: order_raid recomputed the planner snapshot
known_units() for every drone, and the snapshot itself rescanned the
whole force and the dedup list per intel entry. A second big Smart
order cost drones x intel-log x force-size inside one event.

Reproduced in actual WASM with measured per-callback fuel through the
exact ui_select(BTN_LAUNCH) handler (diagnostic guest, trigger.patch):
before, a 111-drone second order at revealed=13172/known=144 exhausted
exactly 1e9 and stopped the mod (an 11-drone order at the same state:
247805865); after, the same scenario passes with max command fuel
32946177/1e9, failures=0, and /stats at tick 2602 byte-identical.
A stacked single-point layout dies to one warhead (known=0, cheap
order), so the scenario deploys spread clusters with a moved player.

Fix: one known_units snapshot per order_raid passed to radar_strikes
and choose_target; known_units is a single O(log + force) set pass;
price_grid_on reuses its snapshot. Emitter/network targeting and
carrier choice semantics are unchanged (native equivalence test
against the former predicate; WASM checkpoint counters equal).
Limits unchanged; HD/recording untouched; wave size unrestricted.

Committed regressions: native snapshot-equivalence and
second-smart-order tests; the heavy WASM fixture now orders two Smart
raids through the wave screen's launch function (airdef preset +
airdef raid) with EW and a combat intel log, four accepted orders
asserted; the light contract covers preset and the empty-wave refusal.

Core release 195 + 8 scenarios; adapter 65 + 1 boundary + 5 scenarios;
light WASM 30 steps; heavy WASM 283 steps (tick max 182413686/300M,
command max 6939810/1e9, failures 0). Windows GUI acceptance remains
external and is not claimed.

Co-Authored-By: Kimi Code (Moonshot AI) <noreply@moonshot.cn>
2026-11-06 10:29:36 +03:00

12 KiB
Raw Blame History

Состояние исходных 16 задач

Ветка kimi-work, 4 ноября 2026. Issues остаются открытыми по просьбе владельца. «Реализовано» ниже означает проверенный объём кода, а не закрытие issue и не подтверждение всех платформ.

Новый проверенный объём: продолжение пяти задач 4 ноября. #87: typed battery/world/damage diagnostics и адаптеры текста; #91: общий content/sound catalog для Rust и Python; #102: измеренный fuel, API29 light/source milestones, API30 camera-status и изоляция камер; #96: массовый deterministic offline capture; #115: authored Lancet/Х-101 и кадры инстансов. Текущий engine pin — API30; старые номера/числа ниже описывают предыдущие этапы. Проблема нормалей модели #123 исправлена в engine 45b43f00d; парные HD-кадры и ночная проверка Lancet записаны в галерее.

Issue Реализовано Что остаётся для полной приёмки
#72 Upstream Horizon 0.2.97 объединён с форком; сохранена история; локальные тесты и Metal-полигон Windows/Linux, native HDR, сравнительная производительность
#87 Каноническое SDK-free ядро airdef-core, используется модом и сценариями Дальнейшее отделение текстового/визуального вывода домена от адаптера
#88 Типизированный журнал измеренных переходов; read-only Snapshot для Smoke/Shown; записанные пожары, позы, пуски и зажигание Перевести оставшиеся model/audio adapters и режиссёра на общий снимок; замер полной 10-минутной записи
#89 Session владеет Live/Replay/Export; явные часы/поколения; единый cleanup; задержанный звук следует часам показа; выход в заголовок завершает показ одним cleanup (хук frame, Session::world_left); движок освобождает temp/лог ошибки энкодера и не трогает готовый MP4 Реальный короткий MP4 проверен 4 ноября (звук/видео, отмена, ошибка SDK и энкодера, повторный запуск, совпадение кадров и хвоста очереди, сохранность прежнего MP4). Остаётся: 10-минутный экспорт; приёмка Windows/Linux
#91 Общий каталог доступности и потребители меню/инвентаря; явный RM48U-профиль; корректные подписи очередей; catalog/specs.json — единственный источник числовых строк, из него генерируются Rust-таблицы для мода и airdef-core, CI проверяет свежесть Варианты комплексов (разные ракеты/профили по батареям) и игровая приёмка; каталог остаётся статичными данными, не динамическим ECS
#92 Authored overrides, проверка ссылок/PNG/границ, manifest, безопасная транзакционная генерация; registry/texture/icon modules Дальнейшее ручное улучшение контента относится к #115
#96 Акустические пути; измеренные синтетические occlusion/echo/reverb fixtures; лицензии и исходные notices в архивах; настоящий MP4 с акустикой: пары on/off, статусы ready, окклюзия/поглощение и диффузный wet-остаток в замкнутой геометрии Прослушивание, игровой массовый звук/CPU, чистый хвост/RT60 в MP4; точность RT60 пока по допуску 35%, не 15%
#102 Pinned engine/API30, packer/build identity; smoke/acoustics/capture-owner/light/source/owner-scoped camera milestones; fallback/владение; WASM27 и flat stress271; измеренный callback fuel; JSON provenance/failure tests; Metal/no-audio smoke; URL/Git-регрессия; camera-ready по закодированному кадру с per-run/per-world сбросом; GPU-приёмка monitor/main-view на Metal/offscreen (Apple M5) Старое69-шаговое утверждение о перекрытии отозвано; визуальная/Windows-GPU приёмка картинки камер, полные query/voice/peak budgets, GPU/готовый MP4 и Windows-приёмка остаются
#104 Движок вынесен в chexit/horizon-airdef, ветка airdef; AirDef использует точный gitlink Отдельная Windows-проверка миграции старого standalone checkout
#107 ПУ оценивается по наблюдениям: обратный курс не выдаёт точную ПУ Повторная игровая проверка сценариев с маневрирующими целями
#110 Изменения чанков инвалидируют акустические снимки/кэш; включено в pin и проверено engine-тестами Внешняя игровая приёмка на целевых машинах
#111 Вне области расчёта источник переходит на fallback вместо старой стены; проверено engine-тестами Внешняя игровая приёмка на целевых машинах
#114 Навигация учитывает footprint и окончательную authored-геометрию; остановка перед unread frontier; угловые пересечения Массовая игровая проверка всех новых шасси на сложном рельефе
#115 Три пилота с кадрами до/после, спокойные материалы; authored-проход по боевым и вспомогательным машинам Крупные планы и точность прототипов ещё промежуточные; остальные летательные аппараты/ракеты, анимации, дальние виды и FPS
#116 Streaming не освобождает busy-guard работающего acoustic worker; проверено engine-тестами Внешняя игровая приёмка на целевых машинах
#118 Физический С-400/RM48U, четыре общие ячейки, конечные запасы; доставка и обратный вывоз ТЗМ, резерв/отмена, возврат снятой ПВО; обе фазы вывозного маршрута сохраняются; carrier/крышки/выброс/зажигание/разгон в записи; фантомное ПВО удалено Визуальная приёмка пуска и маршрутов на сложном рельефе; другие носители не добавлены без подтверждённого профиля

Для #118 RM48U — явно условный Minecraft-профиль. Существование сочетания опирается на сообщение ведомства, а игровые параметры не выдаются за реальные. ground-stock — команда подготовки sandbox-сценария, по умолчанию запас нулевой; это не автономное пополнение и не производственная экономика.

Новые находки внешнего ревью и причины отказа от неверных замечаний: REVIEW-FOLLOWUP-2026-11-02.md. Картинки и ограничения художественного прохода: MODEL-PILOTS.md.

Дополнительно по просьбе владельца: раздельная батарея и холодный пуск. Есть отдельные ПУ С-400/С-500, роли общей РЛС, цепочка подсказка → собственное измерение → пуск, сохранение конфигурации и запись крышек. Это не закрывает оставшиеся пункты художественной и платформенной приёмки.

Дополнительные задачи из ревью

Issue Реализовано Границы и оставшаяся приёмка
#119 Три read-only луча в известной геометрии ослабляют непрямой blast для корпуса/узлов/объектов; проёмы дают частичное воздействие; прямой контакт сохранён Unknown/stale: прежний урон без защиты, нулевое ожидание; partial blocks считаются занятыми кубами; GUI-проверка разрушения укрытия ещё нужна
#120 Конечное горение, powered/coast, сопротивление и снижение доступного манёвра, один остаточный pk по фактической скорости; swept-встреча; события burnout/energy loss; согласованное прекращение факела/дыма/звука Игровой профиль, без аэродинамики и реальных параметров; сравнительная выборка 12 рейдов и расширенная сетка 48 рейдов (6 вариантов × 8 seed, батареи/дальности/классы) записаны в measurements; без подтверждённого дефекта параметры не менялись; прослушивание остаётся
#121 On/Off в команде и карте, save/replay; Off не создаёт own measurements и сохраняет сетевой приём; раскрытие работающего радара наблюдателем; SEAD использует last-known и возраст Условный наблюдатель по расстоянию, без радиотехнической модели и ошибки пеленга; выбор на карте ещё не проверен в GUI
#122 Воспроизведены два класса: tick fuel exhaustion на двух максимальных составах, HD (полный обход height-cache на каждом взрыве заменён удалением нужных ключей; max135.3M/300M) и остановка в UI event на втором крупном приказе (переснимок known_units на каждом дроне заменён одним снимком на приказ и O(журнал+группировка); max command 32.9M/1e9, /stats до/после совпал); нативные тесты эквивалентности и второго приказа; WASM fixture с 4 принятыми приказами; callback diagnostics/profile Требуется приёмка на Windows; без подтверждённого build identity нельзя утверждать ту же причину пользовательского сеанса; FPS/GPU не измерялись

Точные коммиты, формат сохранения, тесты и порядок продолжения: CODEX-HANDOFF.md. Формальный open-статус не меняется после реализации.