August 12, 2026
34 recorded commits · 3 named repos · 1 public Forgejo link · 11 private repos
- 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 kind9: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 archivist8: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 cgroup8:12 p.m. · 57e53ad · internal Gitea record only
- shell: apply 0007, 0010, 0011 — context occupancy, halt register, /new7: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 /new7:37 p.m. · 0733bfa · internal Gitea record only
- patches: queue 0010 — halt rendered in her own register6:55 p.m. · e50ddee · internal Gitea record only
- halt: the migraine reaches the primary, not just the surface6: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 arm6: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 f2661365:39 p.m. · b9f404c · internal Gitea record only
- claude: read the credential file instead of stat-comparing it4: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 spent4: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 copy4: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, 00072: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 did2: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 fixes2: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/00042: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 00081: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 delegate1: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 00081: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 card1: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 card12: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 cursor12: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 PAM12: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 fields12: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.so10: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 fallback10: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 failure10: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 so9:24 a.m. · d02df0c · internal Gitea record only
- patches: retire the stale 0005 entry, record what closed9:23 a.m. · b5671b0 · internal Gitea record only
- config: never store a null option9: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 r4678:14 p.m. · e91149f · internal Gitea record only
- task 72: steps 1 and 2 committed, source only; evidence labelled per step1:11 p.m. · 7d1df02 · internal Gitea record only
- docs: the second website tree held a thousand lines nobody had pushed10:04 a.m. · 5bd12a7 · internal Gitea record only
- Redflag 1 change
- 8:36 p.m. · 9f47d78 · public Forgejo copy
Server gate functions only recognized 'pypi', while the agent reports 'pip'. This made NeedsCapabilityGate('pip') return false, silently routing pip installs through the legacy un-gated path.
- 8:36 p.m. · 9f47d78 · public Forgejo copy