# Release Packaging and Behavior Testing (Windows) ## Artifact Layout Current release package type: portable ZIP. Expected contents (Bevy package): - `sprimo-app.exe` - `assets/sprite-packs/default/manifest.json` - `assets/sprite-packs/default/sprite.png` - `README.txt` Expected contents (Tauri package): - `sprimo-tauri.exe` - `WebView2Loader.dll` - `assets/sprite-packs/default/manifest.json` - `assets/sprite-packs/default/sprite.png` - `README.txt` Generated outputs: - `dist/sprimo-windows-x64-v.zip` - `dist/sprimo-windows-x64-v.zip.sha256` ## Commands Use `just` for command entry: ```powershell just check just test just build-release-bevy just package-win-bevy just smoke-win-bevy just build-release-tauri just package-win-tauri just smoke-win-tauri just random-backend-test ``` Compatibility aliases: - `just build-release` -> Bevy release build. - `just package-win` -> Bevy package. - `just smoke-win` -> Bevy smoke package check. Packaging script target selection: - Bevy: `python scripts/package_windows.py package --frontend bevy` - Tauri: `python scripts/package_windows.py package --frontend tauri` ## Behavior Test Checklist (Packaged App) Run tests from an unpacked ZIP folder, not from the workspace run. 1. Launch `sprimo-app.exe`; verify default sprite renders. 2. Verify no terminal window appears when launching release build by double-click. 3. Verify global hotkey recovery (`Ctrl+Alt+P`) forces visibility and top-most recovery. 4. Verify `SetFlags` applies always-on-top and visibility via API commands. 5. Verify `/v1/health` and `/v1/state` behavior with auth. 6. Verify `SetSpritePack`: - valid pack switches runtime visuals - invalid pack keeps current visuals and sets `last_error` 7. Restart app and verify persisted config behavior. 8. Confirm overlay background is transparent (desktop visible behind non-sprite pixels). 9. Confirm no magenta matte remains around sprite in default pack. 10. Confirm default startup window footprint is reduced (416x416 before runtime pack resize). 11. Run randomized backend API interaction and review summary output: - `just random-backend-test` - validate expected mix of `202`/`400`/`401` without process crash. ## Test Log Template - Date: - Artifact: - Commit: - Tester: - Result: - Notes: ## Issue Evidence Gate Before release sign-off for a bug fix: 1. Link the issue file (`issues/issueN.md`) in the test log. 2. Ensure before/after screenshot evidence is referenced from the issue: - before: `issues/screenshots/issueN-before-YYYYMMDD-HHMMSS.png` - after: `issues/screenshots/issueN-after-YYYYMMDD-HHMMSS.png` 3. Record verification commands and outcomes in the issue: - `cargo check --workspace` - `cargo test --workspace` - `just qa-validate` Legacy issues may reference `issues/screenshots/issueN.png` as before evidence. ## Tauri Runtime Behavior Testing Authoritative workflow: `docs/TAURI_RUNTIME_TESTING.md`. Bevy window-management verification workflow: `docs/BEVY_WINDOW_VERIFICATION.md`. ### Workspace Mode (Required Now) 1. `just build-tauri-ui` 2. `just check-tauri` 3. `just check-runtime-core` 4. `just run-tauri` (smoke and runtime observation) 5. Verify invoke/event contract behavior: - `current_state` - `load_active_sprite_pack` - `runtime:snapshot` 6. Verify API/runtime contract behavior against tauri process: - `/v1/health` - `/v1/state` with auth - `/v1/command` - `/v1/commands` 7. Verify tauri frameless drag: - left-mouse drag moves window - window remains non-resizable - moved position updates runtime snapshot `x/y` and persists after restart 8. Run randomized backend API interaction: - `just random-backend-test` - verify command traffic remains stable and runtime stays alive. 9. Verify scale-fit behavior in tauri runtime: - send `SetTransform.scale` values above `1.0` - confirm full sprite remains visible and window auto-resizes without top clipping 10. Verify pop-out settings window behavior: - open via tray `Settings` - switch character and confirm immediate renderer reload + persistence after restart - change scale slider and confirm runtime resize + persistence - toggle `Visible` and `Always on top` and confirm both runtime behavior + persistence 11. Verify packaged tauri reload stability: - run repeated character switch cycles (`default` <-> `ferris`) and move scale slider each cycle - ensure no runtime frontend exception is shown (debug overlay/console) - ensure no visible magenta fringe remains around sprite edges after chroma-key conversion 12. Verify packaged tauri scale anchoring and bounds: - repeated scale changes resize around window center (no consistent bottom-right drift) - window remains visible on the current monitor (no off-screen drift) - no runtime scale-path exception appears (for example monitor lookup API errors) - no runtime position-arg exceptions appear during scale (e.g. float passed to integer position API) - at large scale values (>= 1.8), full sprite remains visible without clipping 13. Verify packaged tauri frontend freshness: - confirm package run reflects latest `frontend/tauri-ui` changes (no stale embedded UI bundle) ### Packaged Mode (Required Once Tauri Packaging Exists) When tauri packaging automation is available, repeat runtime behavior checks on packaged artifacts: 1. Launch packaged tauri app. 2. Re-run invoke/event/API checks from workspace mode. 3. Attach before/after screenshots and command summaries in linked issue.