Casey Tunturi

August 3, 2026

August 3, 2026

33 public commits · 4 public repos · 196 private commits

Work threads
compositor14shell6sessiond4audit2Revert "compositortriagepkgswire
  • Private work 7 repos sealed

    196 commits count toward the day. Names, subjects, and links stay private.

    • 9:24 p.m. · c98f4c8

      capture_constraints asked only for a WeakOutput, and a toplevel source never has one — toplevel_source_created stores a ForeignToplevelWeakHandle — so the `?` returned None for every per-window session. smithay answers None by stopping the session at creation, so frame() was never called and copy_window_into never ran once. Every overview card was a transparent box, on a compositor whose commit message said the shell could copy one window.

    • 9:17 p.m. · a6dc4d8

      THE STRIP NEVER MOVED. Gesture::Drag's `from` is the PREVIOUS centroid, not where the gesture began — only the first event carries the origin — so `to - from` is a few pixels and drag_to, whose contract is cumulative travel and which recomputes the offset from drag_from every call, never accumulated. A whole-screen swipe moved the strip 1.7% of one workspace and settled back where it started. The three-finger swipe did nothing at all, on a feature shipped as "flowing". The field now documents the trap at the source; the caller keeps the gesture origin.

    • 8:38 p.m. · 31af866

      Apps launched and never appeared. The log stopped dead at the first "toplevel mapped" and the control socket timed out, while the shell was still active and nothing had errored — a frozen compositor looks exactly like a healthy one from outside, which is why every gate stayed green.

    • 8:08 p.m. · b672636

      HOW-IT-WORKS already draws the line this needs: fullscreen is "whole display, no borders or gaps", maximized "keeps the normal workspace layout margins". A window asking for the whole display is asking not to share, so it gets a workspace of its own and whatever it was tiled beside is one swipe away instead of underneath it. Only when it is actually sharing — a window already alone would grow the strip for nothing.

    • 8:04 p.m. · acf2287

      It felt like crap and the reason was one line: drag_end snapped offset to the target, so a smooth drag ended in an instant jump. Worse than no drag at all — the hand is still moving when it lets go, and the world arrived before it did.

    • 7:51 p.m. · 92aeeeb

      Hyprland's ten numbered rooms died with Hyprland (INTERFACE-ARCHITECTURE §4: hl.gesture{fingers=3,horizontal} was Hyprland-native), and they are not what is wanted back. Casey: "the workspaces are like... flowing... shifting and dynamic", "flexible and splitable".

    • 7:25 p.m. · 4e67b41

      TASK-50, both halves.

    • 6:27 p.m. · 57af6bf

      Two faults, both visible the moment they shipped.

    • 6:06 p.m. · 84cfe18

      This reverts commit 0eda51e62c6111856b2d111fa6f3a22aaa171dab.

    • 6:03 p.m. · 0eda51e

      The handles minted for per-window capture went out nameless. A shell drawing an overview card would have had to join two protocols by hand to label it — wlr for the strings, the standard list for the handle the pixels are addressed by. Both now come from the same place, published from publish_toplevel, which already runs on every change that can move them. send_done after both, per the protocol: title and app_id are pending state that done commits.

    • 6:01 p.m. · c896759

      The only capture source served was per-output, so a shell could copy the panel and nothing smaller. That is the second half of what blocks the window-action overlay: an overview card, an action sheet and every scaled or sliding window visual are made of a window's pixels on their own, and a shell that can only copy the screen cannot draw a window anywhere but where it already is.

    • 5:26 p.m. · 4726866

      The registry carried size and never position, deliberately — the space owns where a window sits, and a second home for one idea is the shadow copy doctrine forbids. That argument is about authority and it still holds: this is published, never accepted. `place` remains the only way position changes and this is whatever the space says afterwards.

    • 5:09 p.m. · 24d743b

      new_decoration answers server-side, always, and refuses to negotiate — then drew nothing. Every window arrived with no frame and no way to tell two of them apart. A protocol commitment the code does not keep is the same defect as a doc that lies, so this is not the compositor authoring UI; it is the compositor doing what it already told every client it would do.

    • 3:54 p.m. · 9bcc013

      The bind filters read ClientState::peer, and nothing ever set it. Every client was inserted with ClientState::default(), so peer was None for all of them — indistinguishable, to a filter that fails closed, from a connection carrying no credentials at all.

    • 3:44 p.m. · 243a837

      Five globals were created with `|_| true` — the argument whose whole purpose is deciding who may bind. Four of them let a client act on a session it does not own: read what was copied, decide what an unauthenticated screen shows, type into another window, or stand between a keystroke and the application it was meant for. None needs a surface, focus, or the user's attention. Verified live on the phone before the fix: `wtype` from an ssh session typed into a terminal and the text was captured verbatim.

    • 3:44 p.m. · ded525a

      The resize fix only worked one way. The zone check lives on the layer commit path and an unmap is not a commit, so nothing re-tiled when the keyboard went away. Measured on the phone: kitty went 96x82 to 96x55 when the keyboard opened and stayed 96x55 after it hid.

  • souveraine 10 changes
    • 10:20 p.m. · 914e48f

      The hold machinery remembers whether the keyboard was up when the first hold was taken, so releasing the last hold restores rather than clobbers it. Across a lock that restore is wrong: the keyboard was up because of something being typed before the phone went down, and the first thing you see on unlocking is a keyboard sitting over whatever you came back for.

    • 10:18 p.m. · cc4bb83

      Everything drove off a visible/not-visible flag, so the cards appeared rather than the overview opening. One shared `progress` now: the strip slides 24px, each card takes its own share of it staggered by index and capped at the fifth, and scale runs 0.86 to 1.0 — the reference shell's numbers, driven from the same clock instead of a timer per card. The cap is what stops the tenth card starting half a second after the first, which reads as loading rather than opening.

    • 9:12 p.m. · 133daa9

      An audit found the fix from earlier tonight reintroduced through a second button. A tap never resolves on the UP edge — the recogniser returns None and the tap lands when the 300 ms multi-tap window closes on a later tick, up to about 1.3 s after the press — so a single shared latch had to survive that whole gap, and any other button's DOWN edge inside it overwrote the answer.

    • 8:53 p.m. · 91ea54e

      viewtop recognises three fingers and had nowhere to send it. The obvious move — have the compositor call `qs ipc call overview toggle` itself — is the eighth blind actor §12 forbids by name, and [host] is what that costs: 652 tunnel recycles in ninety minutes with no way to turn it off.

    • 7:15 p.m. · 8c41f45

      Two faults in the first cut.

    • 6:37 p.m. · fdb0acf

      OverviewWidget draws a grid of workspaces and places windows in them by Hyprland coordinates — HyprlandData.windowList, monitorData, Hyprland.monitorFor. Under viewtop none of it resolves, and more to the point viewtop has no workspaces at all: one space, a tiling layout. The old overview could not be repaired by repointing it at another data source, because the thing it draws does not exist. It rendered an empty frame, which reads as the overview being broken.

    • 5:17 p.m. · c21bd1d

      Suppressing the dock whenever oskOpen was true, above effectivePinned so it applied in every state, hid the dock permanently on the device.

    • 4:53 p.m. · ca44b0b

      Two bugs with one cause — the bottom edge was being reasoned about twice, by hand, against a compositor that is gone.

    • 4:03 p.m. · 1f028c1

      The phone's trail was almost entirely Locked -> Observed -> Locked. The snapshots said why: prox=true on the way in, prox=false one second later on the way out, over and over. `near` must hold 700 ms to be believed and `far` is believed instantly, so a one-second episode is long enough to enter and its end is immediate.

    • 3:16 p.m. · 6cb2454

      apply_gesture's dark-panel branch returned Unblank+Restore without a record_decision, while the blank branch records panel-off or lock-before-blank. The trail showed 'button-gesture recognised' and then silence, so a press that woke the panel and a press that was swallowed left identical evidence — which is the one question anyone debugging a dark phone is asking.

    • 5:18 p.m. · 384cd94

      Three fingers should raise an overlay with move/resize/close and the scaled, sliding visuals the reference shell has. Reading how that shell does it: its compositor publishes a texture_id AND full geometry per window on the wire, and the shell draws that texture wherever and at whatever scale it likes. That is the whole trick behind scaled cards and every sliding transition.

    • 3:31 p.m. · 5c9a652

      START-HERE §6 said the phone has no wifi away from home because the SSIDs are pinned. It joined a foreign SSID on 2026-08-02 and sat there working while that paragraph sent the reader hunting for a cable. It now says how to pass the address, and records that a phone off the home net reaches the repo through the laptop rather than by bringing the phone's tunnel up.

    • 3:18 p.m. · 1a73e3f
    • 3:16 p.m. · dd92ecc

      Five protocol filters admit every client, two of them keystroke paths. A wake leaves no trail entry. The device flaps Locked/Observed with no hysteresis. Four behaviours recognised and bound to nothing. Three shipping paths that silently do not ship.

    • 6:05 p.m. · f240848

      The version line read /usr/local/bin/viewtop and captioned it 'hand-copied — TASK-25'. Once the package landed that printed an empty version beside a caption that was no longer true, which is a diagnostic stating the opposite of the facts.

    • 5:44 p.m. · dfb2763

      viewtop was hand-scp'd to /usr/local/bin from the day it first ran, owned by nothing, beside a row of .prev-* copies of itself. That is the pattern this repo's README names outright, and it is how sessiond once sat five days stale while every session believed it was current. There was no path for a compositor fix to reach the phone except a human remembering.

    • 4:06 p.m. · f234928

      IgnoreCarrierLoss=5s is in this package and its comment says it deconfigures a gadget that really lost carrier "instead of relying on a manual flush". Measured on the phone with the package installed: