Завершить третий этап и подготовить сборку 0.6.0

This commit is contained in:
2026-08-18 19:28:51 +03:00
parent fa68e2e04a
commit 55b90fb0a5
7 changed files with 139 additions and 6 deletions
+11 -1
View File
@@ -33,7 +33,13 @@ Death does not reset the level. A new volunteer respawns after a short delay whi
- `Restart` restores the current level. - `Restart` restores the current level.
- `II` pauses the game and exposes level selection. - `II` pauses the game and exposes level selection.
- `Settings` on the level-select screen cycles three control sizes, three - `Settings` on the level-select screen cycles three control sizes, three
opacity presets, and vibration on/off. Changes persist across app restarts. opacity presets, vibration on/off, Standard/Large text, high contrast, and
English/Russian. Changes persist across app restarts without resetting progress.
The first level includes a three-step, non-blocking tutorial for movement,
multitouch jumping, and using retained bodies. Completion shows the current run,
saved best, targets, a next goal, and Level select/Replay/Next level routes. Critical
signal, door, and respawn state remains visible when vibration is disabled.
The movement constants include 130 ms coyote time and 140 ms input buffering. The movement constants include 130 ms coyote time and 140 ms input buffering.
@@ -59,6 +65,10 @@ matrix with:
./gradlew connectedDebugAndroidTest ./gradlew connectedDebugAndroidTest
``` ```
The Stage 3 device suite additionally checks persisted controls, RU/EN copy,
accessibility presets, tutorial/result navigation, Back behavior, and safe viewports
on 20:9, 16:9, and 16:10 tablet-sized displays.
The debug APK is written to `app/build/outputs/apk/debug/app-debug.apk`. It is signed with Android's standard debug key and can be installed with: The debug APK is written to `app/build/outputs/apk/debug/app-debug.apk`. It is signed with Android's standard debug key and can be installed with:
```sh ```sh
+2 -2
View File
@@ -10,8 +10,8 @@ android {
applicationId 'com.projectsacrifice.game' applicationId 'com.projectsacrifice.game'
minSdk 23 minSdk 23
targetSdk 34 targetSdk 34
versionCode 6 versionCode 7
versionName '0.5.0-stage3-controls' versionName '0.6.0-stage3-complete'
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
} }
+14 -3
View File
@@ -6,7 +6,7 @@
## 1. Текущее состояние ## 1. Текущее состояние
Инженерная часть этапа 2 завершена; этап 3 начат с настроек мобильного управления: Инженерная часть этапов 2 и 3 завершена:
- реализованы 10 последовательных уровней; - реализованы 10 последовательных уровней;
- работают движение, прыжок и мобильное multitouch-управление; - работают движение, прыжок и мобильное multitouch-управление;
@@ -19,6 +19,12 @@
- тело, доставленное пилой на `PRESSURE` уровня 10, фиксируется после оседания и больше не соскальзывает с плиты; - тело, доставленное пилой на `PRESSURE` уровня 10, фиксируется после оседания и больше не соскальзывает с плиты;
- restart из промежуточного состояния уровня 10 очищает тела, сигналы, таймер и удерживаемый ввод; - restart из промежуточного состояния уровня 10 очищает тела, сигналы, таймер и удерживаемый ввод;
- Settings screen сохраняет размер и opacity touch-controls и режим вибрации; три form-factor контракта и защита от повторного held-jump покрыты device-тестами; - 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;
- final integrated Android 16 matrix: 16/16 методов, 36 игровых выполнений, lifecycle и restart; wall time `9:32.496`; - final integrated Android 16 matrix: 16/16 методов, 36 игровых выполнений, lifecycle и restart; wall time `9:32.496`;
- финальный debug APK проверен на Android 16: установка, холодный запуск, ZIP-структура и v1/v2-подписи корректны. - финальный debug APK проверен на Android 16: установка, холодный запуск, ZIP-структура и v1/v2-подписи корректны.
@@ -176,10 +182,15 @@ Performance-оговорка: исторический критерий этап
8. холодный запуск и проверка crash-буфера; 8. холодный запуск и проверка crash-буфера;
9. ручной smoke-тест уровня 1 и одного сложного комбинированного уровня. 9. ручной smoke-тест уровня 1 и одного сложного комбинированного уровня.
## 5. Завершение этапа 2 и следующая итерация ## 5. Завершение этапов 2–3 и следующая итерация
Инженерный scope этапа 2 закрыт: уровни 1–10 проходят intended route по три раза, уровень 8 имеет restart-free recovery, уровень 10 использует все три тела и сохраняет тело на lift-плите, а restart возвращает чистое состояние. Передаваемые результаты — обновлённый проект, проверенный APK и [`STAGE2_QA_REPORT.md`](STAGE2_QA_REPORT.md). Инженерный scope этапа 2 закрыт: уровни 1–10 проходят intended route по три раза, уровень 8 имеет restart-free recovery, уровень 10 использует все три тела и сохраняет тело на lift-плите, а restart возвращает чистое состояние. Передаваемые результаты — обновлённый проект, проверенный APK и [`STAGE2_QA_REPORT.md`](STAGE2_QA_REPORT.md).
Этап 3 начат задачей `goon-game-controls-settings`: добавлены сохраняемые пресеты размера/opacity controls и вибрации, фактическое расширение touch target и защита от повторного прыжка при удержании. Проверки выполнены на 20:9, логическом 16:9 и tablet-sized экране; подробности находятся в [`STAGE3_CONTROLS_QA.md`](STAGE3_CONTROLS_QA.md). Следующие slices этапа 3 — accessibility, обучение/result screen и RU/EN локализация. Этап 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, перенос описаний уровней в валидируемый формат и инструменты контента.
Параллельно внешний QA должен выполнить `goon-game-human-playtest`: по две ручные сессии каждого уровня без подсказок разработчика. До получения этого протокола milestone Vertical Slice нельзя называть принятым внешними тестировщиками. Параллельно внешний QA должен выполнить `goon-game-human-playtest`: по две ручные сессии каждого уровня без подсказок разработчика. До получения этого протокола milestone Vertical Slice нельзя называть принятым внешними тестировщиками.
+6
View File
@@ -54,3 +54,9 @@
- localized строки должны заменить английский текст и в Canvas, и в content - localized строки должны заменить английский текст и в Canvas, и в content
descriptions одним источником, не удаляя read-only acceptance hooks; descriptions одним источником, не удаляя read-only acceptance hooks;
- minSdk 23, control settings, progress format и Stage 2 physics/levels не менялись. - minSdk 23, control settings, progress format и Stage 2 physics/levels не менялись.
## Финальная интеграция
Все пять device-методов выполнены в составе unfiltered Android 16 gate:
`OK (30 tests)`, `1,409.366 s`. Итоговая сборка и form-factor evidence описаны в
[`STAGE3_QA_REPORT.md`](STAGE3_QA_REPORT.md).
+6
View File
@@ -57,3 +57,9 @@ recreation, progress, control size, opacity, and vibration preservation.
- `LevelCatalog.java` and level geometry are not modified. Canvas rendering now uses - `LevelCatalog.java` and level geometry are not modified. Canvas rendering now uses
`GameStrings.levelTitle/levelHint`; the existing English fields remain compatible `GameStrings.levelTitle/levelHint`; the existing English fields remain compatible
with gameplay tests and older callers. with gameplay tests and older callers.
## Final integration
`GameLanguagePersistenceTest` and the combined Stage 3 RU/EN acceptance tests passed
inside the unfiltered Android 16 gate: `OK (30 tests)`, `1,409.366 s`. See
[`STAGE3_QA_REPORT.md`](STAGE3_QA_REPORT.md) for the release evidence.
+7
View File
@@ -55,3 +55,10 @@ BUILD SUCCESSFUL
`Saved best`. `Saved best`.
4. По очереди проверить `Level select`, `Replay`, `Next level`; завершённость 4. По очереди проверить `Level select`, `Replay`, `Next level`; завершённость
уровня, unlocked level и control preset должны сохраниться. уровня, unlocked level и control preset должны сохраниться.
## Финальная интеграция
`OnboardingStoreTest`, оба `OnboardingAndResultFlowTest` и объединённый RU/EN
acceptance прошли в составе unfiltered Android 16 gate: `OK (30 tests)`,
`1,409.366 s`. Релизная версия назначена `0.6.0-stage3-complete`; общий отчёт:
[`STAGE3_QA_REPORT.md`](STAGE3_QA_REPORT.md).
+93
View File
@@ -0,0 +1,93 @@
# Stage 3 QA report
Дата: 18 августа 2026 года.
Версия: `0.6.0-stage3-complete` (`versionCode=7`).
## Результат
Инженерный scope этапа 3 завершён. В общую сборку интегрированы:
- сохраняемые размер и прозрачность touch-controls и режим вибрации;
- Standard/Large text, high contrast, видимые состояния сигналов, дверей и respawn;
- локализованные accessibility descriptions;
- полная RU/EN локализация Canvas UI, десяти названий и подсказок уровней;
- неблокирующее трёхшаговое обучение с постоянным Skip/Done;
- result screen с текущим и лучшим результатом, targets, следующей целью и
рабочими переходами Levels/Replay/Next;
- совместная сохранность языка, accessibility, controls и прогресса после recreate;
- state-driven боты уровней 1–10, restart-free recovery уровня 8 и проверка
неподвижного тела на lift-плите уровня 10.
## Автоматические проверки
Финальный clean gate:
```text
./gradlew clean testDebugUnitTest lintDebug assembleDebug assembleDebugAndroidTest
BUILD SUCCESSFUL
66 actionable tasks
42/42 JVM tests
```
Финальный unfiltered device gate выполнен на холодно запущенном Android 16 AVD,
физический размер `1080x2400` (20:9), после установки точных APK clean-сборки и
`pm clear com.projectsacrifice.game.debug`:
```text
AndroidJUnitRunner
Tests run: 30
Time: 1,409.366 s
OK (30 tests)
```
Runner запускался без `-e class`, retries и повторного запуска отдельных методов.
Матрица включает все intended routes уровней 1–10 по три раза, дополнительные
stressed/recovery маршруты уровня 8, throttled mastery и sliding-body regression
уровня 10, lifecycle, restart и все Stage 3 persistence/UI contracts.
До финального объединения UI contracts также прошли на логических viewport:
- 16:9 safe viewport — GREEN, `66.208 s`;
- 16:10 tablet-sized `2560x1600` landscape — GREEN, `167.823 s`;
- focused Stage 3 matrix — 14/14 GREEN, `576.355 s`.
Последующие изменения касались automation/read-only snapshot и не меняли UI
геометрию; финальный 20:9 gate повторно проверил весь интегрированный интерфейс.
## RED → GREEN evidence
Первый полный 30-тестовый прогон был завершён полностью и дал 27/30 GREEN. Три
нагрузочные границы были исправлены без изменения физики уровней или retry:
1. Level 3: takeoff начинался на несколько пикселей поздно (`x=505.67633`,
`y=664.41797`, лишняя смерть). State-driven точка старта получила запас и
повторно прошла 3/3 внутри полного load-order.
2. Level 6: координатный checkpoint не доказывал опору на frozen block; добавлен
обязательный `playerOnGround`, после чего landing route прошёл 3/3.
3. Level 10: бот мог прыгнуть на лифт во время его восходящей фазы и упасть в PIT
(`x=1942.7063`, deaths=4). Snapshot расширен read-only направлением движения;
посадка разрешается на нисходящей фазе, normal 3/3 и throttled route GREEN.
Level 8 отдельно получил исходящую фазу горизонтальной платформы, безопасное
позиционирование под recovery relay и перед финальным прыжком. Финальный suite
подтвердил stressed 1/1, intended 3/3 и recovery 3/3 без смерти/restart.
## Проверка APK
Финальный `app-debug.apk` проверен как самостоятельный устанавливаемый артефакт:
- ZIP/APK-структура: `unzip -t` без ошибок;
- package: `com.projectsacrifice.game.debug`;
- версия: `versionCode=7`, `versionName=0.6.0-stage3-complete-debug`;
- `minSdkVersion=23`, `targetSdkVersion=34`;
- подпись: `apksigner verify` GREEN, схемы v1 и v2;
- SHA-256: `7be25ea96cf0de7ea1930335b3570bd9def93cdb48029e24e4c9c14078e4195d`;
- clean install и cold launch на Android 16: `Status: ok`, `LaunchState: COLD`,
`TotalTime: 1401 ms`; crash-буфер пуст.
## Границы приёмки
Инженерный Stage 3 gate закрыт. Отдельная задача ручного внешнего playtest остаётся
открытой: реальные тестировщики должны пройти каждый уровень без подсказок
разработчика. Этот внешний протокол не подменяется автоматическими ботами.