Watch
1
0
Fork
You've already forked SouveraineOS
0
Commit graph

273 commits

Author SHA1 Message Date
Fimeg
1aa61030dd compositor pushes the strip; float, gamma 2026-08-05 19:16:41 -04:00
Fimeg
ec552a82a2 59: phase 1 passes on hardware, ~58fps with the rig drawing 2026-08-05 16:10:41 -04:00
Fimeg
67923009c2 59: licences, the mobile blocklist, and the naming problem 2026-08-05 16:00:29 -04:00
Fimeg
60d903a813 59: ship the reference rig; 55: what actually landed 2026-08-05 15:51:38 -04:00
Fimeg
db729470f5 59: her face on the glass 2026-08-05 15:48:05 -04:00
Fimeg
2e77529b40 55: sheet, split chooser, power menu; viewtop ships by pacman 2026-08-05 14:53:04 -04:00
Fimeg
18c58fc079 docs: the day viewtop got its package, its titles and its borders
STATE.md was five days stale. It now carries what is on the phone
(viewtop r76, souveraine r333) and the four defects fixed on the glass:
per-window capture was unreachable because quickshell holds wlr handles and
the ext capture source is named by an ext handle with nothing correlating
them; titles were never republished on commit; the border was a filled slab
that relied on the client covering its middle; capture came back flipped.

Also the packaging hole, which was the important one — viewtop's PKGBUILD
existed and appeared in none of packages.yml's build lists, so nothing ever
built it. Half closed: it builds now, but a viewtop commit still does not
trigger a rebuild.

TASK-15 question 1 is answered and closed: dropping the accelerometer claim
took iio-sensor-proxy from 15.3% to 1.1%, sensors overall 17.2% to 2.6% of
a core. Consequence noted against 08(g) — confidence loses accel's +0.3.

New: 54, 55, 56, and 57/58 (Pi dock head, SMB2 OTG boost) with the USB
notes they point at.
2026-08-04 18:18:17 -04:00
Fimeg
271e22cf6a task 53: the third defect the hardware found — discovery gave up on sessiond 2026-08-04 10:39:19 -04:00
Fimeg
6b38f643bf task 53: shipped as a package, cold boot verified 2026-08-04 10:03:53 -04:00
Fimeg
74c653a262 task 53: verified on the phone; two more found by running it 2026-08-04 09:52:55 -04:00
Fimeg
8ac3267cc1 task 53: all ten fixed and pushed; unverified on glass 2026-08-04 09:31:44 -04:00
Fimeg
f28274730f task 53: un-floating a window has no verb
toggle_float was the only caller-visible un-float and it went with the
three-finger binding when that became a sessiond verb. Recorded rather
than left as dead code with a comment.
2026-08-04 08:12:52 -04:00
Fimeg
0a36a4df5a task 53: what the compositor audit left open
Nine findings from an adversarial read of the night's work, ranked.
Six others from the same audit are already fixed; these are the rest.

The method note is the part worth keeping: every one of these passed
all four gates. A wedged compositor reports shell=active with zero
errors, so green proves nothing about behaviour.
2026-08-04 08:07:06 -04:00
Fimeg
384cd9453e task 51: what the window-action overlay is actually blocked on
Three fingers should raise an overlay with move/resize/close and the
scaled, sliding visuals the reference shell has. Reading how that shell
does it: its compositor publishes a texture_id AND full geometry per
window on the wire, and the shell draws that texture wherever and at
whatever scale it likes. That is the whole trick behind scaled cards and
every sliding transition.

Ours cannot. The registry publishes size and deliberately never
position, and the only capture source served is per-output rather than
per-toplevel. So the overlay is two pieces of plumbing in order: publish
position alongside size, then a foreign-toplevel capture source.
Building the overlay in the compositor instead would be quicker and
wrong — it is UI, and it would be the one piece of chrome the agent
could not restyle.
2026-08-03 17:18:01 -04:00
Fimeg
5c9a652dfd docs: correct three claims that were false, in place
START-HERE §6 said the phone has no wifi away from home because the
SSIDs are pinned. It joined a foreign SSID on 2026-08-02 and sat there
working while that paragraph sent the reader hunting for a cable. It
now says how to pass the address, and records that a phone off the home
net reaches the repo through the laptop rather than by bringing the
phone's tunnel up.

