c96676f3e5
build / mod (push) Failing after 18s
Use a bounded read-only pre-destruction occupancy sample; preserve conservative damage for unresolved geometry and do not defer or repeat damage on replies. Co-authored-by: Codex <codex@openai.com>
101 lines
10 KiB
Markdown
101 lines
10 KiB
Markdown
# Передача разработки AirDef
|
||
|
||
Это журнал фактически сделанных изменений и ограничений проверки, а не список обещанных функций.
|
||
Рабочая ветка `kimi-work`; issues не закрывать, публиковать комментарии с коммитом и проверками.
|
||
Движок — отдельный `chexit/horizon-airdef`, ветка `airdef`, подключён точным gitlink `horizon/`.
|
||
|
||
## Контрольная точка перед #120 / #118 / #121 / #119
|
||
|
||
Исходное состояние этой серии: `2689d93`; движок закреплён на
|
||
`86b1014a9218e68041444cbf52db02a85107c815`, уровень API 26. Рабочее дерево было чистым,
|
||
коммиты опубликованы. Текущий точный pin всегда смотреть в `git ls-files --stage horizon`,
|
||
а происхождение собранного пакета — в `airdef-mod/target/horizon-mod/build-identity.json`.
|
||
|
||
Четыре задачи заказаны владельцем отдельно; на этой контрольной точке они **в работе**:
|
||
|
||
| Issue | Заказанный остаток |
|
||
|---|---|
|
||
| #120 | Конечная работа двигателя перехватчика, coast, энергия манёвра, согласованные эффекты |
|
||
| #118 | Типизированная доставка RM48U через ТЗМ; не создавать неподтверждённые носители |
|
||
| #121 | Переключение излучения, сохранение разрешённого внешнего целеуказания, разведка излучателей |
|
||
| #119 | Ослабление непрямого урона известным укрытием, ограниченная политика Unknown |
|
||
|
||
Исполнители работают в отдельных worktree; интеграция, проверка и публикация идут небольшими
|
||
коммитами в `kimi-work`. Не принимать наличие кода в соседнем worktree за опубликованную функцию.
|
||
|
||
## Что уже сделано в предыдущей серии Codex
|
||
|
||
- `airdef-core` компилирует исходники `airdef-mod/src/sim/mod.rs` через `#[path]`.
|
||
Это единый источник симуляции, но разделение домена и представления ещё не завершено (#87).
|
||
- Исправлены остаточные терминальные коллизии ответных ударов и скачок после world-query (#106/#117).
|
||
Восстановление ответов мира не даёт права телепортироваться к плановой точке.
|
||
- Доработаны запись ответных ударов, launch one-shot и live-след (#109), lifecycle показа и часы
|
||
отложенного звука (#88/#89). Полная унификация всех потребителей сцены ещё не закончена.
|
||
- Движок вынесен в отдельную репу; сборщик берётся из закреплённого форка, а не случайного PATH.
|
||
Есть build identity, настоящий WASM contract и handshake доступности дыма API26 (#102/#104).
|
||
- Обновлён upstream Horizon 0.2.97, исправления очереди/инвалидации акустики сохранены.
|
||
Измерительные fixtures, notices и лицензии добавлены; прослушивание и массовый CPU-тест ещё нужны (#96).
|
||
- Pipeline поддерживает authored overrides, manifest и экспорт итоговых габаритов в
|
||
`sim/generated_bounds.rs`. Навигация учитывает footprint. Generated output вручную не редактировать.
|
||
- Улучшены модели наземной техники; степень сходства и материалы ещё промежуточные (#115).
|
||
Галерея: `MODEL-PILOTS.md`, `VEHICLE-MODELS.md`; это не приёмка всех летательных аппаратов.
|
||
- `966b52f`: раздельные ПУ С-400/С-500, роли Radar Search/Engagement/Height/Multi.
|
||
Чужая подсказка разрешает огневому радару уточнение, но не подменяет собственное измерение.
|
||
- `966b52f`: резерв конкретной ячейки, отдельные крышки ТПК, выброс до включения двигателя.
|
||
RM48U — условный игровой профиль С-400; AA и ground rounds делят четыре физические ячейки.
|
||
Боеприпас списывается при выбросе, не при выдаче отложенного приказа; отмена не расходует его.
|
||
- Конфигурация, маска использованных ячеек и положение крышек включены в save/replay.
|
||
Smoke начинается в точке зажигания. С-500 ограничен двумя ракетами по числу ТПК;
|
||
старое сохранение с четырьмя загруженными ракетами при загрузке ограничивается двумя.
|
||
- `2689d93`: документированы источники архитектуры батареи, команды, скриншоты и границы визуальной проверки.
|
||
|
||
## Проверки и воспроизведение
|
||
|
||
На `966b52f`: 169 тестов ядра + 4 сценария прошли, 7 ignored; адаптер — 53 теста,
|
||
1 boundary и 4 сценария прошли; WASM contract — 21 шаг. Это исходная контрольная точка,
|
||
не результат будущих четырёх задач. На `2689d93` собран чистый пакет (`airdef_dirty=false`).
|
||
|
||
```sh
|
||
cargo test --manifest-path airdef-core/Cargo.toml
|
||
cargo test --manifest-path airdef-mod/Cargo.toml
|
||
python3 tools/airdef.py test-wasm
|
||
python3 tools/gen_models.py --check
|
||
python3 tools/test_gen_assets.py
|
||
git diff --check
|
||
```
|
||
|
||
На этой macOS cargo находится в `~/.cargo/bin/cargo`. GUI-проверки запускать с отдельным
|
||
`HORIZON_HOME` и рабочим каталогом тестового мира; не использовать реальные сохранения владельца.
|
||
Metal-проверки не подтверждают Windows/Linux, HDR всех платформ или прослушивание звука.
|
||
Скриншоты крышек подтверждают только их позу: полного видео выброса/зажигания пока нет.
|
||
|
||
## Важные ограничения для следующего агента
|
||
|
||
### #119: непрямой взрыв и укрытия
|
||
|
||
`WorldCache::blast_cover` читает текущую occupancy без запросов мира и без загрузки чанков.
|
||
Три луча к репрезентативным точкам корпуса дают общий множитель для корпуса и узлов;
|
||
для отмеченного объекта считается своя тройка. Известное укрытие оставляет 15% игрового
|
||
воздействия по перекрытому лучу, открытый — 100%; края/проёмы дают промежуточное значение.
|
||
Все лучи этого вызова читаются до отправки разрушения в движок. Исходный воксель пропускается,
|
||
чтобы контакт на поверхности стены не закрывал взрыв сразу во все стороны.
|
||
|
||
Unknown, stale и слишком старые секции считаются **неразрешёнными**. Ожидание равно нулю:
|
||
для них сохраняется прежний неослабленный урон как консервативная игровая политика,
|
||
а не утверждение, что там воздух. После ответа мира этот взрыв не пересчитывается.
|
||
Нет очереди отложенного урона и повторного применения на world reply. Частичные блоки
|
||
на этом этапе считаются занятым кубом; тонкая collision shape для blast отдельно не запрашивается.
|
||
Прямой вооружённый контакт не ослабляется этим множителем.
|
||
|
||
Проверки `sim::damage::cover_tests`: стена/проём для корпуса, узлов и объекта;
|
||
Unknown и поздний ответ без повторного урона/запросов; прямое попадание; устаревшая геометрия;
|
||
пропуск исходного блока. Все четыре прошли. Объединённый полный прогон будет указан ниже.
|
||
|
||
- Не закрывать issue даже после исправления; сообщать проверенный объём и остаток в комментарии.
|
||
- Не переписывать gitlink на плавающую ветку. Изменения движка сначала публикуются отдельно.
|
||
- Не путать наблюдённый трек с настоящим положением цели и `own_tick` с relay.
|
||
- Не менять live-мир при seek; replay воспроизводит последствия, не применяет урон повторно.
|
||
- Не считать Unknown свободным пространством или подтверждённой стеной без явной игровой политики.
|
||
- Новые числа — игровой масштаб, не реальные характеристики вооружения.
|
||
- Токен Gitea читать из локального файла во время запроса; не коммитить и не печатать.
|