diff --git a/QA_REPORT.md b/QA_REPORT.md index cfde6e2..fa2c9f5 100644 --- a/QA_REPORT.md +++ b/QA_REPORT.md @@ -1,36 +1,61 @@ -# QA report +# QA report — Stage 2 playability build Date: 2026-08-18 +## Result + +The version-4 debug APK passed the final clean build and one integrated Android 16 +device run. All ten intended level routes completed three consecutive times through +the production movement/jump input boundary. No retry masking, teleport, direct +physics mutation, auto-complete, or restart shortcut is used. + ## Automated checks -- Clean Gradle build: `clean testDebugUnitTest lintDebug assembleDebug` — passed. -- Unit tests: 8 passed, 0 failed, 0 skipped. -- Device acceptance tests: 1 passed, 0 failed, 0 skipped. -- Level 5 bot: completed the production level in about 8.2 seconds with exactly one death, one retained corpse, pressure-plate activation, door passage, two jumps, and goal contact. -- Android Lint: no issues found. -- APK archive integrity: all entries passed `unzip -t`. -- Package metadata: `com.projectsacrifice.game.debug`, version code 3, min SDK 23, target SDK 34. -- APK signature: v1 and v2 schemes verified; one standard Android Debug signer. +- Clean Gradle gate: `clean testDebugUnitTest lintDebug assembleDebug assembleDebugAndroidTest` — passed, 66 tasks. +- JVM tests: 15 passed, 0 failed, 0 skipped. +- Integrated device gate: `connectedDebugAndroidTest` — 14 passed, 0 failed, 0 skipped. +- Device test time: 349.702 seconds; Gradle wall time: 5 minutes 59 seconds. +- Gameplay executions: 30 intended routes (levels 1–10 × 3), three level-8 recovery routes, and two delayed-decision stress routes; lifecycle coverage is a separate method. +- Android Lint: passed without errors. -## Device smoke test +The five-minute matrix target is not met: the green run exceeds it by 59 seconds. +Correctness coverage remains intact; test-duration optimization stays open. -Environment: official ARM64 Android Emulator, Android 16 / API 36, 2400×1080 landscape. +## Playability evidence -Verified: +- Level 1: movement/jump route, 3/3, zero deaths. +- Level 2: intended three-corpse bridge, 3/3, exactly three deaths and bodies. +- Level 3: saw corpse holds the pressure door, 3/3, exactly one death/body. +- Level 4: toggle, moving lift, and upper gallery, 3/3, zero deaths. +- Level 5: saw delivery to remote pressure plate, 3/3, exactly one death/body. +- Level 6: frozen corpse stepping stone, 3/3, exactly one death/body. +- Level 7: conductive corpse relay, 3/3, exactly one death/body. +- Level 8: intended timed-platform route 3/3, expired-timer recovery 3/3, and one 96 ms delayed-decision run; all deathless. +- Level 9: weight AND power door, 3/3, exactly two deaths/bodies. +- Level 10: saw/freeze/electric/lift procession, 3/3, exactly three deaths/bodies, plus one 96 ms delayed final-traversal run. +- Activity background/resume: visible pause, held-input clearing, state preservation, and explicit resume passed. -1. streamed APK installation returns `Success`; -2. cold launch returns `Status: ok`; -3. `MainActivity` remains visible and `RESUMED`; -4. immersive landscape mode is applied; -5. level-selection screen renders correctly; -6. entering level 1 renders the HUD, character, goal, and mobile controls; -7. holding the right control completes level 1; -8. completion records best time/deaths and unlocks level 2 (`unlocked=2`); -9. reaching spikes in level 2 increments the volunteer counter, keeps the corpse in the level, and respawns a live volunteer without resetting the scene; -10. Android crash buffer remains empty after the corrected build and gameplay smoke tests. -11. the level 5 acceptance bot reproduces the complete saw/body/plate/door solution on the same Android 16 emulator; its initial red runs exposed an unstable saw impulse, and the final run passed after the body delivery was corrected. +## Defects found and fixed by the integrated gate -## Distribution note +1. Level 6 freezer overlapped the player standing on its frozen body by 26 px. The hazard height was narrowed while retaining floor lethality. +2. Level 8 trapped the player beyond the pit after the timer expired. A high far-side recovery relay was added; the original timer received a 0.5-second balance margin. +3. Level 8 platform boarding failed under delayed decisions. The left launch floor was extended by 70 px while the pit's far edge, platform, timers, and recovery relay stayed unchanged. +4. Level 10 relay clearing and lift boarding were phase-sensitive. The bot now proves actual moving-platform support; floor/lift overlap increased from 40 to 100 px while retaining a 200 px pit and mandatory 410 px lift. -The delivered APK is a debug-signed tester build. It is directly installable, but it is not intended for Play Store publication. A production release should use the publisher's private release keystore and a non-debug application ID. +## APK verification + +- File format: valid ZIP/APK; `unzip -t` reports no errors. +- Package: `com.projectsacrifice.game.debug`. +- Version: code `4`, name `0.3.0-stage2-playability-debug`. +- SDK: min 23, target 34, compile 34. +- Signature: v1 and v2 verified; one standard Android Debug signer. +- SHA-256: `94652cfe7e7eacbb41d7890944f9adf85b989fde89764809e3b8bfab8e64a12d`. +- Installation/runtime: the exact APK was installed and exercised by the final Android 16 connected test task. + +## Remaining scope + +- Stage 2 manual comprehension/balance sessions have not yet been completed. +- Possible alternative solutions on levels 2 and 10 still need dedicated negative tests. +- Screen-lock and process-death/low-memory lifecycle recovery remain open. +- The character is still Canvas-drawn prototype art; there is no skeleton/rig or skin pipeline yet. +- This is a debug-signed tester APK, not a Play Store release build. diff --git a/docs/CURRENT_ROADMAP.md b/docs/CURRENT_ROADMAP.md index e7dd765..c1095f3 100644 --- a/docs/CURRENT_ROADMAP.md +++ b/docs/CURRENT_ROADMAP.md @@ -16,10 +16,13 @@ - intended route всех уровней 1–10 защищён Android acceptance-ботами: каждый маршрут выполняется по три раза через production-ввод без прямого перемещения персонажа; - blocker-softlock уровня 8 после истечения таймера устранён recovery relay и покрыт отдельным трёхкратным сценарием; - исправлено перекрытие `FREEZER` уровня 6, которое повторно убивало игрока на frozen stepping stone; +- final integrated Android 16 matrix: 14/14 методов, 35 игровых выполнений и lifecycle-проверка; wall time `5:59`; - финальный debug APK проверен на Android 16: установка, холодный запуск, ZIP-структура и v1/v2-подписи корректны. Главный текущий риск: автоматическая проходимость доказана, но ручная понятность и баланс этапа 2 ещё не подтверждены. Отдельно остаются гипотезы об альтернативных решениях уровня 2 и обходе frozen corpse на уровне 10. +Performance-оговорка: критерий этапа 1 «полный прогон до 5 минут» пока не выполнен — финальный зелёный matrix занимает `5:59`. Сокращать количество трёхкратных прохождений или скрывать нестабильность retries запрещено; требуется отдельная оптимизация тестового runner. + ## 2. Принципы разработки 1. Сначала acceptance-тест, затем исправление уровня.