TASK-51 §3 said the volume buttons do nothing. They were wired on
2026-08-02 in 266af98 — Action::Volume on the down edge, through the
executor table, with tests. Only the gesture level is still unbound.

SECURITY-AUDIT gains three rows its own review cadence required: the
virtual-keyboard and input-method bind filters admit every client, which
is keystroke injection and observation from any uid-1000 process
(verified live with wtype); the clipboard gate is written and tested and
routed at no call site; xdg-activation accepts every token and never
prunes them.
2026-08-03 15:31:56 -04:00
Fimeg
1a73e3f4dc audit: drop the report; the findings belong in the code and the tasks 2026-08-03 15:18:35 -04:00
Fimeg
dd92ecc718 audit: what our own code is missing, 2026-08-03
Five protocol filters admit every client, two of them keystroke paths.
A wake leaves no trail entry. The device flaps Locked/Observed with no
hysteresis. Four behaviours recognised and bound to nothing. Three
shipping paths that silently do not ship.
2026-08-03 15:16:10 -04:00
Fimeg
9e2e193af3 START-HERE: the page to open when something is broken
Doctrine explains why the system is shaped the way it is and is the wrong
thing to open when the screen is black. This is for that: USB
unreachability (with the ARP test that proves the phone is fine), the
black-screen regression and its mechanism, what to do when a Hyprland
binding stops existing, where to build, the three different ways things
reach the phone and why an overlay-only fix never arrives, and the five
traps that have each cost a session.

Every repo's CLAUDE.md now points here before it points at doctrine.
2026-08-02 19:13:40 -04:00
Fimeg
d10479710d tasks: 52 atmosphere, and narrow the haptics question to one a hand can answer
52 maps the fifteen-technique attention vocabulary onto what viewtop can
actually do. Two are already landed — expose IS negative space, pose IS
gravity wells — and compile_custom_pixel_shader + PixelShaderElement are
already in our smithay, so #1/#6/#9/#11/#12/#13/#14 need no new machinery.

The load-bearing note is ordering: build the attention model and one
global clock before any individual effect, or fifteen animators fight
over the same surfaces and it is §1's blind actors in the render path.
That failure already happened this week in the panel. Attention decisions
go in forensic.jsonl in the same change, so the atmosphere is
imperceptible in the moment and legible afterward — the standard every
other authority here is held to.

45: the PMIC haptics path accepts and plays an FF effect and the CS40L20
is absent from this kernel, so the five-minute check is now one question
only a hand can answer.
2026-08-02 18:04:26 -04:00
Fimeg
53edffac20 tasks: 50 and 51 — her hand on the glass, and viewtop to daily driver
The gaps were prose in TASK-43 and a summary message. They are tasks now.

50 is the one that matters: every scene intent dispatches except touch, so
she can move and dim a window and cannot press anything in one — and the
workaround is the uinput bridge, which launders her intent into a physical
touch inside the kernel where nothing can undo it. That is the conflation
input.rs was written to prevent, and it is live every day this stays open.

51 is the punch list found by using the phone rather than reading it:
stacked windows, capture written-and-unmerged so nothing visual can be
verified, volume recognised and dropped, and the named holes.
2026-08-02 17:59:31 -04:00
Fimeg
4476d48d56 task-43: the scene door is hung; synthesized touch is the bridge still owed 2026-08-02 17:47:29 -04:00
Fimeg
b2ce5d7cb0 lock-dpms: waking is the machine's, and the compositor must not do it itself
The panel had no way back: apply_gesture answers a tap on a dark panel
with Restore, which is brightness, and there was no unblank in the action
table. Invisible while hyprland bound the keys straight to the toggle;
under viewtop it became a phone that could sleep and never wake.

Records the wake loop too, because building it wrong is the obvious move:
viewtop waking directly worked, then sessiond resolved the same press,
found the panel lit, and blanked it again. One press woke the phone and
put it back to sleep. Plus why dt2w is a wake and not a button, and the
deploy order that has to hold between the two halves.
2026-08-02 17:37:51 -04:00
Fimeg
2e7766994c lock-dpms: the compositor reports LockedHint now, and the ordering is verified
All four faults were consequences of reporting the hint from the shell.
viewtop reports it instead: it is in the seat's session, SendLocked is the
moment the locked event goes out, and it can publish a level rather than
an edge so a cleared hint corrects itself.

