testsAndMisc/docs/superpowers/contracts
Krzysztof kuhy Rudnicki 3ae53499e6 g29 shifter: detect PS4 mode (046D:C260) instead of failing silently
On the 2026-09-15 and 2026-09-17 boots the wheel enumerated as 046D:C260
(PS3/PS4 selector in PS4 position, bound by hid-generic). The BPF udev
rule, the ensure unit and its hotplug rule all keyed on C24F, so the unit
failed once with "no G29 found" and nothing was said; 1st/3rd stayed on
the firmware's bad decode until the selector was flipped a day later.

- fixes/g29_wheel_mode.sh (new, sourced): classify the HID bus as
  native/ps4/compat/absent; root-safe desktop notification via
  /run/user/*/bus + sudo -u.
- --ensure: absent -> exit 0; ps4/compat -> exit 1 + critical
  notification; native -> attach. --status prints the mode first.
- g29-shifter-bpf.service: Restart=on-failure, RestartSec=5min so a
  notification lost before the session bus exists at boot is re-sent.
- 99-g29-shifter-ensure.rules: also fires on C260.
- tests/test_fix_g29_shifter.bats: 13 tests against a fake sysfs tree.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NVfC2T6DyvCFqse9A99zef
2026-09-18 10:47:18 +02:00
..
archive-billsplit-2026-08-23.json Archive billsplit and everything coupled to it 2026-08-23 17:17:22 +02:00
archive-bucket-catch-poker-stakes-2026-08-23.json Archive bucket_catch and poker-stakes to testsAndMisc-archive 2026-08-23 17:12:54 +02:00
ci-mirror-scoped-push-gate-2026-08-23.json Make the push gate check the push, and make its pytest stage real 2026-08-23 15:12:23 +02:00
endurain-db-dedupe-2026-08-23.json Dedupe endurain imports against postgres when the API cannot answer 2026-08-23 15:23:08 +02:00
endurain-import-dedupe-and-adb-serial-2026-08-23.json Stop the endurain importer duplicating RunnerUp's own uploads 2026-08-23 14:36:03 +02:00
endurain-runnerup-webdav-2026-08-23.json Re-point paths for the ~ reorganisation (home-tidy) 2026-09-11 20:50:19 +02:00
extract-android-guardian-2026-08-23.json Re-point paths for the ~ reorganisation (home-tidy) 2026-09-11 20:50:19 +02:00
extract-digital-wellbeing-2026-08-23.json Re-point paths for the ~ reorganisation (home-tidy) 2026-09-11 20:50:19 +02:00
extract-hosts-blocker-2026-08-23.json Re-point paths for the ~ reorganisation (home-tidy) 2026-09-11 20:50:19 +02:00
extract-mtk-root-2026-08-23.json Extract mtk_root, with the libraries that lived outside it 2026-08-23 17:39:27 +02:00
extract-phone-focus-mode-2026-08-23.json Extract phone_focus_mode together with focus_policy 2026-08-23 18:32:58 +02:00
extract-system-maintenance-2026-08-23.json Extract system-maintenance, the isolated subsystem 2026-08-23 17:55:29 +02:00
extract-three-apps-2026-08-23.json Extract reverse_survivors, kcd2_dice_solver and focus_owner 2026-08-23 17:34:02 +02:00
flatten-i3-and-misc-2026-08-23.json Flatten i3-configuration and misc/testsAndMisc-bash 2026-08-23 19:02:18 +02:00
flatten-linux-configuration-2026-08-23.json Dissolve linux_configuration/scripts/ and single_use/ 2026-08-23 18:53:30 +02:00
g29-shifter-hid-bpf-2026-09-14.json Add the G29 shifter HID-BPF fix (1st/3rd engage reliably) 2026-09-14 22:12:31 +02:00
g29-shifter-ps4-mode-2026-09-18.json g29 shifter: detect PS4 mode (046D:C260) instead of failing silently 2026-09-18 10:47:18 +02:00
hosts-guard-tests-2026-08-23.json Clear both hosts-guard libs; teach the instrument done <redirect> (88 -> 86) 2026-08-23 11:50:13 +02:00
installer-cross-repo-fix-2026-08-24.json Make install_core_system.sh work on a fresh machine 2026-08-24 12:45:21 +02:00
journal-cap-4g-2026-09-13.json Arch journal cap: 300M -> 4G, vacuum only past the cap 2026-09-13 10:55:43 +02:00
nftables-drift-self-check-2026-08-30.json Re-point paths for the ~ reorganisation (home-tidy) 2026-09-11 20:50:19 +02:00
nvidia-config-tests-2026-08-23.json Test nvidia_config.sh to 100%; the 8-lib campaign is done (85 -> 84) 2026-08-23 13:14:37 +02:00
python-314-lint-target-2026-08-29.json Grade against 3.14 too, not just run on it 2026-08-29 11:50:39 +02:00
split-boot-repair-2026-08-23.json Cap extensionless scripts, and split the one that was hiding 2026-08-23 19:13:40 +02:00
suite-speedup-2026-08-23.json Take the fixes/lib suite from 110s to 37s, same 645 assertions 2026-08-23 14:00:13 +02:00
template.json style(prettier): apply markdown/json formatting updates 2026-05-07 22:08:00 +02:00
thorium-repairs-tests-2026-08-23.json Test thorium_repairs.sh to 100%, lift the gate timeout (89 -> 88) 2026-08-23 11:05:56 +02:00
token-audit-batching-axis-2026-08-28.json token_audit: measure tool-call batching per API message 2026-08-28 12:22:21 +02:00
ubuntu-perf-fixes-tests-2026-08-23.json Test ubuntu_perf_fixes.sh to 100%, take it off the allowlist (86 -> 85) 2026-08-23 12:38:40 +02:00
website-admin-editor-unit-2026-08-29.json Run the website's post editor as a loopback unit, no Caddy route 2026-08-29 17:50:03 +02:00
wire-shell-coverage-ratchet-2026-08-23.json Wire the shell ratchet into pre-commit, and test the coverage tooling 2026-08-23 15:51:29 +02:00