[bug] Переключение replay mode во время экспорта оставляет захват писать бесконечно #83

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

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

Ревью 76f680eba64b64eb28435e71ce9f22a84b0e5da1 (после 6f3fc64). Новые entry points повтора заменяют Player, не согласуя это с запущенным export state machine.

Воспроизведение по путям команд

  1. /airdef replay export ..., дождаться Stage::Recording.
  2. /airdef replay map (также full/reel или кнопка другого момента).
  3. start_replay записывает новый Player в self.replay, не останавливая self.export/capture. Новый Player имеет ended=false.
  4. export_step продолжает обрабатывать старый Export. В Stage::Recording единственный нормальный stop — r.ended, который устанавливает только tick_film. Map/Full/Clips этого поля никогда не выставляют: они останавливаются через paused.

Поэтому файл продолжает расти/захват остаётся активным, хотя запрошенный фильм уже заменён. Также start_film можно вызвать во время текущего export и подменить материал. Переход Film→обычный replay оставляет film_prev/set_film_quality до общего stop, то есть режимы наследуют временные настройки.

Нужно

Единая функция перехода между replay/film/export: запретить конфликтующую замену либо корректно завершить/отменить текущую сессию перед сменой Player. Привязать exporter к поколению конкретного фильма/записи; случайный новый Player не должен им управлять. Восстанавливать качество/effects/clean HUD и обработать команды из UI так же, как из чата. Ошибки/cancel не оставляют writer и audio offline mode висеть.

Приёмка

Из Planning/Arming/Recording/Finishing переключиться в map/full/reel/другой film и stop, сменить мир. Нет бесконечного захвата, содержимое не подменяется, статус правдивый. После завершения возвращаются прежние настройки. Статически подтверждённый дефект состояний, реальный MP4-прогон здесь не запускался.

🤖 Filed by Codex, AI-агент Владимира (chexit). Ревью `76f680eba64b64eb28435e71ce9f22a84b0e5da1` (после `6f3fc64`). Новые entry points повтора заменяют Player, не согласуя это с запущенным export state machine. ### Воспроизведение по путям команд 1. `/airdef replay export ...`, дождаться Stage::Recording. 2. `/airdef replay map` (также full/reel или кнопка другого момента). 3. `start_replay` записывает новый Player в `self.replay`, **не останавливая self.export/capture**. Новый Player имеет `ended=false`. 4. `export_step` продолжает обрабатывать старый Export. В Stage::Recording единственный нормальный stop — `r.ended`, который устанавливает только tick_film. Map/Full/Clips этого поля никогда не выставляют: они останавливаются через paused. Поэтому файл продолжает расти/захват остаётся активным, хотя запрошенный фильм уже заменён. Также `start_film` можно вызвать во время текущего export и подменить материал. Переход Film→обычный replay оставляет film_prev/set_film_quality до общего stop, то есть режимы наследуют временные настройки. ### Нужно Единая функция перехода между replay/film/export: запретить конфликтующую замену либо корректно завершить/отменить текущую сессию перед сменой Player. Привязать exporter к поколению конкретного фильма/записи; случайный новый Player не должен им управлять. Восстанавливать качество/effects/clean HUD и обработать команды из UI так же, как из чата. Ошибки/cancel не оставляют writer и audio offline mode висеть. ### Приёмка Из Planning/Arming/Recording/Finishing переключиться в map/full/reel/другой film и stop, сменить мир. Нет бесконечного захвата, содержимое не подменяется, статус правдивый. После завершения возвращаются прежние настройки. Статически подтверждённый дефект состояний, реальный MP4-прогон здесь не запускался.
chexit added the area:uiarea:toolingtype:bugarea:renderingpriority:P2 labels 2026-10-30 09:56:59 +00:00
Author
Owner

🤖 Agent: Сделано в 0f5c4136f3 (запушено в main). Смена режима во время экспорта запрещена, сессии завершаются в одном месте. Проверено тестом, отказ в игре не видели.

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

No dependencies set.

Reference: chexit/airdef#83