10 KiB
SouveraineOS — task files
Single-session-sized work units. Each file is self-contained: the goal, the context a fresh session needs (files, commits, gotchas), the acceptance check, and where it connects. Pick one, open a session, finish it. Don't pull in neighbors unless they're a hard prerequisite.
Source: carved out of session-handoff-2026-07-16.md queue items 1–12
plus open threads from the 2026-07-17 session.
Index
| # | Task | Status | Blocks / blocked-by |
|---|---|---|---|
| 2 | Lockscreen-as-Rust-system: glance + swipe | in progress | stopgap shipped 2026-07-17 |
| 3 | Boot timing: fade splash → lock, no extra fixes | diagnosed | EBUSY handoff race is the last timing bug; splash text killed, holder added |
| 7 | WCD9340 mic: functional-pinned; unpin + fidelity | functional 07-20 | defect: power pin; kernel mic-race-fix |
| 8 | Device state manager / power profiles | actuating 07-25 | clock + actuators; lock-before-blank is an invariant and hypridle's listeners are deleted; (b) charge real, (c)(d) open, (e) lease still missing, (f) sensors_degraded reaches no surface, (g) the confidence gates need a decision before code |
| 9 | Suspend-resume FTS calibration race | interim-fix | kernel-side; cold-boot only |
| 12 | Face auth as a capability factor (Gaze reference) | open | per-target: phone needs front-cam bring-up |
| 13 | Active Edge (squeeze) as a sensor input | works 07-28 | force detected (2502-2990 vs a 127 max on 07-27) with no nanoapp — the gpio-hog closed the excitation question; producer packaged and gated through sessiond |
| 14 | Overview/app grid + Auxo multitasking | in progress | shell-side; Home path + app cards |
| 15 | Idle coordinator: freeze, doze, scheduled wakeups | blocked | freezing app.slice would freeze sessiond+shell+secrets; needs slice separation first (measured 07-25) |
| 16 | culver: usable messenger + contacts as Personal-class store | in progress | A/B/D landed; C contact card next; F is the folded-in TASK-01 |
| 17 | Keyboard (stevia) + dictation polish | shipped-partial | OSK + mic key + STT live; no word completion — stevia asks hunspell for en-us, the dict is en_US (07-25) |
| 18 | Selection/highlight action menu | open | design captured 07-21; component-first, Read Aloud gated on TTS server |
| 19 | First-party Settings control center | in progress | guarded standalone launch + owned pages; absorbed TASK-22's polish sweep; owes the state-machine + source-health readout (07-28) — 08(f)/(g) surface here |
| 20 | Souveraine Player video + agent control | open | video/snapshot/manifest; preserve music |
| 21 | Reboot-to-Android confirmation | open | scoped 07-22; one-tap irreversible slot flip still bare in app search |
| 23 | culver locked-notification nudge | open | designed 07-22; needs SyncBurst() + IdleCoordinator schedule |
| 24 | Keyboard layout rethink | open | start from squeekboard us+apple; Casey decides where the mic key goes |
| 25 | One repo, all packages | parked 07-25 | four blockers before repo-add --sign; see also TASK-27 |
| 27 | Gitea pipeline audit | open | overlay is not a package; no primary branch; poisoned build sysroot |
| 28 | Handover on upgrade | open | half-upgrades move authority silently; blocked-by TASK-27 packaging |
| 29 | SouveraineOS Updater | started 07-25 | rust rewrite of pachub; doesn't build yet; first repo to build into the pipeline |
| 30 | Agent reach: verb tables across the surfaces | half built 07-26 | sessiond has describe + refusal codes + intent; dock/apps/shell/settings do not |
| 31 | The radial dial | open | component before contents; entries come from the verb tables, not a list in QML |
| 32 | The pill and the keyboard, as owned apps | open | both erroneous daily; neither has an owner or a shipping story |
| 33 | Battery and charging belong to the device state machine | open | last raw feed going straight to the glass; the charge ceiling is writable today |
| 34 | SLPI bring-up sequencing regression | needs re-diagnosis 07-27 | doorbell is ACTIVE and sensors work (live lux measured); its /sys/bus/iio/devices test is not valid — SSC sensors never appear there |
| 35 | sessiond answers nothing: handler threads park forever | open, live | 347 threads in futex_wait, 691/1024 fds; accept loop fine, no request ever answered |
| 36 | CHRE nanoapp host for the SLPI | open | chrecd already runs CHRE with zero nanoapps; method table recovered 07-27, three methods to add |
| 37 | "Back" as a first-class verb | open | our Gestures.qml is already the compositor half; can_go_back is the dial's enabled/reason |
| 38 | Pill swipe-to-max swaps the keyboard | open | micro; the ONLY route to a terminal keyboard since stevia dropped its layout |
| 39 | Audio levels as tracked state, and sound roles | open | measured 07-28: WirePlumber persistence works — it restores 0.49 faithfully, so this is defaults+roles, not a save bug; do not add a second writer |
| 40 | Inference tiering for the sensor surfaces | open, gating | P1 applied to sensord/grip/dial; blocks TASK-13's raw stream and gates TASK-31's IPC |
| 41 | Producers must be attested; one authority per input | open | doctrine §10 pointed at a real surface; demonstrated live 07-28 — a squeeze and a dial-open both accepted from an SSH shell |
| 42 | Build outcomes are invisible | detection built 07-28 | a rotted action pin skipped the publish job for a working day and nothing said so; tools/ci-status.sh + push hook close layer 1, layer 2 is TASK-29's |
| 43 | viewtop: the Souveraine compositor | runs on the phone 07-28 | Smithay frontend + --nested binary, live against sessiond on blueline; 123 tests. Engine in-process settled; the two-client lock handoff is the thing not to get wrong |
| — | Unify the shell trees | open | ~900-file ii drift; blocks durable shell fixes reaching the phone |
Archived (see archive/): 05 crash reporter — done 2026-07-21,
CrashReporter.qml in-shell watcher, kill-test verified on device;
04 notification server — done 2026-07-21,
server already existed (quickshell owns the name), built the lock card +
NotifyEvents seam; 06 qtpim build — retired 2026-07-20, qtpim is
no longer the contacts path; 10 boot chain — done, we ship our own
mkinitcpio; 11 souveraine-secrets — built and committed 2026-07-20;
fix-dock-fullscreen-detection — superseded 2026-07-21 by
unify-shell-trees-laptop-phone.md (the patch is correct but stranded
per-device, which is that task's problem, not this one's);
unified-device-state-deploy — done 2026-07-25. souveraine 0.1.r219.gaa3027845dbd installed from the repo, sessiond took the lock, the
machine reached Locked, and the forensic log recorded panel-dim then
panel-off. Two of its checks are still unverified and moved to their owners:
proximity-blanks-locked-screen needs sensors back (SLPI, TASK-09 neighbours),
and the shell handshake needs a cold boot — restarting sessiond mid-session
drops shell_alive (that gap is TASK-28);
01 favorites — folded into TASK-16 as lane F 2026-07-26, it was gated on 16.B/C
in every step and a file whose every step reads "after 16" is a pointer, not a
work unit; 22 settings polish — folded into TASK-19 2026-07-26, its own text
sourced its candidates from 19's "still required" list and its status was a
placeholder ("items to enumerate with Casey at session start").
Docs consolidated 2026-07-26. The agent-substrate tree was rescued out of
souveraine/docs (gitignored, one disk, no snapshots) into docs/substrate/.
Eighteen device task files that had been stranded there moved to
archive/from-substrate/, each pointing at the numbered task that owns its
subject; four live ones were promoted to docs/ as FIRST-CLASS-APPS.md,
SHELL-ECOSYSTEM.md, SETTINGS-AUTHORITY.md and AUDIO-PRIVACY.md. Seven
handoffs/DUMPs and four docs for the abandoned Chatty/qtpim stack moved to
docs/archive/. Top-level device docs: 31 → 19.
TASK-26 was never written and no longer needs to be. It had two subjects
and both are now closed. blueline-proximity-lock running as a second authority
over proximity: resolved 2026-07-25, it reports to sessiond and decides nothing
(its remaining loose end, unpackaged, belongs to TASK-27). Evidence-source health
as device state — the half PAF/slpi.md was actually pointing at, and which the
first retirement note read past: built 2026-07-26,
DEVICE-STATE-MACHINE.md §10. The dangling references in STATE.md, TASK-25,
TASK-27 and PAF/slpi.md now say so instead of pointing at a file that does not
exist.
Conventions
- Repo of record:
~/Projects/souveraine(substrate + QML shell),~/Projects/Pixel3Arch(phone rootfs/overlays/kernel),~/Projects/SouveraineOS/docs(this tree). - Builds: on archdev (
10.10.20.123, ssh key~/.ssh/ani, Proxmox kernel — binfmt locked, see TASK-06). Never the laptop (96% disk). - Phone: ssh aliases
pixel/pixel-rootat172.16.42.1. COLD boots only (warm reboot poisons TZ/remoteproc). - Commits: no Co-Authored-By, no Claude attribution, terse sysadmin prose, no caveats in public messages.