Records the hardware result — lock-before-blank, lock-directive,
transition locked=True, panel-off locked=True, and no blank-without-lock.
2026-08-02 16:02:46 -04:00
Fimeg
c34274b14d task-43: what landed, and where the unmerged capture tree actually is 2026-08-02 15:51:01 -04:00
Fimeg
0f2f1a96c3 lock-dpms: the ordering invariant held in the code and not on the device
Three independent faults, any one enough: greetd ran the desktop in its
greeter slot so logind refused SetLockedHint outright; the hint was
written to the caller's session and read from User.Display, which an ssh
login redirects; and the one report that mattered was swallowed by a
guard that never replayed it. Every blank went out unlocked and recorded
blank-without-lock.

Also records the check that catches it in one line, and why verifying the
actuator directly proves nothing about the ordering.
2026-08-02 15:43:16 -04:00
Fimeg
e46c6588c2 TASK-43: viewtop is the session compositor
greetd launches it, Hyprland does not run, the shell's whole surface tree
composites on it. Points at the session record in the viewtop repo rather
than restating it here.

Steps 1-2 of the build order are done and step 3 is half done; the live
gap list lives with the code.
2026-08-02 14:03:36 -04:00
Fimeg
96094c7893 TASK-43: touch served; next lane is KMS on device
viewtop at 458a354. Records the touch fork (provenance from the event
source; the agent reaches the seat but never the evidence stream) and
marks lanes 1 and 2 done — the Smithay frontend and the session-lock
server both landed.

Adds the resume steps for KMS on device: what it will actually show
(clients on black — shell-host is still thirteen lines), the cheap proof
that needs no pixels (sensor_health.touch is `unknown` on the phone and
has never been anything else), the missing test client, and the DRM
master risk on a daily driver.

Also: the `vanguard` ssh entry on the phone has the wrong user, which
presents as a key failure.
2026-08-02 08:56:05 -04:00
Fimeg
09e818b4db task-39: the in-call speaker button is fixed
souveraine-callaudiod routes ENABLE_SPEAKER through the hook, which writes the
amps directly instead of switching a sink port that cannot exist on this card.
Verified over D-Bus: enable -> both amps, disable -> earpiece, not headset.
A real call is the outstanding confirmation.
2026-08-02 08:52:15 -04:00
Fimeg
a711ce48cd task-39: retract the HiFi-capture-is-dead finding
HiFi captures fine - 204136 nonzero, peak 32726 - once the channel map is
clean. The zeros were stale SLIM map state, which PAF/audio.md already
documents as the alternation law and the post-call unmapped-leg bug, and the
TX7 poke used to "test the decimator" recreated that bug on all three AIFs.
Device is back on HiFi; the Voice Call workaround is reverted.
2026-08-02 08:35:03 -04:00
Fimeg
05c03acbe7 task-39: point at the eight unmerged mic branches before theorising again
None reached blueline. The new measurement rules out the decimator and the
front-end mixer, which favours the sysclk/SLIM-lifecycle direction of mic-fix
over the pad-configuration branches.
2026-08-02 08:28:33 -04:00
Fimeg
9c2558863f task-39: the in-call speaker button routes to a headset, and why
gnome-calls asks org.mobian_project.CallAudio, which callaudiod owns, and
callaudiod switches a sink port - which cannot work when ACP splits earpiece and
speaker across two profiles. The working toggle is the hook's speaker on|off and
nothing in the UI calls it. Fix is a shim that claims the name; it needs a real
call to test before enabling.
2026-08-02 08:23:19 -04:00
Fimeg
2e23e4b260 task-39: HiFi capture is silent; the DMIC needs the Q6 voice session
92133 frames at peak 0. Codec routing is correct and forcing the call profile's
TX7 decimator changes nothing, so it is neither the decimator nor the front end
- what is left in the 11-control diff is VoiceMMode1. Voice Call (Mic, Speaker)
gives working mic plus speakerphone and is the workaround. Capture gain is UCM's
to set; runtime amixer does not survive profile activation.
2026-08-02 08:20:58 -04:00
Fimeg
5f53bf7396 task-39: profile selection is state-machine work, not a pactl poke
The card was stuck in the modem call profile, so audio came out of the earpiece
and read as a weak speaker. Restoring HiFi is manual; classifying when each
profile is wanted is the actual task. Also notes that the device runs pipewire
while pipewire-abi-provider claims PulseAudio owns the stack.
2026-08-02 08:12:44 -04:00
Fimeg
499dc5e159 task-44: the assert reaches evdev, and the 1444 run is explained
KEY_WAKEUP lands on event4 at the same timestamp as the hardware edge, so the
existing XF86WakeUp bind can already see it. arm generates its own edge, which
means re-arm-on-interrupt feeds itself - that was the 1444 events, not the
sensor. wakeup_enable takes enable/disable, not 1.
2026-08-01 19:27:16 -04:00
Fimeg
be4ceedbd1 task-44: the TA clears the latch, and the sensor does not free-run
fpctzappfingerprint loads from cold boot and answers; init/idle/arm all 0x0.
gpio121 goes idle-low after the sequence - the latch that killed piece 1 is
cleared, so a rising edge is possible for the first time. init accounts for 68
of the edges; armed and untouched is a flat 0 over 15s, so the 1444-event run
was the re-arm loop. Open: whether a finger raises an edge.

