feat: give every room the broker, one scale, and its own panel back

Little Waders took the Plasma build and reported what a container
cannot. A disc player on a machine with no optical drive, a clock nobody
at the back of the room could read, a browser at half the size of the
panel around it, and Parent Call with no broker to call.

The broker is the same for every classroom, so it is a default now and
not something to fill in room by room. classroom-migrate brings an
existing room to the same place without touching its name, its username
or its password, and Parent Call distinguishes a broker it cannot reach
from one that was never set up: those send somebody to look at
completely different things.

The disc player's detection was right and ran too late — alongside the
session rather than before it, and the panel is built from the layout the
moment a session starts. It runs before the display manager now, and
again from udev when a drive is plugged in.

UI_SCALE had a ceiling of 1.5, which cannot express a 4K television; a
clock pinned at 15 points, which is the same size at every scale; and a
browser that was never told the number at all. All three are fixed and
the room doubles together at 200%.

This also brings 0.1.47's work into the repository, where it had only
ever existed in a build directory under /tmp: the hidden display dialog,
its authenticated writer, the polkit action, and the church's own
wallpaper. One piece of it is deliberately left out. The custom volume
display needed a shell package of our own, and with one selected
plasmashell builds no panel at all — measured twice, with that build's
own files, on a classroom that deletes its panel configuration at every
login by design.

The lab connected to the real church broker the moment the package
defaulted to it. Nothing was left behind, which was checked, but the
guard that should have stopped it had never worked: it used iptables,
which the lab image does not have, and probed with /dev/tcp under dash,
where that always fails. Both reported success.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
ekklesia
2026-09-12 19:05:09 -05:00
co-authored by Claude Opus 5
parent 926668dc9b
commit 34fd02e08f
59 changed files with 1335 additions and 198 deletions
+14 -31
View File
@@ -1,33 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 128 128">
<!-- The comment lives inside <svg>, not above it. gdk-pixbuf
recognises an SVG by sniffing the first bytes of the file, and a
licence-length comment before the opening tag pushes it out of
that window: every GTK program then reports "couldn't recognize
the image file format" while Qt renders it happily. Measured on
both of the classroom's own icons. -->
<!-- Wonder Ink.
A stand-in for the product's own mark, which the classroom does not
have a licensed asset for. It is a filled colour tile rather than a
line drawing on purpose: the room already learned, the hard way, that
a monochrome glyph on a bar is read as a decoration and not as an
application. Somebody asked whether the old browser glyph meant "the
Internet". A tile with its own colour does not get that question. -->
<defs>
<linearGradient id="tile" x1="0" y1="0" x2="1" y2="1">
<stop offset="0" stop-color="#4FB3A8"/>
<stop offset="0.55" stop-color="#3E93A8"/>
<stop offset="1" stop-color="#7C6FC4"/>
</linearGradient>
</defs>
<rect x="6" y="6" width="116" height="116" rx="28" fill="url(#tile)"/>
<path d="M64 30c0 0 26 28 26 44a26 26 0 0 1-52 0c0-16 26-44 26-44z"
fill="#FFFFFF" fill-opacity="0.94"/>
<path d="M50 76a14 14 0 0 0 10 13" stroke="#3E93A8" stroke-width="5"
stroke-linecap="round" fill="none" opacity="0.55"/>
<g fill="#FFFFFF" opacity="0.9">
<path d="M96 34l2.6 6.4L105 43l-6.4 2.6L96 52l-2.6-6.4L87 43l6.4-2.6z"/>
<circle cx="34" cy="40" r="3.2"/>
<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64">
<title>Wonder Ink</title>
<!-- The Wonder Ink mark, as supplied, on a square canvas.
A panel icon slot is square and the mark is 65.67 by 46.68, so it is
fitted to the width and centred rather than stretched: the
transform below is the only thing added to the artwork, and the
paths are untouched.
The comment is inside the root element on purpose. A comment
before it stops gdk-pixbuf recognising the file as SVG at all,
which took two classroom icons out of the panel once already. -->
<g transform="translate(0 9.254) scale(0.97457)">
<path d="M64.54 45.7l-31.4 1a3.2 3.2 0 01-2.93-3.14l.13-34.75 32.28 1.49a3.23 3.23 0 013 3.51z" fill="#003b5c"></path><path d="M38.15 37l-32.61.91A3.18 3.18 0 012.42 35L0 0l36.25.85a3.21 3.21 0 013.26 3.3z" fill="#e48043"></path><path fill="#85b36d" d="M45.67 13.92l6.66.55.78 27.54h-7.23l-.21-28.09z"></path><path d="M4.81 4.46h4.75l3.52 17.8c.2 1 .36 2 .36 2s.12-1 .28-2L15.13 7h7.14l1.44 15.3c.15 1 .27 2 .27 2s.16-1 .36-2l2.3-16.34 5.11.21c1.1 0 2.52 1.87 2.18 2.92l-6.62 23.4h-6.58L19 22.26c-.2-1.11-.28-1.74-.28-1.74s-.08.63-.28 1.74l-1.75 10.23h-3.37a1.28 1.28 0 01-1.22-.9z" fill="#efc848"></path>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB