Given that a low battery voltage can cause problems; (a) cannot re-program, (b) dim LEDs (esp blue), © no visible sign it’s “on”;
Thoughts I had on providing a visible warning to the user that the battery is low:
A “Super long press” (e.g. 10 seconds) and the BlinkOS lights up LEDs to indicate the battery level. Six LEDs (all lit) - full battery. Zero LEDs - dead battery. LEDs 1-5 are battery levels. Anything below 3 LEDs lit is a low battery.
Another thought (perhaps counter intuitive) is to have the BlinkOS (during idle times - no sketch running) periodically flash some patterh to indicate a low battery (< 2.5v). E.g. for a few minutes post playtime (and idle) - flash some sequence every 10 seconds if low battery. This handles the case where the user does not initiate the check.
This assumes the Blink can detect voltage accurately enough. From browsing the core code, it appears the ADC (uses Josh’ battery fuel gauge?) could provide a voltage reading.