evidence · 3.0 KiB

supervised-keyboard-host.md

Committed at docs/evidence/keyboard-gestures/supervised-keyboard-host.md. This is what grounds the requirements that cite it.

Open raw source

Supervised keyboard and handle contrast checkpoint

The optional coherent shell now starts wvkbd through a shell-keyboard systemd unit bound to shell.service. Its bounded wrapper waits for exactly one owned Wayland socket and executes the unchanged wvkbd binary with the configured height (400 px default; 420 px in the QEMU fixture) and --hidden. Restart=always, a three-second delay, and disabled systemd start-rate latching recover a keyboard that exits after temporary or prolonged output loss without a rapid retry loop. The coherent Sway config no longer starts a duplicate keyboard. The noncoherent Sway path keeps its original keyboard command.

The trigger was an actual headless QEMU output-disable run: wvkbd exited with Could not find config for output HEADLESS-1; Sway returned the live app to full 1232 px height. An explicit keyboard restart after output re-enable restored two-finger show, grip hide and ordinary key delivery (native result). This tests the compositor and restarted client; it does not pretend QEMU ran the NixOS systemd unit. Unit graph evaluation and an exact image build are separate checks below.

The authored foreground role now paints the grip line instead of the selected card fill. For the pinned Catppuccin dark palette, foreground #cdd6f4 against card #161622 has a 12.39:1 contrast ratio, compared with 1.43:1 for selected fill #313244. For the pinned bundled Latte colors, foreground #4c4f69 against card #e3e4e8 has 6.29:1, compared with 1.04:1 for selected fill #dce0e8. Ratios use the standard linear-sRGB relative luminance formula. Inputs were the checked-in nix/handheld-theme-default/catppuccin/colors.toml and /nix/store/aajw0dknkkwx4mdswaa0vd52li64d6i7-handheld-theme-default-28ceaae7/share/omarchy/themes/catppuccin-latte/colors.toml.

Source b890b0ae plus rate-limit correction 8402cfe2 passed python3 tests/test_keyboard_service_policy.py. The evaluated coherent NixOS unit has Restart=always, RestartSec=3, StartLimitIntervalSec=0, BindsTo=shell.service, and a trusted absolute wrapper ExecStart. The exact narrow compositor build nix build .#card-shell --max-jobs 1 --cores 4 --no-link --print-out-paths passed: package /nix/store/8p7ryh0zw8fkhc74xc6v52br3rif9j7d-k230-card-shell, unwrapped Sway /nix/store/m1im24g1h70xylmia55s1qvjwa76jn9x-sway-unwrapped-riscv64-unknown-linux-gnu-1.12/bin/sway.

The actual compositor then passed a separate headless QEMU pixel check using the pinned bundle and prepared real Latte generation. The grip line at (280,782) was RGB (205,214,244) in dark mode and (76,79,105) after Latte commit, exactly the adopted foreground roles. See dark grip, light grip, and numeric result. These are composited QEMU pixels, not a panel photograph. The unit has not been run under systemd in this fixture, and installed output loss and physical handle legibility remain unverified.