July 26, 2026
78 public commits · 6 public repos · 287 private commits
- Private work 5 repos sealed
287 commits count toward the day. Names, subjects, and links stay private.
- souveraine 29 changes
- 9:01 p.m. · 002a1a7
- 8:36 p.m. · bef6e6a
- 8:16 p.m. · 2c1ee8b
- 8:07 p.m. · 29a3c47
Two halves of the same defect. The lux threshold compared each sample to the previous sample, so a slow drift never tripped it — it now compares to the last value actually reported. And no source had any rate floor at all, which is how light managed ~8 reports/sec; 250ms per source, enforced separately so a busy light sensor cannot delay a proximity edge.
- 8:03 p.m. · de3a332
Light drifts continuously; monitor-sensor emitted ~8 lines/sec and each was a socket round trip re-asserting the same Changing(false). The keepalive is what keeps silence meaningful, so only changes need reporting.
- 8:00 p.m. · be72019
Clamping the lock-screen grace to blank-1 turned a 30s dim on a 15s blank into a 14s grace, dimming one second after you stop touching the phone.
- 7:16 p.m. · 28e8b78
- 7:04 p.m. · 43c1fdb
Session.qml and Lock.qml both registered target 'session'; quickshell keeps whichever loads first and drops the other. Lock.qml's handler is a strict superset, so the duplicate goes.
- 6:46 p.m. · 83fab1a
blueline-proximity-lock is 113 lines of shell implementing a subtle contract (heartbeat inside SOURCE_DOWN_AFTER, seed from the probe banner, report both edges) that would have been hand-copied for light and again for accel. One binary, one contract, shipped in the package instead of the rootfs overlay.
- 6:26 p.m. · 4d652bb
Action::Restore bound the brightness inside an if-let, so the MutexGuard lived for the whole body and run_executor locked again. Non-reentrant: the state lock was held forever and every later request thread queued behind it (measured: 347 threads in futex_wait, 691/1024 fds, accept loop healthy, no request answered in 3h). Bind first, then branch.
- 6:11 p.m. · c7c92d2
The page asked the same question twice because two daemons answer it, and split the blank budget by held-vs-resting — which makes the user arbitrate a guess the accelerometer is making. Held-ness belongs in the confidence arithmetic as an adjustment to one budget, not as a second budget here.
- 5:39 p.m. · 4d64b45
The fullscreen overlay sat above squeekboard's layer and owned the whole screen's input region, so taps in the keyboard area hit the dialog. It now yields the bottom third while the OSK is up. Exclusive keyboard focus was tried and reverted — it stopped the keyboard taking touch entirely.
- 5:06 p.m. · c9e11a5
- 4:56 p.m. · 2b69957
UPower's ChargeType (fork, read off the charger) reaches the lock line as fast/slow charging. Discharging with the cable in is the charger resting between top-ups, not a drain — it now reads Charged/Plugged in.
- 4:56 p.m. · 7475fae
squeekboard hides itself when input-method focus drops, so the password field was left with no keyboard. A hold re-asserts through that and releases on dismiss; a manual close drops the hold.
- 3:09 p.m. · 4f113ad
- 2:58 p.m. · 3174e78
- 2:49 p.m. · f2a4b93
Measured: the hard reboot left the trail at exactly 4096 bytes with the last entry cut in half. Rotating that aside cost chain continuity at the one moment it is worth most.
- 2:38 p.m. · 43eee1e
- 2:00 p.m. · c44deda
- 1:00 p.m. · 18bd4a0
- 12:50 p.m. · 4cd7ddd
Measured: 44 near-episodes in 2.4h, median dwell 1s, 15 sub-second. The negative debounce §9.5 specified would have delayed each blip, not removed it.
- 12:19 p.m. · 813010d
- 11:24 a.m. · 4d0c7a1
- 9:01 a.m. · 01fda8a
SetPolicy only mutated memory. Every lock-screen timer set in Settings reverted to the built-in 15s on the next restart, silently — the page was honest about reading the daemon, the daemon was forgetting.
- 8:30 a.m. · 862d1d7
A source that reported and then went silent past 90s is DOWN, not quiet, and says so as an error-security entry. Sources that never reported stay unknown — a light sensor with no reporter is correctly silent forever.
- 7:30 a.m. · bd8a4ec
set_session_locked(false) discarded transition()'s return. There is no Suspending/Asleep -> Active edge, so an unlock reported while asleep left the state put but voided pending_blank, blank_requested and dimmed anyway. Now refused, loudly, with the state intact.
- 7:24 a.m. · 70a0581
IdleConfig: ConfigSelectionArray presets (30s/1/2/5/10 min for the shell's timers, 15s/30s/1/5 min/Never for the lock screen) instead of seconds spinboxes. Nobody reasons about a lock screen in 5s increments; the policy struct already said "iOS Auto-Lock shape". Wire values stay seconds. Header comment corrected — hypridle no longer owns screen-off.
- 7:18 a.m. · df654e6
Measured on device 40min after boot: device_state=locked, panel_on=false, while LockedHint=no. Screen dark, session unlocked.
- SouveraineOS 26 changes
- 10:12 p.m. · db52206
- 9:39 p.m. · f2213ce
- 6:29 p.m. · 736567c
- 5:57 p.m. · f7aa5ce
- 5:15 p.m. · 6b455fc
- 5:12 p.m. · bb02366
- 4:52 p.m. · cbda7c8
- 4:49 p.m. · adfc107
- 4:39 p.m. · 1b38367
- 4:37 p.m. · 608a952
- 4:07 p.m. · d84610b
- 4:07 p.m. · 3e4373b
- 2:50 p.m. · 9590e74
- 1:01 p.m. · 2dc479f
- 12:52 p.m. · 6aa10d3
- 12:33 p.m. · 7b769f7
- 12:24 p.m. · 6ae84f4
- 12:16 p.m. · 9b99c1b
- 12:11 p.m. · e480809
219 files, 2.0 MB, untracked in souveraine/docs and existing nowhere else. The volume is at 100% with no snapshots.
- 11:25 a.m. · eaa5e29
- 9:13 a.m. · f8afc48
- 9:02 a.m. · c0a33c6
- 8:47 a.m. · 608f652
Both were sub-items, not work units. 01's every step read "after 16.B/C"; 22 sourced its own candidates from 19's still-required list and its status line was "enumerate with Casey at session start".
- 8:38 a.m. · cd3d579
TASK-26 had two subjects. Yesterday's note closed the proximity-authority half and read past the other one — evidence-source health, which is what PAF/slpi.md was actually pointing at. Built now, so both are closed.
- 8:02 a.m. · fccee4b
- 7:28 a.m. · e08ec7a
DEVICE-STATE-MACHINE §0: the audit, in the doc rather than a new task file. Lock shadow copy found and fixed (doctrine §4). Two open: proximity has no debounce and thrashed 69 transitions in 40min (§9.5 already specifies the fix), and forensic.jsonl sits on tmpfs — RAM, wiped on reboot, unbounded.
- Pixel3Arch 17 changes
- 10:04 p.m. · 0099d4e
- 9:44 p.m. · 44e5421
- 9:35 p.m. · df36957
- 9:30 p.m. · 7f357f2
- 9:01 p.m. · cedbaa5
- 7:46 p.m. · ecc037c
brightness shipped root:root 0644 with no backlight rule on the device at all, so sessiond's Dim/Restore actuator could not write it. brightnessctl's silent logind fallback reported the permission failure as 'Protocol error', naming neither the file nor the permission.
- 6:40 p.m. · c80a196
- 6:17 p.m. · 484281a
The 07-26 run built clean and still failed: pkgver now carries a commit count, so linux-blueline-7.1.1-1-aarch64.pkg.tar.zst no longer exists.
- 5:49 p.m. · 789cb39
pkgver was static 7.1.1, so every build produced the same package version and pacman -Syu never saw an upgrade regardless of what changed. Append the commit count (numeric, monotonic) plus the sha for traceability.
- 5:14 p.m. · 971a8a6
Physical GPIO 2 is gpiochip line 1 (PMIC_GPIO_PHYSICAL_OFFSET); confirmed against Volume Up on line 5. Android has no devicetree node for this pin either and powers it from userspace, so we do the same with libgpiod.
- 2:58 p.m. · 8de32ae
- 2:31 p.m. · eb1ec60
- 1:47 p.m. · cc47deb
- 11:09 a.m. · e43bd9d
- 10:32 a.m. · 613e9df
Merges the on-phone pkgrel 6 (completion-enabled FALSE->TRUE) onto the repo's pkgrel 6 (squeekboard co-existence). The on-device copy still had conflicts=(squeekboard), which is what blocked pacman -Syu this morning.
- 8:41 a.m. · a378f45
- 8:30 a.m. · 6a721f2
monitor-sensor only emits on change, so a phone on a table is silent for hours and looks exactly like a CHRE fatal. Re-report the last value every 30s, under sessiond's 90s SOURCE_DOWN_AFTER, and seed it from the startup probe so a stack dead from boot is still visible.
- souveraine-updater 3 changes
- 8:02 a.m. · 5be05c3
Qt takes the Wayland app id from the executable name, not the application name, so the toplevel is souveraine-updater and the shell had nothing to match the icon against.
- 7:52 a.m. · 82b1429
Install date, reason and reverse deps came only from the local database and were always blank. Confirm dialog is a plain Popup now: Dialog sizes its content from itself and loops on a wrapped paragraph.
- 7:12 a.m. · 11b6430
Package list is a QAbstractListModel now; every pacman call runs off the GUI thread. Icons are drawn paths — the phone image has no emoji font, so every one of them was a tofu box. New first-party app icon. Catalog cache is keyed to pacman's databases instead of to nothing.
- 8:02 a.m. · 5be05c3
- linux-blueline 2 changes
- 9:06 p.m. · 2bb0987
- 5:39 p.m. · 5e98237
Node, defaults and driver all present; no board file ever set status okay, so the phone had no vibration and no force-feedback input device.
- upower 1 change
- 5:05 p.m. · aeeb107
On a split gauge/charger the threshold attributes are on the charger, not the battery, and upstream only looks at the battery — so a settable ceiling reported as unsupported, and a write went to a path that does not exist. Same supplier walk charge_type already uses. Also report the live value when no hwdb CHARGE_LIMIT entry recommends a pair.
- 5:05 p.m. · aeeb107