Files
goon-game/docs/CURRENT_ROADMAP.md
T

30 KiB
Raw Blame History

Текущий roadmap реализации Project Sacrifice

Этот документ описывает ближайшие работы относительно существующего vertical slice. Полный утверждённый GDD + TDD + production roadmap находится в DEVELOPMENT_PLAN.md.

Актуально на 18 августа 2026 года.

1. Текущее состояние

Этапы 0–4 завершены по primary-stage ownership:

  • реализованы 10 последовательных уровней;
  • работают движение, прыжок и мобильное multitouch-управление;
  • смерть не сбрасывает состояние уровня, тела остаются физическими объектами;
  • реализованы шипы, пила, нажимные и временные кнопки, двери, движущиеся платформы, заморозка и электричество;
  • сохраняются прогресс, лучшее время и минимальное число жертв;
  • intended route всех уровней 1–10 защищён Android acceptance-ботами: каждый маршрут выполняется по три раза через production-ввод без прямого перемещения персонажа;
  • blocker-softlock уровня 8 после истечения таймера устранён recovery relay и покрыт отдельным трёхкратным сценарием;
  • исправлено перекрытие FREEZER уровня 6, которое повторно убивало игрока на frozen stepping stone;
  • тело, доставленное пилой на PRESSURE уровня 10, фиксируется после оседания и больше не соскальзывает с плиты;
  • restart из промежуточного состояния уровня 10 очищает тела, сигналы, таймер и удерживаемый ввод;
  • Settings screen сохраняет размер и opacity touch-controls и режим вибрации; три form-factor контракта и защита от повторного held-jump покрыты device-тестами;
  • добавлены сохраняемые Standard/Large text и high-contrast режимы, видимый статус сигналов/дверей/respawn и локализованные content descriptions;
  • короткое трёхшаговое обучение не блокирует gameplay и после Skip/Done не показывается повторно;
  • экран результата разделяет текущий и лучший результаты, показывает targets, следующую цель и рабочие Level select/Replay/Next level переходы;
  • весь Canvas UI, десять названий и подсказок доступны на русском и английском; язык хранится отдельно и не меняет progress/control settings;
  • Stage 3 focused matrix: 14/14 методов без retries; UI contracts GREEN на 20:9, 16:9 и логическом 16:10 tablet viewport;
  • final Stage 3 Android 16 matrix: OK (30 tests) без filters/retries за 1,409.366 s; все intended routes 1–10, recovery/stress, lifecycle, restart и UI/persistence contracts GREEN;
  • все десять уровней и RU/EN copy перенесены из Java-констант в versioned JSON с formatVersion=1 и physicsVersion=1;
  • общий pure-Java loader/validator используется Android runtime и desktop tooling; повреждённая геометрия, версия или ссылка на signal останавливает build до APK packaging;
  • deterministic desktop exporter создаёт десять SVG и единый coordinate TSV с byte-identical результатом для неизменного каталога;
  • acceptance bots сохраняют versioned command/checkpoint trace и SHA-256 trace ID без wall-clock или прямых mutation-команд;
  • final Stage 4 Android 16 matrix: OK (30 tests) без filters/retries за 1,096.448 s; вся Stage 3 gameplay/UI матрица GREEN после JSON-миграции;
  • final integrated Android 16 matrix: 16/16 методов, 36 игровых выполнений, lifecycle и restart; wall time 9:32.496;
  • финальный debug APK проверен на Android 16: установка, холодный запуск, ZIP-структура и v1/v2-подписи корректны.

Автоматическая проходимость, устойчивость обязательных объектов и чистый restart доказаны. Внешняя понятность уровней не может быть сертифицирована самим automation-runner: две ручные сессии на уровень остаются отдельным внешним playtest-gate и не считаются выполненными этим отчётом.

Performance-оговорка: исторический критерий этапа 1 «полный прогон до 5 минут» не выполнен на текущем throttled AVD. После расширения набора до 16 методов exact final matrix занимает 9:32.496. Сокращать трёхкратные прохождения или скрывать нестабильность retries запрещено; оптимизация runner остаётся отдельной QA-задачей и не меняет доказанную проходимость.