Reconcile the file with the code it now contradicts (the sysfs is shipped on
purpose) and register arbitrary signed-TA loading as a new Tier-0 primitive.
2026-08-01 19:01:42 -04:00
Fimeg
55a44239ff task-49: measured on the phone — #1 holds, #2 broke and is fixed
home_ssids needs a list: Samaritan Solutions and TheTholianWeb both lease from
10.10.20/24 (.234 and .245). Three defects only hardware showed: reapply clat
wipes the CLAT daemon's routes including the MMS /32; the gsm connection is the
wrong lever because the v4 carrier default comes from the clat tun at 2048; and
wg show needs CAP_NET_ADMIN that a user unit will never have.
2026-08-01 14:59:13 -04:00
Fimeg
0737387379 task-49: wiuf/wiufph resolved — wiuf carried the laptop's tunnel address
wiuf was ipv4.addresses 10.8.0.5/24, which is wiufarch's; wiufph is 10.8.0.6,
the phone's. Not near-copies - bringing wiuf up would have put two devices on
one WireGuard address. wiufph also carried the dns-priority 10 fix; wiuf was
still at 0. Deleted, backed up to /root/nm-profile-backup/ on the device.

autoconnect=no left alone on purpose: it is why the tunnel does not return
after a reboot, and the switch is the user's authority per this task's own
constraints.
2026-08-01 14:37:21 -04:00
Fimeg
6b4e4fd326 task-49: the machine half landed; acceptance list still open
bearer.rs plus PreferLink/PinTunnelUnderlay and a bearer verb. Decision layer
tested (settling window, no re-emit, dead network); nothing has run on the
phone. home_ssids still unset and the wiuf/wiufph duplicate still unresolved.
2026-08-01 14:21:11 -04:00
Fimeg
11668f097f task-46: rear IMX363 NACKs at 0x10, moved to 0x1a
And the lesson that cost the front camera: camss creates all sensor->csiphy
links in the async notifier's .complete, which needs every declared subdev to
bind. One non-probing sensor leaves the working front pair registered with zero
links. Never leave a failing sensor node enabled; a rear-disabled DTB is parked
on the device for one-cp recovery.
2026-08-01 13:57:05 -04:00
Fimeg
7b96c9414f task-49: record what wiuf-vpn-gate got wrong, and remove it from the phone
Found still installed 2026-08-01, in no repo and no repo's history. Three
defects, all traps the state-machine version can repeat:

- driven by the NM dispatcher and a 90s timer while calling nmcli up/down,
  which is itself an NM event - an actuator wired into its own sensor. 652
  recycles in 90 minutes is ~7/min, a loop, not a bad interval.
- on_home_wifi() matched ' inet 10.10.' - a /16 test that reads foreign
  10.10.30.x as home and drops the tunnel as redundant. The phone is on
  10.10.30.213 right now, and TASK-49's own measurements were taken there.
