feat: add agent tasks and update documentation

- Create 7 new task files (TASK-0001 through TASK-0007)
- Add task template file for future use
- Update Agent.md with project information
- Update TASK.md with task tracking
This commit is contained in:
2026-05-27 03:36:25 +07:00
parent b980566288
commit 6c46b3043a
10 changed files with 320 additions and 7 deletions
+36
View File
@@ -0,0 +1,36 @@
# TASK-0001: Composition Root и зависимости
## Цель
Настроить корневую точку композиции проекта через VContainer так, чтобы orchestration-логика жила в plain C# классах, а MonoBehaviour использовались только как View-компоненты сцены.
## Что сделать
- Создать `GameLifetimeScope`.
- Зарегистрировать сервисы и контроллеры через VContainer как managed dependencies.
- Зарегистрировать `BootstrapEntryPoint` как entry point приложения.
- Зарегистрировать `BootStatesController` как `IStatesController<BootStateCode>` и при необходимости как self.
- Зарегистрировать `SplashState`, `LoadState`, `MenuState`.
- Зарегистрировать scene View через `RegisterComponent(...)`.
- Зарегистрировать settings asset через `[SerializeField]` и `RegisterInstance(...)`.
## Технические требования
- Использовать VContainer.
- Сервисы регистрировать через `builder.Register<Impl>(Lifetime.Singleton).As<IInterface>()`.
- Не использовать `RegisterInstance(...)` для сервисов и controller-объектов.
- `RegisterInstance(...)` использовать только для settings/config assets.
- Не использовать `FindObjectOfType`, `Singleton.Instance` и `static`-хранилища состояния.
- MonoBehaviour не должны содержать orchestration-логику boot flow.
## Критерии готовности
- В сцене есть один `GameLifetimeScope`.
- Все boot flow зависимости собираются через VContainer.
- View-компоненты подключаются через ссылки из сцены, а не через поиск объектов.
- Entry point запускается контейнером.
- Сервисы и state machine не создаются вручную через `new` внутри MonoBehaviour.
## Заметки
Scene View допустимо регистрировать как компоненты, потому что они физически живут в сцене. Settings asset допустимо регистрировать через `RegisterInstance(...)`, потому что это данные, а не сервис с жизненным циклом.