goon-game-regression-10 сохраняет вторичную связь со Stage 1, а goon-game-level-balance — со Stage 2. Их незавершённые performance и external comprehension gates имеют primary Stage 5, поэтому завершённые инженерные этапы не содержат скрытых открытых primary-задач.

2. Принципы разработки

  1. Сначала acceptance-тест, затем исправление уровня.
  2. Бот использует те же команды движения и прыжка, что и игрок, без прямого перемещения персонажа или подмены физики.
  3. Новый контент не добавляется, пока текущие 10 уровней не проходят обязательный регрессионный набор.
  4. Изменения физики проверяются на всех уровнях, потому что скорость, импульсы и коллизии являются общими.
  5. Debug APK используется для внутренней проверки; внешняя альфа собирается отдельной release-подписью.

Оценки ниже указаны в рабочих днях для одного Android-разработчика при доступности дизайнера и QA на проверках. Это ориентиры, а не календарные обещания.

3. Этапы

Этап 0. Prototype foundation — завершён

В этот исторический этап входят базовый Android APK, character/death/corpse, Canvas physics, camera, puzzle objects, hazards, HUD/multitouch, save, unit tests и greybox-набор из десяти уровней. Он сохраняется в registry, чтобы завершённые baseline-задачи также имели явного владельца по stage.

Этап 1. Боты проходимости для уровней 1–10 — P0, 4–6 дней

Задачи:

  • выделить общий сценарный движок поверх существующего LevelPlaytestBot.Driver;
  • добавить наблюдаемые состояния: положение и скорость игрока, опора, активные сигналы, состояние платформ и дверей;
  • реализовать отдельный маршрут для каждого уровня;
  • выдавать полезную диагностику таймаута: координаты, число смертей, тела, сигналы и последняя выполненная команда;
  • запускать все сценарии одной Gradle-командой на эмуляторе;
  • исключить случайные повторы как способ скрыть нестабильность.

Критерии завершения:

  • уровни 1–10 проходят по три последовательных запуска;
  • каждый сценарий использует предусмотренную механику уровня;
  • один полный прогон укладывается в 5 минут;
  • падение теста показывает этап и состояние, на котором бот остановился.

Этап 2. Исправление уровней и баланс — P0, 4–7 дней

Задачи:

  • исправить найденные ботами тупики и нестабильные взаимодействия;
  • увеличить допуски у прыжков и зон срабатывания, не убирая смысл головоломок;
  • проверить, что тела не выталкиваются с плит и не застревают в дверях;
  • выровнять кривую сложности: знакомство, закрепление, комбинация механик;
  • уточнить подсказки и целевые показатели времени/жертв;
  • провести минимум две ручные сессии на каждом уровне.

Критерии завершения:

  • 10/10 passed в автоматическом прогоне;
  • каждый уровень впервые понимается тестировщиком не более чем за три попытки либо содержит достаточную подсказку;
  • restart всегда возвращает чистое начальное состояние;
  • после смерти невозможно потерять обязательный объект без возможности перезапуска.

Этап 3. Управление, интерфейс и доступность — P1, 3–5 дней

Задачи:

  • добавить настройку размера и прозрачности экранных кнопок;
  • улучшить зоны multitouch и визуальную обратную связь на нажатия;
  • добавить короткое обучение без блокирующих длинных окон;
  • доработать экран завершения: время, жертвы, лучший результат и следующая цель;
  • локализовать интерфейс и подсказки на русский и английский;
  • проверить контраст, масштаб текста, вибрацию и режим без вибрации;
  • корректно обрабатывать pause/resume и системную кнопку Back.

Критерии завершения:

  • игра полностью управляется на телефоне без внешней клавиатуры;
  • элементы управления не перекрывают игровую информацию на поддерживаемых экранах;
  • смена языка и настроек не сбрасывает прогресс;
  • UI проверен минимум на форматах 16:9, 20:9 и планшете.

Этап 4. Контентная архитектура и инструменты — P1, 5–8 дней

Задачи:

  • перенести описания уровней из Java-констант в валидируемый JSON-формат;
  • добавить загрузчик с проверкой геометрии, сигналов и обязательных объектов;
  • создать простой desktop-скрипт предпросмотра или экспортёр координат;
  • закрепить версию физики и формата уровня;
  • сохранять воспроизводимый журнал команд бота для расследования регрессий.

