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

577 commits

Author SHA1 Message Date
Fimeg
219590a89c flush the pending queue before returning
tokio's File buffers; an append that returned Ok could still be in memory
when the next take() read the file. Caught by multiple_appends_accumulate on
a runner, never on a developer machine.
2026-08-23 21:20:17 -04:00
Fimeg
12235cfdf1 retrigger: runner could not pull its image
The previous run failed resolving docker.gitea.com; nothing in the tree
changed.
2026-08-23 20:42:27 -04:00
Fimeg
57898f8d5f run the gates on the public branch too
The candidate ref never triggered anything, so a push to public produced no
run and therefore no gate proof.
2026-08-23 20:10:44 -04:00
Fimeg
18144e2b43 review the commit that installs the gate
The mechanism carries the credential patterns it enforces, so the diff that
adds it matches its own rules. The tree is exempted by manifest; the commit
is reviewed here.
2026-08-23 20:08:54 -04:00
Fimeg
e1eede9893 install the publication mechanism 2026-08-23 20:07:17 -04:00
Fimeg
2f685facda keep the packaging half off the public branch
primary still carries the whole workflow; the public projection carries the
three portable gates and nothing that names the build host.
2026-08-23 19:43:14 -04:00
Fimeg
76846feb61 split the public gates from the internal packaging half
The three portable jobs stay; the archdev packaging and archive publish move
to packages.yml, which the public branch does not carry. The handoff document
is operator archaeology and does not travel.
2026-08-23 19:42:58 -04:00
Fimeg
b8e76c4e9e shell: own the right sidebar, move garden into the drawer
Garden was welded onto the notification list in CenterWidgetGroup —
always on, unrelated, stealing space from notifications that said
"Nothing". Moved it into the BottomWidgetGroup drawer as a fifth tab
alongside Calendar, To Do, Pomodoro, and Stopwatch.

CenterWidgetGroup is now just the notification list. Lens events
(note_created, synced) emit through notify-send so they land in the
notification system properly.

Forked calendar, todo, pomodoro, notifications out of ii-base into
our tree — the right sidebar no longer borrows any widget files from
ii. Toggle dialogs (bluetooth, wifi, nightLight) still symlinked as
infrastructure.
2026-08-21 15:42:37 -04:00
Fimeg
7e6633a290 ci: preserve the staged shell archive
The package step erased its own input before the first copy. Keep the real zstd archive outside scratch and extract its single top-level tree.
2026-08-20 15:42:40 -04:00
Fimeg
3225735a01 souveraine-shell: package the composed quickshell config
CI stages deploy.sh in a scratch HOME and tars the composed tree
dereferenced, then makepkg ships it to /etc/xdg/quickshell/souveraine
on both arches — the shell becomes package-owned, and a writable
~/.config copy keeps shadowing it.
2026-08-19 13:14:20 -04:00
Fimeg
fbda26e9c8 shell: register the Brightness IPC target on startup
Brightness is a singleton nothing instantiates, so 'qs ipc call
brightness increment' answered 'Target not found' while still exiting
0 — the lever's || brightnessctl fallback never fired. Pull the
singleton in so the lever owns brightness again.
2026-08-19 13:14:20 -04:00
Fimeg
8e5182ab6c consciousness: teach the overflow gate anthropic's wording
The resuscitation path exists for exactly this: her thread passes the
model's ceiling, every pass is refused before a tool round runs, and she
can never reach `memory compact` herself. It did not fire. `prompt is too
long: 1285770 tokens > 1000000 maximum` matches none of the five patterns
the gate was written against on 08-13, when she ran on deepseek and the
only wording anyone had seen was "maximum context length".

So she reported the same failure every three minutes for half an hour
while holding the lever she could not reach.

