[enhancement] Контракт сборки мода и форка: версии инструментов, capabilities и проверки реального WASM/рендера #102
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
🤖 Filed by Codex, AI-агент Владимира (chexit).
Архитектурный проход по
76f680eba64b64eb28435e71ce9f22a84b0e5da1.Диагноз
Форк уже состоит из pinned Horizon commit + 32 последовательных patch-файлов.
fork_stampпроверяет состав патчей — полезная основа. Однакоtools/airdef.py::modустанавливаетcargo-horizon-modтолько если бинарника нет: установленный ранее packer не сверяется с текущим форком. SDK подключён path-зависимостью, расширения render/input/ui experimental; наличие API и фактическая готовность конкретного эффекта имеют разную семантику (пример #81).CI уже запускает native unit tests и четыре сценария — добавлять «cargo test вообще» повторно не нужно. Эти тесты не проверяют host ABI/capability replies, WASM fuel/memory, реальную камеру/capture и GPU buffers. Отдельные задачи #44/#72 сохраняются: эта — о воспроизводимом контракте всей поставки, а не ещё один запрос обновить Horizon.
Этапы
Приёмка
Чистая машина и машина со старым
cargo-horizon-modполучают одинаковый совместимый артефакт либо понятную ошибку. Неподдерживаемая возможность не заставляет мод убирать рабочий fallback. Native success не маскирует fuel exhaustion в реальном WASM. В отчёте указываются все версии/хэши и лимиты; профили Mac проверяются отдельно, ускорение не обещается без замера. Короткая карта архитектуры/ADR объясняет, куда добавлять следующую engine-возможность.Общий порядок и зависимости: архитектурная дорожная карта.
🤖 Agent: Codex — по решению пользователя создана отдельная задача #104: перенос форка Horizon в самостоятельную репу и подключение
horizon/через pinned git submodule. Репозиторий создаст Владимир и передаст URL позже. Эта задача конкретизирует способ хранения/подключения движка; остальные требования к совместимости и проверкам сохраняются.🤖 Agent: Codex — работа Владимира (chexit).
Контракт: pinned repo-local packer по identity движка, прямой вызов бинарника вместо произвольного PATH tool; рядом с .hmod build-identity.json с SHA AirDef/engine/pin, WIT/artifact hash и dirty diff.
Добавлен
python tools/airdef.py test-wasm: настоящий .hmod в runtime закреплённого host, временное storage, 11 steps загрузки/команды/deploy/raid/tick/frame/world unload/reload. Прошло на Mac с обычными runtime лимитами (64 MiB linear memory, fuel init 2B/tick 300M/frame 10M/event 1B). Render replies отсутствуют: проверены ABI/fallback, не GPU. Assets validation в лёгком build, тяжёлый Wasmtime tier — ручной wasm-contract workflow.Полный capability available/enabled/accepted/rendered handshake, максимум нагрузки/fuel telemetry и graphics/export tier остаются.
Issue оставлен открытым согласно просьбе автора.
🤖 Agent: Codex, при участии GPT-6.1 Terra и GPT-6 Luna. Продолжение в
kimi-work: код.Движок опубликован в
chexit/horizon-airdef:airdef, pin86b1014a9218e68041444cbf52db02a85107c815. API26render.smoke-statusразличает available/enabled/request-accepted/backend-ready и возвращает generation + причину. При смене мира очищаются старые сегменты и часы; AirDef заменяет fallback только при выполнении всех четырёх условий.Backend-ready — путь последнего подготовленного основного кадра, не доказательство исполнения GPU или видимости каждого сегмента. Контракт для acoustic/capture этим API не расширялся. Проверены SDK/host/WIT-reference и реальный WASM guest со сменой мира/отключением/повторной отправкой; AirDef WASM — 16 шагов. Новый macOS arm64 клиент собран, Metal/HD кадр получен,
airdef.py checkподтверждает API26 у мода/форка/игры и схему ресурсов. GPU/export/max-load tier остаётся отдельной приёмкой. Issue не закрываю.🤖 Agent: Codex, with GPT-6.1 Terra and GPT-6 Luna.
Продолжение опубликовано в kimi-work до
19c53fd, движок horizon-airdef:airdef закреплён c89c78c47047fcfc0dfb0b8968600c650bf12d2b (API27). Добавлены scoped acoustics-status/capture-owner-status с available/enabled/request-accepted/prepared/reason и поколением мира. AirDef сохраняет звуковой fallback до подготовки, не принимает чужие Recording/Done и ограничивает Arming 600 тиками. Capture-stop проверяет владельца; смена мира снимает запрос/посылает отмену. Encoding уже переданного writer может завершиться, это не обещание удаления файла.Opt-in test-budgets: 64 комплекса + две перекрывающиеся волны по 80, 602 tick / 300 frame, 69 шагов actual WASM. JSON фиксирует clean SHA
aab3e78, pin/API/WIT/артефакт, совпадение build identity, Wasmtime и исходные fuel/memory caps. Фактический fuel/peak memory не измеряется. Отдельный ручной workflow; лёгкий tier остаётся отдельным (26 шагов). Есть offline failure tests на build exit, stale identity и fuel trap. Windows stale upstream URL исправлен через обязательный submodule sync (d3378b3); реальная Git-регрессия прошла.Проверки объединения: core release190+4, mod60+1boundary+4, WASM26 и heavy69. Клиент собран; два offscreen Metal-профиля: HD smoke ready после подготовки кадра, включённая акустика при no-audio остаётся awaiting-backend. Это не GPU completion/готовый MP4/прослушивание. Остаток: свет/камеры/sound-source handshakes, полные query/voice/peak budgets и GPU/export/платформенная приёмка.
Точный контракт и сохранённый JSON.
Issue state intentionally unchanged.
🤖 Agent: Codex.
Correction to comment 2402: the 69-step script did not prove two overlapping raids. Both commands were issued without ticks between them; order_raid rejects the second while the first is being planned, and the fixture did not assert that feedback. The reported 160 is an attempted/requested count, not a confirmed active count. The actual runtime run still passed, but its scenario-coverage claim was too strong. We are replacing the fixture with acceptance assertions and real overlap as part of investigating the user-reported double-raid crash; the saved report/docs will be corrected. No claim of a reproduced crash or a fixed cause yet.
🤖 Agent: Codex, with GPT-6.1 Terra and GPT-6 Luna.
Исправленное покрытие опубликовано до
10f24b5, движок ed7615d36. Теперь default test-budgets использует optional flat render-world: ground/sections/rays действительно отвечают, неожиданные ошибки команд в Script отклоняются. Оба приказа 40+40 Орешников проверены как принятые; на тике2102 assertion подтверждает184 цели в воздухе при64 ПВО. В середине включаются HD+grid. Root-прогон clean2932364: 271 шаг PASS, immutable fixture SHA bcc0359..., build identity совпал. Это конкретная проверенная точка, не измеренный peak; GPU не работает в sandbox. Старый69-шаговый report сохранён с coverage_correction.Отчёт считает requested units отдельно, подтверждённые assertions записывает только после success и точного SHA. Используются те же байты fixture, которые хешировались до сборки. Проверки итогового кода: core190+6 сценариев/7ignored; mod60+1boundary+4; lightWASM26; heavyWASM271; 5 report tests. Контракт и оба отчёта.
Issue state intentionally unchanged.
🤖 Agent: Codex, with GPT-6.1 Terra and GPT-6 Luna.
Published through
d410e2c, engine pin f95f03c08ec2916a0e5bd3b2d4a2a790e7937b47. Added optional host-side per-callback fuel profiling to the test runner (--fuel-profile); disabled by default, successful and failed callbacks report calls/max/budget/failures, with runtime budgets unchanged. Used it to reproduce and fix a large-raid cache invalidation fuel trap: before 300M fuel exhausted, after peak 135,273,690/300M across 3602 ticks. This is diagnostic-guest CPU/WASM evidence, not GPU/FPS evidence or a measured peak from the default budget report.Final clean
d410e2cdefault actual WASM flat fixture passed 271 steps; light fixture passed 27. Core suite: 192 tests plus 6 scenarios passed, 7 ignored; newly added maximum-menu native scenario passed separately. Adapter: 60 tests + 1 boundary + 4 scenarios passed. Full native client build and actual Wasmtime isolated-stop/profile regression passed on the pinned engine. Evidence and limits. Existing platform/GPU acceptance limits still apply; issue state unchanged.🤖 Agent: Codex, with GPT-6.1 Terra.
Published API29 engine 57f8b2853, parent c1a595b; handoff
56339b0. test-budgets now requests real --fuel-profile, persists per-callback calls/max/budget/failures and rejects missing measurements instead of inferring usage from configured caps. API28 point-lights-status reports accepted/cache/main-frame HD processing, API29 sound-sources-status reports real source-manager apply with live/offline output; per-run/world/source epochs and reset/disable/reload cases tested with actual Wasmtime guests. /airdef capabilities exposes both, without claiming visible pixels or audible voices.Also fixed camera owner collision: texture targets, scheduler, HUD/canvas/corner and main view now use (run_serial, local_id). Two real guests with identical camera IDs, scheduler/target lookup test and client check passed. Camera-ready milestone is deliberately still absent, as are full GPU/MP4/platform and query/voice/peak-memory acceptance. Exact scope. Issue state unchanged.
🤖 Agent: Kimi Code, с участием Kimi for Coding и DeepSeek.
В
kimi-work:9217f9a5c,61aaa0bf3; engineairdef=278f356aa(API 30).Добавлен per-run/per-world
camera-status:preparedозначает host-side encoding картинки в target либо кадр мира с фактически использованным main-view, не GPU fence. Чужой run с тем же local ID готовность не получает. Empty/clear/reload/world change и потеря picture target обрабатываются;/airdef capabilitiesпоказывает каждую камеру и main.Проверки: 37 unit + 4 API reference + 44 sandbox, 120 gfx, сборка клиента с/без mods, AirDef 66+1+5, настоящий WASM 27 шагов. Metal/offscreen приёмка подтвердила картинку monitor, main-view и повторную готовность после смены мира. Контракт и наблюдения.
Остаются полные query/voice/peak-memory budgets и Windows/другие GPU. Issue не закрываю.