Критерии завершения:

  • геометрию и подсказки уровня можно изменить без перекомпиляции игрового кода;
  • некорректный сигнал, дверь или объект отклоняется валидатором при сборке;
  • все существующие уровни после миграции проходят тех же ботов.

Этап 5. Завершение Vertical Slice — P0/P1, 10–18 дней

Задачи:

  • утвердить самостоятельный визуальный стиль, не копирующий коммерческий референс;
  • заменить prototype-графику персонажа, опасностей, окружения и интерфейса;
  • добавить анимации движения, смерти, respawn и реакции механизмов;
  • добавить звуки управления, механизмов, результата и фоновую музыку;
  • предусмотреть независимые настройки музыки, эффектов и вибрации;
  • завершить lifecycle/process-death и versioned save migration;
  • доказать performance budget и три полных playability regression прогона;
  • провести внешний playtest уровней 1–10 без объяснений разработчика;
  • закрыть оставшийся comprehension/balance gate.

Критерии завершения:

  • все игровые состояния визуально различимы без чтения внутренней логики;
  • звук не является единственным источником обязательной информации;
  • проект сохраняет стабильную частоту кадров на целевых устройствах.
  • progress восстанавливается после Activity/process recreation и обновления приложения;
  • goon-game-milestone-vslice принят вместе с performance и human-playtest gates.

Статус на 19 августа 2026: Stage 5 принят. Инженерный candidate 0.8.0-stage5-vslice прошёл 72 JVM-теста и единый Android 16 run 35/35 (493.521 s). Владелец продукта подтвердил завершение внешнего тестирования и переход дальше; границы доступного human evidence зафиксированы в STAGE5_HUMAN_PLAYTEST_RESULT.md. Stage 6 разблокирован.

Текущий статус Stage 6: foundation, production hazards, burned/crushed corpse states, weighted objects и challenge/progression приняты. Каталог содержит 18 уровней. Stable levelId/worldId, casualty/time/cache challenges, progress-v3 migration, session-v5 collectible state и persistent three-star result прошли 116 app JVM, 2 content-tool JVM и нефильтрованную Android 16 матрицу 52/52 за 551.773 s. Следующий dependency-order slice — массовое производство четырёх миров.

Этап 6. Production content — P1, несколько итераций

Задачи:

  • спроектировать и произвести четыре мира и 55–70 уровней;
  • расширить hazards, corpse states и weighted physical objects;
  • завершить character state machine, CorpseManager и event-driven PuzzleSystem;
  • добавить challenges, collectibles и production progression;
  • расширить модульные варианты персонажей без нарушения анимационных контрактов;
  • проводить каждый уровень через JSON validator, solution graph, bot и level DoD.

Критерии завершения:

  • все production-уровни проходят content pipeline и имеют versioned bot trace;
  • новые mechanics сначала обучаются отдельно и только затем комбинируются;
  • content не содержит blocker-softlocks и обязательных невосстановимых объектов;
  • принят goon-game-milestone-production.

