Watch
1
0
Fork
You've already forked SouveraineOS
0
SouveraineOS/docs/tasks/32-pill-and-osk-as-apps.md

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.