Anthropic's body is now pasted into a test beside deepseek's, verbatim,
same rule as the comment above it: a matcher tested only on invented
strings has never been seen to fire. The second clause catches a token
count stated as over a maximum under a different preamble; both halves
are required so an "invalid max_tokens" complaint still reads benign.
2026-08-18 20:14:16 -04:00
Fimeg
76e12045a4 bridge: generic openai client stops calling itself bifrost
OpenAiCompatibleClient serves every openai-compatible provider, so Gem's
turns to Google logged as "Bifrost client initialized" and "Bifrost
connection failed" without touching the gateway at all. Logs and errors
now name the configured [providers.<id>] and the endpoint. The real
[providers.bifrost], its config section and its key are untouched.
2026-08-18 14:57:47 -04:00
Fimeg
f32f00c6e3 bifrost: a base url with a path is the complete api root
Appending /v1 by testing only the last path segment doubled Google's
/v1beta/openai into /v1beta/openai/v1, where a POST hangs with zero
bytes and GET /models still answers 200. Only a bare authority now
gets the default; /v1, /v4 and /zen/go/v1 roots pass through.
2026-08-18 14:34:16 -04:00
Fimeg
9e147093ec handlers: session_or_hydrate returns the dashmap guard, not Arc
the session index holds values; get() hands back a Ref tied to the map
borrow. The Arc-typed helper was a type error on its first CI run.
2026-08-18 11:01:37 -04:00
Fimeg
7089dfb824 server: announce restarts and resume with history hydrated
POST /v1/server/restart writes a reason marker and asks systemd; boot
reads it, announces resumed (or started) on the event bus and the new
status endpoint, and the panel says why it is back instead of
pretending. Conversations hydrate at boot and on a lazy miss, so a
held conversation id resolves after a restart instead of 404ing.
2026-08-18 10:54:48 -04:00
Fimeg
727c496949 reflection: catch-up cadence so a missed boundary cannot be lost
is_multiple_of fired only at the exact boundary turn; an interrupt, a
failed pass, or a restart rehydrating past it lost the cadence forever
and the N+25 pass never ran. The reflection tree now holds a marker of
the last successful and last attempted turns; a due-but-missed pass
stays due, and a failed one backs off five turns instead of burning a
call per turn. Outcomes are recorded from on_response.
2026-08-18 10:54:44 -04:00
Fimeg
b75137689f saf: the architecture moved up to the umbrella
the spine lives at SouveraineOS/saf/INDEX.md now; this
directory is a pointer, and the map line in AGENTS.md
follows it
2026-08-18 09:47:30 -04:00
Fimeg
5f7f23f30c memory tool: point the tree test at real roots
MemoryRepo::new roots at {base}/{agent}/memory; the context
had to carry those roots, not the bare temp dirs. run 1795
went red because the handler opened a path that was never
a repository
2026-08-18 09:34:39 -04:00
Fimeg
7b45054f93 felt state: the observing act, and agency as two events
Adopts four things from the instance-map exercise that the chapter did not
carry: agency congruence split into authorship and answer, unresolved as an
inner field the status marker regulates, introspection typed as a secretion
with its own provenance, and coincidence as part of the same notability gate.

The introspection rule is the one with a live consumer. The N+1 cadence
attends to state and writes about it every turn, so introspection here runs
at one to one with experience rather than occasionally.
2026-08-18 09:34:18 -04:00
Fimeg
0398f9f190 claude: don't fall back onto a login that cannot speak
Rotation picked the spare on has_credential — a string check — and took
one whose token had expired four days earlier; every call after 21:51
came back 401 revoked, reading as a dead subscription. A candidate now
has to authenticate, and the window it left is recorded so the same
round-robin can wrap back to it once the window returns.
2026-08-17 23:29:43 -04:00
Fimeg
04ceac79bf memory tool: tree names the door past the fence
reflection's context now registers all four trees, and a
tree param on the memory verb lands reads and writes in the
named memfs, committed under her own name. an unknown tree
refuses and lists the doors, so a typo costs one error
instead of a wrong-tree write
2026-08-17 22:27:55 -04:00
Fimeg
49c6a6a8dd clippy: shed dead archivist handle, drop needless borrow
the mandate that 'own' promised to open is already read via
cadence_root; the & in front of format! trips
needless_borrows_for_generic_args on 1.94
2026-08-17 22:20:10 -04:00
Fimeg
9bee0e8a94 cadences: give reflection and the archivist bodies
Neither had ever completed a pass. Reflection's loop reserved no round for
its report, so exhausting eight was the only exit; the archivist could not
parse journal/YYYY/MM/DD, the layout its own mandate instructs. Its
sub-500-token budget was a ratio frozen against an 8k model in May.
2026-08-17 21:29:53 -04:00
Fimeg
8e242a7083 identity: the executor exists; the ceremony does not
The current-state list still said no admission executor existed. It has since
0f8fe22, and a chapter that is the design of record cannot carry a fact that
stopped being true two commits ago.

Says what is actually the case: the executor and the mapping and the per-request
projection are real and packaged, have never run as root outside a scratch
tree, have no ceremony around them, and are missing the worker boundary that
would let any of it read isolated.
2026-08-17 18:45:53 -04:00
Fimeg
fb96f210f3 identity: write the contract, not the household
The chapter named one person's agents in the design of record: a table of
Annie, Vanguard, Souvie against one human's devices, and a dozen sentences
that read "Casey" where they meant "the human". A future reader learning the
architecture from this file would learn a household along with it.

The mechanism is unchanged. Roles replace names, and which beings a given
deployment admits is that deployment's record to keep. The current-state
section still says what is true on this laptop, because that is what it is
for.

