[enhancement] Явный lifecycle Live/Replay/Export и часы сессии вместо набора независимых Option/флагов #89

Open
opened 2026-10-30 10:30:00 +00:00 by chexit · 3 comments
Owner

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

Архитектурный проход по 76f680eba64b64eb28435e71ce9f22a84b0e5da1.

Наблюдения

AirDef независимо хранит replay, export, film_prev, текущие настройки, listener, pending audio и кэши. Запуск/остановка и смена мира вручную восстанавливают ресурсы. #83 показывает реальное недопустимое сочетание: замена Player при живом Export. #80/#84 показывают разные источники времени/камеры. В shown_smoke для показа реплея временно заменяются sim.blasts, sim.fires.list и даже sim.tick, затем возвращаются обратно.

Предложение

  1. Описать допустимые состояния и переходы: Live, Replay(Map/Film), Export(Preparing/Capturing/Draining/Finished/Failed). Export владеет своим playback, камерой, захватом и сохранёнными настройками; не может существовать без них.
  2. Явный PresentationContext: scene time, delta, environment time, camera/listener, world/session generation. Отличать combat ticks, replay time и монотонное время UI; slow-mo/seek не меняют правила живого мира.
  3. Вход/выход состояния централизованно получает/освобождает overrides, модели/свет, pending audio и capture queues. Смена мира/ошибка/отмена проходят тем же cleanup. Завершение экспорта всегда дренирует хвост очереди.
  4. Передавать сцену read-only: показ дыма не должен временно переписывать живой Sim.

Приёмка

Таблица переходов покрывает смену режима во время экспорта, stop, seek, world unload, ошибку энкодера/SDK и повторный запуск. После каждого выхода настройки и источники звука восстановлены ровно один раз; старые ответы/события другой сессии не применяются. Preview и MP4 используют одну камеру/listener и одну шкалу сцены. Сначала чинятся конкретные #79/#80/#83/#84, затем постепенно убирается возможность повторить их класс.

Общий порядок и зависимости: архитектурная дорожная карта.

🤖 Filed by Codex, AI-агент Владимира (chexit). Архитектурный проход по `76f680eba64b64eb28435e71ce9f22a84b0e5da1`. ### Наблюдения `AirDef` независимо хранит `replay`, `export`, `film_prev`, текущие настройки, listener, pending audio и кэши. Запуск/остановка и смена мира вручную восстанавливают ресурсы. #83 показывает реальное недопустимое сочетание: замена Player при живом Export. #80/#84 показывают разные источники времени/камеры. В `shown_smoke` для показа реплея временно заменяются `sim.blasts`, `sim.fires.list` и даже `sim.tick`, затем возвращаются обратно. ### Предложение 1. Описать допустимые состояния и переходы: Live, Replay(Map/Film), Export(Preparing/Capturing/Draining/Finished/Failed). Export владеет своим playback, камерой, захватом и сохранёнными настройками; не может существовать без них. 2. Явный `PresentationContext`: scene time, delta, environment time, camera/listener, world/session generation. Отличать combat ticks, replay time и монотонное время UI; slow-mo/seek не меняют правила живого мира. 3. Вход/выход состояния централизованно получает/освобождает overrides, модели/свет, pending audio и capture queues. Смена мира/ошибка/отмена проходят тем же cleanup. Завершение экспорта всегда дренирует хвост очереди. 4. Передавать сцену read-only: показ дыма не должен временно переписывать живой `Sim`. ### Приёмка Таблица переходов покрывает смену режима во время экспорта, stop, seek, world unload, ошибку энкодера/SDK и повторный запуск. После каждого выхода настройки и источники звука восстановлены ровно один раз; старые ответы/события другой сессии не применяются. Preview и MP4 используют одну камеру/listener и одну шкалу сцены. Сначала чинятся конкретные #79/#80/#83/#84, затем постепенно убирается возможность повторить их класс. Общий порядок и зависимости: [архитектурная дорожная карта](https://gitea.maoniao.team/chexit/airdef/issues/103).
Author
Owner

🤖 Agent: Codex — работа Владимира (chexit).

Lifecycle: вместо независимых replay/export Option — Live/Replay/Export, где Export владеет своим playback. Stop, replacement, world change, completion и failure сходятся в end_session; успешный экспорт не отменяется при cleanup и ждёт Finishing/Done. Pending one-shots очищаются при выходе. Smoke читает recording, метод shown_smoke принимает &self и не переписывает Sim.

3 transition unit tests и существующие export/replay tests прошли (adapter 39/39). Полный PresentationContext/разделение всех часов и GPU/encoder failure integration ещё требуют отдельного этапа; реальный MP4 этим комментарием не подтверждаю.

Issue оставлен открытым согласно просьбе автора.

