# Moon Courier Crisis

Браузерная игра о курьерской миссии на Луне: выбор уровня, брифинг, управление маршрутом, радиособытия и результат смены.

Статус: passed

Версия: `b6b24e1215368727b8ad002919aa7989c04ddfdd`. Сохранённая история стадий: август 2026; начало разработки не установлено. Публикация демо: 7 сентября 2026.

## Задача

Игровая миссия должна связывать решения игрока, движение, события и итог, сохраняя понятную обратную связь.

## Аудитория

Игроки браузерных игр и разработчики интерактивных приложений.

## Личный вклад

- Связка React-интерфейса с игровыми сценами Phaser.

- Маршруты, события, брифинг, радиопанель и повтор миссии.

- Production-сборка, проверка ассетов и адаптация предыгровых экранов к мобильной ширине.

## Решения

- React отвечает за интерфейс, Phaser — за canvas и игровой цикл.

- Состояния выбора уровня, брифинга, миссии и результата разделены.

- После поражения повтор возвращает в брифинг; новая смена запускается явным действием.

## Границы и ограничения

- Управление маршрутом рассчитано на мышь и клавиатуру. Мобильные экраны адаптированы, полноценное touch-управление маршрутом не заявляется.

- Первый доступный commit — baseline готовой стадии, поэтому он не определяет начало разработки.

- Нет внешних интеграций или серверной БД: миссия выполняется в браузере.

## Что попробовать

- Выберите уровень и прочитайте брифинг.

- Начните смену, выберите курьера и назначьте маршрут.

- Откройте радиопанель и проследите событие миссии.

- Дождитесь результата, нажмите повтор и запустите новую смену из брифинга.

## Проверки

- Исходный полный набор: 464 unit-теста, 20 E2E и один skip. После CSS-правки повторены production build, assets и мобильный QA.

- Production build / assets

- Desktop route and actual defeat/replay

- Mobile levels, briefing, radio; no overflow

- Подтверждённого GitHub CI для этого SHA нет; перечислены выполненные локальные проверки и сценарии опубликованной версии. Исторические CI-ссылки, если есть, отмечены отдельно.

## Результаты

- Сохранено 15 содержательных кадров фактического интерфейса.

- Дата, сценарий и версия указаны у каждого кадра.

- Отдельного backend-процесса на VPS нет: Nginx раздаёт статику. Ресурсы общего Nginx нельзя честно приписать одному сайту.

- Измерено 6 повторений сценария; медиана 61.0 мс, максимум 1770 мс. Время включает браузер и HTTPS; методика и ограничения приложены.

## Запуск и эксплуатация

- Публичное демо сохраняет игровой runtime исходного проекта. Здесь нет моков платёжных или AI-сервисов: вся демонстрируемая игра выполняется локально в браузере.

- Production-сборка с проверкой TypeScript и ассетов выполняется вне VPS. На сервере Nginx отдаёт готовый каталог; постоянного backend нет.

- Для проверки пройти реальные состояния миссии, не подменяя результат через test hooks. В evidence сохранены фактическое поражение и повтор. Кадры разных релизов отмечены индивидуально; мобильная правка меняет layout, а не игровую механику.

- Общие правила эксплуатации: готовые файлы и закреплённые образы собираются вне VPS; секреты не входят в артефакты. Общесерверный docker prune не применяется. Логи backend ограничены ротацией, изменения log options требуют пересоздания контейнера.

- Перед изменением пройти code-map от функции к экрану/API, модулю и данным. После изменения обновить карту и схемы, выполнить связанные сценарии, включая ошибку, повтор и сброс. Источник истины — конкретная версия кода, а не старая диаграмма.

- Откат проверен 2026-09-07T00:59:40.423436+00:00: 20260907-verified → 20260907b → 20260907-verified. После каждого переключения подтверждены HTTPS, readiness и SHA. Это проверка конфигурации и артефактов на одном проверенном SHA; обратная миграция БД не выполнялась.

