feat: let a teacher ask the sanctuary to call a child's parent

The coordinator already existed on the control computer and its contract
is frozen, so this is the classroom half of a contract that was read from
its README and source rather than guessed: four fields out, the status
topic subscribed before anything is published, and every word the teacher
reads taken from the coordinator's own message field.

It is a separate process, not a Plasma applet. A broker library, a
network timeout and a text entry have no business inside the only way a
teacher has of getting anywhere; if this dies the bar is untouched.

The panel mark is Breeze's call-outgoing. The old one was a bell, sitting
two inches from Plasma's notification bell in the same bar and meaning
something entirely different.

Two things it will not do: claim a call was displayed, and let a teacher
type the room. The machine already knows which room it is.

Sixty tests cover the contract without a broker. The live path was proven
against the real coordinator running in the lab, on a loopback broker,
with ProPresenter mocked and the church's networks rejected from inside
the container first.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
ekklesia
2026-09-10 10:37:06 -05:00
co-authored by Claude Opus 5
parent 380f031092
commit 7790003c03
17 changed files with 1478 additions and 28 deletions
@@ -1,10 +1,22 @@
[Desktop Entry]
Type=Application
Name=Parent Call
Comment=Ask for a child's parent to come to the room
Comment=Ask the sanctuary to call a child's parent to this room
# Breeze's own, and deliberately not a bell.
#
# The previous mark was a bell, which sat two inches from Plasma's
# notification bell in the same bar and meant something entirely
# different. A handset with an outgoing arrow cannot be mistaken for an
# alert: it reads as placing a call, and the arrow says the call leaves
# this room. No stock Breeze icon combines a person with a call, so the
# unambiguous half was chosen over the half that could be read as user
# settings — which is what two grey people on a panel look like.
Icon=call-outgoing
Exec=/usr/local/bin/classroom-parent-call
Icon=ekklesia-parent-call
Terminal=false
Categories=Utility;
StartupNotify=false
NoDisplay=false
StartupNotify=true
StartupWMClass=classroom-parent-call
# Never in an application list. It is reached from the bar, and it is not
# one of the room's applications.
NoDisplay=true