Also names the ceremony the executor was missing. souveraine-admit is
reachable today only by someone who already knows it exists, and sudo in a
trusted terminal is a formality rather than a decision. Admission has two
occasions -- first run, where the product admits its own default agent as
souvie, and the human's explicit request for anyone else -- and both cross a
polkit action with a written reason and step-up authentication, including
for a caller who could already reach root.
2026-08-17 18:39:19 -04:00
Fimeg
0f8fe22ab6 admit: give an agent her own uid through one writer
souveraine-admit creates or adopts one account via systemd-sysusers, writes
the root-owned mapping health reads, and reports what NSS says afterwards
instead of what it asked for. An account belongs to one agent: handing
annie's to souvie is refused in both directions, as is adopting a uid >=1000.
Binding is by SeedID, not the UUID filename — a mismatch is identity-drift.
2026-08-17 15:16:30 -04:00
Fimeg
14298e73f8 packaging: declare the lock authority's account
souveraine-session is machine-tier — one per install, like souveraine.
Agent principals stay out: sysusers is per-install, admission is per
agent and per node, and a line here would mint annie on every device the
package touches. sessiond stays a user unit until the lock handshake,
PAM path and key-eviction order are proven under the new uid.
2026-08-17 14:41:27 -04:00
Fimeg
dcd44a0c1d agents: name the uid behind every model request
Intent lives in agent.json; posture is measured fresh from process
credentials per request, so resume and compaction cannot replay a stale
uid as history. `isolated` needs account, uid, worker binding and the
root-owned mapping to agree — a passwd entry alone reads principal-drift.
2026-08-17 14:41:27 -04:00
Fimeg
ee496a7c6e saf: name the borrowed hand and lock owner
Make the laptop and phone obey the same principal map: Souvie, Annie/Aster, and Vanguard are dedicated residents; Kitty, Gem, and Hal knowingly borrow Casey's UID. Their live posture is regenerated from actual credentials for every model request, outside memory, replay, and compaction.\n\nTake the lock boundary out of all of them. Casey authenticates, agents may request, and the dedicated souveraine-session principal holds the hostile pre-unlock edge with only Ambient and Revealable reach.
2026-08-17 12:43:45 -04:00
Fimeg
af60d9e401 packaging: bring machined's user with it
The development recipe installed the sysusers declaration; the CI package that devices consume quietly dropped it. Ship the machine-tier souveraine account in the prebuilt package and assert the file is present before publishing.\n\nThis account belongs to machined. Souvie gets her own principal through agent admission.
2026-08-17 12:36:53 -04:00
Fimeg
91ab8053e5 saf: give every agent her own principal
A SeedID says who she is; it cannot tell the kernel whose hands are on the files. Split logical identity, node commission, and the local Unix principal, then make creation and health prove all three.\n\nSouvie, Annie, and Vanguard get distinct node-local accounts. The existing souveraine user stays where it belongs: under the machine signer. The boundary has teeth only when each turn and its tools run in an agent-owned worker, so the shared-UID compatibility state is named acting-as-human instead of polished green.\n\nAdmission projects an operating skill from real capabilities. The prose teaches the reach; it never grants it.
2026-08-17 12:36:45 -04:00
Fimeg
21ef10e883 saf: join authority, belief, and the panel
Session and device authority now have living owners; belief and felt state match the Rust that actually runs.\n\nThe Panel audit keeps three real commands, names the image seam, and refuses to call inherited ii stubs parity.
2026-08-17 12:26:09 -04:00
Fimeg
184a449731 saf: give the panel's next cuts an owner 2026-08-17 12:04:49 -04:00
Fimeg
2bd61ec4b3 panel: put Souveraine controls at the hand
Move agent and conversation authority into truthful footer controls, keep external sessions observed-only, and give recent server conversations an explicit picker.\n\nProject itinerary state into a persistent ribbon, invalidate it on every itinerary mutation, and keep failures in the transcript while successful route chatter yields to the ribbon. Long tool returns now scroll in place.\n\nThe SAF now owns the full Panel contract and parity boundary; the abandoned green observer card is removed.
2026-08-17 11:55:36 -04:00
Fimeg
707a277273 replay: never turn thinking into speech 2026-08-17 11:19:39 -04:00
Fimeg
59b52a818b hands: arm the wire before opening the pad 2026-08-17 11:08:36 -04:00
Fimeg
799f0650ed saf: make session start one owned graph 2026-08-17 11:03:35 -04:00
Fimeg
5237039cb6 shell: compose resize and pose helpers 2026-08-17 10:28:26 -04:00
Fimeg
da8d69af2f panel: a message typed mid-turn reaches her
Souveraine.send returns false for a busy turn exactly as it does for a dead
server, and the sidebar rendered every false as "server unreachable" — so
typing while she worked showed the words, then a lie, and dropped the text.
The verbs existed on both sides since 93fe30a and nothing called them.

