286 lines
24 KiB
Markdown
286 lines
24 KiB
Markdown
# Текущий roadmap реализации Project Sacrifice
|
||
|
||
Этот документ описывает ближайшие работы относительно существующего vertical slice. Полный утверждённый GDD + TDD + production roadmap находится в [`DEVELOPMENT_PLAN.md`](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 разблокирован.
|
||
|
||
### Этап 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`.
|
||
|
||
### Этап 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`](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`](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_CONTENT_FORMAT.md)
|
||
и [`STAGE4_QA_REPORT.md`](STAGE4_QA_REPORT.md). Следующая инженерная итерация —
|
||
этап 5, полное завершение Vertical Slice: самостоятельный art/audio pass,
|
||
lifecycle/save/performance gates и внешний playtest.
|
||
|
||
Полный registry этапов 0–10 и правила машинной привязки каждой Bead находятся в
|
||
[`STAGE_REGISTRY.md`](STAGE_REGISTRY.md). Production-задача четырёх миров и
|
||
55–70 уровней имеет primary Stage 6 и не остаётся вне нумерованного roadmap.
|
||
|
||
Параллельно внешний QA должен выполнить `goon-game-human-playtest`: по две ручные сессии каждого уровня без подсказок разработчика. До получения этого протокола milestone Vertical Slice нельзя называть принятым внешними тестировщиками.
|