| 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 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 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. |