docs: record verified overlap stress and unresolved Windows report
build / mod (push) Failing after 19s
build / mod (push) Failing after 19s
Keep the corrected historical coverage claim, archive the real flat-world WASM run, explain trap diagnostics and the small HD trail density change. Co-authored-by: Codex <codex@openai.com>
This commit is contained in:
@@ -146,6 +146,10 @@ sandbox-сценария, `/airdef ground-load <С-400>` загружает од
|
||||
тонмаппинг (ванильный диапазон не трогается, сжимается только то, что ярче). Источники передаются движку новым
|
||||
API мода `render.set-lights` (до 512, плавно интерполируются), режим — `render.set-lighting`.
|
||||
|
||||
В HD дымовые следы ракет немного уплотнены; число сегментов и время появления/выгорания сохранены.
|
||||
Это относится к ракетам ПВО, RM48U, крылатым, сверхзвуковым и баллистическим средствам;
|
||||
дым пожаров и слабая дымка винтовых дронов остались прежними.
|
||||
|
||||
**Сетка J** после сбития ещё 3,5 с держит камеру на сбитой цели, и комплекс в это время не пропадает из сетки.
|
||||
|
||||
**Повреждения.** Взрыв рядом с комплексом повреждает его: он хуже поворачивается, хуже видит и попадает,
|
||||
@@ -352,6 +356,8 @@ run-home/ тестовая игровая папка (для пров
|
||||
|
||||
## Известные ограничения
|
||||
|
||||
- Пользовательский вылет при двух крупных налётах на Windows расследуется в [#122](https://gitea.maoniao.team/chexit/airdef/issues/122).
|
||||
Обслуживаемый WASM stress прошёл, но не воспроизводит GPU или конкретный компьютер; исправление причины пока не заявлено.
|
||||
- Мод клиентский: дроны и ПВО видит только тот, у кого он стоит. Мультиплеер не поддерживается.
|
||||
- Окно Horizon на macOS не рисует кадры, пока оно перекрыто другими окнами (это поведение движка).
|
||||
- Шейдер работает, только если не включён шейдер-пак Horizon (они взаимоисключающие).
|
||||
|
||||
+22
-1
@@ -7,7 +7,8 @@
|
||||
## Текущее состояние: 3 ноября 2026
|
||||
|
||||
Код предыдущих четырёх задач интегрирован до `6e2d661`. Продолжение #102/обратного вывоза
|
||||
опубликовано до `aab3e78`; текущий движок — `c89c78c47047fcfc0dfb0b8968600c650bf12d2b`, API 27.
|
||||
опубликовано до `aab3e78`; последнее продолжение расследования налётов — `2932364`.
|
||||
Текущий движок — `ed7615d362490f57bca5ac239c64eb9360913a4b`, API 27.
|
||||
README описывает доступное поведение; `IMPLEMENTATION-STATUS.md` отделяет реализацию от приёмки.
|
||||
Ни одно issue не закрыто. Участники: Codex (интеграция, #119, ревью, документация) и три
|
||||
GPT-6.1 Terra (энергетика, типизированная доставка, излучение). Новые числа — только игровые.
|
||||
@@ -61,6 +62,26 @@ Git-регрессия и три теста failure report прошли. Исх
|
||||
awaiting-backend. Выход через quit подтверждён. Это не прослушивание, не benchmark и не новый MP4.
|
||||
Правила API, пределы проверок и команды: [ENGINE.md](ENGINE.md).
|
||||
|
||||
## Двойные налёты и плотность следов
|
||||
|
||||
Перед продолжением читать [RAID-STABILITY.md](RAID-STABILITY.md): Windows-вылет ещё не воспроизведён.
|
||||
Текущий исправленный WASM stress проверяет две принятые волны, обслуживаемую плоскую геометрию
|
||||
и 184 воздушные цели в конкретный момент; новый [JSON](measurements/flat-wasm-raid-budget.json)
|
||||
заменяет прежнее недостаточное доказательство покрытия. Лимиты fuel/memory не увеличивались.
|
||||
`86e1d272e` в движке улучшает callback/fuel/error-chain diagnostics; `ed7615d36` добавляет только
|
||||
необязательную flat-world среду тестов и отказывает неожиданным ошибкам команд в Script.
|
||||
Основная клиентская логика сцены этим test helper не заменяется.
|
||||
|
||||
`692ae77`: HD-треки ракет оптически плотнее на 12% через общий `rocket()` и cruise style.
|
||||
SAM/RM48U, крылатые/сверхзвуковые/баллистические треки покрыты; сегментов, радиусов и времени не добавлено.
|
||||
Пожары и дымка винтовых дронов не менялись. Обычные ванильные fallback-частицы этим множителем не меняются.
|
||||
Пять существующих smoke-тестов прошли; прирост FPS и приёмка новой плотности на Windows не заявлены.
|
||||
|
||||
Последний общий прогон: core release190 + 6 сценариев, 7 ignored;
|
||||
адаптер60 + 1 boundary + 4 сценария; лёгкий WASM26; тяжёлый WASM271; 5 тестов отчёта.
|
||||
Нативные overlap-тесты — `airdef-core/tests/scenarios.rs`:
|
||||
два стандартных массовых пресета и два налёта с разделением «Орешников», оба со встроенной записью.
|
||||
|
||||
## Исходная контрольная точка этой серии
|
||||
|
||||
Исходное состояние этой серии: `2689d93`; движок закреплён на
|
||||
|
||||
+15
-3
@@ -63,7 +63,7 @@ runtime закреплённого движка. Используется вре
|
||||
|
||||
## Акустика и владение захватом (API 27)
|
||||
|
||||
Текущий pin: `c89c78c47047fcfc0dfb0b8968600c650bf12d2b`. Новые
|
||||
Текущий pin: `ed7615d362490f57bca5ac239c64eb9360913a4b` (API 27). Новые
|
||||
`render.acoustics-status` и `render.capture-owner-status` возвращают поколение,
|
||||
`available`, `enabled`, `request-accepted`, `prepared` и причину. В игре всё это показывает
|
||||
`/airdef capabilities`. Отсутствие запроса, выключение, ожидание backend и ошибка различаются.
|
||||
@@ -89,7 +89,7 @@ python3 tools/test_budget_report.py
|
||||
python3 tools/test_airdef_build.py
|
||||
```
|
||||
|
||||
Сценарий `airdef-mod/tests/budgets/wasm_budget.toml` запускается в изолированном временном `tests/`,
|
||||
Сценарий `airdef-mod/tests/budgets/wasm_flat_budget.toml` запускается в изолированном временном `tests/`,
|
||||
поскольку CLI читает только непосредственные `tests/*.toml`. Обычный `test-wasm` остаётся лёгким.
|
||||
Ручной workflow `.gitea/workflows/wasm-budget.yml` не добавляет нагрузку на каждый push.
|
||||
|
||||
@@ -100,6 +100,18 @@ python3 tools/test_airdef_build.py
|
||||
обоих заказов и отличает requested counts от неизвестного пика в воздухе.
|
||||
Это не полный лимит расстановки (2000) и не нагрузочный
|
||||
тест GPU, mixer voices или всех физических world replies: sandbox не выполняет настоящий рендер/звук.
|
||||
|
||||
Текущий default заменён на flat render-world: ground/sections/rays отвечают для плоскости y=64,
|
||||
GPU не имитируется. Проверяются два принятых налёта по 40 «Орешников» и 64 ПВО; в середине
|
||||
включаются HD и grid. На тике 2102 assertion подтверждает **184 цели в воздухе**, а не пик за всё время.
|
||||
Прогон `2932364` прошёл: 271 шаг, 2102 tick и 2052 вызова frame стенда. У AirDef нет собственного
|
||||
frame hook; эти вызовы не являются нагрузкой на GPU или измерением 10M frame fuel мода.
|
||||
Точный отчёт: [flat-world budget](measurements/flat-wasm-raid-budget.json).
|
||||
|
||||
Fixture копируется из тех же байтов, чей SHA записан до сборки. Проверенные 2 принятия и точка
|
||||
184/2102 заносятся только после success и совпадения `BUDGET_ASSERTED_SHA256` с точной версией файла.
|
||||
После изменения fixture нужно повторно проверить её и обновить SHA/метаданные; простой список
|
||||
запрошенных целей не заменяет assertions. Пик остаётся null, если он не измерен.
|
||||
Отчёт `.horizon-cache/wasm-budget-report.json` содержит SHA/dirty/diff AirDef, pin/identity движка,
|
||||
API/WIT/артефакт, проверку build identity, сценарий, Wasmtime и исходные memory/fuel limits.
|
||||
`AIRDEF_BUDGET_REPORT` меняет путь отчёта. Stale identity запрещает запуск, ошибки сборки/тестов
|
||||
@@ -107,7 +119,7 @@ API/WIT/артефакт, проверку build identity, сценарий, Was
|
||||
|
||||
Лимиты берутся из исходников: memory 64 MiB; fuel init/tick/frame/event — 2B/300M/10M/1B.
|
||||
**Фактический расход fuel и peak memory не измеряются этим отчётом.** Сохранённый успешный прогон:
|
||||
[API27 budget report](measurements/api27-wasm-budget.json).
|
||||
[API27 budget report с поправкой покрытия](measurements/api27-wasm-budget.json).
|
||||
|
||||
Проверены реальный WASM guest с переходами состояний/владельца/мира, сборка клиента и два коротких
|
||||
offscreen-профиля Metal. При `HORIZON_ACOUSTICS=1` + `HORIZON_NO_AUDIO=1` в игре получено
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
| #91 | Общий каталог доступности и потребители меню/инвентаря; явный RM48U-профиль; корректные подписи очередей | Единый источник всех чисел, звуков и Python-регистраций; проверка вариантов комплексов |
|
||||
| #92 | Authored overrides, проверка ссылок/PNG/границ, manifest, безопасная транзакционная генерация; registry/texture/icon modules | Дальнейшее ручное улучшение контента относится к #115 |
|
||||
| #96 | Акустические пути; измеренные синтетические occlusion/echo/reverb fixtures; лицензии и исходные notices в архивах | Прослушивание, игровой массовый звук/CPU, акустика реального MP4; точность RT60 пока по допуску 35%, не 15% |
|
||||
| #102 | Pinned engine/API27, repo-local packer/build identity; smoke/acoustics/capture-owner milestones; fallback и владение экспортом; 26 шагов лёгкого WASM и 69 тяжёлого; JSON provenance/failure tests; реальный Metal/no-audio smoke; автосинхронизация URL и Git-регрессия миграции | Статусы света/камер/sound sources, полные query/voice/peak budgets, GPU/готовый MP4 и Windows-приёмка |
|
||||
| #102 | Pinned engine/API27, packer/build identity; smoke/acoustics/capture-owner milestones; fallback/владение; WASM26 и flat stress271 с двумя принятыми налётами и проверенными184 воздушными на тике2102; JSON provenance/failure tests; Metal/no-audio smoke; URL/Git-регрессия | Старое69-шаговое утверждение о перекрытии отозвано; статусы света/камер/sound sources, полные query/voice/peak budgets, GPU/готовый MP4 и Windows-приёмка остаются |
|
||||
| #104 | Движок вынесен в `chexit/horizon-airdef`, ветка `airdef`; AirDef использует точный gitlink | Отдельная Windows-проверка миграции старого standalone checkout |
|
||||
| #107 | ПУ оценивается по наблюдениям: обратный курс не выдаёт точную ПУ | Повторная игровая проверка сценариев с маневрирующими целями |
|
||||
| #110 | Изменения чанков инвалидируют акустические снимки/кэш; включено в pin и проверено engine-тестами | Внешняя игровая приёмка на целевых машинах |
|
||||
@@ -40,6 +40,7 @@
|
||||
| #119 | Три read-only луча в известной геометрии ослабляют непрямой blast для корпуса/узлов/объектов; проёмы дают частичное воздействие; прямой контакт сохранён | Unknown/stale: прежний урон без защиты, нулевое ожидание; partial blocks считаются занятыми кубами; GUI-проверка разрушения укрытия ещё нужна |
|
||||
| #120 | Конечное горение, powered/coast, сопротивление и снижение доступного манёвра, один остаточный pk по фактической скорости; swept-встреча; события burnout/energy loss; согласованное прекращение факела/дыма/звука | Игровой профиль, без аэродинамики и реальных параметров; сравнительная выборка 12 рейдов, расширенная балансировка и прослушивание остаются |
|
||||
| #121 | On/Off в команде и карте, save/replay; Off не создаёт own measurements и сохраняет сетевой приём; раскрытие работающего радара наблюдателем; SEAD использует last-known и возраст | Условный наблюдатель по расстоянию, без радиотехнической модели и ошибки пеленга; выбор на карте ещё не проверен в GUI |
|
||||
| #122 | Добавлены callback/fuel/full-chain diagnostics, настоящие перекрывающиеся native/WASM сценарии с ответами мира; тесты прошли | Пользовательский Windows-вылет не воспроизведён, причина и исправление не заявлены; нужен лог/точный профиль |
|
||||
|
||||
Точные коммиты, формат сохранения, тесты и порядок продолжения:
|
||||
[CODEX-HANDOFF.md](CODEX-HANDOFF.md). Формальный open-статус не меняется после реализации.
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
# Два крупных налёта: проверка стабильности
|
||||
|
||||
Пользовательский отчёт: AirDef часто перестаёт работать при двух больших налётах,
|
||||
резкого обвала FPS перед этим не замечено. RTX 3060 + Ryzen 5600X — около 50 FPS во время налёта.
|
||||
Точный build, профиль эффектов и отличие отключения мода от падения всего процесса пока не подтверждены.
|
||||
Задача: [#122](https://gitea.maoniao.team/chexit/airdef/issues/122).
|
||||
|
||||
**Причина вылета не установлена; исправление причины и прирост FPS не заявлены.**
|
||||
|
||||
## Найденные пробелы старых тестов
|
||||
|
||||
В первом `wasm_budget.toml` два приказа отправлялись без тика между ними. `order_raid` отклоняет
|
||||
второй во время подготовки первого; ответ не проверялся. Кроме того, TestGame не отвечал на
|
||||
render ground/sections/rays: пуски могли ждать неизвестную землю вместо полноценного полёта.
|
||||
69 успешных шагов не подтверждали 160 одновременно летящих целей. Старый отчёт сохранён с поправкой.
|
||||
|
||||
## Что проверено теперь
|
||||
|
||||
- Native: точный состав двух меню-пресетов «Массированный удар», 61 комплекс, плоский мир с
|
||||
ответами геометрии и встроенной записью. Оба приказа приняты, все 72 цели запущены,
|
||||
перекрытие проверено по числу одновременно живых целей.
|
||||
- Native: два приказа 40+40 «Орешников» с разделением, многими суббоеприпасами и окончанием записи.
|
||||
- Actual WASM: 64 комплекса, два принятых приказа 40+40 «Орешников», плоскость y=64 с ответами
|
||||
ground/sections/rays. В середине включаются shader hd и grid. 271 шаг прошёл;
|
||||
на тике 2102 проверено **184 цели в воздухе**. Пик за весь прогон не измеряется.
|
||||
- Кадры чередуются с тиками. 2052 вызова frame стенда не означают GPU-рендер:
|
||||
у AirDef нет собственной реализации frame hook, основная работа идёт в tick и событиях.
|
||||
|
||||
Отчёт clean `2932364`, engine `ed7615d36`:
|
||||
[flat-wasm-raid-budget.json](measurements/flat-wasm-raid-budget.json).
|
||||
Memory 64 MiB и fuel init/tick/frame/event 2B/300M/10M/1B не увеличивались.
|
||||
Отчёт фиксирует исходные лимиты, не измеренный расход fuel/peak memory.
|
||||
|
||||
```sh
|
||||
python3 tools/airdef.py test-budgets
|
||||
cargo test --release --manifest-path airdef-core/Cargo.toml --test scenarios overlapping_
|
||||
```
|
||||
|
||||
Это проверка гостевого кода и контрактов с синтетическим host-миром. Она не воспроизводит
|
||||
RTX-драйвер, реальный рельеф/чанки, звук и стоимость HDR, shadow/light/smoke на GPU пользователя.
|
||||
Включение HD в fixture проверяет путь подготовки модовых данных, а не графическую производительность.
|
||||
|
||||
## Диагностика следующего воспроизведения
|
||||
|
||||
В `latest.log` после остановки теперь записываются mod ID, callback, заданный и оставшийся fuel,
|
||||
полная цепочка ошибки. Сообщение OutOfFuel больше не объявляет тяжёлую работу бесконечным циклом.
|
||||
Проверка настоящим WASM `/spin` подтверждает, что при fuel trap останавливается только нарушивший мод.
|
||||
Это не доказывает, что пользовательский случай имеет ту же причину.
|
||||
|
||||
Нужны build identity и строки Windows `latest.log` вокруг остановки, состав двух налётов,
|
||||
HD/обычный профиль, открытые grid/monitor/replay и ответ: закрылась ли игра целиком.
|
||||
До этих данных не подменять диагноз увеличением fuel, отключением записи или обрезанием целей.
|
||||
Измерение FPS вести отдельно от поиска trap: стабильный FPS не исключает лимит WASM, а прошедший
|
||||
WASM-тест не исключает ошибку GPU или native host.
|
||||
@@ -0,0 +1,63 @@
|
||||
{
|
||||
"airdef": {
|
||||
"diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"dirty": false,
|
||||
"sha": "293236490b567866f7468a5bee5d61b0dcf8086d"
|
||||
},
|
||||
"api_level": 27,
|
||||
"artifact_sha256": "cb52fa5fd6beb266c63f2a5f2aa50553c24bc435a212c76142cc1bd228fd0aa6",
|
||||
"build_identity": {
|
||||
"checks": {
|
||||
"airdef_diff_sha256": true,
|
||||
"airdef_dirty": true,
|
||||
"airdef_sha": true,
|
||||
"artifact_sha256": true,
|
||||
"engine_identity": true,
|
||||
"engine_pin": true,
|
||||
"wit_sha256": true
|
||||
},
|
||||
"matches": true,
|
||||
"path": "airdef-mod/target/horizon-mod/build-identity.json"
|
||||
},
|
||||
"command": "test-budgets",
|
||||
"engine": {
|
||||
"identity": "ed7615d362490f57bca5ac239c64eb9360913a4b",
|
||||
"pin": "ed7615d362490f57bca5ac239c64eb9360913a4b"
|
||||
},
|
||||
"exit_code": 0,
|
||||
"output": " Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.39s\n Running `<checkout>/horizon/target/debug/cargo-horizon-mod horizon-mod test --hmod <checkout>/airdef-mod/target/horizon-mod/airdef.hmod budget`\nrunning 1 scripts against <checkout>/airdef-mod/target/horizon-mod/airdef.hmod\ntest tests/wasm_budget.toml ... ok (271 steps)\ntest result: ok. 1 passed\n",
|
||||
"runtime_limits": {
|
||||
"fuel_per_call": {
|
||||
"event": 1000000000,
|
||||
"frame": 10000000,
|
||||
"init": 2000000000,
|
||||
"tick": 300000000
|
||||
},
|
||||
"memory_bytes": 67108864,
|
||||
"metering": "source_configured; measured_per_scenario: unavailable",
|
||||
"source": "horizon/crates/horizon-mods/src/runtime.rs",
|
||||
"wasmtime_component_model": true,
|
||||
"wasmtime_fuel_metering": true
|
||||
},
|
||||
"scenario": "tests/budgets/wasm_flat_budget.toml",
|
||||
"scenario_counts": {
|
||||
"accepted_raids_asserted": 2,
|
||||
"air_defense_units": 64,
|
||||
"frames": 2052,
|
||||
"layout_unit_limit": 2000,
|
||||
"peak_airborne_observed": null,
|
||||
"raid_requests": 2,
|
||||
"raid_units_requested": 80,
|
||||
"scripts": 1,
|
||||
"snapshot_airborne_asserted": 184,
|
||||
"snapshot_tick": 2102,
|
||||
"steps": 271,
|
||||
"ticks": 2102
|
||||
},
|
||||
"scenario_render_world": "flat at y=64",
|
||||
"scenario_sha256": "bcc0359289ab20ab3de608bcc130f72d2cf88f9f6fbc470d7b6846e9db5d11df",
|
||||
"schema": 1,
|
||||
"status": "passed",
|
||||
"wasmtime_version": "48.0.7",
|
||||
"wit_sha256": "14c57b73f144888e04e27b77a6dfa29098c6b0c27c0383bb96aedaccb4c0a1d4"
|
||||
}
|
||||
Reference in New Issue
Block a user