Casey Tunturi

August 13, 2026

August 13, 2026

44 recorded commits · 4 named repos · 9 private repos

Work threads
work8docs7packages4shell3ci3distribution3somatic2provider-balance2
  • 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 it
      10: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 round
      9: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 card
      9:02 p.m. · bfd48fc · internal Gitea record only
    • ci: retry system deps through a resolver blip
      8: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 claims
      8: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 projection
      8: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 Hyprland
      5:46 p.m. · 86234b0 · internal Gitea record only
    • replay tool blocks as prose in cross-turn history
      4: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 card
      3:27 p.m. · 52640cd · internal Gitea record only
    • read: attach the image, not a stub shaped like success
      3: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 upward
      2: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 it
      2: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 person
      1: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 it
      12: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 screens
      11: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 restarting
      10: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 roles
      10: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 tests
      10: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 dies
      9: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 overflow
      9: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 pressure
      9: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 day
      8: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 branch
      8: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 not
      6:54 a.m. · b37b1d3 · internal Gitea record only
    • subconscious panel: colLayer1Active, not the key that does not exist
      6:50 a.m. · e595ef6 · internal Gitea record only
  • SouveraineOS11 changes
    • docs: record AirPods visual proof
      9:02 p.m. · 92c3d7b · internal Gitea record only
    • docs: give Membrane its boundary
      5:46 p.m. · 2f74944 · internal Gitea record only
    • docs: give the shell a memory budget
      3:46 p.m. · 3bf40c8 · internal Gitea record only
    • docs: mark LibrePods shell projection
      3:27 p.m. · c95df22 · internal Gitea record only
    • docs: scope LibrePods authority path
      3:16 p.m. · c5401f3 · internal Gitea record only
    • somatic: reading list before the planning session
      2: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 packages
      2:31 p.m. · 4934f80 · internal Gitea record only
    • somatic: sessiond owns belief, and the maps get real data
      2: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 artifacts
      1:53 p.m. · a3ff225 · internal Gitea record only
    • distribution: give viewtop one producer
      1:45 p.m. · 482ad38 · internal Gitea record only
    • docs: record the somatic nervous system design
      1: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 edge
      2:31 p.m. · 8cb19b8 · internal Gitea record only
    • packages: stop asserting the retired pulse provider
      2:29 p.m. · e6bb509 · internal Gitea record only
    • packages: enforce the distribution contract
      1:57 p.m. · 030b0bc · internal Gitea record only
    • packages: retire the duplicate viewtop build
      1:49 p.m. · a6fa43c · internal Gitea record only
    • package the boot promotion step and widen its trigger
      12: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 boundary
      5:46 p.m. · 78e936e · internal Gitea record only
    • ci: verify viewtop release contract
      1:57 p.m. · 0f82700 · internal Gitea record only
    • ci: ship viewtop from one release build
      1:45 p.m. · f5b13ca · internal Gitea record only