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

2.4 KiB
Raw Blame History

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.