4.8 KiB
TASK 32 — The pill and the keyboard, as owned apps
Status: partly resolved 2026-08-11. Squeekboard now has one package and one
runtime owner; the pill and the shell's $HOME delivery still need ownership.
Size: two sessions, one each. Repo: ~/Projects/souveraine,
~/Projects/Pixel3Arch/pkgs/squeekboard.
Why one task for two surfaces
They fail the same way and neither has an owner. Each is a thing the user
touches constantly, each was built by patching symptoms, and neither has a
section that says how it ships or who decides its behaviour.
FIRST-CLASS-APPS.md lists nine requirements; both fail §1, §6, §7 and §8, and
the keyboard has failed §8 hardest — four pkgrels of it existed only on the
phone before any of it came back to the repo.
Treat each as an app: what it is, what it owns, how it is configured, how it updates, and what it refuses. Not a bag of fixes.
The keyboard
Current state: souveraine-squeekboard pkgrel 4 is installed from the
Pixel3Arch package repository and is the sole active OSK. Ordinary input gets
the four-row Daily board; its mode key opens Squeekboard's own chooser, where
Terminal selects the five-row board with Tab, number row, Ctrl/Alt/Esc, arrows,
and Fn/numpad. Both carry dictation and dismiss keys. Commit 3794aa9 advances
pkgrel 5 with that visible route and removes the remaining dual-OSK
provisioning. Stevia and the process switcher are absent. Publication, glass
acceptance, and native word completion remain in TASK-17.
The rule TASK-24 already wrote and that must hold: start from a validated
reference (squeekboard us+apple, gmankab us-mobile), not from first
principles. No layout change ships without a screenshot of the rendered
keyboard on the device.
Update management. Pixel3Arch CI builds, signs, and publishes
souveraine-squeekboard; pacman owns the binary and both layout provenance
files. Commit 3794aa9 removes the old pin, dual-keyboard services, overlay,
and package workflow from every living path; their evidence is retained only
under archive/retired-dual-osk-2026-08-11/.
The pill
Current state: SystemGestureRail, always-on overlay, one MouseArea
recognising double-tap, swipe-up and swipe-down. The interaction layer is
sound. What is missing is ownership: the pill's z-order guarantee was
documented but not enforced until a layerrule was added, the OSK lift was a
stale hardcoded 315 px that stacked it over the keys, and single-tap-as-Home is
specified in TASK-14 but lives nowhere as a contract.
What it should own: the gesture vocabulary and nothing else. It forwards to named IPC targets and makes no app decisions (INTERFACE-ARCHITECTURE §1). Every new gesture is a row in the table, not a branch inline — and with TASK-31, one of those rows is the radial dial.
Update management. Ships with the shell surfaces, which are unpackaged and
live in $HOME. Same gap as everything else in surfaces/quickshell; TASK-25
owns the fix.
Acceptance
- Each has a section in
docs/naming what it owns, what it refuses, and how it reaches a device — not a list of fixed bugs. - Keyboard: layout matches a validated reference, screenshot-verified at every level and through repeated dismiss/reopen cycles; completion actually completes.
- Pill: the gesture table is single-sourced; adding a gesture touches one row.
- Both ship by a mechanism that survives an update, or the gap is named with the task that owns it.
The shipping mechanism destroys on-device edits (found 2026-07-29)
Neither surface has a package; the whole quickshell tree reaches the phone only
via deploy.sh --phone, which is rsync -a --delete from the laptop checkout
into the phone's tree with no snapshot (deploy.sh:246). The local compose
snapshots to .ii-previous/.souveraine-previous first; the phone path does
not. So an on-device edit is destroyed with no record — which is how four
pkgrels of stevia came to exist only on the phone, and why Casey is "loosing my
filesystem on my daily driver".
Root cause is the install target, not the tool: deploy.sh writes into $HOME,
so it cannot tell the user's files from its own. A pacman package cannot do that
— payload to /usr/share, $HOME keeps only overrides, and pacman refuses to
clobber unowned files (.pacnew for owned ones). Cheap interim fix: give the
--phone rsync the same snapshot_tree the local compose already has.
Do not
- Patch another keyboard symptom without a reference layout in hand.
- Add pill gestures while z-order is enforced by documentation rather than by a rule.
Connects to
TASK-17, TASK-24 (the keyboard's history — read both before touching a
layout), TASK-14 (single-tap Home), TASK-31 (the dial is a pill gesture),
TASK-25/27 (how either of them ships), FIRST-CLASS-APPS.md,
INTERFACE-ARCHITECTURE.md.