fix: a room that was set up, a card where its button is, and larger cards

Parent Call told rooms they had never been set up. Nothing about the
rooms was wrong. Read from the church broker: …/coordinator and
…/pending are retained and …/mode is absent, and the coordinator's own
source says why — it publishes the retained mode only in answer to an
operator writing to …/mode/set, and nobody ever has. Every classroom
waited a second and a half for a message that will never exist.

A missing mode is now read as the coordinator's own default rather than
as an unconfigured room: the room offers the call and lets the sanctuary
end answer, because that is the end that knows. A mode that really is
off still refuses, in the coordinator's words, and a broker that is
missing or unreachable still says which of those it is. Proved against a
rig broker made to match the church's exactly, with a call landing on
the sanctuary mock.

The card is anchored to the bottom-left corner instead of centred, by
layer shell, which is what the disc player's cover has used under KWin
for months. Anchoring rather than positioning is what makes it right at
1080p and at 4K without a coordinate anywhere. It falls back to the
centred card if the library is missing.

Notifications are sized for a room. Every Plasma measurement is a grid
unit and a grid unit is the height of the general font, so the font is
the lever — 15 point instead of Breeze's 10, which takes the card from
about 350x110 to about 410x145 at 100% and doubles again at 200%. Text,
icon, padding and buttons move together. The chime stays off. No shell
package: that path cost the panel and is not coming back.

And the product name is gone from everything a teacher sees. The
notification card is from Classroom, the disc player's from DVD.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
ekklesia
2026-09-13 08:34:37 -05:00
co-authored by Claude Opus 5
parent bd55c5abd9
commit ba8768cee5
25 changed files with 327 additions and 24 deletions
+99 -1
View File
@@ -1201,6 +1201,98 @@ worked: it used `iptables`, which is not installed in the lab image, and
it probed with `/dev/tcp` under `sh`, which is a bash feature and fails
under dash whatever the network is doing. Both were reported as success.
## A morning in the rooms: 0.1.50
Four things a television found that a container had not.
### "Parent Call has not been set up yet", on a room that was
The card came up checking with the sanctuary and then said the room had
never been set up. Nothing about the room was wrong. Read from the church
broker, read-only:
```
classroom/parent-call/coordinator {"online": true, ...}
classroom/parent-call/pending {...}
classroom/parent-call/mode — absent
```
The coordinator's own source says why. It publishes the retained mode
only in answer to an operator writing to `…/mode/set`, and on this
broker nobody ever has. The classroom waited 1.5 seconds for a retained
message that will never exist, and then told the teacher the room was
unconfigured.
So a missing mode is now read as what it is: the coordinator's own
default, which the sanctuary end knows and this end does not. The room
offers the call and lets the coordinator answer. If the true mode is off,
the coordinator refuses in its own words through the status topic, which
the card already shows — a wrong no costs a teacher the call, a wrong yes
costs a round trip and tells the truth at the end of it.
The distinction the card has to keep is untouched. A broker that is not
configured at all still says so, a broker that cannot be reached still
says that, and a coordinator that is down still names the sanctuary.
"Undecided" is now a third answer, with no message, which is why the card
shows nothing at all until the retained topics have had their chance.
Proved on a rig whose broker was made to match the church's exactly —
coordinator and pending retained, mode deleted. The card came up ready,
and a call went through to the sanctuary mock: `Ruth Alvarez`, `Nursery`.
### The card opens where its button is
Centred, on a classroom television, is a long way from the button in the
bottom-left corner. A Wayland client cannot place its own window, so the
card is anchored rather than positioned: layer shell, bottom and left
edges, margins in logical pixels. The compositor does the arithmetic, so
it is correct at 1920×1080 at 100% and at 3840×2160 at 200% with no
coordinates written down anywhere. Both were photographed.
The classroom has drawn the disc player's cover this way under KWin for
months, so the mechanism is not new here. It is optional: if the library
is missing the card still opens, centred, exactly as before.
**The one thing the lab cannot answer is whether a teacher can type into
it.** The entry takes focus and shows a caret, which is KWin giving the
layer surface the keyboard. Actually typing has never been testable in
this lab — the tool that tries closes the card — so the first bench test
on this build is a name typed into Parent Call with a real keyboard.
### Notifications for a room, not a desk
Everything Plasma draws is measured in grid units, and a grid unit is the
height of the general font. There is no setting that makes a notification
larger on its own, so the font is the lever — and it is the supported
one, which matters after the shell package that cost the panel.
Measured at 100%: Breeze's 10 point gives a card about 350×110 with a
title a volunteer at the back cannot read; 15 point gives about 410×145
with a title that carries. Text, icon, padding and buttons all move
together because they are all grid units. The bar does not change: its
height is fixed and the clock sizes itself to it.
At 200% the display scale doubles all of it again. No chime, unchanged:
`AudioFeedback` is off in `plasmaparc` and the applet's own setting is
off in the layout.
### The room does not introduce itself
"Ekklesia Classroom" is gone from everything a teacher sees. The
notification card is from `Classroom`, the disc player's notifications
are from `DVD`, the maintenance terminal is a `Maintenance terminal`.
Nineteen visible names are checked by the test suite now, and the product
name stays where it belongs: package names, units, paths and topics.
### And the lab, again
Four rooms named after container ids are sitting on the church broker as
retained status messages. The fence was applied when each container
started and lost the moment it was restarted, because routes do not
survive that — and `lab reboot` is in every scenario. It re-fences now
and refuses to continue if either church network answers. The four
retained topics are the user's to clear; the commands are in the report.
## Unresolved risks
In the order I would worry about them.
@@ -1275,7 +1367,13 @@ In the order I would worry about them.
updates at all, and `classroom-migrate` moves every upgraded machine
onto that channel — deliberately, because stable and canary would
both hand a Plasma room the sway build back.
17. **Ctrl+Alt+T is still registered.** Konsole's own entry declares it
17. **Nobody has typed into the anchored Parent Call card.** Layer shell
gives it the keyboard — the entry takes focus and shows a caret — but
keyboard injection has never worked in this lab, so the first thing
to do on the bench is type a name into it. If it cannot be typed
into, removing gtk-layer-shell from the package restores the centred
card with no other change.
18. **Ctrl+Alt+T is still registered.** Konsole's own entry declares it
and the registration survives being shadowed. It is inert, because
Konsole refuses to open a shell under the classroom's
`shell_access=false` — measured — but it rests on that one