Files
QuizPlease/Agent/Task/TASK-0002.md
T
horooko 2f745ba328 feat(task-0002): implement state controller interface with cancellation support and update task status
- Refactor BootStatesController to implement IStatesController interface
- Move state dictionary creation into constructor, remove static helper method
- Add CancellationToken validation before state transitions in StatesController
- Track current state presence with _hasCurrentState flag for safety
- Update TASK-0002 with Ready status

Выполнена задача TASK-0002 и обновлён статус:
- Рефакторинг BootStatesController для реализации интерфейса IStatesController
- Перемещено создание словаря состояний в конструктор, удалён статический вспомогательный метод
- Добавлена валидация CancellationToken перед переходами между состояниями в StatesController
- Добавлен флаг _hasCurrentState для отслеживания текущего состояния
- Обновлён статус TASK-0002 до Ready
2026-05-27 04:04:59 +07:00

39 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
## Статус
Ready
## Цель
Создать минимальную архитектурную основу для 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.