Решили: цикл жизни мероприятия покрыт PlayMode-тестом ActivityLifeCycleTest, гоняемым на
НАСТОЯЩЕМ буте (CoreScene сама поднимает мир). Проверяет три состояния подряд: до мероприятия места
нет; открыли — место встало; закрыли — ушло целиком (и тайлы, и серость); открыли снова — собралось
заново.
Сказано: «“Правка живёт в дев-слое, тестами он не покрыт” - лучше тоже покрывать, будто бы?» (02.08.2026, сессия f24f0cc4).
Почему именно так, а не иначе:
- Не EditMode. Проверяется не логика класса, а то, что живёт МЕЖДУ скоупами, сценой и компонентами показа. Ровно там пряталась вся четвёрка сегодняшних дефектов, и ни один из них не был виден изнутри одного класса.
- Не тестовая сцена, а
CoreScene.WorldSceneуже настроена полностью, а бут игрока — это и есть тот путь, который ломался. Своя сцена означала бы вторую конфигурацию мира, расходящуюся с живой. - Не дев-команды. Тест на
bonesпроверял бы мою же разводку. Ценность — в классе дефекта, а не в конкретной команде: состояние, пережившее владельца.
Грабли: LifetimeScope.Find<T>() в нашей версии VContainer возвращает БАЗОВЫЙ LifetimeScope, а
не запрошенный тип, — первая же сборка теста об этом и сказала. Ищем скоупы обычным поиском по
объектам. Вторая: ссылки, дописанные в .asmdef, compile-check.ps1 не видит (он собирает по
командам редактора) — проверка только теневым прогоном.
Ожидание считается КАДРАМИ, а не секундами: VContainer диспатчит энтрипоинты отдельной фазой, и всё, что случается «на входе в место», происходит не в тот же вызов.
Владелец правды: Tests/PlayMode/Battle/ActivityLifeCycleTest.cs.