11 KiB
11 KiB
SouveraineOS — task files
Single-session-sized work units. Each file is self-contained: the goal, the context a fresh session needs, the acceptance check, and where it connects. Pick one, open a session, finish it. Don't pull in neighbours unless they're a hard prerequisite.
This index says what is left, not what happened. History lives in the task
file. Closed work lives in archive/ with its full record
— nothing is deleted.
Start here
Four that are cheap relative to what they unblock:
- 46 camera — the drivers and CAMSS are already in our kernel; blueline's DT has no camera node at all. A same-sensor reference (Pocophone F1) sits in our own tree. Plausibly one session to a first frame.
- 31 dial contents — the component and the squeeze that opens it are live; its entries are still a hand-written QML list. Wiring them to the verb tables is what stops a third capability enumeration existing.
- 19 settings health readout — three separate tasks (08f, 42, 34) all owe their surfacing to this one page.
- 44 fingerprint, piece 1 — the vendor DT node and shim have sat unused in
staging/since 2026-07-07. Wiring them buys a wake source; biometrics is a separate, harder question.
Live — built, one check outstanding
| # | Task | What's left |
|---|---|---|
| 53 | viewtop audit: what it left open | All ten fixed and on the phone as a package (r73.g64463867a7a6), survived a cold boot. Hardware found two more the gates did not — delivered reported true for a withheld contact, and a drift warning that fired on every normal close. What is left needs the PIN. |
| 43 | viewtop: the Souveraine compositor | Runs on the phone. Next lane is the ext-session-lock admission gate. The two-client lock handoff is the thing not to get wrong. |
| 29 | SouveraineOS Updater | Ships and installs by pacman -Syu. Read-only on device until something runs a polkit agent — that is the shell's job. Also owns TASK-42's layer 2. |
In progress
| # | Task | What's left |
|---|---|---|
| 08 | Device state manager / power profiles | Largest task; sub-divide before starting. (e) lease missing, (f) surfaced 2026-07-31 — health, evidence and the decision trail render on the Device page; last-seen and grip still absent from device_state. (g) confidence gates need a decision before code. |
| 16 | culver: messenger + contacts | A/B/D landed. C (contact card) builds and awaits phone acceptance. F is the folded-in TASK-01. |
| 19 | First-party Settings control center | State-machine + source-health readout built 2026-07-31, unverified on glass. 34 and 42's layer 3 still surface here. |
| 31 | The radial dial | Component, gestures and squeeze invocation are live. Entries are still a list in DialHost.qml — they must come from the verb tables. |
| 30 | Agent reach: verb tables | sessiond has describe + refusal codes + intent. Dock, apps, shell and settings do not. One session per surface. |
| 42 | Build outcomes are invisible | Layer 1 built (tools/ci-status.sh + push hook). Layer 2 is TASK-29's, layer 3 is TASK-19's. Pin-rot prevention unbuilt. |
| 02 | Lockscreen-as-Rust-system | sessiond's fallback should render the glance, not a second PIN pad. Stopgap shipped 07-17. |
| 14 | Overview → phone app grid | Paged app grid replacing the desktop workspace pane; Auxo-style running cards; unconditional Home path. |
Blocked or gated
| # | Task | Blocked by |
|---|---|---|
| 15 | Idle coordinator | Freezing app.slice would freeze sessiond, shell and secrets. Needs slice separation first (measured 07-25). |
| 28 | Handover on upgrade | TASK-27's packaging. Also owns TASK-13's outstanding cold-boot handshake check. |
| 25 | One repo, all packages | Parked 07-25 — four blockers before repo-add --sign. See TASK-27. |
| 40 | Inference tiering for the sensors | Nothing — it is the gate. P1 applied to sensord/grip/dial; gates the grip raw stream and TASK-31's IPC. Decisions first, then small code. |
Open
| # | Task | What's left |
|---|---|---|
| 52 | Atmosphere | Attention as a compositor capability — the fifteen-technique vocabulary. Two are already landed (expose is negative space, pose is gravity wells), and compile_custom_pixel_shader + PixelShaderElement are already in our smithay, so most of the rest needs no new machinery. Build the attention model and one clock first; fifteen uncoordinated animators is §1's blind actors in the render path. |
| 50 | Her hand on the glass | Every scene intent reaches the compositor now except touch — so she can move, scale, dim and close a window and cannot press anything inside one. The receiving end is built (Origin::Agent, the disjoint slot namespace, the evidence predicate); nothing calls it, so she still reaches touch through uinput, which is the exact conflation input.rs exists to prevent. Also owns the inverse mapping pose owes the hit test. |
| 51 | viewtop to daily driver | The punch list between runs and stable, all of it found by using the phone: windows stack with nothing to tell them apart, screen capture is written and unmerged (so no UI change can be verified), volume buttons are recognised and dropped, and five named holes that are one decision each. |
| 48 | Shell dies on any reload that owes a lock | Fully diagnosed 07-29, 11 crashes since 07-17. A reload re-requests ext-session-lock while the outgoing instance still holds it → FATAL: Tried to show lockscreen surfaces without active lock. Sync with TASK-43 before touching the lock path. |
| 47 | Auto-brightness: anchors, none of it built | §12 reads as settled and has zero code behind its actuation half — no brightness Action, no anchors, grep anchor src/ is empty. The evidence half (lux in, health tracked) is live. |
| 46 | Camera: the front camera works | First frame captured 2026-07-29 on the running kernel — no reboot, no DT change. Both front IMX355 were already bound; nobody had tried streaming. Recipe + the stride/packing gotchas are in the task. Next: exposure controls, then libcamera. Rear IMX363 DT (c7784b716) still unbuilt but no longer the blocker. |
| 44 | Fingerprint (FPC1020) | Piece 1 (wake source / input) is a session — DT + shim already extracted. Piece 2 (biometrics) is a TrustZone question, answer it before scheduling it. |
| 45 | Haptics (CS40L20) | First: which chip actually drives the motor — pmi8998_haptics is what the dial's detents use today. Then port cs40l2x from Kirisakura; firmware blobs are committed. |
| 41 | Producers must be attested | Design first. Demonstrated live 07-28 — a squeeze and a dial-open both accepted from an SSH shell. |
| 36 | CHRE nanoapp host for the SLPI | Three methods to add; method table recovered 07-27. No longer on grip's critical path — wanted for DozeDeep detection and elmyra_haptics_control. |
| 34 | SLPI FastRPC session wedge | Re-diagnose. The real symptom: a DSP session survives its host daemon's death and only a cold boot clears it. No longer blocks grip. |
| 03 | Boot timing: splash → lock | The EBUSY handoff race is the last timing bug. Splash text killed, holder added. |
| 07 | WCD9340 mic | Functional since 07-20. One defect: the power pin that makes it work. Kernel branch mic-race-fix. |
| 09 | Suspend-resume FTS calibration race | Kernel-side real fix; interim fix shipped. Cold-boot only. |
| 12 | Face auth as a capability factor | Per-target. Phone needs front-camera bring-up — that is TASK-46's IMX355 half. |
| 17 | Keyboard + dictation polish | No word completion (stevia asks hunspell for en-us, the dict is en_US); no recording indicator on the mic key. The layout half moved to TASK-24. TTS now exists (10.10.20.123:7863) — the settings field can be filled. |
| 18 | Selection/highlight action menu | Component first, fluid before functional. Read Aloud is unblocked — TTS is live. |
| 20 | Player: video + agent control | Video, snapshot, manifest. Preserve the music path. |
| 21 | Reboot-to-Android confirmation | Scoped 07-22. A one-tap irreversible slot flip still sits bare in app search. |
| 23 | culver locked-notification nudge | Needs SyncBurst() + an IdleCoordinator schedule (TASK-15). |
| 24 | Keyboard layout rethink | Redesign from scratch, not more patches. Start from squeekboard us+apple. Casey decides where the mic key goes. |
| 27 | Gitea pipeline audit | The fixes. Overlay is not a package; no primary branch; poisoned build sysroot. |
| 32 | Pill and keyboard as owned apps | Both erroneous daily; neither has an owner or a shipping story. |
| 33 | Battery belongs to the state machine | Last raw feed going straight to the glass. The charge ceiling is writable today. |
| 37 | "Back" as a first-class verb | 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 | Micro. The only route to a terminal keyboard since stevia dropped its layout. |
| 39 | Audio levels as tracked state | Defaults + roles, not a save bug — WirePlumber persistence measured working 07-28. Do not add a second writer. |
| — | Unify the shell trees | DONE 2026-07-31 — verified by md5 across both devices: 918 differing files → 7, all 7 declared in the ii-phone overlay, laptop-only 0, zero stranded. The KEEP list was promoted to repo overrides, not lost. Blocks nothing; archive it. |
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). Never the laptop (93% disk). - Phone: ssh aliases
pixel/pixel-rootat172.16.42.1. COLD boots only — a warm reboot poisons TZ/remoteproc. - CI:
SouveraineOS/tools/ci-status.sh <repo>reads outcomes from the Gitea API. The runner journal is not a status source. - Commits: no Co-Authored-By, no Claude attribution, terse sysadmin prose, no caveats in public messages.