Replace the remaining-gap table with v0.9.0 baselines and break the release candidate into detailed workstreams for content lock/playtests, balance, save migration, release engineering, legal/credits, documentation/visual sign-off and final QA. Sync the README development status to v0.9.0.
13 KiB
TODO
Work is grouped by theme. Each item should be small enough to complete and verify on its own;
see AGENTS.md for the workflow and MEMORY.md for the decisions behind these plans.
Gap Analysis and v1.0.0 Roadmap
Baseline: v0.9.0 (2026-11-01). Three playable venues, tutorial/campaign/checkpoint resume, difficulty/help, audio/accessibility settings, a 24-NPC budget baseline, a complete escalation/access/radio loop, shift review, the Blender asset library, 250 headless + 94 Python tests, a clean screen-design judge and an optional Forward+ Desktop HQ build. This is a strong release-candidate foundation, not yet a 1.0 product.
Documentation audit (completed 2026-11-01)
- Make
docs/architecture.mdthe single architecture source: asset/content pipeline contracts, runtime venue-switch/fallback flows, deployment/version constraints, quality requirements, risk register and documentation ownership map. - Keep command-heavy operational pages separate but subordinate:
docs/asset-tooling.md,docs/blender-assets.md,docs/getting-started.md,docs/RELEASING.mdanddocs/smoke-checklist.mdlink to architecture rather than acting as parallel sources. - Remove the obsolete
docs/plan-graphics-v0.6.mdand its links; completed graphics work is represented by ADR-0013, the asset pipeline section and the changelog. - Resolve stale claims: README release version/download row, development status "Forward+ not implemented", and Blender props "not AO-baked".
- Record the documentation ownership rule in
docs/architecture.md§12: design intent (PLAN.md), mechanics (gameplay.md), system architecture/contracts (architecture.md), decisions (ADRs), status (development-status.md), roadmap (TODO.md), operations (tooling/release docs).
Gap register (remaining to 1.0)
| Area | Current baseline | Remaining gap | Risk | Milestone |
|---|---|---|---|---|
| Content and balance | 3 venues with validated 12+ event matrices, recovery events and contextual dialogue | External playtest evidence, balance/fairness pass, event-weight tuning and final content lock | Repetition or unfair outcomes survive into 1.0 | 0.9.5 |
| Animation/presentation | Procedural pose layers, portrait captures, reduced hem clipping | Final animation/readability acceptance and no remaining P0/P1 clipping in the release candidate | Close-up jank reduces perceived quality | 0.9.5 |
| Audio/accessibility | Procedural ambience/SFX, volume controls, captions/reduce-motion settings, searchable Help | Full accessibility/localization acceptance review, audio caption coverage and P0/P1 fixes | Public 1.0 cannot claim accessible play | 0.9.5 |
| Localization | English JSON table, validation and input-generated Help | Pseudo-locale/layout audit and translator workflow sign-off | Text expansion/clipping at release | 0.9.5 |
| Performance/platform | 24-NPC headless budget (6.9 ms), Compatibility/Web/HQ paths | Target hardware matrix, Web/HQ manual profiling, frame-time/memory evidence | Platform-specific drops or startup failures | 0.9.5 |
| Save lifecycle | Settings/campaign/history/checkpoint files, atomic writes | Migration fixtures from 0.8/0.9, fresh-install/upgrade verification, rollback instructions | Player progress loss on upgrade | 0.9.5 |
| QA/CI | Headless suite, smokes, screenshot compare, optional judge | Full release-candidate smoke matrix, final gallery/judge, CI/release dry run and checksums | Regressions escape the release gate | 0.9.5 |
| Release/legal | Unsigned desktop/macOS builds, Web/HQ packages | Signing/notarization decision, checksums, AI-asset provenance, credits, privacy/body-camera and rating review | Public release blocked by trust/policy | 0.9.5 |
| Documentation | Architecture/ADR/status/roadmap ownership established | Final README/changelog/status/TODO/smoke-checklist sign-off and known-limitations page | Docs drift at launch | 0.9.5 |
| Post-launch | Stable 0.9 feature set | Live replay, more venues, VO/music, image-to-mesh props and seasonal content | Scope creep before launch | Post-1.0 |
Milestone 0.9.5 — Release candidate
Goal: freeze the feature set, prove it with external players, clear release/legal blockers and verify every distribution path. This is the next shipped version before 1.0.
Content lock and external playtest
- Declare a content/feature freeze for 0.9.5; only release-blocking fixes and balance changes may land after the freeze.
- Produce a release-candidate build with the tutorial, campaign, all three venues, Help, accessibility settings and checkpoint/resume enabled.
- Run at least five first-time-player sessions covering the tutorial and one full venue shift; record where players get stuck, misunderstand evidence or choose disproportionate escalation.
- Triage findings by severity (P0/P1/P2) and fix every P0/P1 onboarding/accessibility issue; keep the rest as explicit known limitations or post-1.0 items.
- Re-run the affected tutorial/campaign smokes after each fix and capture a fresh first-hour walkthrough for the release notes.
Balance and fairness pass
- Define measurable targets for routine compliance, access-decision accuracy, peaceful resolution, justified emergency calls and false-positive/false-negative rates.
- Run scripted venue sweeps across easy/normal/hard and all four phases; compare outcomes and tune event weights, reaction tables, compliance and report strictness where targets fail.
- Review emergency calls against actual danger: no routine behavior should make emergency the dominant winning move, and genuine threats must remain answerable.
- Verify the reputation grades, debrief explanations and campaign progression still communicate the de-escalation-first design after tuning.
- Record the balance evidence and any deliberate exceptions in
docs/development-status.mdorMEMORY.md.
Save migration and session reliability
- Add fixtures for a 0.8-era settings/campaign/history save and a 0.9.0 checkpoint; verify migration/default-filling and a clean first launch with no files.
- Test fresh install → tutorial → campaign → pause → quit → resume → review → next venue on an isolated user-data directory.
- Test corrupt JSON, partial temp files, missing optional fields and a failed atomic rename; confirm fallback behavior never destroys a valid save.
- Verify checkpoint resume after all three venues, after an incident, with NPCs at the door and with flashlight/body-camera/door state set.
- Document save locations, schema versions, reset behavior and rollback/export instructions in
docs/getting-started.mdand the release notes.
Release engineering and distribution
- Run
tools/build_releases.shfrom a clean checkout and verify Linux/Windows/macOS/Web/HQ artifact names, sizes and checksums. - Smoke-test fresh Linux portable/AppImage, Windows portable/installer, macOS unzip/launch, Web static hosting and Desktop HQ Vulkan fallback on the target matrix.
- Add a disk-space preflight and retention policy to the release/publish scripts so a full Gitea host cannot leave a partially uploaded release.
- Verify release metadata, tag/version consistency, asset counts and download links; retain at least the latest 0.8/0.9 releases and document older-asset pruning.
- Decide and document whether macOS signing/notarization is required for 0.9.5 or explicitly remains a 1.0 blocker; record the quarantine instructions either way.
Legal, credits and platform policy
- Audit AI-assisted asset provenance and licenses; record source/model usage and any redistribution constraints for textures, characters, props and UI art.
- Audit audio/SFX/music licensing (or confirm everything is procedural) and add a credits file.
- Review body-camera/privacy language, mental-health-crisis representation, age/content rating and storefront requirements; fix any release-blocking copy or content.
- Add the player-facing credits, known limitations, accessibility statement and privacy note to the release package/README.
- Mark external legal/storefront approval as complete or explicitly block 1.0 on it.
Documentation and visual sign-off
- Update
README.md,PLAN.md,docs/architecture.md, ADRs,docs/development-status.md,docs/getting-started.md,docs/smoke-checklist.md,CHANGELOG.mdand this roadmap. - Regenerate the full screenshot gallery and realism baselines after content lock; run
check_screenshots.shand the pinned vision judge, recording model/spend/verdicts. - Run the manual smoke checklist on every target and attach/link the release-candidate evidence.
- Verify the tutorial/campaign/help text at maximum font scale and with the longest strings.
- Remove or archive stale plans/notes and confirm no contradictory version/status claims remain.
Release-candidate QA and exit
- Run the complete headless suite, Python tooling, tutorial/campaign/session/scenario smokes, 24-NPC budget smoke and release build from a clean checkout.
- Run the manual QA matrix: fresh install, upgrade, offline launch, gamepad, accessibility settings, pause/resume, all venues and Desktop HQ fallback.
- Confirm no P0/P1 defects remain; P2 items must be documented as known limitations or post-1.0 work.
- Create the
v0.9.5version bump, changelog entry and tag; build/publish the release and verify all assets and download links. - Exit: the release candidate is content-locked, externally played, legally reviewed, documented, reproducibly built, and approved as the final stepping stone to 1.0.0.
Milestone 1.0.0 — Launch
Goal: publish a stable, documented and supportable 1.0 build.
- Freeze content and version, run full final QA on Windows/Linux/macOS/Web/Desktop HQ, and verify fresh installs plus upgrade paths.
- Publish store/release notes, credits, known limitations, accessibility statement and controls; verify every download link and artifact checksum.
- Tag
v1.0.0, publish through CI, verify the release page and post-launch patch policy. - Definition of 1.0: three complete venues with campaign/tutorial, stable save/resume, accessibility/localization acceptance, measured performance on the target matrix, signed release artifacts where platform rules require it, and documentation synchronized with the build.
Post-1.0 / non-blocking candidates
- Live 3D body-camera replay.
- Additional venues or seasonal events.
- Real voice/dialogue audio.
- Image-to-mesh prop pipeline.
- Rare easter eggs/cameos (e.g. Bob Dobbs) only after core content and QA are stable.
Roadmap dependencies and risks
- Content volume is the largest schedule risk; tutorial and campaign work must not outrun the event/dialogue matrix.
- The vision judge is a dev-time aid with an external key/budget; CI must never make it a hard gate.
- Godot version changes can alter lighting/imports; do not combine an engine baseline move with a content/feature milestone.
- Signed macOS builds and legal/AI provenance are release blockers, not polish.
- Keep the de-escalation-first rules and rare-emergency design unchanged while adding progression, difficulty and feedback.
Realism follow-ups (deferred)
- Re-run the screen-design judge for
12-joke-shop,13-studio-arrivaland the Forward+ A/B with the valid key: 13/13 match, 0 diff; the HQ A/B is in the report. - Capture a hooded/winter NPC close-up once a scenario spawns types 5-7 (the explicit
--portrait-typeoverride is already incapture_realism.gd). - Human-authored tree/hedge silhouettes: the whole scene now reads well except the foliage,
which is still flat-shaded clumps (
_shrub()/_tree()intools/blender_assets.py). Only worth doing if a higher-poly organic builder is added to the library. - Camera height: the concept frames are shot at ~1.55 m with a slightly wider lens; the game camera sits at 1.7 m. Decide whether the first-person height should match the art direction or stay at the current gameplay value.
Future ideas (optional, not scheduled)
- Live 3D body-camera replay (the timeline is text-only today).
- Additional venues or seasonal events authored from the new
.tresfiles. - Real voice/dialogue audio (the crowd bed and radio crackle are procedural).
- Swap the primitive prop builder for an image-to-mesh model API behind the same
assets/models/generated/<prop>.glbcontract.