[bug] ГСН принимает Unknown за видимость и продолжает читать истинную скорость после потери цели #75

Closed
opened 2026-10-30 09:55:25 +00:00 by chexit · 1 comment
Owner

🤖 Filed by Codex, AI-агент Владимира (chexit).

Ревью 76f680eba64b64eb28435e71ce9f22a84b0e5da1 (после 6f3fc64). Продолжение #66: новая Fix/seeker модель ещё имеет обходы информационных ограничений.

1. Захват по непрочитанной геометрии

sim/mod.rs::step_missiles: in_view && !matches!(ground.world.probe(...), Sweep::Hit {..}) выставляет m.seen=now. Unknown (непрочитанная секция/нет чанка) считается доказанной прямой видимостью. Следом в Fix попадают истинные координаты и скорость. Даже у полностью холодного кэша seeker сразу захватывает цель, не ожидая LOS.

Выполненный нативный пример: PAC-3 age=100, позиция (0,100,0), направление +Z, цель (20,100,70), нет ПУ/треков, Ground::default(). После одного шага: seen=100, хотя ни одного ответа мира не было. Преграда в неизвестной части не может предотвратить этот первый захват.

2. Истинная скорость после потери LOS

В ветке m.seen>0 && now-m.seen<=REACQUIRE позиция и timestamp могут сохраняться старыми, но vel: t.vel копируется каждый тик, даже если этот тик не было измерения. Прогноз за препятствием узнаёт новый манёвр из truth.

Нативный тест: последний захват tick=100 с vel=0; на tick=101 между ракетой и целью известная стена, истинная скорость цели меняется на (2,0,0). Получено:

occluded seeker last_seen=100 fix_tick=100 velocity=(2,0,0)

Дополнительно построение links проверяет alive/moving и наличие Track, но не отказ Comms; командное наведение стоит согласовать с моделью поломок связи.

Нужно и приёмка

Unknown отделить от Clear, выбрать ограниченное ожидание/инерциальное сопровождение без выдачи нового измерения. При coast сохранять все компоненты последней оценки (pos/vel/tick), обновлять их только от реального доступного источника. Тесты: холодный/прогретый LOS, поворот цели за горой, reacquire, утрата связи, автономная ГСН уже захвачена. Не удваивать pk и не уничтожать все автономные ракеты только из-за потери ПУ.

🤖 Filed by Codex, AI-агент Владимира (chexit). Ревью `76f680eba64b64eb28435e71ce9f22a84b0e5da1` (после `6f3fc64`). Продолжение #66: новая Fix/seeker модель ещё имеет обходы информационных ограничений. ### 1. Захват по непрочитанной геометрии `sim/mod.rs::step_missiles`: `in_view && !matches!(ground.world.probe(...), Sweep::Hit {..})` выставляет `m.seen=now`. Unknown (непрочитанная секция/нет чанка) считается доказанной прямой видимостью. Следом в Fix попадают истинные координаты и скорость. Даже у полностью холодного кэша seeker сразу захватывает цель, не ожидая LOS. Выполненный нативный пример: PAC-3 age=100, позиция `(0,100,0)`, направление +Z, цель `(20,100,70)`, нет ПУ/треков, `Ground::default()`. После одного шага: `seen=100`, хотя ни одного ответа мира не было. Преграда в неизвестной части не может предотвратить этот первый захват. ### 2. Истинная скорость после потери LOS В ветке `m.seen>0 && now-m.seen<=REACQUIRE` позиция и timestamp могут сохраняться старыми, но `vel: t.vel` копируется **каждый тик**, даже если этот тик не было измерения. Прогноз за препятствием узнаёт новый манёвр из truth. Нативный тест: последний захват tick=100 с vel=0; на tick=101 между ракетой и целью известная стена, истинная скорость цели меняется на `(2,0,0)`. Получено: ```text occluded seeker last_seen=100 fix_tick=100 velocity=(2,0,0) ``` Дополнительно построение `links` проверяет alive/moving и наличие Track, но не отказ Comms; командное наведение стоит согласовать с моделью поломок связи. ### Нужно и приёмка Unknown отделить от Clear, выбрать ограниченное ожидание/инерциальное сопровождение без выдачи нового измерения. При coast сохранять все компоненты последней оценки (pos/vel/tick), обновлять их только от реального доступного источника. Тесты: холодный/прогретый LOS, поворот цели за горой, reacquire, утрата связи, автономная ГСН уже захвачена. Не удваивать pk и не уничтожать все автономные ракеты только из-за потери ПУ.
chexit added the priority:P2type:bugarea:simulation labels 2026-10-30 09:55:25 +00:00
Author
Owner

🤖 Agent: сделано в b43d471706 (запушено в main). Проверено нативными тестами, в игре не запускалось.

🤖 Agent: сделано в https://gitea.maoniao.team/chexit/airdef/commit/b43d47170626e5a403d4c210246cce8fd4b763bc (запушено в main). Проверено нативными тестами, в игре не запускалось.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chexit/airdef#75