# Quality Requirements ## Quality Requirements Overview Ordered by priority: realism first, performance last. The order decides design trade-offs; it does not license dropping a lower item silently (see the trade-off rule below the table). | Priority | Category | Requirement | | --- | --- | --- | | 1 | Realism / Fidelity | Façade identity, proportion, material and lighting read like the reference photographs when compared side by side | | 2 | Realism / Fidelity | Building placement matches the measured footprints and the photographs (within ~1 m) | | 2 | Realism / Fidelity | Street scale (lane width, sidewalk width) within ~10 cm of the measured profile | | 3 | Reliability / Terrain | Zero raycast holes across sidewalks and carriageway (84-sample transect) | | 3 | Usability | WASD + mouse look, jump, reset (R), pause (Escape) — no tutorial needed | | 4 | Maintainability | Fresh checkout builds with the documented engine installation | | 4 | Portability | Linux build packages and runs; Windows build ships | | 5 | Provenance | Every committed asset has a recorded source and licence | | 6 | Performance efficiency | 60 FPS at 2560×1440, documented preset, no frame generation | **Trade-off rule.** Realism leads: when a realism improvement costs frame time, the improvement wins. Performance is still a **floor, not a preference** — 60 FPS at 1440p without frame generation must be met at every release. If realism cannot fit inside that budget, reduce the realism scope deliberately and record the reduction in `CHANGELOG.md`; never ship below the floor without the owner's explicit approval. Walkability outranks realism in one direction: a block the player falls through is not a demo, whatever it looks like. ## Quality Scenarios | ID | Source/Stimulus | Response | Metric | | --- | --- | --- | --- | | QS-1 | Screenshot is compared against its reference photograph | The render reads as the same building | Similarity score and visual match confirmed by the owner; `Tools/review/visual_loop.py` reports the deltas | | QS-2 | A façade is placed from measured data | It sits on its verified footprint | World span probed against `Geo/verification/` within ~1 m | | QS-3 | Player walks both sides of the demo | No fall-through, character stays at ground Z | 0 raycast holes in 84-sample transect | | QS-4 | Player holds W for 2 s on flat road | Character moves forward | ≥ 200 cm displacement, Z constant within ±5 cm | | QS-5 | Player presses R | Character teleports to spawn | < 100 cm from `StartLocation` | | QS-6 | Player presses Escape | Game pauses, cursor appears | `IsGamePaused()` = true | | QS-7 | Player presses Escape while paused | Game unpauses, cursor hides | `IsGamePaused()` = false | | QS-8 | Fresh checkout + engine install | Build succeeds | Exit code 0, runnable binary produced | | QS-9 | Game runs on dev workstation at 1440p | Frame rate holds the floor | ≥ 60 FPS, 99th percentile ≥ 55 FPS | > QS-9 is last on purpose. Performance is a floor that every release must meet, not the goal that shapes the content: realism decides what gets built, the frame budget decides how much of it. ### Building realism gate (0.9.0) | ID | Check | Metric | | --- | --- | --- | | BR-1 | A building with a reference photograph has a review shot compared against it | Silhouette and proportion deltas recorded per building in `Screenshots/README.md`; owner approval per shot | | BR-2 | Every building is either photo-matched or explicitly recorded as an unfounded blockout | List in `TODO.md`; no building in an in-between state | | BR-3 | Every building has a collision proxy and at least one LOD | Count of buildings missing either = 0 | | BR-4 | No surface carries a placeholder material | Material audit in `Tools/unreal/ue_audit_scene.py` reports 0 placeholder slots | | BR-5 | The realism pass does not break the floor | QS-9 still holds at 1440p, with the measured cost of the pass recorded |