Skip to content

Commit f7c479c

Browse files
committed
smoke: bump the kumaui pin and re-arm the two wave-era probes
kumaui's idle-without-windows fix (e90884c) keeps the shell alive holding its bus names and sleep inhibitor through output loss, with surfaces recreated when displays return — noctalia's contract, which is what the CI VM has been measuring the absence of. The pin resolves against kumaui main now pushed (6bf413b: the fix, the vendor-doc note under it, and the memory-seam commit on top; the diff is the review). The notification-ownership probe and the sleep-inhibitor readback come back — polled, because the unit still starts seconds after loginctl sees the session — and the inhibitor grep names kuma-shell, not noctalia, for the first time. The run that carries this is the independent verification of the kumaui claim.
1 parent 55847cf commit f7c479c

4 files changed

Lines changed: 36 additions & 26 deletions

File tree

‎.github/actions/kuma-shell/action.yml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ inputs:
3333
description: >-
3434
kumaui commit to build the shell from.
3535
required: false
36-
default: 764c850f1fb1c13c0e396e279f555e1db3a3078d
36+
default: 6bf413bf81b07fd71126292c978ca35f9ca3c13d
3737

3838
runs:
3939
using: composite

‎AGENTS.md‎

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -91,11 +91,14 @@ nostr layer is enabled) — the same road every release ships.
9191
probe came back empty while the system journal carried the line.
9292
The failure dump's `journalctl -b` shape is the proven reader.
9393
- Displayless (`virtio-vga` + `QEMU_DISPLAY: none`), niri dies on
94-
early import and the GPUI shell follows — "window not found" —
95-
restart-looping until the unit's start limit ends the waves. A probe
96-
that needs a live shell process is a coin flip wearing a deadline:
97-
the notification name and the sleep inhibitor exist only while a
98-
wave is. Ask what shipped and what the journal recorded instead.
94+
early import and the pre-fix shell followed — "window not found" —
95+
restart-looping until the unit's start limit ended the waves: a
96+
probe needing a live shell process was a coin flip wearing a
97+
deadline. kumaui's idle-without-windows fix (Oct 2026, e90884c)
98+
keeps the shell alive holding its names and inhibitor through
99+
output loss, and the notification and inhibitor probes are armed
100+
again. The lesson stands: a probe that needs a live process asks
101+
the runner's timing unless the process is guaranteed alive.
99102
- `egl-headless` wants a host DRM node a runner lacks. The GPU-less
100103
console combo is `virtio-vga` plus `none`.
101104

‎notes/44.4.0-plan.md‎

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -426,10 +426,14 @@ binaries could not carry it. What the release week found:
426426
string. [coreos/bootupd#1166](https://github.com/coreos/bootupd/issues/1166) —
427427
any pipeline that composes label-less hits this on every boot.
428428
- **The smoke's real-session section learned what a displayless VM can
429-
answer.** The shell survives the GPU-less VM in restart-waves until
430-
the unit's start limit ends them, so every probe that needed a live
429+
answer.** The shell survived the GPU-less VM in restart-waves until
430+
the unit's start limit ended them, so every probe that needed a live
431431
shell process — notification ownership, the sleep-inhibitor
432432
readback, a stale noctalia pgrep — either measured the runner's
433-
timing or passed vacuously. What remains asks the wiring and the
433+
timing or passed vacuously. What remained asked the wiring and the
434434
journal; whether the shell draws is real hardware's question. The
435-
measured facts are in AGENTS.md.
435+
measured facts are in AGENTS.md. Re-armed 2026-10-03: kumaui's
436+
idle-without-windows fix (e90884c) keeps the shell alive holding its
437+
names and inhibitor through output loss, so the ownership and
438+
inhibitor probes came back, and the kumaui pin was bumped to carry
439+
the fix.

‎scripts/smoke.sh‎

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1435,25 +1435,28 @@ smoke_published() {
14351435
ok "the session started the shell's unit; whether it draws is real hardware's question"
14361436

14371437
# Notifications: mako left with the swap, and the shell took
1438-
# the name. Whether the name is HELD is this VM's timing, not
1439-
# the machine's: displayless, the shell survives in
1440-
# restart-waves until the start limit ends them, and the name
1441-
# exists only while a wave is — a polled busctl here is a
1442-
# coin flip wearing a deadline. What CI asserts is that the
1443-
# daemon shipped (the binary and the unit, above) and that
1444-
# the session started it; whether a notify-send lands
1445-
# somewhere real is the same question as whether it draws,
1446-
# and real hardware answers both.
1438+
# the name. Since kumaui's idle-without-windows fix the shell
1439+
# holds the name for the session's life, displayless or not;
1440+
# polled anyway, because the unit starts seconds after
1441+
# loginctl can already see the session.
1442+
local owner_call='busctl --user call org.freedesktop.DBus'
1443+
owner_call="$owner_call /org/freedesktop/DBus org.freedesktop.DBus"
1444+
owner_call="$owner_call GetNameOwner s org.freedesktop.Notifications"
1445+
local notif_deadline=$((SECONDS + 60))
1446+
until guest "XDG_RUNTIME_DIR=/run/user/\$(id -u) $owner_call" >/dev/null; do
1447+
[ $SECONDS -lt $notif_deadline ] || bad "nothing owns org.freedesktop.Notifications in a live session"
1448+
sleep 5
1449+
done
1450+
ok "the shell owns org.freedesktop.Notifications"
14471451

14481452
# Lock before suspend: `lock_before_suspend = true` is baked,
14491453
# and the readback is the shell's logind sleep inhibitor.
1450-
# That readback is a real-hardware question in this VM — the
1451-
# shell survives here in restart-waves, and an inhibitor
1452-
# exists only while a wave is, so asserting it asserts the
1453-
# runner's timing rather than the machine's. The wiring that
1454-
# makes it true is kumaui's to hold; the guard below proves
1455-
# the no-shell half of the property, which is the half this
1456-
# VM can see.
1454+
# The same kumaui fix keeps it held through output loss; the
1455+
# guard below still proves the no-shell half of the property.
1456+
guest systemd-inhibit --list --no-pager \
1457+
| awk '$1 == "kuma-shell" && $6 ~ /sleep/ { found = 1 } END { exit !found }' \
1458+
|| bad "the shell holds no sleep inhibitor: this machine suspends without locking"
1459+
ok "the shell inhibits sleep to lock first"
14571460

14581461
# And the guard for when the shell is not there at all.
14591462
#

0 commit comments

Comments
 (0)