# Release checks ## Pre-ship checklist **Build** - [ ] `cargo check --workspace` clean - [ ] `cargo clippy` clean for touched crates (repo has `clippy.toml`) - [ ] `cargo build --release` succeeds for every claimed target - [ ] No `dbg!`, no commented-out blocks, no `TODO` on a shipping path **Correctness** - [ ] Every touched Cx-free crate's tests pass - [ ] Asset-dependent tests **ran**, not skipped (check the output) - [ ] Driven test covers: reach win, reach lose, pause/resume, retry - [ ] Win twice in a row — catches incomplete `reset()` - [ ] 5-minute soak: no crash, no memory growth, no frame-time drift - [ ] Every model id in the scene asserted with `model_is_loaded` **Presentation** - [ ] Screenshots of every state at target aspect ratio, inspected - [ ] UI checked at 16:9, 4:3, and a tall phone ratio - [ ] Touch targets ≥ 44 px if mobile is claimed - [ ] Scorecard ≥ 2.3 average, nothing below 2, if premium is claimed **Performance** - [ ] p90 frame time in `--release` on a named device - [ ] Inside `apps/arcade/BUDGETS.md` with ≥ 20% headroom - [ ] `quality_level()` reported — a good frame time from a silent drop to q1 is not a good frame time - [ ] Before/after numbers for any optimisation claim **Netplay** (if applicable) - [ ] Two sessions stay in sync through a full match - [ ] Clients send input only; host is authoritative - [ ] Content replicates as `(preset, seed, position)` **XR** (if applicable) - [ ] 72 Hz held - [ ] No face-locked UI, no camera motion without player input - [ ] Snap turn available; no shake **Legal / credits** - [ ] `resources/CREDITS.toml` current - [ ] Attribution shipped with the package (CC0 does not require it; do it anyway) - [ ] Third-party licences included ## Packaging `makepad-game-pkg`: `Manifest`, `Knob`, `ManifestError`, `Library`, `LibraryEntry`, `Registry`, `IndexEntry`, `fetch_lan_package`, `verify_digest`, `sha256` / `sha256_hex`. 1. Write the `Manifest` — identity, version, entry point, and `Knob`s for tunables you want exposed without a rebuild. 2. Pack, producing a content-addressed artefact. 3. `verify_digest` on the result — and again on any package you receive. 4. Publish to a `Registry`; `fetch_lan_package` retrieves over LAN. **The hash is the authority.** A mirror is never trusted more than upstream; bytes from either are verified identically. Apply the same rule to packages: an unverified package is untrusted input, whatever the source. ## Version and changelog Bump the version in the app crate's `Cargo.toml`. Record: what changed for the player, what changed for a developer depending on the crates, known issues, and the measured performance on the reference device. ## Cross-platform statement For each platform, say which of these you did — never blur them: | Platform | Built | Ran | Played | Measured | | --- | --- | --- | --- | --- | | macOS | | | | | | Windows | | | | | | Linux | | | | | | Android | | | | | | Web | | | | | | Quest / XR | | | | | Note the fork's constraints: the Android branch is the active target here, and web builds are memory-pressure sensitive (the Route work in this fork exists precisely because of bounded web memory budgets). Do not claim web without a memory reading. ## Report template ``` OUTCOME Racing game: 3 laps, checkpoints, 4 AI opponents, win/lose reachable. EVIDENCE cargo test -p makepad-game-sim 42 passed cargo test -p makepad-game-blocks 18 passed, 0 skipped (assets present) cargo test -p makepad-arcade 6 driven tests passed - win path, lose path, pause/resume, retry, double-win, 5-min soak screenshots artifacts/shots/{menu,playing,paused,win,lose}-1920x1080.png playing: dusk desert, low sun, long shadows, 4 tinted opponent cars perf M1 Air release, p90 11.8 ms vs 16.6 ms budget, q3, 29% headroom scorecard avg 2.4, lowest 2 (ground), artifacts/scorecard.md NOT RUN Quest: built, not run - no device. 72 Hz claim is unverified. Windows/Linux: not built. RISKS Ground material is the weakest category; a texgen pass would raise it. Netplay tested with 2 clients only; MAX_PLAYERS is 8. ``` The `NOT RUN` section is mandatory. Omitting it is what turns an honest report into a misleading one.