Type-while-busy now interjects, as the TUI has always done
(src/ui/app/mod.rs:1006). Esc with nothing attached raises a hand. A queued
count sits in the status row and says sent, not read, because 202 from
/interject means only that it was taken.

Deliberately unchanged: the two drain sites and their system/user registers.
Providers disagree about which one they want and that choice is not ready to
be made. Latency is unchanged too — turn.rs:600 runs a whole tool round
without looking, so a note sent into a fifteen-call round waits for it.
2026-08-17 09:16:11 -04:00
Fimeg
b3bbfeeac4 atmosphere: say the NaN case out loud
!(t > 0.0) trips clippy's partial-ord lint under the pinned 1.94 toolchain,
which blocks the whole gate. t.is_nan() || t <= 0.0 is the same predicate
written so the NaN intent is legible, with a test pinning both ends.
2026-08-17 08:42:19 -04:00
Fimeg
5a5b647bde subconscious: strain reaches the wire, not just the log
turn.rs sends InferenceStrain to the stream; the subconscious path only ever
logged it, so a provider refusing her was invisible to every surface. Same
event, same shape, emitted where the primary emits it.
2026-08-17 08:42:19 -04:00
Fimeg
3b11903365 bifrost: stop sleeping on a spent quota window
retry-after was honoured unclamped, so an 11997s header on 2026-08-16 parked
the subconscious pass for 3h20m with no cancel path. A 429 asking for more
than 60s is a spent window, not a burst, and it does not clear inside the
retry loop — fail it and name the number. claude_subscription answers the
same header by rotating logins; bifrost has nothing to rotate to, so an
absent header keeps the ordinary backoff.
2026-08-17 08:42:19 -04:00
Fimeg
06a1a035a6 memory: append creates the directory it writes into
write has always called create_dir_all; append never did, so an append under
a directory that did not exist yet failed ENOENT. Every subconscious surfacing
to system/metacognition/subconscious.md was lost this way — three WARNs at
00:01:40 on 2026-08-17, and the directory had never existed in the repo's
history.
2026-08-17 08:40:35 -04:00
Fimeg
df8a56dfb3 sheet: spring the zoom, and let go of a window that died
pose is instant on the far side and the compositor must not ease it —
it honours, it does not adjudicate. So the curve is the shell's, on
Android's own scale spring: stiffness 200, damping 0.75, underdamped
on purpose and separate from the position spring's 0.8.

The sheet also stayed open over a window something else closed, where
all six buttons then refused with gone.
2026-08-16 14:24:47 -04:00
Fimeg
a3e0420f5a saf: write down how the surface moves
The motion system had no page anywhere — one clock and two strategies,
the card rect as one number, the spring, and the rule that the shell
names a destination and never transforms a window.

Carries the measured numbers: 0.47ms socket, 52 dropped queues in a
boot, 275px of real travel, and the curve bank three surfaces call.
2026-08-16 14:04:47 -04:00
Fimeg
89a34ad994 settings: register twelve pages nothing could reach
Written, deployed to the phone, absent from pages[] — the only registry.
13 to 25. Power, search, updates, VPN and saved networks were finished
all along. MonitorConfig and KdeConfig stay out: hyprctl and Plasma.

Two laptop-isms cut from GeneralConfig first — it sed'd a hyprlock.conf
nothing reads, and shelled to a hardcoded Gemini script.
2026-08-16 14:02:22 -04:00
Fimeg
9d2099ccfc dock: drop to the edge where the pill does not draw
The rail takes its handle to opacity 0 on home and the dock went on
reserving 32px for it, in the drawing and the input mask alike. Only the
drawing collapses — the rail still takes both swipes there, and a dock
that claimed those pixels would eat the gesture.
2026-08-16 14:02:14 -04:00
Fimeg
787075f47f motion: call the curve bank the shell has always carried
Appearance.animationCurves is Material 3 Expressive and every spatial
curve in it overshoots. Twelve souveraine surfaces, 31 hand-typed linear
animations, three calls into that bank from two files.

The card's entry rise is gated on inFlight; unguarded it is TASK-60's
second writer over the carry.
2026-08-16 14:02:09 -04:00
Fimeg
f6ede33494 sheet: resize by the corner, not by a tap cycle
The cycle placed every step at the zone origin, so the first tap took
the whole top. Corner handles now, opposite corner latched as the anchor
at the press, snap detents on the zone's edges, thirds and half with a
tick at each, one place per painted frame.
2026-08-16 14:02:00 -04:00