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
2026-08-11 18:40:35 -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
README.md patches: queue 0005, mount the agent island 2026-08-11 14:22:42 -04:00

patches/

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

0005 — mount the agent island (TASK-69 + TASK-70)

The four activating edits for the agent-session work. Everything the patch switches on already landed inert in 47ce2d1 / b211842: scripts/agent/agent-sessions.sh, services/AgentSessions.qml, modules/souveraine/island/.

Touches: services/qmldir (register the singleton), modules/common/Config.qml (bar.agentSessions block), modules/ii/bar/UtilButtons.qml (mount), deploy.sh (manifest).

Mounted in UtilButtons rather than BarContent on purpose: UtilButtons is already a Souveraine-owned override, so the island reaches both device bars without forking the 13.8K BarContent twice (ii-base and ii-phone) and carrying that divergence against the pin. The island narrows itself — dot on a cramped bar, pill where there is room — from the same threshold BarContent uses.

Status: verified / reasoned / untested — in that order, per piece.

  • Verified: the collector. Run by hand against real data — 0.47 s, valid JSON, exit 0, correctly identifies this very conversation as a live session. Two bugs found and fixed by running it rather than reading it: jq's fromdateiso8601 rejects the fractional seconds all three providers emit (every session read "idle"), and the Codex id was the date prefix, not the uuid.
  • Verified: syntax. qmllint exit 0 on all four QML files — using /usr/lib/qt6/bin/qmllint, not /usr/bin/qmllint, which is a Qt5 binary that prints nothing and cannot be trusted as a gate. Proven by feeding it a deliberately broken file first.
  • Reasoned: the mount point, the device-form split, the degradation policy.
  • Untested: nothing has rendered. No shell has loaded this. qmllint cannot resolve qs.* imports from the repo, so property-level mistakes (a wrong Appearance key, a missing StyledToolTip property) will only appear at load.

Lint the composed tree, not the repo, for a stronger check: ~/.config/quickshell/souveraine/ after deploy.sh.

If it does not come up: git reset --hard HEAD~1. The three inert commits are safe to keep either way — nothing imports them until this patch lands.