Watch
1
0
Fork
You've already forked SouveraineOS
0
SouveraineOS/docs/tasks
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-08-11 15:44:49 -04:00
..
archive docs: checkpoint device and system state 2026-08-10 17:00:23 -04:00
02-lockscreen-rust-system.md tasks: split open work into single-session task files 2026-07-17 10:48:06 -04:00
03-boot-timing-splash-to-lock.md tasks: rewrite 03 (boot timing, source-verified faults), add 17 (keyboard/dictation) 2026-07-21 11:37:16 -04:00
07-mic-wcd9340-slim-tx.md docs: checkpoint device and system state 2026-08-10 17:00:23 -04:00
08-device-state-manager.md docs: checkpoint device and system state 2026-08-10 17:00:23 -04:00
09-suspend-resume-fts.md tasks: log 07-21 findings (culver A/B/D/E, mic wedge, overview, keyboard); add 19-23 2026-07-24 10:21:44 -04:00
12-gaze-reference-face-auth.md blueline: consolidate wifi bring-up, adopt cellular/MMS path, task audit 2026-07-20 22:21:15 -04:00
14-overview-appgrid.md 55: sheet, split chooser, power menu; viewtop ships by pacman 2026-08-05 14:53:04 -04:00
15-idle-coordinator.md docs: the day viewtop got its package, its titles and its borders 2026-08-04 18:18:17 -04:00
16-culver-messenger-contacts.md tasks: fold 01 into 16.F and 22 into 19; 24 open tasks -> 22 2026-07-26 08:47:55 -04:00
17-keyboard-stevia-dictation.md keyboard: make Squeekboard the single path 2026-08-11 15:44:49 -04:00
18-selection-menu.md tasks: settle viewtop scene composition + selection design; cross-link 2026-07-30 11:36:50 -04:00
19-settings-control-center.md docs: 08(f) surfaced — the state machine has a readout 2026-07-31 13:12:19 -04:00
20-player-video-agent.md tasks: log 07-21 findings (culver A/B/D/E, mic wedge, overview, keyboard); add 19-23 2026-07-24 10:21:44 -04:00
21-reboot-android-confirmation.md tasks: log 07-21 findings (culver A/B/D/E, mic wedge, overview, keyboard); add 19-23 2026-07-24 10:21:44 -04:00
23-culver-locked-notification-nudge.md tasks: log 07-21 findings (culver A/B/D/E, mic wedge, overview, keyboard); add 19-23 2026-07-24 10:21:44 -04:00
24-keyboard-layout-rethink.md task-24: dead band above the letters page was max_rows across layers 2026-07-27 08:46:12 -04:00
25-one-repo-all-packages.md distribution: add ViewTop to the laptop body 2026-08-11 14:40:08 -04:00
27-gitea-pipeline-audit.md docs: checkpoint device and system state 2026-08-10 17:00:23 -04:00
28-upgrade-handover.md docs: source health is §10; correct the TASK-26 retirement 2026-07-26 08:38:35 -04:00
29-souveraine-updater.md tasks: archive what shipped, say what is left, add fingerprint/haptics/camera 2026-07-28 18:20:23 -04:00
30-agent-reach-verb-tables.md tasks: settle viewtop scene composition + selection design; cross-link 2026-07-30 11:36:50 -04:00
31-radial-dial.md tasks: archive what shipped, say what is left, add fingerprint/haptics/camera 2026-07-28 18:20:23 -04:00
32-pill-and-osk-as-apps.md TASK-32: record that --phone rsyncs --delete with no snapshot 2026-07-29 17:55:18 -04:00
33-battery-as-device-state.md docs: reconcile USB, Waydroid, audio and charging 2026-08-07 14:52:28 -04:00
34-slpi-bringup-sequencing.md tasks: archive what shipped, say what is left, add fingerprint/haptics/camera 2026-07-28 18:20:23 -04:00
36-chre-nanoapp-host.md task-36: nanoapp loader built and verified; task-34: SSR does not recover the wedge 2026-07-27 18:35:24 -04:00
37-navigation-back-verb.md tasks 37-39: back verb, pill swipe osk swap, audio levels as state 2026-07-27 09:29:10 -04:00
38-pill-swipe-osk-swap.md tasks 37-39: back verb, pill swipe osk swap, audio levels as state 2026-07-27 09:29:10 -04:00
39-audio-levels-as-state.md docs: checkpoint device and system state 2026-08-10 17:00:23 -04:00
40-inference-tiering-sensors.md tasks: archive what shipped, say what is left, add fingerprint/haptics/camera 2026-07-28 18:20:23 -04:00
41-attested-producers.md viewtop: assess denial as the base; the lock model is the one thing we cannot take 2026-07-28 13:41:37 -04:00
42-build-outcomes-are-invisible.md tasks: archive what shipped, say what is left, add fingerprint/haptics/camera 2026-07-28 18:20:23 -04:00
43-viewtop-compositor.md task-43: the scene door is hung; synthesized touch is the bridge still owed 2026-08-02 17:47:29 -04:00
44-fingerprint-fpc1020.md docs: define temporary FPC Polkit bridge 2026-08-10 20:46:28 -04:00
45-haptics-cs40l20.md compositor pushes the strip; float, gamma 2026-08-05 19:16:41 -04:00
46-camera-imx363.md task-46: rear IMX363 NACKs at 0x10, moved to 0x1a 2026-08-01 13:57:05 -04:00
47-auto-brightness-anchors.md tasks 47/48: auto-brightness is unbuilt; the shell dies on a lock-owing reload 2026-07-29 10:45:06 -04:00
48-lock-surface-reload-fatal.md task-48: daemon half fixed and live; shell half shipped and measured failing 2026-07-31 20:14:45 -04:00
49-bearer-selection-as-device-state.md docs: record the USB landing and VPN gate 2026-08-07 17:24:40 -04:00
50-agent-hand-on-the-glass.md tasks: 50 and 51 — her hand on the glass, and viewtop to daily driver 2026-08-02 17:59:31 -04:00
51-viewtop-to-daily-driver.md 55: sheet, split chooser, power menu; viewtop ships by pacman 2026-08-05 14:53:04 -04:00
52-atmosphere.md tasks: 52 atmosphere, and narrow the haptics question to one a hand can answer 2026-08-02 18:04:26 -04:00
53-viewtop-audit-open.md 55: sheet, split chooser, power menu; viewtop ships by pacman 2026-08-05 14:53:04 -04:00
54-drawing-what-nobody-sees.md docs: the day viewtop got its package, its titles and its borders 2026-08-04 18:18:17 -04:00
55-hand-verbs-on-the-glass.md 55: sheet, split chooser, power menu; viewtop ships by pacman 2026-08-05 14:53:04 -04:00
56-island-and-the-bars-honest-face.md docs: the day viewtop got its package, its titles and its borders 2026-08-04 18:18:17 -04:00
57-pi-dock-head.md docs: the day viewtop got its package, its titles and its borders 2026-08-04 18:18:17 -04:00
58-host-power-smb2-boost.md 58: samcday's pmic-typec-smb2 covers most of phase 2, unrun on hardware 2026-08-06 23:43:48 -04:00
59-her-face-on-the-glass.md docs: checkpoint device and system state 2026-08-10 17:00:23 -04:00
60-the-multitasking-view.md TASK-60: shell half done; the release was the seam 2026-08-07 12:26:25 -04:00
61-color-gamma-panel.md 61: gamma landed and measured; the DPU exposes CTM, the LUT is 1024 2026-08-06 18:57:09 -04:00
62-full-usb-kvm.md docs: checkpoint device and system state 2026-08-10 17:00:23 -04:00
63-d10-second-body.md docs: name the iPhone boot project 2026-08-10 21:55:43 -04:00
64-one-iphone-build.md docs: name the iPhone boot project 2026-08-10 21:55:43 -04:00
65-subconscious-stall-wedges-the-surface.md tasks: 65 — a stalled subconscious wedges the surface 2026-08-10 15:46:18 -04:00
66-souveraineai-overhaul.md docs: name x86 and reconcile public body claims 2026-08-10 23:42:35 -04:00
67-caching-landed-blind-and-compaction-drift.md tasks: 67 — what 6eda491 closed, and what it did not 2026-08-10 20:57:31 -04:00
68-shared-household-state.md docs: set the shared-state authority spine 2026-08-10 20:09:54 -04:00
69-agent-usage-session-daemon.md tasks: 69 stage 1 and 70 island built 2026-08-11 14:23:56 -04:00
70-the-island-agent-surfacing.md keyboard: make Squeekboard the single path 2026-08-11 15:44:49 -04:00
72-surfacing-pane-tool-primitives.md tasks: the message API carries images now, the surface still does not 2026-08-11 12:31:36 -04:00
README.md docs: set the shared-state authority spine 2026-08-10 20:09:54 -04:00
unify-shell-trees-laptop-phone.md shell-tree unification: done, zero stranded files 2026-07-31 08:25:09 -04:00

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
60 Multitasking is a place, not a transition One-owner compositor and shell halves are built; strand repro and measured landing pass on glass. 16c6ee1 is pushed and CI 1236 is green. What remains is Casey's thumb on the settle/fade and a real split-zone card check.
53 viewtop audit: what it left open All ten fixed and packaged onto the phone (r74.g6c9614c20471). The cold boot then exposed a third: a lost sessiond race had left the power button dead — discovery waits now. 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.
66 souveraineai.com overhaul Rework landed 2026-08-10, waiting on push. Nested Astro docs repo folded into souveraine-website with history; the static public/*.html shell archived, not deleted. Left: astro build green in the merged repo and the server rebuilding from the merged tree.
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
65 A stalled subconscious wedges the surface Reproduced and measured, not diagnosed. The reply commits and PrimaryComplete fires, then the N+1 pass stalls at round 3 of 10 with a fully idle runtime — and because it runs inside run_turn, the SSE stream never closes and Surfaces spins forever. Lead is the todo tool. Needs a backtrace; the stream-lifetime coupling is a fix in its own right.
63 The second body: SouveraineOS on the iPhone 7 The shell is on the glass 2026-08-09 — viewtop, sessiond and qs -c souveraine all run on a T8010 with no GPU, drawn by llvmpipe, over one USB cable. Hoolock is the bootloader and nothing else. The build half of this is TASK-64.
62 Full USB KVM GUD + HID + NCM + smoo and the signed package path are green. Still open: install and cable/glass acceptance; real Session Authority gates (peer identity, probe lease, step-up, D-Bus enforcement); cold-boot SSH-over-NCM proof. Type-C/TCPM host negotiation remains TASK-58.
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
68 Shared household state: tasks first Canonical plan landed 2026-08-10. First slice is an admitted local task trail + materialized QML app/sidebar view; Culver is the Personal-class client, not the authority.
67 The caching landed blind, and compaction drifted Prompt caching works — one turn shows cache_write=22585 then cache_read=22585 — and nothing reads the counters: assistant_with_usage has zero callers, so the only proof is a log line. Separately, the live config hands the subconscious sliding_window where the doc and the code default both say sliding_reflect, and the memory tool's enum exposes the blind strategy while hiding the safe one. §1 needs Casey's word, not a fix.
64 One SouveraineOS build for the iPhone Scoped 2026-08-10, not started. linux-pauli is not a repository, reaches the phone by scp, and CI has never built it. The display work that day is worth more than its code: the raster is derived, not guessed — 888×1845 @ 60 off adp_mipi_regs — and aperture_remove_all_conflicting_devices() is the correct handoff. ADP still shows nothing with everything else correct; the adp16 kernel is staged and has never booted.
59 Her face on the glass: a Live2D presence Phase 1 passed on hardware 2026-08-05: ~58 fps, rig verified drawing (painted_px 23.6k/24k), 283 MB WebKit RSS. Scoped from a Live2D board-girl found in a cloned blog. The reference streams its chat over SSE terminated by [DONE] — the contract souveraine's server already speaks, so the integration is accidentally done. Base layer is wry, not the Chromium already on the phone; the first deliverable is a measured frame rate for the Cubism runtime in WebKit on freedreno, and if that fails the task stops there. Replaces ani-avatar's 2.5 GB of sprite states with one rig. Reference rig ships as the working placeholder and gets edited toward Annie — it just stays out of any public repo. Summoned by app launch and/or the radial dial, not always-on.
58 Host power: the SMB2 OTG boost Host data works; the boost isn't. The SMB2 5 V boost exists in silicon and mainline's qcom-smbx-charger never registers it. Investigation first (which tree builds the running kernel, does smb2 touch the boost, does qcom_pmic_typec bind pmi8998), then vbus-supply + regulator + typec. Unlocks host-mode power, power-bank mode, and the Pi without a wall wart.
57 The Pi dock head Phone stays a gadget; the Pi 4 drives the monitor + dock. NCM link is default, Venus encoder is present, compositor capture landed — the unproven seams are zwlr_screencopy vs our own capture IPC, and the Pi's own bring-up ("major malfunctions TBD"). Four phases: Pi bring-up, static chain, real capture + udev trigger, input injection.
56 The island, and the bar's honest face Bar clears a region for sprawling notification banners, agent-controlled (Part A: design questions). Part B is buildable now: drop the LTE suffix, tap-to-cycle the carrier name (Fido → Casey → Fimeg), and a network-type indicator that shows the live connection instead of a wifi glyph that never reflects cellular.
55 The hand's verbs: a window action sheet Sheet built and deployed 2026-08-05. The tap carries its window now (the centroid was being dropped, which is why it could only reach the overview); Kill added because Close is a request a hung client never reads; ViewtopControl.qml is the shell's one path to the scene verbs. Split's chooser, Home-via-compositor, and Move-as-a-mode (grab/drop) all landed the same day; the three-finger drag was deleted outright — it beat the tap to nearly every gesture, and zones now move only when something says so. Left: a real resize handle, widgets on the cleared home zone, and shipping the drag-removal package (viewtop CI 1165 failed in checkout). Also surfaced a runtime-lock paint gap — black until the lockscreen draws, because only boot has a splash→glance→lockscreen chain.
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 motorpmi8998_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 and in daily STT use. One defect: the permanent sysclk + MICB2 power pin. 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 Dictation works in daily use. Open: no word completion (en-us vs en_US) and the stateful mic-key indicator is written but not built. Layout moved to TASK-24. TTS now exists (10.10.20.123:7863).
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 Open policy: roles, defaults, lock tiers, and state-driven profile intent. WirePlumber persistence works; 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-root at 172.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.