- managed CONN=wiuf while the phone carries both wiuf and wiufph, neither
  autoconnecting.

Files removed from the device; no dispatcher hook referenced them.
2026-08-01 13:21:48 -04:00
Fimeg
8b9edae3e5 blueline: move wifi-bringup to Pixel3Arch rootfs-overlay
This repo has no delivery path; rootfs-overlay does. Files were byte-identical.
2026-08-01 13:16:45 -04:00
Fimeg
2e0642181f task-49: wifi->LTE failed to attach 2026-08-01; pd_mapper is a real suspect
sdm845_domains[] carries mpss_root_pd and mpss_wlan_pd, so wifi and cellular
share the modem's PD broker on this SoC. A broker that stops serving explains
a no-attach that only a reboot clears.

The stranded mic-fix commit is not the fix: it edits arch/arm64/configs and
debian/config, and the PKGBUILD reads neither (cp config-blueline.aarch64,
olddefconfig, no merge_config.sh). Whether =m should become =y in the config
we do ship is open, and untestable until the failure is captured live.
2026-08-01 12:39:03 -04:00
Fimeg
c614b3a83e task-44: piece 1 built; two corrections to the task's own premises
The staged vendor driver is the fpc_fingerprint variant, which blueline does
not build (b1c1_defconfig sets CONFIG_FPR_FPC=y, the other copy). The shipping
one has an empty vreg_conf[] and manages no regulators at all.

The TZ pointer was wrong: secure_load_tz_frontier.md is superseded and covers
hyp-assign/XPU, not TA loading. tz_listener_archaeology.md plus the four
qseecom commits are the record, and they already show TZ answering us -
version query succeeds, listener 0x5000 registers live. What is missing is
app loading, not the channel.

Pins confirmed against this unit's DTBO; the FPC1075 caution is resolved.
2026-08-01 09:16:46 -04:00
Fimeg
80ea42cbbb task-48: daemon half fixed and live; shell half shipped and measured failing 2026-07-31 20:14:45 -04:00
Fimeg
ec2f856cfb TASK-49: bearer selection and DNS belong to the state machine
Measured on the phone: all IPv4 left over cellular while on wifi, because NM
penalised the wifi metric +20000 for a failed connectivity check, which failed
because the VPN profile injected a resolver reachable only over the degraded
default. Prior art read off the local LineageOS image and Sailfish tree: both
route DNS per link and gate preference on a probe. We do neither.
2026-07-31 13:55:02 -04:00
Fimeg
bd528e3443 docs: 08(f) surfaced — the state machine has a readout
Device page renders state, evidence, per-source health, sensors_degraded and the
decision trail. Notes what is still absent from device_state: last-seen per
source, and grip as a fourth source.
2026-07-31 13:12:19 -04:00
Fimeg
012e4e1d59 docs: subconscious surface is hosted
Tier 2 reached the tree on 07-30 and the glass on 07-31 — nothing mounted it in
between, and that was invisible because a component nobody instantiates logs
nothing. Notes why verifying a row means looking at the glass.
2026-07-31 12:54:51 -04:00
Fimeg
705e7b55ae shell-tree unification: done, zero stranded files 2026-07-31 08:25:09 -04:00
Fimeg
6b0bf5c745 shell-tree unification is all but done: 918 files -> 7
Re-measured by md5 across both devices. The ii-base pin + ii-phone overlay
landed without this task being worked and killed the drift: laptop-only is 0,
the settings suite is byte-identical everywhere, and the 4 phone-only files
are the declared overlay.

Six stranded files remain. Also corrects two claims in the 07-21 record: the
phone-only KEEP list names three files that no longer exist anywhere, and
deploy.sh no longer 'only rsyncs surfaces/' - it rsyncs the pin with --delete,
which is why an undeclared phone-local file cannot survive.
2026-07-31 08:22:56 -04:00
Fimeg
25bb99c850 VPN: correct the port, the peer, and the keepalive
51822 not 51820; the phone has its own peer (10.8.0.6) rather than sharing
the laptop's key; keepalive 25 not 0. Records that the autonomous gate is
dead and why a full tunnel that cannot handshake takes the machine with it.
2026-07-31 07:57:30 -04:00