MVP Smoke Test (Sprint 14 T5)

The MVP is complete only when all 19 roadmap criteria pass on physical ROG Ally hardware. This document is the repeatable smoke-test checklist.

Source: sprints/roadmap.md

Prerequisites

  • Latest ally dev USB image (SSH enabled) flashed to USB
  • Physical ROG Ally (charger + controller input via built-in gamepad)
  • SSH access: ssh root@<device-ip>

Checklist

#CriterionVerify byPASSNotes
1Boots directly from UEFI into PlayOSPower on → shell visible, no desktop☐
2UEFI-bootable EFI artifactls /EFI/EFI/BOOT/BOOTX64.EFI (ESP mounted at /EFI; on the live USB it is /EFI/BOOT/BOOTX64.EFI)☐
3playos-init is PID 1readlink /proc/1/exe → /init and strings /init | grep -m1 playos-init. (/proc/1/comm is just init — the binary is installed as /init; /sbin/init is BusyBox)☐
4Compositor owns DRM/KMS + WaylandSSH: pgrep playos-compositor, /run/playos/playos-0 socket☐
5Shell persistent controller-first UIHome screen stays alive; background/return works☐
6wlroots + AMDGPU DRM/GBM/EGL/Mesa`grep -E "AMDGPURadeon" /data/log/init.log`; compositor log☐
7Shell renders via Raylib PlayOS backendShell visible, sample game renders☐
8Shell + game use public libplayos ABIldd /usr/bin/playos-shell → libplayos.so.0☐
9Trusted transport stays internalNo public socket for game control; only /run/playos/control.sock + compositor.sock☐
10Shell requests launch; init spawns/supervisesLaunch sample game; SSH pgrep -a playos-game☐
11Compositor waits for first valid frameQuick-launch sample; no flash/black flicker☐
12Hardware-accelerated render + controller inputSample game: movement/buttons respond☐
13System button backgrounds/pauses gamePress System → shell returns; game pauses☐
14Resume returns to same game without restartPress System again → same game state☐
15Game audio through ALSASample game plays audio; aplay -l shows device☐
16Clean exit + crash return to shellExit sample; run crash sample → shell recovers☐
17Games/saves on separate ext4`mountgrep /data` → ext4; saves persist reboot☐
18System image immutable/ mounted squashfs ro: `mountgrep " / "`☐
19Recovery usable without accelerated graphicsBoot with a recovery hold (START+SELECT 2 s, or Vol Up/Down 5 s) → recovery menu☑2026-09-13: met via the GL-free recovery client (playos-recovery, wl_shm + software text), which init starts when the GL shell cannot run in recovery; compositor-side software rendering over SimplEDRM verified in QEMU with a screenshot, and the client path verified with the playos.noshell hook. Evidence playos-refdistro/docs/evidence/f3-recovery-client-no-gl-2026-09-13.png, report docs/f3-recovery-software-rendering-2026-09-13.md. Not covered: a machine with no DRM device at all (no compositor) would need a kernel-console UI

Automated evidence

Run on the device (dev image):

sh scripts/mvp-smoke.sh > mvp-evidence.md

The script captures process checks, sockets, DRM/ALSA devices, mounts, and boot-log markers for the automatable criteria.

Evidence record

## MVP smoke test — <date> — ROG Ally — image <commit>

All 19 criteria PASS: ☐ / 19

Attach: mvp-evidence.md, shell screenshot, audio log.

2026-09-12 — dev image — 18 / 19

  • Report: playos-refdistro/docs/mvp-smoke-report-2026-09-12.md
  • Raw collector output: playos-refdistro/docs/evidence/mvp-evidence-2026-09-12.md
  • Image: shell 0a76f93f…, compositor 0837553f…, overlay f0394108…, libplayos 46000d67… (refdistro f0bd607)
  • Criterion 19 PASSES (2026-09-13): the recovery UI no longer needs GL at all. playos-recovery (wl_shm + software text rasteriser) takes over when the GL shell cannot run, and the compositor itself can render in software over SimplEDRM with no GPU driver. Verified in QEMU (client menu on screen) with the playos.noshell hook reproducing the shell-failure case — see the F3 report. Every other criterion passed, with controller input, overlay background/resume, screenshots, clean exit and crash recovery all exercised on hardware.