Files
QuizPlease/Agent/Task/TASK-0002.md
T
horooko 6c46b3043a 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
2026-05-27 03:36:25 +07:00

35 lines
2.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# TASK-0002: Базовая архитектура Boot Flow
## Цель
Создать минимальную архитектурную основу для boot flow: сервисный lifecycle, state-контракты и generic state controller.
## Что сделать
- Создать `IService` с методами `InitializeAsync(CancellationToken ct)` и `ReleaseAsync(CancellationToken ct)`.
- Создать базовый `Service : IService`, если это упростит общую структуру.
- Создать `IState` с методами `EnterAsync(CancellationToken ct)` и `ExitAsync(CancellationToken ct)`.
- Создать `IStatesController<TEnum>` с методом `EnterStateAsync(TEnum code, CancellationToken ct)`.
- Реализовать `StatesController<TEnum>`.
- Создать `BootStateCode` для состояний `Splash`, `Load`, `Menu`.
- Создать `BootStatesController`, который собирает конкретные boot states и передает их в базовый controller.
## Технические требования
- Использовать UniTask для всех async-методов.
- Во все async-операции передавать `CancellationToken`.
- Контракт перехода должен быть строгим: сначала `ExitAsync` текущего state, затем `EnterAsync` нового state.
- `StatesController<TEnum>` не должен знать бизнес-логику boot flow.
- State не должен сам решать, какой state будет следующим.
## Критерии готовности
- `EnterStateAsync` вызывает `ExitAsync` текущего state перед `EnterAsync` нового state.
- Первый вход в state работает без попытки выйти из отсутствующего текущего state.
- Повторный вход в другой state не оставляет предыдущий state активным.
- `CancellationToken` проброшен через `EnterStateAsync`, `ExitAsync` и `EnterAsync`.
## Заметки
Generic state machine должна уметь только переключать состояния. Сценарий `Splash -> Load -> Menu -> Load` должен жить отдельно, чтобы не смешивать control flow и инфраструктуру state machine.