Завершить третий этап и подготовить сборку 0.6.0
This commit is contained in:
@@ -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
@@ -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
@@ -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 нельзя называть принятым внешними тестировщиками.
|
||||||
|
|||||||
@@ -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).
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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).
|
||||||
|
|||||||
@@ -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 остаётся
|
||||||
|
открытой: реальные тестировщики должны пройти каждый уровень без подсказок
|
||||||
|
разработчика. Этот внешний протокол не подменяется автоматическими ботами.
|
||||||
Reference in New Issue
Block a user