Shade battery and Settings Key backlight: host renders
Keyboard-base task 6.3. Evidence class: host render only (Cairo through the
production RendererCache::draw, no compositor, no board, no glass).
Regenerate:
cd nix/rust-shell-client
cargo run --example render_keyboard_base_evidence -- ../../docs/evidence/keyboard-base/shell/host-renders
The example builds two temporary trees and reads them with
keyboard_base::read_view_state, the reader the live client uses:
with:power_supply/bq27220-0(typeBattery, capacity 64, statusCharging) andleds/k230::kbd_backlight, no preference file (default High).without: an emptypower_supplyclass and no LED.
| Files | Shows |
|---|---|
shade-with-base-* | “64% - Charging” on the shade’s hint line |
shade-without-base-* | no battery element |
settings-with-base-* | a Key backlight row: the level (“High”) over a four-detent slider (Off, Low, Medium, High) before Power |
settings-without-base-* | no Key backlight row; Power section one row higher |
Each exists at 568x1232 (portrait) and 1232x568 (landscape). At 1232x568 Settings lays its
controls out in three columns (Wi-Fi, Brightness, Volume; Keyboard, Motion,
Key backlight when the LED exists; Power), so every control, including the
Key backlight row and the Power rows, is on the panel; the pair differs by that
one row. The Settings
data is a fixture (evidence_render::fixture_settings), the Volume row reads
“No audio device found” because no PipeWire graph is attached, and the grey
band under the portrait panel is the empty area below the sheet (the landscape sheet fills the panel).
Limits: this proves the paint and the hide-when-absent gating. It does not show
a real gauge, the real LED, the preference file under /var/lib, or the
panel. Those remain for task 6.5 (native captures on the board).