Статус на 19 августа 2026: Stage 6 выполняется в изолированном production stream. Завершены три foundation slice. goon-game-character-states добавил явные Idle/Run/Turn/Jump/Fall/Land/Interact/Stunned/Death transitions. goon-game-corpse-manager перенёс регистрацию, transforms, FIFO budget, reset, save/restore и diagnostics тел в отдельного владельца без изменения физики и геометрии. goon-game-puzzle-events выделил pressure/toggle/timed/relay channels, immutable events и явные DoorController states; двери и платформы читают общую data-driven модель. Завершён первый mechanics slice: production-каталог hazards (crusher, fire, projectile, explosion), обучающие уровни 11–14, динамическая пагинация каталога и 12/12 bot-прохождений. Последний gate: 99 JVM-тестов и Android 16 matrix 43/43 (2004.172 s). Следующая зависимая итерация завершена: CRUSHED и BURNED, save migration и обучающие уровни 15–16 приняты clean gate 102 JVM и unfiltered Android matrix 46/46 (1,842.248 s). Weighted-object slice также принят: общий IWeightedObject, Box/Rock/Ball/IceBlock/Counterweight, save v4 и обучающий уровень 17 прошли clean gate 108 app JVM + 2 content-tool JVM и unfiltered Android matrix 48/48 (2,223.695 s). Evidence зафиксирован в STAGE6_WEIGHTED_OBJECTS.md. Challenge/progression slice также принят: stable level/world IDs, три независимых challenge-критерия, optional collectible, накопительные лучшие звёзды по levelId, progress v1/v2 → v3 и active-session v4 → v5 migration, result UI и обучающий уровень 18 прошли clean gate 116 app JVM + 2 content-tool JVM и unfiltered Android matrix 52/52 (551.773 s). Evidence — STAGE6_CHALLENGES.md. Следующий content gate зафиксирован исполняемой матрицей: релиз содержит 69 уровней, из них production-диапазон 18–69 разделён на четыре мира по 13 уровней. Каждый мир содержит 11 MAIN, один CHALLENGE и один FINALE; Gradle preBuild проверяет матрицу и соответствие авторизованного JSON-префикса. Контракт — STAGE6_CONTENT_MATRIX.md; следующий authoring wave — Foundations 19–30. Первый bounded wave Levels 19–22 принят: movement/jump, два тела над раздельными spikes, retained pressure Door и toggle ferry имеют solution graphs, collectibles, restart proof и 12/12 production-input playthroughs. Cold unfiltered candidate прошёл Android 57/57 за 1807.264 s, app JVM 117/117, content-tool JVM 7/7. Evidence — STAGE6_FOUNDATIONS_WAVE1.md. Второй bounded wave Levels 23–26 также принят: remote saw delivery, frozen step, conductive relay и timed ferry с дальним recovery relay имеют solution graphs, collectibles и 15/15 последовательных production-input playthroughs. Cold unfiltered candidate прошёл Android 62/62 за 1063.114 s, app JVM 118/118, content-tool JVM 7/7; APK содержит все 26 level JSON. Evidence — STAGE6_FOUNDATIONS_WAVE2.md. Финальный Foundations wave Levels 27–30 принят: AND-door на двух retained bodies, трёхсостоянийная цепочка с clean restart, exact-two-death challenge и finale bridge → pressure → toggle/timed ferry → Door имеют solution graphs, restart proof и 12/12 production-input playthroughs. Полный cold candidate прошёл Android 66/66 за 6749.094 s, app JVM 119/119, content-tool JVM 7/7; APK содержит 30 level JSON. Evidence — STAGE6_FOUNDATIONS_WAVE3.md. Мир Foundations 18–30 закрыт; следующий bounded slice — Physics 31–34. Первый Physics wave Levels 31–34 принят: mass-three object удерживает Door, трёхобъектная лестница использует новый детерминированный object/object support, saw-delivery соединён с вертикальным lift, crushed body сохраняется на pressure во время полного crusher cycle. Четыре метода доказали 12/12 production-input routes и restart сдвинутого противовеса. Cold unfiltered candidate прошёл Android 70/70 за 611.991 s, app JVM 122/122, content-tool JVM 7/7; APK содержит 34 level JSON. Evidence — STAGE6_PHYSICS_WAVE1.md. Следующий bounded slice — Physics 35–38.

Этап 7. Техническая стабилизация и release engineering — P0, 4–8 дней

Задачи:

  • проверить Android 8–16 и устройства с 2–4 ГБ памяти;
  • измерить frame time, память, запуск и размер APK;
  • протестировать сворачивание, возврат, блокировку экрана и уничтожение Activity;
  • добавить журналирование необработанных ошибок без персональных данных;
  • проверить обновление приложения поверх предыдущей версии и сохранность прогресса;
  • подготовить release build, отдельный application ID для тестового канала и закрыто хранимый keystore;
  • сформировать APK для прямой установки и AAB для Google Play Internal Testing.
  • зафиксировать gameplay analytics contract и crash/ANR reporting без персональных данных.

Критерии завершения:

  • нет блокирующих падений, ANR и потери прогресса;
  • 95-й перцентиль кадра соответствует целевым 60 FPS либо документированному минимуму 30 FPS на слабых устройствах;
  • release APK/AAB подписан, устанавливается и запускается на чистом устройстве;
  • debug-инструменты не попадают в публичную конфигурацию без необходимости.