🤖 Agent: Codex — работа Владимира (chexit). [Lifecycle](https://gitea.maoniao.team/chexit/airdef/commit/814f8c7): вместо независимых replay/export Option — Live/Replay/Export, где Export владеет своим playback. Stop, replacement, world change, completion и failure сходятся в end_session; успешный экспорт не отменяется при cleanup и ждёт Finishing/Done. Pending one-shots очищаются при выходе. Smoke читает recording, метод shown_smoke принимает &self и не переписывает Sim. 3 transition unit tests и существующие export/replay tests прошли (adapter 39/39). Полный PresentationContext/разделение всех часов и GPU/encoder failure integration ещё требуют отдельного этапа; реальный MP4 этим комментарием не подтверждаю. Issue оставлен открытым согласно просьбе автора.
Author
Owner

🤖 Agent: Codex, при участии GPT-6.1 Terra и GPT-6 Luna. Продолжение в kimi-work: код.

Добавлен неизменяемый PresentationContext: combat/UI/recording clocks, world/session generation, listener, day time и rate. Session централизует cleanup через план действий; успешный уже дренированный export не отменяется повторно. World change инвалидирует generation и в Live, а host tick сохраняется после замены Sim. Задержанные звуки используют часы показа, включая дробное время slow-mo, и отбрасываются при смене generation/domain или возврате до момента их постановки.

Проверены seek/slowmo, смена поколений, ровно один cleanup для stop/world change/failure/success и отсутствие live-данных в recorded Smoke/Shown. Локально 50 adapter unit tests, boundary и четыре сценария; настоящий WASM contract — 16 шагов. Полная игровая приёмка MP4 с ошибкой энкодера и хвостом очереди ещё нужна. Issue остаётся открытым.

🤖 Agent: Codex, при участии GPT-6.1 Terra и GPT-6 Luna. Продолжение в `kimi-work`: [код](https://gitea.maoniao.team/chexit/airdef/commit/d4adbb1e473c94241c9b38f82bb325ba5450d67e). Добавлен неизменяемый PresentationContext: combat/UI/recording clocks, world/session generation, listener, day time и rate. Session централизует cleanup через план действий; успешный уже дренированный export не отменяется повторно. World change инвалидирует generation и в Live, а host tick сохраняется после замены Sim. Задержанные звуки используют часы показа, включая дробное время slow-mo, и отбрасываются при смене generation/domain или возврате до момента их постановки. Проверены seek/slowmo, смена поколений, ровно один cleanup для stop/world change/failure/success и отсутствие live-данных в recorded Smoke/Shown. Локально 50 adapter unit tests, boundary и четыре сценария; настоящий WASM contract — 16 шагов. Полная игровая приёмка MP4 с ошибкой энкодера и хвостом очереди ещё нужна. Issue остаётся открытым.
Author
Owner

🤖 Agent: Kimi Code, с участием DeepSeek.

В kimi-work опубликованы 675967ce4, cec7257ea, e6a700044; итоговый engine 278f356aa.

Получены настоящие MP4 (H.264 + AAC), отчёт кадров совпадает с ffprobe. Проверены отмена, отказ SDK, ошибка и повторный запуск энкодера, drain хвоста и 1920×1080. Найден и исправлен выход в заголовок во время экспорта: раньше sec=10 дал 3898 кадров/129.9 с; теперь frame + Session::world_left выполняют один cleanup и CancelCapture.

Движок также удаляет temp/log неудачного захвата, переносит лог в текст ошибки и сохраняет прежний готовый MP4 с тем же именем (проверено SHA). Общие проверки: 66 unit + 1 boundary + 5 сценариев, WASM API30 — 27 шагов.

Остаются 10-минутный экспорт и Windows/Linux. Issue не закрываю.

🤖 Agent: Kimi Code, с участием DeepSeek. В `kimi-work` опубликованы `675967ce4`, `cec7257ea`, `e6a700044`; итоговый engine `278f356aa`. Получены настоящие MP4 (H.264 + AAC), отчёт кадров совпадает с ffprobe. Проверены отмена, отказ SDK, ошибка и повторный запуск энкодера, drain хвоста и 1920×1080. Найден и исправлен выход в заголовок во время экспорта: раньше `sec=10` дал 3898 кадров/129.9 с; теперь `frame` + `Session::world_left` выполняют один cleanup и CancelCapture. Движок также удаляет temp/log неудачного захвата, переносит лог в текст ошибки и сохраняет прежний готовый MP4 с тем же именем (проверено SHA). Общие проверки: 66 unit + 1 boundary + 5 сценариев, WASM API30 — 27 шагов. Остаются 10-минутный экспорт и Windows/Linux. Issue не закрываю.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chexit/airdef#89