August 16, 2026
26 recorded commits · 5 named repos · 7 private repos
- Private work 7 private repos
Activity was recorded across 7 private repos. Names, subjects, counts, and links stay private.
- souveraine10 changes
- sheet: spring the zoom, and let go of a window that died2:24 p.m. · df8a56d · internal Gitea record only
pose is instant on the far side and the compositor must not ease it — it honours, it does not adjudicate. So the curve is the shell's, on Android's own scale spring: stiffness 200, damping 0.75, underdamped on purpose and separate from the position spring's 0.8.
- saf: write down how the surface moves2:04 p.m. · a3e0420 · internal Gitea record only
The motion system had no page anywhere — one clock and two strategies, the card rect as one number, the spring, and the rule that the shell names a destination and never transforms a window.
- settings: register twelve pages nothing could reach2:02 p.m. · 89a34ad · internal Gitea record only
Written, deployed to the phone, absent from pages[] — the only registry. 13 to 25. Power, search, updates, VPN and saved networks were finished all along. MonitorConfig and KdeConfig stay out: hyprctl and Plasma.
- dock: drop to the edge where the pill does not draw2:02 p.m. · 9d2099c · internal Gitea record only
The rail takes its handle to opacity 0 on home and the dock went on reserving 32px for it, in the drawing and the input mask alike. Only the drawing collapses — the rail still takes both swipes there, and a dock that claimed those pixels would eat the gesture.
- motion: call the curve bank the shell has always carried2:02 p.m. · 787075f · internal Gitea record only
Appearance.animationCurves is Material 3 Expressive and every spatial curve in it overshoots. Twelve souveraine surfaces, 31 hand-typed linear animations, three calls into that bank from two files.
- sheet: resize by the corner, not by a tap cycle2:02 p.m. · f6ede33 · internal Gitea record only
The cycle placed every step at the zone origin, so the first tap took the whole top. Corner handles now, opposite corner latched as the anchor at the press, snap detents on the zone's edges, thirds and half with a tick at each, one place per painted frame.
- sheet: let zoom reach a window10:31 a.m. · 75cb392 · internal Gitea record only
pose has been in the wire since 2026-08-05 with no caller — poseActiveZone was the only one, and TASK-60 deleted it. Zoom composes pixels the client already drew; Resize places a new rectangle and the client relays out inside it.
- overview: draw the zone, opaque, with a tray under it10:31 a.m. · f06bb83 · internal Gitea record only
The card was the whole panel scaled, so the bar's reservation rode inside it as dead space above every window. Subtracted in targetFor and the pane layout both, or the carry lands a bar-height off its own picture. Minting a zone needed no new verb: Request::Workspace already pushes one when asked for the zone past the end.
- zone: take the detent from the card, not from 18%10:31 a.m. · 46d2601 · internal Gitea record only
The card's bottom sits at 805 of 1080 logical, so the travel is 275px and the detent fired at 194 — every release committed with the window short of its card. Latched at the press. Velocity is the last 100ms rather than the whole-drag mean, and the settle is a critically damped spring on the frame clock, seeded with it.
- viewtop-control: redeliver a commit the socket dropped10:31 a.m. · 2b4c827 · internal Gitea record only
A transport error cleared the whole queue, so a lost overview_commit left the compositor carrying windows the shell believed it had released. 52 dropped queues and 113 PeerClosedErrors in one boot on blueline. commit, cancel and workspace are idempotent, so each gets one retry; progress is a level and does not.
- souveraine-lens7 changes
- lens: the garden answers to fingers12:22 p.m. · cbe8f67 · internal Gitea record only
pointer events replace the mouse trio on the canvas: one finger pans, two pinch-zoom, a tap still opens the note — with a thumb-sized tap tolerance so a shake doesn't fire it. on narrow glass the drawer and rail give way to the viewport, targets grow to 44px, and the first layout fits the whole garden to the screen.
- lens: anchors and tags both get legs11:32 a.m. · d228a6d · internal Gitea record only
the anchor after a note's name was stripped at the door; now it rides into the graph and a click on [[note#heading]] opens the note scrolled to that heading. tags were already in the graph but went unused — the drawer shows them as chips, and the palette filters by #tag.
- lens: publish an aarch64 package for the phone11:22 a.m. · 8fbef3c · internal Gitea record only
the phone runs the substrate and its pacman already reads the house archive; only the lens never shipped there. a second [host] job cross-compiles against the runner sysroot (usb-signaller's shape) and makepkg bakes an aarch64 package into souveraine-aarch64.
- lens: don't birth a note under an open rail or drawer10:43 a.m. · 1bbda8d · internal Gitea record only
the drawer's 440px and the rail's 250px float over the canvas, and a fresh node's circle slot lands behind them often enough to notice — the pop-in happened under the glass. when exactly one node is new and an overlay covers its slot, it starts in the visible band instead.
- lens: depend on webkit2gtk-4.1, the name arch ships now10:24 a.m. · a54ee9c · internal Gitea record only
the recipe named the retired webkit2gtk, so the built package could not resolve on any machine that actually had the webview installed.
- ci: fail loud when the archive PAT is missing10:18 a.m. · 3f0f4de · internal Gitea record only
the runner host clones on its own credentials, so the missing secret went unnoticed until the publish step died on an empty EDGE_TOKEN. the clone step now checks it first.
- lens: land in the shared edge archive10:06 a.m. · cd646e0 · internal Gitea record only
was publishing to its own repo's edge release while the laptop's pacman reads Fimeg/souveraine, so nothing ever landed where it was looked for. the publish step now runs the canonical publish-edge.sh at the pinned sha, same PAT and key as the viewtop. the secret half of the archive key lives only on the runner, so a signed package cannot exist outside the archive. README and DESIGN install by name now.
- Pixel3Arch3 changes
- ucm: back the headphone output off max4:35 p.m. · 9816ef1 · internal Gitea record only
Companders on plus the gain trim at max made the jack tinny and far louder than the speaker amps. Both companders off, HPHL/HPHR trim at 8. Still not level-matched to Speaker -- that wants a measured RX INT digital volume, not another guess.
- ucm: give the headphone jack a route4:25 p.m. · bb4289b · internal Gitea record only
HiFi had Speaker and Mic only, so the codec's HPHL/HPHR path was fed from nothing and a plugged headset heard silence while every sample went to the speaker amps. Adds a Headphones device on the enchilada idiom (AIF1_PB, RX0/RX1, CLSH_DSM_OUT) with JackControl, so the plug switches the profile. The FE->BE route stays in the verb: DPCM rejects an open on a front-end with no backend, and moving it into the devices cost -EINVAL on both.
- packages: declare mono 48k capture in blueline UCM1:49 p.m. · 9f0f103 · internal Gitea record only
kernel g457a667bd3eb made the routed MultiMedia2 capture strictly mono 48k; ACP probes with declared values, so the undeclared Mic probe assumed stereo at the FE default rate, failed -EINVAL, and no UCM profile formed at boot. card fell to pro-audio, boot-time music dead. CaptureChannels/CaptureRate restore the probe; the wireplumber rules already pin the same spec at runtime.
- SouveraineOS3 changes
- task-55: the status line was ten days stale2:25 p.m. · d21458e · internal Gitea record only
Split's chooser and Home both landed; the sheet carries six verbs and lets go of a dead subject. One acceptance line is left and it is not this task's to close — the entries are still a third hand-written list, which is TASK-30's table and TASK-31's ring.
- docs: audio boot-profile regression and fix1:56 p.m. · 77c44ab · internal Gitea record only
kernel r162 routed capture strictly mono 48k; undeclared UCM Mic probe failed, no profiles formed at boot, card fell to pro-audio. CaptureChannels/CaptureRate in both Mic devices restores the probe; probe mechanics recorded for the next time.
- handoff: the boot failure, the lossy socket, the gesture10:41 a.m. · 93ea6c9 · internal Gitea record only
RefuseManualStart killed every session start since 08-15. The control socket answers in 0.47ms median and drops whole queues — 52 in one boot — which is what strands a window. Detent, velocity and settle now come from the destination. Six items left open, including Bitwarden, where the position theory is exhausted.
- souveraine-viewtop3 changes
- xdg: tell a tiled window it is tiled, and retile when one floats2:01 p.m. · 3431223 · internal Gitea record only
Size alone is a hint to a floating toplevel. Firefox kept its CSD shadow and drew 504 of the 540 it was told; kitty obeyed, which made it look like Firefox's fault. Four tiled edges, unset again on place.
- touch: only frame a group that reached a client1:58 p.m. · 41f07b1 · internal Gitea record only
wl_touch.frame closes a group of delivered events, and most contacts on this device never reach one — the rail, dock and pill are shell surfaces. One warning per touch, 3034 in a session, burying the starved evidence queue underneath them.
- session: ask for the targets in a way systemd will answer10:31 a.m. · 7883f7d · internal Gitea record only
graphical-session{,-pre}.target are RefuseManualStart=yes, so the launcher's start on them failed every boot from 2026-08-15: sessiond never came up, viewtop started locked, and the panel was black. A dependency may pull a refused target in where a direct request cannot; these two do that and nothing else.