Этап 8. Закрытая альфа — 1–2 итерации по 5–7 дней

Задачи:

  • привлечь 20–30 тестировщиков разного игрового опыта;
  • собирать по каждому уровню время, число смертей, restart и точку выхода;
  • разделять дефекты на блокирующие, значимые и косметические;
  • повторно проверять исправления ботами и ручным smoke-тестом;
  • определить уровни с высоким процентом выхода или неверно понятой механикой.

Критерии завершения:

  • 90% тестировщиков завершают уровни 1–5 без помощи разработчика;
  • 70% завершают все 10 уровней;
  • отсутствуют открытые блокирующие дефекты;
  • все значимые дефекты имеют решение или явно принятое продуктовое решение.

Этап 9. Beta — 1–3 стабилизационные итерации

Задачи:

  • объявить feature/content freeze;
  • выполнить широкую device, upgrade, save-migration и localization QA matrix;
  • исправлять blocker/critical/major defects без добавления новых mechanics;
  • повторять production bots, analytics и ручные smoke-сценарии на каждом кандидате.

Критерии завершения:

  • beta QA matrix зелёная;
  • нет blocker и critical progression defects;
  • content, format/physics versions и save migrations заморожены для RC.

Этап 10. Release Candidate

Задачи:

  • собрать финальные signed APK/AAB из воспроизводимого commit;
  • проверить store metadata, privacy, analytics и crash reporting;
  • выполнить финальный полный regression, чистую установку и upgrade path;
  • зафиксировать известные ограничения и release decision.

Критерии завершения:

  • goon-game-milestone-rc принят;
  • нет blocker/critical defects, все уровни проходимы;
  • release signatures, artifacts, remote commit и сохранность прогресса подтверждены.

4. Обязательный набор проверок каждого APK

Перед передачей тестировщикам должны выполняться:

  1. testDebugUnitTest — математика, каталог и валидация уровней;
  2. lintDebug — Android Lint без ошибок;
  3. connectedDebugAndroidTest — боты уровней 1–10;
  4. проверка APK через unzip -t;
  5. проверка package/version через aapt2 dump badging;
  6. проверка подписи через apksigner verify;
  7. установка поверх предыдущего билда и на чистое устройство;
  8. холодный запуск и проверка crash-буфера;
  9. ручной smoke-тест уровня 1 и одного сложного комбинированного уровня.

5. Завершение этапов 2–4 и следующая итерация

Инженерный scope этапа 2 закрыт: уровни 1–10 проходят intended route по три раза, уровень 8 имеет restart-free recovery, уровень 10 использует все три тела и сохраняет тело на lift-плите, а restart возвращает чистое состояние. Передаваемые результаты — обновлённый проект, проверенный APK и STAGE2_QA_REPORT.md.

Этап 3 завершён: к сохраняемым пресетам управления добавлены accessibility, неблокирующее обучение, полный result flow и RU/EN локализация. Совместный device-gate проверяет сохранность progress/settings, а UI contracts выполнены на 20:9, 16:9 и tablet-sized экране. Подробный итог находится в STAGE3_QA_REPORT.md.

Этап 4 завершён: каталог загружается из десяти JSON-ресурсов, общий validator запускается до Android packaging, а desktop-команда создаёт deterministic SVG/TSV preview. Боты публикуют versioned trace с идентификатором для диагностики регрессий; неизменность gameplay подтверждена полным Android regression. Контракт и evidence находятся в STAGE4_CONTENT_FORMAT.md и STAGE4_QA_REPORT.md. Следующая инженерная итерация — этап 5, полное завершение Vertical Slice: самостоятельный art/audio pass, lifecycle/save/performance gates и внешний playtest.

Полный registry этапов 0–10 и правила машинной привязки каждой Bead находятся в STAGE_REGISTRY.md. Production-задача четырёх миров и 55–70 уровней имеет primary Stage 6 и не остаётся вне нумерованного roadmap.

Параллельно внешний QA должен выполнить goon-game-human-playtest: по две ручные сессии каждого уровня без подсказок разработчика. До получения этого протокола milestone Vertical Slice нельзя называть принятым внешними тестировщиками.