Завершить инженерный кандидат Stage 5
This commit is contained in:
@@ -154,6 +154,11 @@ baseline-задачи также имели явного владельца по
|
||||
- progress восстанавливается после Activity/process recreation и обновления приложения;
|
||||
- `goon-game-milestone-vslice` принят вместе с performance и human-playtest gates.
|
||||
|
||||
Статус на 19 августа 2026: инженерный candidate `0.8.0-stage5-vslice` готов.
|
||||
Art/audio/camera/save/determinism/performance реализованы; 72 JVM-теста и единый
|
||||
Android 16 run `35/35` (`493.521 s`) GREEN. Milestone намеренно остаётся открытым
|
||||
до 20 независимых no-explanation сессий по протоколу `STAGE5_HUMAN_PLAYTEST.md`.
|
||||
|
||||
### Этап 6. Production content — P1, несколько итераций
|
||||
|
||||
Задачи:
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
# Stage 5 Art Bible — Clockwork Catacombs
|
||||
|
||||
Status: approved production direction for the Android vertical slice.
|
||||
|
||||
## Identity
|
||||
|
||||
The game is an original dark-comedy clockwork fantasy. Disposable volunteers are faceless brass-and-cloth constructs exploring an ancient teal-lit reliquary. Their destruction is readable and absurd, never graphic. The visual language must communicate puzzle state before decoration.
|
||||
|
||||
This direction deliberately does not reproduce the title, knights, silhouettes, heraldry, costumes, props, level layouts, UI, animation, copy, audio, or other protected expression of *Life Goes On: Done to Death*. The shared idea is limited to the independently implemented sacrifice-puzzle mechanic.
|
||||
|
||||
## Character rig and skins
|
||||
|
||||
Every volunteer uses one normalized articulated rig so skins can change without changing collision or gameplay:
|
||||
|
||||
- anchors: root, hips, chest, head, left/right shoulder, hand, knee, and foot;
|
||||
- collision remains the existing 62 x 100 gameplay rectangle and is never derived from artwork;
|
||||
- rendering may mirror the rig for facing, but anchor names and normalized bounds stay stable;
|
||||
- a skin is a palette and trim set, not a different body shape;
|
||||
- Stage 5 ships three original palettes: Brass Scout, Verdigris Keeper, and Ember Courier.
|
||||
|
||||
The head is a round riveted lantern-mask with a single horizontal visor. The torso is a narrow boiler shell, limbs are visible rods joined by circular pivots, and a short asymmetric cloth tab supplies motion. No medieval helmet, knight crest, human face, blood, or gore is used.
|
||||
|
||||
## Required state reads
|
||||
|
||||
The same rig must make these states recognizable without relying on color alone:
|
||||
|
||||
- alive idle: balanced stance, lit visor, slow boiler pulse;
|
||||
- run: alternating limb arcs and trailing cloth;
|
||||
- jump/fall: compressed or extended silhouette according to vertical velocity;
|
||||
- dead body: collapsed rotated rig with an unlit visor;
|
||||
- pinned body: rigid horizontal brace with a visible anchor bolt;
|
||||
- frozen body: squared ice shell plus intact rig silhouette and frost cracks;
|
||||
- conductive body: zig-zag arc ring plus bright joint sparks;
|
||||
- respawn: concentric assembly rings and a rising segmented silhouette.
|
||||
|
||||
High-contrast mode must preserve outline, state icon, and value separation. Animation is decorative only: collision, switch contact, and goal detection use the existing physics objects.
|
||||
|
||||
## Environment and hazards
|
||||
|
||||
- platforms: ink-dark masonry faces with brass top rails and readable collision edges;
|
||||
- pressure plates and relays: one clear interaction glyph and a mechanical travel state;
|
||||
- doors: heavy portcullis frame; open/closed remains distinguishable by silhouette;
|
||||
- spikes: triangular teeth with pale edge highlights;
|
||||
- saws: toothed brass wheels with a dark hub and rotation trail;
|
||||
- freezer: cyan condenser frame and crystalline field;
|
||||
- electricity: yellow-white broken arcs with a distinct relay line;
|
||||
- pits: near-black depth with sparse teal motes, never a flat platform-colored void;
|
||||
- goal: an original suspended chronolume relic, not a crown or chalice.
|
||||
|
||||
## UI and camera
|
||||
|
||||
HUD panels use translucent ink surfaces, warm brass titles, pale body copy, and minimum contrast already enforced by accessibility settings. Controls remain circular and stay inside the safe viewport. Camera motion may add focus and short impact shake, but must not conceal hazards or move collision geometry. Reduced-motion mode disables shake and decorative bobbing while retaining state changes.
|
||||
|
||||
## Animation and performance budgets
|
||||
|
||||
- procedural rig animation is evaluated from immutable gameplay state and elapsed time;
|
||||
- at most one character rig per live volunteer and one collapsed rig per retained body;
|
||||
- no per-frame bitmap allocation, shader construction, collection growth, or text measurement;
|
||||
- particles are capped, short-lived, and may be dropped before gameplay or UI readability;
|
||||
- visual updates target 60 FPS and remain functional at the existing fixed physics cap.
|
||||
|
||||
## Acceptance checklist
|
||||
|
||||
- All ten levels use the same authored visual language.
|
||||
- Alive, dead, pinned, frozen, conductive, and respawning states are recognizable in grayscale screenshots.
|
||||
- At least three palette-only skins use the same normalized skeleton.
|
||||
- Art does not change geometry, timings, planned death counts, or bot routes.
|
||||
- No copied or traced commercial assets, audio, text, characters, or level dressings are present.
|
||||
@@ -0,0 +1,38 @@
|
||||
# Stage 5 external playtest protocol
|
||||
|
||||
This is the only remaining Stage 5 acceptance gate. Automated bots, developers,
|
||||
and self-testing cannot satisfy it.
|
||||
|
||||
## Setup
|
||||
|
||||
- Use the immutable `0.8.0-stage5-vslice-debug` APK and record its SHA-256.
|
||||
- Recruit at least two independent participants for every level (20 sessions).
|
||||
- Do not explain controls, mechanics, level intent, or the meaning of death.
|
||||
- A participant may read only the text shown by the game.
|
||||
- Record screen/video when consent and local policy allow it; do not collect PII.
|
||||
|
||||
## Per-session record
|
||||
|
||||
| Field | Required value |
|
||||
|---|---|
|
||||
| Session ID | anonymous local identifier |
|
||||
| Level | 1–10 |
|
||||
| Tester cohort | new / familiar with platformers |
|
||||
| Completed | yes/no |
|
||||
| Time | seconds |
|
||||
| Volunteers | deaths retained by the result screen |
|
||||
| Restarts | count |
|
||||
| First wrong assumption | short observation |
|
||||
| Exit/softlock point | coordinates or visible object |
|
||||
| Help requested | exact question; developer still gives no answer |
|
||||
| Severity | blocker / major / minor / observation |
|
||||
| Disposition | fix / accepted / follow-up Bead |
|
||||
|
||||
## Acceptance
|
||||
|
||||
- 20/20 required sessions are recorded.
|
||||
- No blocker softlock is reproduced.
|
||||
- Every major observation has a fix or explicit product decision.
|
||||
- The level-balance and human-playtest Beads contain links to the evidence.
|
||||
- Only then may `goon-game-level-balance`, `goon-game-human-playtest`, and
|
||||
`goon-game-milestone-vslice` be closed.
|
||||
@@ -0,0 +1,33 @@
|
||||
# Stage 5 performance and determinism contract
|
||||
|
||||
Stage 5 targets 60 FPS and requires a steady-state 30 FPS hard floor on a
|
||||
hardware-accelerated target. Cold launch/orientation time is measured separately
|
||||
from gameplay cadence.
|
||||
|
||||
| Metric | Release ceiling |
|
||||
|---|---:|
|
||||
| p95 frame interval | 34 ms |
|
||||
| p95 simulation update | 12 ms |
|
||||
| p95 Canvas draw | 20 ms |
|
||||
| retained bodies | 16 |
|
||||
| collision checks per sampled frame | 2,500 |
|
||||
| estimated draw primitives | 2,200 |
|
||||
| used Java heap | 128 MiB |
|
||||
|
||||
`PerformanceMonitor` keeps an allocation-free rolling window of 240 samples.
|
||||
`StageFivePerformanceTest` allows five seconds for Activity rotation and shader
|
||||
warm-up, resets the monitor, then measures ten uninterrupted seconds of level 10.
|
||||
The final Android 16 run on a 1080×2400, 60 Hz AVD using the Apple M3 Pro host GPU
|
||||
passed every ceiling.
|
||||
|
||||
The software-only SwiftShader AVD is retained for deterministic gameplay tests,
|
||||
but is not presented as a physical-device performance result. Its measured
|
||||
steady-state p95 frame interval was 41.61 ms against the 34 ms gate. This known
|
||||
environment result is intentionally recorded rather than hidden by weakening the
|
||||
release budget.
|
||||
|
||||
Physics uses `PhysicsConfig` version 1 and a 1/60 s deterministic automation
|
||||
step. `StageFiveDeterminismTest` records all ten state-driven routes and replays
|
||||
each exact command tape three times. Terminal/checkpoint hashes and expected
|
||||
death/body counts must match, and each complete ten-level replay pass must finish
|
||||
under five minutes.
|
||||
@@ -0,0 +1,57 @@
|
||||
# Stage 5 Vertical Slice QA report
|
||||
|
||||
Date: 19 August 2026
|
||||
Candidate: `0.8.0-stage5-vslice-debug`, versionCode 9
|
||||
Package: `com.projectsacrifice.game.debug`
|
||||
APK SHA-256: `8bb970c7385a48d8002907382067a5f8f87554a33ad7aaace9aa593194c8fed5`
|
||||
|
||||
## Delivered engineering scope
|
||||
|
||||
- Original Clockwork Catacombs art bible and a normalized articulated volunteer
|
||||
rig with three skins and run/jump/fall/death/frozen/conductive/pinned/respawn states.
|
||||
- Procedural music, effects, and voice variants with independent persisted Music,
|
||||
Effects, and Voice volume controls; unavailable audio degrades to silence.
|
||||
- Bounded horizontal/vertical camera damping, mechanism focus, impact shake, and
|
||||
a persisted reduced-motion option; camera never changes physics coordinates.
|
||||
- Save version 2, safe v1 progress migration, full active-puzzle Bundle snapshot,
|
||||
and visible-paused restore after Activity recreation.
|
||||
- Physics version 1, deterministic input tapes, terminal/checkpoint signatures,
|
||||
and explicit runtime performance ceilings.
|
||||
|
||||
## Automated evidence
|
||||
|
||||
- Clean `testDebugUnitTest lintDebug assembleDebug assembleDebugAndroidTest`:
|
||||
GREEN; 72 JVM tests in 23 classes; all 10 JSON levels validated.
|
||||
- Exact final Android 16 unfiltered run: `OK (35 tests)` in `493.521 s`.
|
||||
- The run includes all 10 production-input solutions, level 8 recovery, level 10
|
||||
delayed decisions/body stability, restart, lifecycle, save migration/recreation,
|
||||
RU/EN, controls, onboarding/results, audio persistence, performance, and Stage 3 regressions.
|
||||
- Determinism gate inside that run: 10 recorded routes replayed three sequential
|
||||
times (30 completions) with matching signatures and under-five-minute pass guards.
|
||||
- Host-GPU steady-state performance gate: GREEN against every published ceiling.
|
||||
- Software SwiftShader observation: p95 frame interval 41.61 ms, above the 34 ms
|
||||
target-device gate; documented as a non-target renderer limitation.
|
||||
- Installed APK cold-launched successfully; post-run crash/ANR buffer contained no
|
||||
Project Sacrifice fatal exception or ANR.
|
||||
|
||||
## Package verification
|
||||
|
||||
- `aapt`: package/version/minSdk 23/targetSdk 34 confirmed.
|
||||
- `unzip -t`: valid APK/ZIP, no compressed-data errors.
|
||||
- `apksigner`: v1 and v2 signatures valid; one Android Debug signer.
|
||||
- This is an installable debug testing candidate, not a store-signed release.
|
||||
|
||||
## TDD evidence highlights
|
||||
|
||||
- Volunteer rig, audio variants/settings, camera, save codec, physics config,
|
||||
deterministic tape, and performance monitor began with missing-contract RED tests.
|
||||
- Session restore first exposed invalid wall-clock setup and was replaced by an
|
||||
exact fixed-step saved-state assertion before going GREEN.
|
||||
- Performance first failed on SwiftShader (`41.61 > 34 ms`); the final target gate
|
||||
was run on hardware-accelerated Android after separating cold rotation warm-up.
|
||||
|
||||
## Gate disposition
|
||||
|
||||
The Stage 5 engineering release candidate is complete and reproducible. Formal
|
||||
Stage 5 milestone acceptance remains pending only on the external 20-session
|
||||
no-explanation playtest in `STAGE5_HUMAN_PLAYTEST.md`; no human evidence was fabricated.
|
||||
@@ -35,8 +35,8 @@
|
||||
|
||||
## Незавершённые сквозные gates
|
||||
|
||||
- `goon-game-regression-10` имеет `stage-1`, но primary Stage 5: runner создан,
|
||||
однако критерий трёх полных прогонов быстрее пяти минут ещё не доказан.
|
||||
- `goon-game-regression-10` имеет `stage-1`, но primary Stage 5: закрыт после
|
||||
трёх детерминированных полных replay-проходов 10/10 с under-five-minute guards.
|
||||
- `goon-game-level-balance` имеет `stage-2`, но primary Stage 5: инженерные
|
||||
исправления сделаны, а внешний comprehension/playtest gate остаётся открытым.
|
||||
- `goon-game-human-playtest` относится к Stage 5 и не может быть закрыт ботами.
|
||||
@@ -64,7 +64,7 @@ Snapshot на 19 августа 2026 года:
|
||||
| 2 | 5 | 0 |
|
||||
| 3 | 5 | 0 |
|
||||
| 4 | 4 | 0 |
|
||||
| 5 | 15 | 15 |
|
||||
| 5 | 15 | 3 |
|
||||
| 6 | 18 | 18 |
|
||||
| 7 | 9 | 9 |
|
||||
| 8 | 1 | 1 |
|
||||
|
||||
Reference in New Issue
Block a user