os.mjs devices: m = make live USB, w = wipe+install (disambiguated)
User can now clearly choose between three operations per target:
c (non-boot internal disk) — clone: add boot tree alongside existing
filesystem (legacy, preserves data)
w (non-boot internal disk) — wipe + install ac native OS
(destructive, replaces existing)
m (non-boot removable) — make live USB
(destructive, produces bootable stick)
u (any non-boot) — update from cloud (OTA)
Key/target mismatches are refused with a low buzz so `w` can't
accidentally wipe a USB stick that the user meant to clone to, and `m`
can't nuke an internal disk. Confirm screen text branches on
operation kind: "install ac native?" vs "make live USB?" vs "clone os?",
each with a specific "ERASES ALL DATA on <this disk | this USB>"
warning.
Under the hood: m and w both route through the same clone-confirm →
flashUpdate path; the C flash_thread_fn detects the whole-disk target
and runs sfdisk + mkfs.vfat before the copy step. The os.mjs level
distinction is purely UI/safety.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>