makepad/skills/makepad-qa-release/references/release-checks.md
Arena Agent fe21c07d84 skills: add Makepad game skills pack ported from threejs-game-skills
Nine agent skills for building Makepad/Rust games, ported from
majidmanzarpour/threejs-game-skills. Same director-routed workflow and
premium bar; runtime rewritten for this fork's game crates.

- makepad-game-director        entrypoint, routing, continuity, asset probe
- makepad-gameplay-systems     loop, movers vs rigid bodies, input, camera, netplay
- makepad-aaa-graphics-builder lighting, shaders, budget, visual scorecard
- makepad-game-ui-designer     HUD, menus, touch and XR UI
- makepad-debug-profiler       defect bisection and profiling
- makepad-qa-release           verification ladder, evidence, packaging
- makepad-3d-generator         CC0 model search, casts, procedural geometry
- makepad-image-generator      texgen textures, palettes, sky, icons
- makepad-audio-generator      sample bank, mixer, material impacts, 3D audio

Written against the real APIs in libs/game/*, libs/sim and apps/arcade:
the game.* verb table, GameRenderer adaptive quality, the packed 6-float
GameMeshVertex layout, script_mod! splash styling, makepad-test driving,
and the BUDGETS.md numbers. No paid generation API is required - the CC0
library plus seeded makepad-game-gen replaces them.

Includes install.sh (Codex/Claude), validate-skills.sh and a repo-aware
probe_assets.sh; both scripts verified against this checkout.
2026-09-05 21:18:58 +00:00

4.1 KiB

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 Knobs 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.