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
+21 -3
View File
@@ -1,6 +1,6 @@
# Window rules.
#
# There is one, and it is about video.
# There are two: one about video, one about the Parent Call card.
#
# Everything else the classroom used to arrange by hand is ordinary window
# manager behaviour and needs no rule: a dialog stays in front of the window
@@ -17,8 +17,8 @@
# 314-line window arbiter was doing.
[General]
count=1
rules=classroom-video
count=2
rules=classroom-video,classroom-parent-call
[classroom-video]
Description=Video is an appliance screen, not a window
@@ -30,3 +30,21 @@ wmclassmatch=3
wmclasscomplete=false
noborder=true
noborderrule=2
[classroom-parent-call]
Description=Parent Call is a quick action, not a window
wmclass=classroom-parent-call
wmclassmatch=1
wmclasscomplete=false
# It is not an application, so it does not belong in the row of them. The
# button that opened it is already in the bar.
skiptaskbar=true
skiptaskbarrule=2
skipswitcher=true
skipswitcherrule=2
skippager=true
skippagerrule=2
# In front of the lesson a teacher was reading when they pressed the
# button, rather than behind it.
above=true
aboverule=2