Root cause: a non-ASCII em-dash in an app.py comment. The A/B updater pushes app.py as 7-bit SysEx (charCode & 0x7F), which turned the em-dash's bytes into a NUL byte -> corrupt source -> the pushed build crashed on boot (black screen, onboard LED blinking CircuitPython's error/safe-mode pattern). A dragged copy was fine (valid UTF-8); only the over-MIDI path mangled it. - Replace the em-dash with ASCII; app.py is now pure ASCII. - build.sh now ASSERTS pico-cp/app.py is pure ASCII (fails the build otherwise) so this class of bug can never ship again. - Device 0x20 handler VALIDATES the pushed app.py before installing (reject if it contains a NUL byte, or is missing App().run()/APP_VERSION) and now catches ALL exceptions (not just OSError) -> a corrupt/truncated/oversized push NAKs and keeps the working build instead of bricking. Longer pre-reload sleep so the ACK flushes. APP_VERSION -> 0.0.5. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
53 KiB
53 KiB