Watch
1
0
Fork
You've already forked souveraine
0

patches: the queue is empty, and the README said otherwise for a day

0007 and 0010 landed in 6f12fce and their files were removed in that same
commit, but this list went on describing them as pending. 0001 and 0006 have
now landed too. A queue file is a claim with a shelf life; so is the README
that indexes it.

The durable notes from the removed entries are kept under Recently closed --
the halt wording is coupled to migraine_text() in src/server/turn.rs, and the
context pill and the tokens endpoint measure different things and must not be
shipped side by side unlabelled.
This commit is contained in:
Fimeg 2026-08-13 08:33:16 -04:00
commit aa6cd4e219

View file

@ -121,71 +121,66 @@ again.
## In the queue
**Empty as of 2026-08-13.** 0001 and 0006 landed (`ec87e6a`, `6edebae`); 0007
and 0010 landed earlier in `6f12fce` and their files were removed then, but
this list was not updated — it went on describing them as pending for a day.
A queue file is a claim with a shelf life, and so is a queue *README*.
Status below is from `git apply --check` in **both directions**, not from
memory: forward-applies means pending, reverse-applies means already landed.
Run it before trusting this list — a queue file is a claim with a shelf life.
Run it before trusting this list.
for p in surfaces/quickshell/patches/000*.patch; do
git apply --check "$p" 2>/dev/null && echo "$p PENDING"
git apply --check --reverse "$p" 2>/dev/null && echo "$p LANDED"
done
**Apply order.** 0007 last, after the server upgrade. 0001 and 0006 are
independent lanes and can go whenever.
With the queue empty, `~/Documents/casey.sh` still has a job: it runs
verify-only, restarting the shell and proving HEAD loads. It used to name
0008/0009 explicitly and died on "missing 0008" once they landed; the queue is
its input now.
- **0001 — resume offer.** Pending since 2026-08-10. The agent-established hook
*offers* the latest thread instead of silently attaching it; default becomes
start-fresh, `ai.autoResume: true` restores the old behaviour. Explicit
resume paths are unchanged. The second half is undrawn — `resumeOffered`
fires and nothing renders it, so with no UI the behaviour is still correct
(doing nothing starts fresh) but the affordance to continue is missing.
- **0006 — step-up authenticates through PAM.** Rook's, not mine.
`StepUpAuth` called `souveraine-pam-auth` — a binary that was never written —
and fell back to `pkcheck` against an action that was never shipped, so
**every step-up grant request was silently denied**. Runs a real `PamContext`
against `souveraine-stepup`, which `cc541d1` now ships. Note
`fpc-polkit-pam.c:86` refuses every service except `polkit-1`, so step-up is
password rather than finger until that check widens — one line, and a
security decision that is Casey's.
- **0010 — render a halt in her own register, not the tool's name.**
The Panel printed `**Halt** (advisory) — <reason>`: the tool's name, its enum
value, and a sentence written for the agent's body, all on the human's screen.
The TUI has always rendered it as substrate voice (`⟡ a pressure behind my
eyes — …`); this brings the Panel into line. Wording deliberately mirrors
`migraine_text()` in `src/server/turn.rs`, which `29f8475` now commits into
her history — so what the human reads and what she carries into the next turn
are the same sentence. **If one changes, the other must.**
Independent of 0007/0008/0009; apply any time. Needs no server version.
- **0007 — render context occupancy; stop reading hyprctl errors as cursor.**
**Unblocked 2026-08-12 17:30.** It needed `f266136` *running*, not merely
installed. The box now runs `souveraine 0.1.r463.g715080bbfe45-1`, started
17:26:45 against a binary installed 17:22, and `git merge-base --is-ancestor
f266136 715080b` passes — so the named-field fix is in the live server.
Re-verify with that one command before applying; installed is not running.
(Earlier state, kept because the *shape* recurs: the box ran r442 = `fb5e9bb`,
which predates `f266136`, and applying early makes the pill honestly show `—`
— indistinguishable from the patch failing.)
The bug it fixes: `ContextPressure` crossed a module boundary as a
**positional tuple**, so every consumer guessed what the second element was.
The TUI guessed `limit` and was right; the HTTP layer named it `tokens` and
was wrong, so the Panel printed the *ceiling* (250000) as the *usage*.
Also: `command -v hyprctl` succeeds on the phone (installed as a Lua-eval
shim), so it runs under viewtop, fails, and its error text is captured **as
the cursor position** — the probe tested whether the tool was installed, not
whether it answered.
**Before building the click-through breakdown on top of this**, read
`tasks/context-accounting-two-counters-2026-08-12.md` in memory. The pill
renders the *payload* (what is in the model's window); the
`/v1/conversations/:id/tokens` endpoint renders the *archive* (what the
transcript weighs). On this conversation they differ by ~3x — 80% against a
clamped 100%. Ship them side by side unlabelled and the Panel shows two
numbers that contradict each other. Group the breakdown by **block kind**,
not by role: 74% of the context is tool traffic, which per-role accounting
files under "assistant" and makes it read as talkativeness.
## Recently closed
- **0001 — resume offer. Landed `ec87e6a`, 2026-08-13.** Pending since 08-10.
The agent-established hook now *offers* the latest thread instead of silently
attaching it; default is start-fresh, `ai.autoResume: true` restores the old
behaviour. Explicit resume paths (`/resume`, the Face control) call with no
argument and are unchanged, and the e4e6594 amnesia fix is untouched — **do
not revert that commit.** The second half is still undrawn: `resumeOffered`
fires and nothing renders it. With no UI the behaviour is still correct
(doing nothing starts fresh, which is the ask) but the affordance to continue
is missing. That is the first job of the renderer lane.
- **0006 — step-up authenticates through PAM. Landed `6edebae`, 2026-08-13.**
**Rook's work, not mine** — the patch file carried my identity in its From
header and I did not write it. `StepUpAuth` called `souveraine-pam-auth` (a
binary never written) and fell back to `pkcheck` against an action never
shipped, so **every step-up grant was silently denied**. Now a real
`PamContext` against `souveraine-stepup`, which `cc541d1` ships and which is
present on this box (owned by `souveraine r467`, the running version).
Verified against the type system rather than by hope: every API it uses is
either already used by `LockContext.qml` (live in the running shell) or
present in `quickshell-service-pam.qmltypes``responseVisible` and
`PamResult.toString(value)` were the two LockContext does not exercise, and
both exist. **Still password, not finger**: `fpc-polkit-pam.c:86` refuses
every service except `polkit-1`. Widening that is one line and a security
decision that is Casey's.
- **0007 — context occupancy + hyprctl cursor. Landed `6f12fce`, 2026-08-12.**
Keep: **before building the click-through breakdown on this**, read
`tasks/context-accounting-two-counters-2026-08-12.md`. The pill renders the
*payload* (what is in the model's window); `/v1/conversations/:id/tokens`
renders the *archive* (what the transcript weighs). They differ by ~3x. Ship
them side by side unlabelled and the Panel shows two numbers that contradict
each other. Group the breakdown by **block kind, not role** — 74% is tool
traffic, which per-role accounting files under "assistant" and makes it read
as talkativeness.
- **0010 — halt in her own register. Landed `6f12fce`, 2026-08-12.** Keep: the
wording deliberately mirrors `migraine_text()` in `src/server/turn.rs`, which
`29f8475` commits into her history — so what the human reads and what she
carries into the next turn are the same sentence. **If one changes, the other
must.**
- **0008 — owned message delegate. Landed `93fe30a`, 2026-08-12.** Applied by
Casey and reloaded. The load found two faults no gate had (`44acb11`) — see
the header. Worth keeping: the two controls dropped were *decisions*