## Стек и роль

- **React**: Брифинг, панели, подсказки и результат миссии.
- **Phaser**: Canvas, игровой цикл, сцены, маршруты и объекты.
- **TypeScript / Vite**: Модель игры, production-сборка и проверка ресурсов.

## Code-map

|Функция|Экран / API|Модуль|Данные / проверка|
|---|---|---|---|
|Запуск|Выбор / брифинг|src/ui/store/gameStore.ts; src/game/createGame.ts|level config; production browser QA|
|Маршрут|Canvas|src/game/MapScene.ts; simulation/routing/confirmRouteDraft.ts|routeDraft / findWeightedRoute; фактический маршрут|
|События|Радиопанель|simulation/radio/createRadioJournal.ts|formatRadioEvent; игровая история|
|Симуляция|Миссия / результат|simulation/createSimulationEngine.ts; clock/fixedStepClock.ts|состояния курьеров и центров; unit suite|
|Мобильный вид|Preflight / radio|React styles / src/ui|390px; no-overflow QA|

## Схемы

- Компоненты опубликованного демо — `diagrams/components.mmd`
- Основной сценарий — `diagrams/scenario.mmd`
- Размещение опубликованной версии — `diagrams/deployment.mmd`

## Индекс изображений

- 01-level-select: Выбор миссии; 2026-09-07T01:05:40.267729+00:00; SHA b6b24e1215368727b8ad002919aa7989c04ddfdd
- 02-briefing: Брифинг и условия смены; 2026-09-07T01:05:47.034942+00:00; SHA b6b24e1215368727b8ad002919aa7989c04ddfdd
- 03-mission: Карта начавшейся миссии; 2026-09-07T01:07:40.196399+00:00; SHA b6b24e1215368727b8ad002919aa7989c04ddfdd
- 04-pause: Пауза и управление сменой; 2026-09-07T01:07:48.861345+00:00; SHA b6b24e1215368727b8ad002919aa7989c04ddfdd
- 05-radio: Радиособытия; 2026-09-07T01:17:22.254481+00:00; SHA b6b24e1215368727b8ad002919aa7989c04ddfdd
- 06-rover: Выбор курьера; 2026-09-07T01:12:20.586436+00:00; SHA b6b24e1215368727b8ad002919aa7989c04ddfdd
- 07-route: Назначенный маршрут; 2026-09-07T01:12:36.010812+00:00; SHA b6b24e1215368727b8ad002919aa7989c04ddfdd
- 08-arrival: Прибытие к точке; 2026-09-07T01:17:00.583707+00:00; SHA b6b24e1215368727b8ad002919aa7989c04ddfdd
- 09-mobile-levels: Мобильный выбор миссии; 2026-09-06T23:50:44.174550+00:00; SHA b6b24e1215368727b8ad002919aa7989c04ddfdd
- 10-mobile-briefing: Мобильный брифинг; 2026-09-06T23:50:44.760211+00:00; SHA b6b24e1215368727b8ad002919aa7989c04ddfdd
- 11-mobile-map: Карта на узком экране; 2026-09-06T23:50:47.754791+00:00; SHA b6b24e1215368727b8ad002919aa7989c04ddfdd
- 12-mobile-radio: Мобильная радиопанель; 2026-09-06T23:50:48.366580+00:00; SHA b6b24e1215368727b8ad002919aa7989c04ddfdd
- 14-outcome: Фактический результат: миссия потеряна; 2026-09-07T01:10:26.052432+00:00; SHA b6b24e1215368727b8ad002919aa7989c04ddfdd
- 15-replay-briefing: Повтор возвращает к брифингу; 2026-09-07T01:11:14.388480+00:00; SHA b6b24e1215368727b8ad002919aa7989c04ddfdd
- 16-restarted-mission: Новая смена после повтора; 2026-09-07T01:11:35.021611+00:00; SHA b6b24e1215368727b8ad002919aa7989c04ddfdd
