diff --git a/TODO.md b/TODO.md index e742d66..a50ed52 100644 --- a/TODO.md +++ b/TODO.md @@ -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