From 56339b076e3dad9c6825ddbc73fdfe6b9a2727bc Mon Sep 17 00:00:00 2001 From: chexit Date: Wed, 4 Nov 2026 16:21:29 +0300 Subject: [PATCH] docs: hand off catalog, model, API29 and acoustics continuation Co-Authored-By: Codex --- README.md | 2 + docs/ACOUSTICS.md | 7 +++ docs/CODEX-HANDOFF.md | 8 ++- docs/CONTINUATION-2026-11-04.md | 59 +++++++++++++++++++ docs/ENGINE.md | 11 +++- docs/IMPLEMENTATION-STATUS.md | 11 +++- .../mass-acoustics-2026-11-04.json | 27 +++++++++ 7 files changed, 120 insertions(+), 5 deletions(-) create mode 100644 docs/CONTINUATION-2026-11-04.md create mode 100644 docs/measurements/mass-acoustics-2026-11-04.json diff --git a/README.md b/README.md index 90fef48..dcc862d 100644 --- a/README.md +++ b/README.md @@ -31,6 +31,8 @@ python3 tools/airdef.py play # запустить (аргументы игр ``` `all` синхронизирует URL сабмодуля из `.gitmodules`, включая обновление со старого upstream. +Продолжение 4 ноября: [модели, границы ядра, общий каталог, API29 и массовая акустика](docs/CONTINUATION-2026-11-04.md). + Диагностика в игре: `/airdef capabilities` показывает доступность API, принятие запроса и подготовку дыма, акустики и захвата именно этого мода. Подготовка не означает готовый GPU-кадр или MP4. Для разработчика: `python3 tools/airdef.py test-wasm` — лёгкий ABI-тест; diff --git a/docs/ACOUSTICS.md b/docs/ACOUSTICS.md index 3ac9297..f36bfb3 100644 --- a/docs/ACOUSTICS.md +++ b/docs/ACOUSTICS.md @@ -1,5 +1,12 @@ # Акустика AirDef: реализация, проверки и разбор Sound Physics Remastered (#96) +4 ноября добавлен opt-in массовый offline capture fixture: 100 движущихся двигателей и до +16 импульсных источников, настоящие `Audio::tick_acoustics`/`film_mix`, две одинаковые дорожки, +сброс хвоста при новом capture. Release на Apple M5: p50 3.55 мс, p95 4.30 мс, max 5.57 мс +на 50 мс аудио. Геометрия и сэмплы синтетические; это не полный игровой CPU/GPU/FPS и не MP4. +[Команда, результат и оставшаяся приёмка](CONTINUATION-2026-11-04.md), +[JSON и SHA дорожки](measurements/mass-acoustics-2026-11-04.json). + Сначала приведён текущий статус реализации. Разбор SPR и первоначальный план ниже сохранены как история решений; формулировки будущего времени в плане не заменяют текущий статус. При расхождении прав код. diff --git a/docs/CODEX-HANDOFF.md b/docs/CODEX-HANDOFF.md index 82b7e26..1cf2b92 100644 --- a/docs/CODEX-HANDOFF.md +++ b/docs/CODEX-HANDOFF.md @@ -4,7 +4,13 @@ Рабочая ветка `kimi-work`; issues не закрывать, публиковать комментарии с коммитом и проверками. Движок — отдельный `chexit/horizon-airdef`, ветка `airdef`, подключён точным gitlink `horizon/`. -## Текущее состояние: 3 ноября 2026 +## Текущее состояние: 4 ноября 2026 + +Последнее продолжение пяти задач: [CONTINUATION-2026-11-04.md](CONTINUATION-2026-11-04.md). +Движок `57f8b2853c4443f7e3ff5701600cbb262b53118f`, API29. В этом файле ниже сохранён +исторический журнал предыдущих серий; старые SHA и числа тестов не заменяют новую контрольную точку. + +### Контрольная точка 3 ноября Код предыдущих четырёх задач интегрирован до `6e2d661`. Продолжение #102/обратного вывоза опубликовано до `aab3e78`; последнее продолжение расследования налётов — `2932364`. diff --git a/docs/CONTINUATION-2026-11-04.md b/docs/CONTINUATION-2026-11-04.md new file mode 100644 index 0000000..3969db4 --- /dev/null +++ b/docs/CONTINUATION-2026-11-04.md @@ -0,0 +1,59 @@ +# Продолжение 4 ноября: #115, #87, #91, #102, #96 + +Рабочая ветка `kimi-work`. Все issues оставлены открытыми. Работа выполнена Codex с GPT-6.1 Terra. +Движок опубликован в `horizon-airdef:airdef`, текущий pin +`57f8b2853c4443f7e3ff5701600cbb262b53118f`, API **29**. + +## Изменения + +- **#115:** authored-модели «Ланцета» и Х-101: сегментные стреловидные крылья, + детали носа/корпуса. Элементы 17→49 и 22→30 соответственно; игровые параметры не менялись. + `5366988`, `cfae0c1`, `914f723`. [Кадры и ограничения](AIRCRAFT-MODELS.md). + `tools/model-preview` воспроизводит реальный `set-models`, `glow=false`; установленный + stone-template блок не подходит для оценки света динамической модели. Полосы яркости + на наклонных сегментах вынесены в [#123](https://gitea.maoniao.team/chexit/airdef/issues/123). +- **#87:** `375fdf2`, `cb73cb7`, `0c870c1`: типизированный `BatteryStatus`, отчёт кэша мира + и причины повреждений отделены от русского форматирования. Команда/карта/монитор используют + адаптеры `battery_view`, `world_view`, `why_view`. Порядок и тексты сохранены. + Это постепенное разделение: `CheckReason::Text`, сообщения `Out` и часть представления в ядре остаются. +- **#91:** `eea1b36`, `1553976`, `daa9ed7`: `catalog/content.json` — идентичности техники, + предметы и метаданные иконок; `catalog/sounds.json` — звуковые события, дальности и far-варианты. + `gen_catalog.py` создаёт Rust-константы, Python-регистрации читают тот же источник; + CI проверяет актуальность. Сохранены порядок позиционных сейвов, все 35 звуковых событий, + OGG и порядок общего RNG синтезатора. Числовые `DroneSpec`/`SamSpec` остаются типизированным + источником в Rust; полного переноса всех характеристик в JSON не было. +- **#102:** `63aefc7`: `test-budgets` включает настоящий `--fuel-profile` и сохраняет + `measured_fuel.callbacks`, включая ошибки. Отсутствие запрошенных счётчиков запрещает success. + В движке `6230ec703`/`d8fa77b00` добавлены API28 point-lights-status и API29 sound-sources-status. + Свет: заявка → cache → обработка main-view HD списка; звук: заявка → фактический apply + source manager при live/offline output. Отдельные run/world/source epochs, clear/reload и + отсутствие output проверены настоящими Wasmtime-гостями. Это не обещание пикселя/слышимости. + `/airdef capabilities` показывает оба состояния (`c1a595b`). + `57f8b2853` также устраняет коллизию камер: texture targets, scheduler, HUD/canvas/corner и + main-view адресуются `(run_serial, local_id)`. Проверены два настоящих гостя с одинаковым ID, + поиск target и scheduler, компиляция клиента. Camera-ready API и GPU-проверка ещё не добавлены. +- **#96:** engine `e44ad82a9`: opt-in `audio::tests::export_moving_mass_raid` проводит + 100 движущихся двигателей и 16 импульсных источников через настоящие `Audio::tick_acoustics` + и `film_mix`: эхо/реверб, камера, инвалидация и смена epoch, новый capture без старого хвоста. + Два 6-секундных прогона дают одинаковые float-сэмплы; ненулевая дорожка, finite/peak и reset + проверяются assertions. Сэмплы и геометрия синтетические, устройство звука не открывается. + Release на Apple M5: step+mix на 50 мс аудио — p50 **3.55 мс**, p95 **4.30 мс**, max **5.57 мс**. + [Отчёт и SHA дорожки](measurements/mass-acoustics-2026-11-04.json). + Это не замер полного игрового CPU/GPU, не Windows FPS и не готовый MP4. + +## Проверки и продолжение + +Объединённый core release: **193 unit**, 7 ignored, **8 сценариев**; адаптер: **64 unit**, +**1 boundary**, **5 сценариев**. Генераторы catalog/models, asset pipeline, sound references, +границы моделей и 6 тестов provenance/failure отчёта проверяются отдельно. Лёгкий WASM — 27 шагов. +Тяжёлый default fixture — 271 шаг с двумя принятыми налётами; его текущий отчёт пишет +`python tools/airdef.py test-budgets` в `.horizon-cache/wasm-budget-report.json`. + +Не завершены: субъективное прослушивание, настоящий MP4 с акустикой, полный 10-минутный +replay/export, расширенная модельная/ночная/FPS приёмка, camera-ready milestone и полные +query/voice/peak-memory бюджеты. Старый допуск broadband RT60 35% не ужесточался до 15%. +Попытка живого MP4 в этом проходе не дала проверенного файла и за приёмку не считается; +изолированные процессы закрыты. Продолжать с текущего pin, не с временных пакетов агентов. + +Обновление Windows прежнее: `git switch kimi-work`, `git pull --ff-only`, +`python tools/airdef.py all`, `python tools/airdef.py play`. diff --git a/docs/ENGINE.md b/docs/ENGINE.md index ee80318..88d7dda 100644 --- a/docs/ENGINE.md +++ b/docs/ENGINE.md @@ -63,7 +63,7 @@ runtime закреплённого движка. Используется вре ## Акустика и владение захватом (API 27) -Текущий pin: `f95f03c08ec2916a0e5bd3b2d4a2a790e7937b47` (API 27). Новые +Текущий pin: `57f8b2853c4443f7e3ff5701600cbb262b53118f` (API 29). Акустические `render.acoustics-status` и `render.capture-owner-status` возвращают поколение, `available`, `enabled`, `request-accepted`, `prepared` и причину. В игре всё это показывает `/airdef capabilities`. Отсутствие запроса, выключение, ожидание backend и ошибка различаются. @@ -132,7 +132,14 @@ offscreen-профиля Metal. При `HORIZON_ACOUSTICS=1` + `HORIZON_NO_AUDIO enabled/request=true, prepared=false, awaiting-backend; HD smoke переходит в ready после подготовки основного кадра. Это не замер производительности и не прослушивание. -Остаток #102: аналогичные статусы света/камер/источников звука, полные query/voice/peak budgets, +API28/29 добавляют отдельные `point-lights-status` и `sound-sources-status`: свет подтверждается +после cache/main-view HD обработки, звук — после source-manager apply с live/offline output. +Заявки привязаны к запуску мода и поколению мира; звук также к source epoch. Clear/reload/выход +снимают подтверждение. Это не GPU fence, загрузка сэмпла, наличие голоса или слышимость. +Камеры и их targets теперь изолированы по `(run_serial, local_id)` вместо глобального ID. +Camera-ready API пока отсутствует; проверки хоста не заменяют GPU-приёмку. + +Остаток #102: статус камер, полные query/voice/peak budgets, GPU/готовый MP4 и платформенная приёмка. Эти результаты текущими тестами не объявляются выполненными. ## Измеренный fuel и массовые взрывы diff --git a/docs/IMPLEMENTATION-STATUS.md b/docs/IMPLEMENTATION-STATUS.md index b644323..3cf4bdb 100644 --- a/docs/IMPLEMENTATION-STATUS.md +++ b/docs/IMPLEMENTATION-STATUS.md @@ -1,8 +1,15 @@ # Состояние исходных 16 задач -Ветка `kimi-work`, 3 ноября 2026. Issues остаются открытыми по просьбе владельца. +Ветка `kimi-work`, 4 ноября 2026. Issues остаются открытыми по просьбе владельца. «Реализовано» ниже означает проверенный объём кода, а не закрытие issue и не подтверждение всех платформ. +Новый проверенный объём: [продолжение пяти задач 4 ноября](CONTINUATION-2026-11-04.md). +#87: typed battery/world/damage diagnostics и адаптеры текста; #91: общий content/sound catalog +для Rust и Python; #102: измеренный fuel, API29 light/source milestones и изоляция камер; +#96: массовый deterministic offline capture; #115: authored Lancet/Х-101 и кадры инстансов. +Текущий engine pin — API29; старые номера/числа ниже описывают предыдущие этапы. +Новая оставшаяся проблема нормалей модели — #123. + | Issue | Реализовано | Что остаётся для полной приёмки | |---|---|---| | #72 | Upstream Horizon 0.2.97 объединён с форком; сохранена история; локальные тесты и Metal-полигон | Windows/Linux, native HDR, сравнительная производительность | @@ -12,7 +19,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, 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-приёмка остаются | +| #102 | Pinned engine/API29, packer/build identity; smoke/acoustics/capture-owner/light/source milestones; fallback/владение; WASM27 и flat stress271; измеренный callback fuel; JSON provenance/failure tests; Metal/no-audio smoke; URL/Git-регрессия; owner-scoped camera targets | Старое69-шаговое утверждение о перекрытии отозвано; статус камер, полные query/voice/peak budgets, GPU/готовый MP4 и Windows-приёмка остаются | | #104 | Движок вынесен в `chexit/horizon-airdef`, ветка `airdef`; AirDef использует точный gitlink | Отдельная Windows-проверка миграции старого standalone checkout | | #107 | ПУ оценивается по наблюдениям: обратный курс не выдаёт точную ПУ | Повторная игровая проверка сценариев с маневрирующими целями | | #110 | Изменения чанков инвалидируют акустические снимки/кэш; включено в pin и проверено engine-тестами | Внешняя игровая приёмка на целевых машинах | diff --git a/docs/measurements/mass-acoustics-2026-11-04.json b/docs/measurements/mass-acoustics-2026-11-04.json new file mode 100644 index 0000000..6faacdf --- /dev/null +++ b/docs/measurements/mass-acoustics-2026-11-04.json @@ -0,0 +1,27 @@ +{ + "audio_ms_per_tick": 50, + "audio_sha256": "8b5eeabb2585e2d8b2524a9fe992b028b2eba8c413f5c822d2a68ef352689b25", + "capture_reset": "next capture produced exact zero samples", + "channels": 2, + "command": "HORIZON_ACOUSTICS_OUT=/scratch cargo test --release --manifest-path horizon/Cargo.toml -p horizon-client --no-default-features --lib -j 2 audio::tests::export_moving_mass_raid -- --ignored --nocapture", + "fixture_commit": "e44ad82a9", + "gpu_or_windows_fps_measured": false, + "machine": "Apple M5 / macOS arm64", + "max_direct_cells_per_tick": 4056, + "max_echo_cells_per_tick": 36835, + "max_sources": 116, + "output_device": false, + "profile": "release", + "rate": 48000, + "real_mp4_checked": false, + "rust": "1.99.1", + "sample_determinism": "two full runs compared sample-for-sample in the test", + "schema": 1, + "scope": "synthetic geometry and samples through production Audio::tick_acoustics and film_mix, excludes game snapshot construction and GPU/encoder", + "seconds": 6, + "step_plus_mix_ms_max": 5.573375, + "step_plus_mix_ms_p50": 3.551625, + "step_plus_mix_ms_p95": 4.297167, + "synthetic": true, + "ticks": 120 +}