Plan detailed 0.9.0 production-quality steps
Full build / Import + headless tests (push) Successful in 43s
Full build / Full desktop build + optional release (push) Skipped

Expand the next milestone into animation, audio, localization, accessibility,
performance/platform, QA/visual baselines, Godot-version policy and exit
criteria, with concrete verification work per workstream.
This commit is contained in:
zwitschi committed 2026-11-01 21:39:29 +01:00
1 parent fac9b002c3
commit b5d4d5fb87
1 file changed
+113 -19
+113 -19
View File
@@ -5,10 +5,10 @@ see `AGENTS.md` for the workflow and `MEMORY.md` for the decisions behind these
## Gap Analysis and v1.0.0 Roadmap
Baseline: **v0.7.2** (2026-11-01). Three playable venues, a complete escalation/access/radio
loop, shift review, a Blender character/gear/prop library, 231 headless + 94 Python tests, a
13/13 clean screen-design judge and an optional Forward+ Desktop HQ build. This is a strong
vertical slice, not yet a 1.0 product.
Baseline: **v0.8.1** (2026-11-01). Three playable venues, tutorial/campaign/checkpoint resume,
difficulty/help, a complete escalation/access/radio loop, shift review, the Blender asset library,
249 headless + 94 Python tests, a clean screen-design judge and an optional Forward+ Desktop HQ
build. This is a strong first-hour vertical slice, not yet a 1.0 product.
### Documentation audit (completed 2026-11-01)
@@ -52,22 +52,116 @@ vertical slice, not yet a 1.0 product.
Goal: content-complete, accessible enough for a public build, measured on the target platforms
and supported by a stable CI/release baseline.
- [ ] Animation/presentation pass: negotiation/reaction poses and transitions, readable faces in
portrait, resolved camera height, and no coat/skirt leg clipping in normal movement.
- [ ] Audio pass: music/ambience direction, event SFX, radio/crowd mix, caption hooks and a VO
decision with production scope.
- [ ] Localization pass: all player-facing strings externalized, pseudo-locale layout test, font
fallback and a contributor translation workflow.
- [ ] Accessibility pass: subtitles/captions, colour-independent access/escalation cues, motion
and flash options, full keyboard/gamepad parity and documented assist options.
- [ ] Performance pass: profile 24 live NPCs, all venues, Web and Desktop HQ; record frame-time,
draw-call and memory budgets; add regression checks where automation is possible.
- [ ] QA pass: automated end-to-end shift for each venue, full smoke matrix, screenshot/judge
baselines, and a documented manual judge budget/model pin.
- [ ] Resolve the Godot baseline: choose one supported version (or an explicit 4.3-CI/4.7-local
matrix), align export templates and visual smoke results, and document the policy.
### Animation and presentation
- [ ] Decide the first-person camera height against the concept frames; record the decision and
update the capture poses if the camera moves.
- [ ] Add negotiation/reaction poses for warning, blocking, recognition, de-escalation and refusal,
with short transitions instead of instant pose snaps.
- [ ] Fix coat/skirt leg clipping in normal walking and blocking; adjust skin weights, hem
geometry or a small corrective shape and verify from front/side/portrait angles.
- [ ] Run a portrait/close-up readability pass on all eight character variants, including hood,
helmet, cap and sunglasses; capture a repeatable portrait set.
- [ ] Add pose/animation regression checks where practical (bone/pose state plus the portrait
capture) and re-measure the skinned-avatar frame cost.
- [ ] Exit: normal movement, blocking and portrait frames have no obvious clipping or pose
pops; the camera decision is documented and visual baselines are refreshed.
### Audio
- [ ] Write the audio direction: crowd ambience, venue mood, UI/radio ticks, footsteps, warning
and escalation cues, and whether music is needed.
- [ ] Map every gameplay event to an SFX/ambience hook, including tutorial prompts, campaign
transitions, radio send/failure, door lock and responder arrival.
- [ ] Add Music, SFX and Ambience volume controls to Settings and persist them; keep the dummy
audio server safe for headless tests.
- [ ] Add caption metadata to audio cues and tie it to the accessibility captions.
- [ ] Make the VO decision: text-only for 0.9, or a scoped voice pipeline with content list,
recording/casting plan, licensing and fallback text.
- [ ] Add audio smoke coverage for the new hooks and mix levels; document the final mix targets.
### Localization
- [ ] Audit hardcoded player-facing text, starting with Help, campaign/status screens, tutorial
overlay, review labels and new dialogue; move everything into `strings.en.json`.
- [ ] Add a pseudo-locale or long-string expansion test that runs the UI at 1.5–2× text length and
flags clipped buttons, labels and HUD rows.
- [ ] Verify font coverage for punctuation, arrows, accented characters and non-Latin sample
glyphs; document the fallback font policy.
- [ ] Write the translator workflow: key naming, source-of-truth file, placeholders, review and
screenshot checks, and how to add a locale without code changes.
- [ ] Add localization coverage tests for every named input action and every new 0.9 UI surface.
- [ ] Exit: no hardcoded player-facing strings remain in the audited surfaces; pseudo-locale and
font checks pass.
### Accessibility
- [ ] Add subtitles/captions for tutorial prompts, radio/phone dialogue and key audio cues, with
a Settings toggle and readable defaults.
- [ ] Audit all colour-dependent cues (access, escalation, crowd, door, flashlight) and add a
colour-independent shape/text/icon alternative where missing.
- [ ] Add motion/flash options: disable camera bob/shake, reduce rapid flashes, and verify the
precision-walk/HUD transitions remain usable.
- [ ] Verify complete keyboard-only and gamepad-only paths for menus, tutorial, inspection, wheel,
radio (including hold timing), review and Help.
- [ ] Test HUD/font scaling at minimum and maximum settings, including long localized strings and
the body-camera overlay.
- [ ] Write an accessibility statement and a manual accessibility checklist; add automated coverage
for input parity and caption/hint availability.
- [ ] Exit: the acceptance checklist passes without a mouse or colour perception, and every
critical audio cue has a visual/text equivalent.
### Performance and platform
- [ ] Define the target hardware matrix (minimum/recommended desktop, Web browser and Desktop HQ
Vulkan) and record baseline frame-time, draw calls and memory per venue.
- [ ] Add a repeatable 24-NPC performance smoke across all venues, including crowd panic and the
studio arrival; keep the 16-NPC result as the regression floor.
- [ ] Profile Web and Desktop HQ separately; investigate LOD/impostor thresholds, prop draw calls,
shadow cost and skinning CPU before adding more avatars.
- [ ] Add frame-time/memory regression gates where automation is possible and document manual
capture steps for the rest.
- [ ] Verify the Compatibility/Web fallback and HQ Vulkan fallback on the target matrix; record
startup failures and GPU-driver requirements.
- [ ] Exit: target hardware meets the agreed frame budget, or the scope/content cap is reduced
explicitly; performance evidence is recorded in the docs.
### QA automation and visual baselines
- [ ] Add an automated end-to-end shift for each venue that covers spawn, access, escalation,
radio, review and campaign advancement.
- [ ] Consolidate the smoke matrix into one documented command/checklist; include tutorial,
checkpoint resume, campaign transition, Help, radio and all venue paths.
- [ ] Refresh the screenshot gallery and realism baselines; run `compare` and the pinned judge,
recording the model, spend and any accepted review verdicts.
- [ ] Keep the vision judge optional and cost-capped; document the manual judge budget/model pin
and never make an external API a CI release gate.
- [ ] Add a release-candidate dry run that builds every artifact, verifies installers/Web/HQ and
records checksums.
- [ ] Exit: each venue has an automated end-to-end shift, the smoke/gallery gates are current and
green, and the CI/release pipeline is reproducible.
### Godot baseline and version policy
- [ ] Choose the supported engine policy: one pinned version, or an explicit CI/local matrix
(currently 4.3 CI vs 4.7.2 local).
- [ ] If upgrading, run import/headless/screenshot/HQ checks, remove temporary version-specific
light-falloff branches where possible, and align export templates, `.uid` policy and CI.
- [ ] Document the upgrade/rollback procedure and the visual-smoke requirements for engine bumps.
- [ ] Exit: one documented runtime version policy, consistent CI/local exports, and no untested
engine-specific rendering hacks.
### Verification and exit criteria
- [ ] Add/verify headless tests for every new 0.9 system, plus localization, accessibility and
performance checks that can run without a display.
- [ ] Run the full smoke matrix and capture/label a clean 0.9 screenshot set.
- [ ] Run a manual accessibility/localization review and record findings; fix P0/P1 blockers.
- [ ] Update architecture, ADRs, status, README, changelog and roadmap in the same change as the
implementation.
- [ ] Exit: production content is feature-complete, accessibility/localization acceptance criteria
pass, target hardware matrix is measured, and no P0/P1 defect remains open.
pass, target hardware is measured, the engine policy is documented, and no P0/P1 defect is
open.
## Milestone 0.9.5 — Release candidate