The loading surface was invisible. GtkWindow only renders its own CSS background when the application is not painting the window itself, and this window was created app-paintable with no draw handler and no child — so it drew nothing at all. The black area during loading was never it: it was VLC's own window, tiled by sway into the usable area, which excludes the strip the dock reserves. That is why the dock and the wallpaper stayed on screen underneath. An earlier headless check missed this because that sway had no wallpaper configured, so an invisible surface and a black one looked identical. Rechecked with the real wallpaper and the real dock underneath. The surface now paints, and carries a spinner and "Loading DVD..." on the same translucent rounded card as the dock. It moves from the top layer to the overlay layer, because the dock is a top-layer surface and DVD mode has to cover it rather than depend on which surface sway created first. Its exclusive zone of -1 keeps sway from moving it out of the way of the dock's reserved strip. It goes up before VLC is started rather than alongside it, so no part of VLC's window is ever seen against the wallpaper, and comes down only once VLC reports playback on screen. The deadline that takes it down regardless is now twenty seconds, since an optical drive can be slow, and a failure to start VLC at all ends the session instead of leaving a cover with nothing behind it. Co-Authored-By: Claude Opus 5 <[email protected]>
160 lines
6.7 KiB
Markdown
160 lines
6.7 KiB
Markdown
# Classroom test checklist
|
|
|
|
Run against the exact artifact published to canary, on the real endpoint,
|
|
before promoting to stable with `./update_stable.sh`.
|
|
|
|
## Boot
|
|
|
|
- [ ] Cold boot reaches the classroom shell with no terminal or window junk
|
|
- [ ] Reboot does the same
|
|
- [ ] Wallpaper appears
|
|
- [ ] Dock appears, centred
|
|
- [ ] Clock appears, bottom right
|
|
|
|
## Provisioning
|
|
|
|
- [ ] `journalctl -u ekklesia-classroom-provision` shows a clean run
|
|
- [ ] Google Chrome is installed on a machine that never had it
|
|
- [ ] A second boot does not reinstall anything
|
|
- [ ] A machine with no network still boots to a working shell, and
|
|
provisioning succeeds at a later boot once it is online
|
|
|
|
## UI scale
|
|
|
|
- [ ] `UI_SCALE=1.0` looks exactly as it did before scaling existed
|
|
- [ ] `UI_SCALE=1.25`, then `sudo systemctl restart getty@tty1`:
|
|
dock, icons, clock and notifications all grow together
|
|
- [ ] `UI_SCALE=0.8` shrinks them together
|
|
- [ ] The reserved bottom strip grows and shrinks with the dock, and a
|
|
maximised Chrome window still stops above it
|
|
- [ ] A nonsense value (`UI_SCALE=banana`) still gives a working shell
|
|
- [ ] An extreme value (`UI_SCALE=9`) is clamped, not obeyed
|
|
|
|
## Reserved bottom shell (regression)
|
|
|
|
The bottom strip is one full-width layer-shell surface with a 76px
|
|
exclusive zone. Dock and clock live inside it. Do not split them back
|
|
into separate layer-shell windows.
|
|
|
|
- [ ] A maximised Chrome window stops above the bottom strip
|
|
- [ ] The clock does not float over Chrome
|
|
- [ ] Dock stays centred, clock stays bottom right
|
|
- [ ] Wallpaper shows through the unused parts of the strip
|
|
- [ ] Every dock button still responds to clicks
|
|
- [ ] A fullscreen application covers the whole display, dock included
|
|
|
|
## Browser
|
|
|
|
- [ ] First Browser click launches Chrome
|
|
- [ ] Chrome opens on Wonder Ink (https://app.wonderink.org/)
|
|
- [ ] Clicking Browser while Chrome is focused minimises it
|
|
- [ ] Clicking Browser again restores it **maximised, not floating or draggable**
|
|
- [ ] Clicking Browser while Chrome is running but unfocused focuses it
|
|
- [ ] `Super+M` minimises the focused window
|
|
- [ ] `Super+Shift+M` restores the most recently minimised window
|
|
- [ ] Normal navigation to any other site works
|
|
- [ ] The Home button returns to Wonder Ink
|
|
- [ ] Fullscreen YouTube video uses the whole display
|
|
- [ ] Leaving fullscreen restores the correct geometry above the dock
|
|
- [ ] No first-run, default-browser or sign-in nag appears
|
|
- [ ] `chrome://policy` lists the Ekklesia policies as applied, with no
|
|
"unknown policy" entries
|
|
- [ ] Chrome does not start by itself at boot
|
|
- [ ] After a reboot, cookies and site logins are still there
|
|
- [ ] After an OTA update, cookies and site logins are still there
|
|
|
|
Known limitation: Chrome's own minimise button in its title bar does
|
|
nothing. Sway ignores the Wayland minimise request and gives no event to
|
|
hook. Minimising is the dock's Browser button or `Super+M`.
|
|
|
|
## Notifications
|
|
|
|
- [ ] `classroom-notify-test` renders with the classroom styling:
|
|
dark translucent, rounded, white text, top right
|
|
- [ ] `classroom-notify-test --critical "Parent Call" "Room 3 needs a parent."`
|
|
renders in the critical style and does not time out
|
|
- [ ] Notifications appear over a fullscreen video
|
|
|
|
Over SSH from an administrator account, run it with sudo:
|
|
|
|
```
|
|
sudo classroom-notify-test --dry-run # show the session it resolved
|
|
sudo classroom-notify-test # send into the classroom desktop
|
|
```
|
|
|
|
The classroom desktop belongs to the classroom user, and mako sits on
|
|
that user's D-Bus session. A plain notify-send from an SSH session lands
|
|
in the administrator's own session, where nothing owns
|
|
org.freedesktop.Notifications, so D-Bus tries to start a second mako with
|
|
no display and the call times out with NoReply. The script finds the
|
|
running sway process for the classroom user and delivers into its
|
|
session instead. It never starts mako.
|
|
|
|
- [ ] `sudo classroom-notify-test` from an SSH session displays on the
|
|
classroom screen
|
|
- [ ] `sudo classroom-notify-test --dry-run` reports the resolved
|
|
XDG_RUNTIME_DIR, bus address and Wayland display
|
|
- [ ] Running it as an unprivileged admin account explains it needs sudo
|
|
- [ ] `tests/test-classroom-notify-test.sh` passes (also run by the build)
|
|
|
|
## DVD
|
|
|
|
With `DVD_ENABLED=false`:
|
|
|
|
- [ ] No DVD button in the dock
|
|
|
|
With `DVD_ENABLED=true`:
|
|
|
|
- [ ] Drive unplugged: button present, icon held back, friendly notification on click
|
|
- [ ] Drive present, no disc: friendly notification on click, nothing crashes
|
|
- [ ] Inserting a disc produces one **DVD Ready** notification
|
|
- [ ] The DVD icon comes up to full strength while a disc is in
|
|
- [ ] Nothing plays until the button is pressed
|
|
- [ ] Clicking plays the disc
|
|
- [ ] Menus work
|
|
- [ ] Audio works
|
|
- [ ] Chapter navigation works
|
|
- [ ] Fullscreen works
|
|
- [ ] `Super+M` minimises the player, the DVD button restores it
|
|
- [ ] Closing the player works
|
|
- [ ] Ejecting is detected, the icon goes back
|
|
- [ ] Reinserting is detected again
|
|
- [ ] Commercial CSS disc plays without anyone having run codec setup
|
|
by hand
|
|
|
|
### DVD mode
|
|
|
|
- [ ] Pressing DVD covers the **whole** display immediately, dock and
|
|
clock included — no wallpaper visible anywhere, at any point
|
|
- [ ] A spinner and "Loading DVD…" show while the disc spins up
|
|
- [ ] No partial VLC window is ever visible against the wallpaper
|
|
- [ ] Video or the disc menu replaces the loading surface when ready
|
|
- [ ] A disc that never opens still gives the desktop back (20s)
|
|
- [ ] No VLC chrome anywhere: no menu bar, no fullscreen controller,
|
|
no cone, no sway title bar
|
|
- [ ] Wallpaper is never visible around VLC
|
|
- [ ] Moving the mouse to the bottom slides the classroom bar up
|
|
- [ ] It hides again shortly after the mouse leaves it
|
|
- [ ] While hidden, clicking a disc menu item near the bottom still
|
|
reaches the menu
|
|
- [ ] Play/pause toggles and the icon follows the actual state
|
|
- [ ] Previous and next chapter work
|
|
- [ ] The menu button returns to the disc menu
|
|
- [ ] Space pauses; arrow keys and Enter navigate the disc menu
|
|
- [ ] Arrow keys do **not** change volume, and no key reaches crop,
|
|
aspect ratio, subtitles, audio tracks or deinterlacing
|
|
- [ ] Esc leaves DVD mode cleanly, with no black window left behind
|
|
- [ ] Close leaves DVD mode cleanly
|
|
- [ ] Eject leaves DVD mode and opens the tray
|
|
- [ ] Killing VLC by hand also returns to the classroom desktop
|
|
- [ ] Pressing DVD twice quickly does not start two sessions
|
|
- [ ] The bar is sized by UI_SCALE like the dock
|
|
|
|
## OTA
|
|
|
|
- [ ] `./update_canary.sh` publishes package first, manifest last
|
|
- [ ] The endpoint on the canary channel picks the update up
|
|
- [ ] SHA-256 verification passes
|
|
- [ ] Install succeeds and the endpoint reboots
|
|
- [ ] Everything above still works after the update
|