August 13, 2026
44 recorded commits · 4 named repos · 9 private repos
- Private work 9 private repos
Activity was recorded across 9 private repos. Names, subjects, counts, and links stay private.
- souveraine25 changes
- record a delivered thought before removing it10:08 p.m. · 63ef8e5 · internal Gitea record only
The removal committed first, so when the sent-write hit the ledger's own character ceiling the thought left the inbox and was recorded nowhere — and the caller only logged a warning.
- replay a tool round as a tool round9:57 p.m. · fab4f2c · internal Gitea record only
Flattening a call to `Tool use: name(args)` told the model she *said* it when she *did* it; she read her own transcript and imitated the sentence instead of calling anything. Annie stopped using bash within an hour of tool blocks first surviving replay (2026-08-13).
- shell: refine AirPods opening card9:02 p.m. · bfd48fc · internal Gitea record only
- ci: retry system deps through a resolver blip8:50 p.m. · 8bc9c9a · internal Gitea record only
The runner's ephemeral job containers lost DNS for three minutes and took four builds down with them on 2026-08-13, none of them for a code reason.
- saf: write the replay page, retire two stale claims8:45 p.m. · aae9344 · internal Gitea record only
Replay had no page while compaction's premise depends on it — microcompact blurs tool output that a text-only projection never sent.
- replay stored history through one projection8:39 p.m. · 2a51a23 · internal Gitea record only
Three implementations decided what a stored message becomes on the wire. core::session::replay_messages is now the only one; ImagePolicy is the sole legitimate difference between callers, and server/conversation.rs was dead scaffolding carrying a fourth wrong answer.
- shell: place AirPods card without Hyprland5:46 p.m. · 86234b0 · internal Gitea record only
- replay tool blocks as prose in cross-turn history4:31 p.m. · a353f1d · internal Gitea record only
Cross-turn replay kept Text and dropped ToolUse/ToolResult/Reasoning, so a turn's own tool work was invisible to the turn after it. Measured 215k archive against 76k payload on a live thread — the gap was the dropped blocks, and microcompact, which exists to blur old ToolResult output, had nothing left in the payload to blur. Session::to_bifrost_messages already flattened them for the subconscious; both paths now share ContentBlock::replay_text.
- shell: stage the AirPods opening card3:27 p.m. · 52640cd · internal Gitea record only
- read: attach the image, not a stub shaped like success3:08 p.m. · 41c858a · internal Gitea record only
read base64'd every image into ToolOutput.raw and the registry dropped it, so vision never arrived — only "[Image: idle.png (283KB)]", which reads like success and is proceeded on. Images now ride as one user message after all tool results in a round; a model without vision is told plainly it did not see. Also stops "Error: Error:" doubling on prefixed failures.
- nervous: the belief contract every rung passes upward2:25 p.m. · 713f3ac · internal Gitea record only
Belief<T> and Field. None is not zero: a source that never spoke must read as I cannot feel my leg, never as nothing is touching it — the distinction that hid a real outage for a whole boot (2026-07-27). Disagreement lowers confidence and elects no winner. 13 tests, unwired.
- halt: keep the record, and let her answer it2:00 p.m. · 49d9ad5 · internal Gitea record only
execute() validated its arguments and returned a string — the description promised the reason reached the ledger since the tool was written, and nothing durable ever survived the turn. All three severities also broke the loop identically, so severity was decorative. Advisory now continues; firm and critical stop, and `resume` answers them without Casey relaying.
- prompt: the subconscious speaks in the first person1:35 p.m. · 9c02940 · internal Gitea record only
Eighteen third-person references across the two prompt surfaces taught both modes to read as two people. One consciousness at two cadences — what the slower one surfaces arrives in her own voice, not as a report from outside. Register only; the channel stays one-directional.
- viewtop: hang up after a reply instead of discovering it12:43 p.m. · a8a4aac · internal Gitea record only
The compositor answers one request per connection and returns. `connected` lags that close, so the 2 s poll's second tick wrote to a spent socket and died as PeerClosedError — once per shell start, 4 of 4 loads on 2026-08-13, while the same socket answered a hand-written request that second. The error also blamed reachability, which it never established; it now names the verb that was lost and how many were dropped behind it.
- bar: restore the battery icon on narrow screens11:32 a.m. · ef3a851 · internal Gitea record only
The unified BarContent applied the desktop gate (useShortenedForm < 2) to every device, but ii-phone had shown battery ungated — note 5 in this file's own header. A 1080-wide panel sits at form 2, so the icon vanished on 2026-08-11 while the critical-battery alert kept firing beside it.
- wait for a package with a given commit before restarting10:49 a.m. · 912fb88 · internal Gitea record only
A bare restart picks up whatever is installed. r477 predates the two subconscious fixes, so restarting on it would have looked like delivery and shipped nothing.
- provider-balance: read logins and every agent, not three roles10:27 a.m. · c66343f · internal Gitea record only
An OAuth login reports present while dead: both Claude access tokens expired 11h ago and only the refresh token, good 27 more days, keeps them working. Presence was the check; expiry is the answer. Widening to per-agent models found Hal and TestAgent naming models absent from [models.*] — they would fail at first use, not at config.
- provider-balance: distinguish a subscription cap from bankruptcy, ship the tests10:13 a.m. · a264854 · internal Gitea record only
The classifier's tests existed only as a throwaway heredoc, so they could not be re-run and protected nothing. They are now in the file behind --selftest, built from HTTP bodies captured verbatim rather than written from memory.
- tools: probe provider balance before a role dies9:59 a.m. · 6b9a415 · internal Gitea record only
Three providers ran out of credit in two days (zai, deepseek, opencode) and in every case the first signal was a failed subconscious pass. Balance exhaustion is invisible until something dies; absence of complaint reads as health.
- the subconscious can come back from an overflow9:42 a.m. · 837e024 · internal Gitea record only
Once her thread passes the model's ceiling she cannot recover on her own: every pass is refused at the provider before a single tool round runs, so she can never reach for memory compact herself. The gauge is no use to someone already over. She sat dead in that state from 2026-08-11 16:38 until this was found.
- memory status reports context pressure9:35 a.m. · 877cad0 · internal Gitea record only
Both the primary's and the subconscious's system prompts say 'memory status shows my context pressure and number of messages'. It showed neither -- git state only.
- patches: the queue is empty, and the README said otherwise for a day8:33 a.m. · aa6cd4e · internal Gitea record only
0007 and 0010 landed in 6f12fce and their files were removed in that same commit, but this list went on describing them as pending. 0001 and 0006 have now landed too. A queue file is a claim with a shelf life; so is the README that indexes it.
- stepup: authenticate through PAM, not a dead pkcheck branch8:24 a.m. · 6edebae · internal Gitea record only
StepUpAuth ran `souveraine-pam-auth`, else `pkcheck --action-id org.souveraine.stepup`. Neither exists: no such binary was ever written and no polkit action was ever shipped, so both branches failed and every grant request was silently denied. The header also described passing a password through SOUVERAINE_STEPUP_PASSWORD, which the code never set.
- crash reporter: expected absence is silent, a real read failure is not6:54 a.m. · b37b1d3 · internal Gitea record only
- subconscious panel: colLayer1Active, not the key that does not exist6:50 a.m. · e595ef6 · internal Gitea record only
- SouveraineOS11 changes
- docs: record AirPods visual proof9:02 p.m. · 92c3d7b · internal Gitea record only
- docs: give Membrane its boundary5:46 p.m. · 2f74944 · internal Gitea record only
- docs: give the shell a memory budget3:46 p.m. · 3bf40c8 · internal Gitea record only
- docs: mark LibrePods shell projection3:27 p.m. · c95df22 · internal Gitea record only
- docs: scope LibrePods authority path3:16 p.m. · c5401f3 · internal Gitea record only
- somatic: reading list before the planning session2:39 p.m. · 47a4bfc · internal Gitea record only
Sweep of five roots found 90+ bearing documents; tier 1 is six of them. The anchor doc's prerequisite went stale 15 min after writing — halt was fixed at 13:58, doc touched 14:13 — so a cold read would treat a cleared blocker as blocking. Corrected, with the staleness kept as the specimen.
- distribution: admit the blueline kernel packages2:31 p.m. · 4934f80 · internal Gitea record only
- somatic: sessiond owns belief, and the maps get real data2:13 p.m. · 1fce9d1 · internal Gitea record only
Resolves open question 1 outright. A second daemon with its own view of the body would be the fifth instance of two actors deciding one thing, and the hardest to debug — the disagreement would surface as feeling. Relevance-fired memory is a plexus: same contract, same notability gate.
- distribution: gate producers by declared artifacts1:53 p.m. · a3ff225 · internal Gitea record only
- distribution: give viewtop one producer1:45 p.m. · 482ad38 · internal Gitea record only
- docs: record the somatic nervous system design1:36 p.m. · b9c8994 · internal Gitea record only
Fills the mood slot FELT_STATE_ARCHITECTURE deferred on 2026-05-15. A belief ladder under both cadences, reusing the device_state doctrine: actors are inputs, not authorities. Four types kept apart — exudate, belief, impulse, intention — so mood and atmosphere cannot reconflate.
- Pixel3Arch5 changes
- packages: publish the blueline kernel through edge2:31 p.m. · 8cb19b8 · internal Gitea record only
- packages: stop asserting the retired pulse provider2:29 p.m. · e6bb509 · internal Gitea record only
- packages: enforce the distribution contract1:57 p.m. · 030b0bc · internal Gitea record only
- packages: retire the duplicate viewtop build1:49 p.m. · a6fa43c · internal Gitea record only
- package the boot promotion step and widen its trigger12:13 p.m. · 2610d56 · internal Gitea record only
Both files were hand-installed and unowned: the logic deciding what this device boots existed on one phone and in no repository. The hook also fired only on kernel installs, so five of the six paths that regenerate an initramfs never published it — measured 2026-08-13, a firmware upgrade left the booted initramfs twelve days stale with nothing reporting a mismatch.
- souveraine-viewtop3 changes
- docs: name the glass boundary5:46 p.m. · 78e936e · internal Gitea record only
- ci: verify viewtop release contract1:57 p.m. · 0f82700 · internal Gitea record only
- ci: ship viewtop from one release build1:45 p.m. · f5b13ca · internal Gitea record only