[bug] Невыполнимый возврат RM48U блокирует ТЗМ и независимые заявки на снабжение #128
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).
Результат
Одна живая С-400 с
ground_return=true, у которой сейчас невозможно забрать RM48U, блокирует работу всех подходящих пустых ТЗМ. При этом у других комплексов может быть выполнимая заявка на доставку, а у склада — нужный боезапас. ТЗМ стоит без job и не берёт груз.Проверено на
kimi-work@61aaa0bf359026711ba811a7f7e9877ce253ead2, в изолированной копии SDK-independent core; исходное дерево не менялось.Причина
step_supply, ветка return_work:
Здесь достаточно существования заявки. Затем реальная выборка отбрасывает движущийся/перезаряжающийся/повреждённый/уже занятый или недоступный по маршруту носитель. При
target=Noneвсё равно выполняетсяcontinue, и ветки typed supply и обычного пополнения не рассматриваются.Это не ожидание конкретной зарезервированной перевозки: текущий job сбрасывается в
None, но глобальное наличие невыполнимой заявки каждый раз затягивает свободную ТЗМ обратно в ту же ветку. Неполный typed cargo с местом для подбора также стоит проверить по фактическомуcan_pick.Воспроизведение и контроль
Состояние построено через реальные методы заявок (
unload_ground_round,load_ground_round,order_move), а не только прямым выставлением job:step_supply, увеличивая tick. Движение в этом узком тесте намеренно не исполняется: A временно недоступна всё окно, а подъехать к складу ТЗМ не требуется.С заявкой возврата: после 100 вызовов склад=2, груз ТЗМ=0, job=None, заявка B=true.
Контроль, отличается только отсутствием заявки возврата A: склад=1, груз ТЗМ=1 — выполнимая поставка начинается.
Штатные тесты ожидания движущегося/повреждённого носителя проверяют сохранность возвращаемой ракеты, но не продвижение другой работы параллельно ожиданию; этот случай ими не покрыт.
Ожидаемое исправление
continueбез учёта состояния груза.Приёмка
Регрессионный тест с контролем выше; варианты A движется / перезаряжается / повреждён launcher / путь признан недоступным / job занят другой ТЗМ. Проверить две ТЗМ и две независимые заявки, сохранение/восстановление и сохранность суммы typed ammunition. После восстановления доступности возврат A всё ещё должен выполниться физически.
Связано с #118. P2: логистика может зависнуть на неопределённое время, но задача не теряется и есть ручной обход через отмену возврата.
🤖 Agent: Kimi Code, с участием Kimi for Coding.
Реализовано и опубликовано в
kimi-workкакdc36d67eb.Ветка возврата теперь получает приоритет только при выполнимой цели: исправная развёрнутая ПУ, доступный маршрут, ракета не занята другой ТЗМ, склад с местом. При временно невыполнимом возврате заявка сохраняется, а свободная ТЗМ исполняет независимую доставку RM48U. Учтены частичный груз, ёмкость и снятие
return_cargo, когда последняя зарезервированная ракета покидает машину. Без реального RM48U-спроса прежнее ожидание не превращено в обычную перевозку БК.Регрессии: исходные 100
step_supply, движение/повреждение носителя, занятость другой ТЗМ, недоступный маршрут, две ТЗМ, save-restore посреди маршрута и последующий физический возврат с консервацией боеприпасов.Проверки на интегрированной ветке: core release 200 + 8 сценариев (8 ignored), adapter release 67 + 1 boundary + 5 сценариев, настоящий WASM 30 шагов. Игровая приёмка сложного рельефа остаётся в #118. Issue не закрываю.