Watch
1
0
Fork
You've already forked souveraine
0
souveraine/surfaces/quickshell/patches
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Fimeg 1951d2b69b shell: document which edits are live and block patch 0008
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.

patches/README: 0008 swaps the message delegate to one that does not carry
the vendor control row (regenerate, speak, re-synthesize, copy, edit, raw,
delete). Applying it would remove all seven.
2026-08-12 13:24:34 -04:00
..
0001-resume-offer.patch shell: patches queue — agent stages, human applies 2026-08-10 23:04:59 -04:00
0002-think-fence-collision.patch patches: queue think-fence collision fix 2026-08-11 08:10:39 -04:00
0003-typed-chat-segments-tool-cards.patch patches: queue typed chat segments 2026-08-11 08:56:08 -04:00
0004-shell-keep-typed-segments-QML-compatible.patch patches: queue QML compatibility fix 2026-08-11 09:37:09 -04:00
0006-stepup-authenticate-through-pam.patch patches: queue 0006, step-up authenticates through PAM 2026-08-12 12:20:11 -04:00
0007-shell-render-context-occupancy-and-stop-reading-hypr.patch patches: queue 0007, render context occupancy and stop reading hyprctl errors as cursor 2026-08-12 12:20:11 -04:00
0008-agent-surface-owned-message-delegate.patch shell: own the agent message delegate and the reasoning card 2026-08-12 13:11:19 -04:00
README.md shell: document which edits are live and block patch 0008 2026-08-12 13:24:34 -04:00

patches/

⚠ 0008 IS BLOCKED — DO NOT APPLY. 0008-agent-surface-owned-message-delegate.patch swaps the message delegate to modules/souveraine/agent/AgentMessage.qml, which does not yet carry the vendor message control row: Regenerate, Speak, Re-synthesize, Copy, Edit, Show-raw, Delete (ii-base/.../aiChat/AiMessage.qml:196-308). Applying it silently removes all seven. Audited 2026-08-12; unblock only once the row is carried over and the affordances are seen to work.

Staged shell changes that are not applied to the tree.

Why this directory exists

~/.config/quickshell/souveraine/*.qml are symlinks into this repo, and quickshell reloads on write. So editing a file here edits the running shell, immediately. When the agent is the one editing, that means an edit can take down the process the agent's own turn is running inside — and a shell that fails to compile does not come back on its own (see 29ec9fe: one bad root type failed the whole qs.services module).

So the rule is: the agent writes patches, the human applies them. The reload happens on a human's beat, when nothing is in flight, with a known-good tree one git checkout away.

Applying

cd ~/Projects/souveraine
git am surfaces/quickshell/patches/0001-....patch
# then reload the shell yourself and watch it come up

Verify before trusting:

cd surfaces/quickshell
./deploy.sh
timeout 40 qs -c souveraine 2>&1 | grep -E "ERROR|Configuration Loaded"

If it does not come up, git reset --hard HEAD~1 and the patch is just a file again.

Discipline

  • One patch, one behaviour. Reviewable in a sitting.
  • The patch's commit message says what it changes and what it deliberately leaves alone.
  • A patch is untested against a running shell unless its notes say otherwise. Say which: verified / reasoned / untested.
  • Applied patches get deleted from this directory in the same commit that applies them. This directory is a queue, not an archive — git keeps history.

In the queue

00010004 are still on disk and still unapplied — resume-offer, think-fence collision, typed chat segments, and the QML-compat follow-up. They carry their own notes in their commit messages; none has been described here. Anything applied or retired is deleted from this directory by design.

Recently closed

  • 0005 — config: never store a null option. Applied and committed as f7e0e51. Null-valued options serialised into config.json and segfaulted JsonAdapter::deserializeRec on the next launch — the session that wrote the option ran fine, every launch after it died ~10 s in. Replaced with tristate strings (auto/on/off), booleans still honoured. Verified live: shell loads clean, no nulls written back.
  • 0005 (earlier) — mount the agent island. Retired by 013a06a; the island left the bar to sit beside chat (2179b62). The number was reused.