Casey Tunturi

August 12, 2026

August 12, 2026

34 recorded commits · 3 named repos · 1 public Forgejo link · 11 private repos

Work threads
patches11shell8claude4task 722packaging2pressurefix(BUG-001)halt
  • Private work 11 private repos

    Activity was recorded across 11 private repos. Names, subjects, counts, and links stay private.

  • souveraine30 changes
    • pressure: calculate_pressure counts every block kind
      9:11 p.m. · 764a4b8 · internal Gitea record only

      Was Text-only, blind to tool_use/tool_result/reasoning — ~74% of a real thread. This is the number behind the 80/90/95 tier warnings and the archivist's emergency trigger, so both fired late or not at all.

    • shell: context pill tooltip states the real tiers, not the archivist
      8:30 p.m. · 5251572 · internal Gitea record only

      The tooltip claimed 'Archivist begins compacting around 70%'. The archivist does not compact. It reads journal/ and writes system/synthesized/ - a different substrate from the conversation entirely (core/archivist/mod.rs:5).

    • patches: retire the queue discipline; the shell was never in the agent's cgroup
      8:12 p.m. · 57e53ad · internal Gitea record only
    • shell: apply 0007, 0010, 0011 — context occupancy, halt register, /new
      7:50 p.m. · 6f12fce · internal Gitea record only

      0007 was fixing a live error: the server has carried named ContextPressure fields since r463, so event.tokens was undefined and the pill assignment failed on every turn. Applied and verified against the running shell.

    • patches: queue 0011 — the reset command is /new
      7:37 p.m. · 0733bfa · internal Gitea record only
    • patches: queue 0010 — halt rendered in her own register
      6:55 p.m. · e50ddee · internal Gitea record only
    • halt: the migraine reaches the primary, not just the surface
      6:50 p.m. · 29f8475 · internal Gitea record only

      migraine_text built a felt sentence in her own register, pushed it onto the Bifrost message vec, and then `break` exited the loop — no further completion call, vec dropped. Correct wording, correct voice, delivered nowhere.

    • context accounting: one exhaustive counter, no wildcard arm
      6:50 p.m. · 7530d6d · internal Gitea record only

      Three counters measured the same conversation and disagreed 5.6x: the /tokens endpoint said 315,487, the throttle ~200,000, and the compaction engine 56,361. Same TokenCounter, three different notions of what a block weighs, no labels anywhere.

    • patches: 0007 unblocked — the running server carries f266136
      5:39 p.m. · b9f404c · internal Gitea record only
    • claude: read the credential file instead of stat-comparing it
      4:58 p.m. · 715080b · internal Gitea record only

      Tokens are fixed-length, so a rotation changes neither size nor same-tick mtime — the stamp missed real swaps and flaked CI.

    • claude: hold every login at once, move when a window is spent
      4:45 p.m. · 16587b7 · internal Gitea record only

      `credential_files` holds them all; a 429 with retry-after over a minute takes the next login and retries at once. Sticky — a swap abandons the cached prefix, so short bursts are waited out where the cache lives.

    • claude: the credential file is the authority, not our startup copy
      4:15 p.m. · f4837c5 · internal Gitea record only

      Logging out and into a second account rewrites the file with a token that is neither expired nor spent, so no refresh fires and nothing re-reads the disk — the provider keeps answering as the account that was left. Measured 2026-08-12: server up 10:55, file rewritten 15:20, 429s from 15:22 while the on-disk token returned 200 to the same request.

    • patches: 0008/0009 landed; queue is 0001, 0006, 0007
      2:54 p.m. · b56635e · internal Gitea record only

      Verified against a running shell rather than a clean load, which immediately found two faults every prior gate had called clean. Both controls dropped from 0008 recorded as decisions so a later session does not restore them.

    • shell: two faults the load found that no gate did
      2:51 p.m. · 44acb11 · internal Gitea record only

      Both were live in the running shell and invisible to every check that ran before it. Found by reading the shell's log after Casey applied.

    • shell: land the owned message delegate and the speech fixes
      2:50 p.m. · 93fe30a · internal Gitea record only

      Applied 0009 then 0008 (0008's re-synthesize control calls a function 0009 adds). Casey applied and reloaded; verified against a running shell rather than from a clean load.

    • patches: correct the queue; retire 0002 as obsolete, clear landed 0003/0004
      2:12 p.m. · cb3785b · internal Gitea record only

      The queue section claimed 0001-0004 were all unapplied. Verified with git apply --check in both directions: 0003 landed as 8c434df, 0004 as 23cebc5, and 0002 can no longer apply at all.

    • patches: queue 0009 speech stop/resynthesize; unblock 0008
      1:55 p.m. · ba13d56 · internal Gitea record only

      0008 was blocked because the owned delegate carried none of the vendor's seven message controls. df11bba carries five and drops two deliberately; the header now records which and why rather than only lifting the warning.

    • shell: carry the message control row into the owned delegate
      1:50 p.m. · df11bba · internal Gitea record only

      Vendor AiMessage exposed seven controls; the owned delegate had none, which made patch 0008 a parity regression rather than a swap. Five are carried, two are deliberately dropped:

    • shell: document which edits are live and block patch 0008
      1:24 p.m. · 1951d2b · internal Gitea record only

      deploy.sh: name the hazard the composer already implements — a new file plus a manifest line is inert until the next deploy, while editing a file already in the manifest is live in the running shell immediately. Registration is the dangerous act, not creation.

    • shell: own the agent message delegate and the reasoning card
      1:11 p.m. · 6d0f891 · internal Gitea record only

      TASK-72 step 2. AgentMessage consumes the typed segment list and dispatches to owned primitives; ThinkingCard draws reasoning as a segment kind rather than as <think> punctuation inside a flattened string, which removes the think-fence collision class by construction.

    • shell: owned agent surface — tool vocabulary and card
      12:55 p.m. · 3def292 · internal Gitea record only

      First step of TASK-72's owned destination. modules/souveraine/agent/ is original Souveraine code; no further agent-surface work lands in ii-base.

    • patches: queue 0007, render context occupancy and stop reading hyprctl errors as cursor
      12:20 p.m. · 5a20307 · internal Gitea record only

      Requires f266136 in the running server; without it the pill honestly shows an em dash rather than a wrong number. Unapplied, unloaded.

    • patches: queue 0006, step-up authenticates through PAM
      12:20 p.m. · e784fe4 · internal Gitea record only

      Authored in a parallel session (Rook, Codex side) on 2026-08-12; committed here because untracked is the fragile state, not because authorship is mine. Finding stands on its own: StepUpAuth called souveraine-pam-auth, a binary never written, and fell back to pkcheck against an action never shipped, so every grant request was silently denied. Unapplied, unloaded.

    • context pressure carries usage and ceiling as named fields
      12:11 p.m. · f266136 · internal Gitea record only

      BackendEvent::ContextPressure was (f32, usize) whose second element was the context limit. A positional tuple crossing a module boundary made every consumer guess: the TUI guessed limit and was right, the HTTP layer named it tokens and was wrong. So every non-TUI surface rendered the ceiling as the usage — a constant 250000 that looked like a measurement. Nothing failed and nothing logged.

    • packaging: the FPC pam module is pam_souveraine_fpc.so
      10:50 a.m. · 5cc7a90 · internal Gitea record only

      blueline-fingerprintd installs /usr/lib/security/pam_souveraine_fpc.so (PKGBUILD:48). cc541d1 named pam_fpc_polkit.so, which exists nowhere.

    • packaging: ship the step-up PAM stack and polkit fallback
      10:39 a.m. · cc541d1 · internal Gitea record only

      SESSION-AUTHORITY-DOCTRINE §3 names /etc/pam.d/souveraine-stepup by path. Root-owned config can only arrive by package: rootfs-overlay/ reaches a device on flash and the phone does not flash.

    • claude: 529 is Anthropic overload, not a permanent failure
      10:39 a.m. · acb2b6c · internal Gitea record only

      529 is Anthropic's own overload signal on this wire, so classify_status treated it as Permanent and bailed the whole request with zero retries. The bail string reaches the surface, where it reads as an auth failure.

    • patches: the queue is 0001-0004, say so
      9:24 a.m. · d02df0c · internal Gitea record only
    • patches: retire the stale 0005 entry, record what closed
      9:23 a.m. · b5671b0 · internal Gitea record only
    • config: never store a null option
      9:23 a.m. · f7e0e51 · internal Gitea record only

      Null-valued options serialised into config.json and segfaulted JsonAdapter on the next launch, killing the shell after load. Tristate strings (auto/on/off) with boolean fallback.

  • SouveraineOS3 changes
    • task 72: conversations selector; used-context dependency resolved by r467
      8:14 p.m. · e91149f · internal Gitea record only
    • task 72: steps 1 and 2 committed, source only; evidence labelled per step
      1:11 p.m. · 7d1df02 · internal Gitea record only
    • docs: the second website tree held a thousand lines nobody had pushed
      10:04 a.m. · 5bd12a7 · internal Gitea record only
  • Redflag 1 change