diff --git a/VERSION b/VERSION index 6871b9e..0ea3a94 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.1.44 +0.2.0 diff --git a/docs/classroom-v2-experiment.md b/docs/classroom-v2-experiment.md index 2fa43d4..0ef6369 100644 --- a/docs/classroom-v2-experiment.md +++ b/docs/classroom-v2-experiment.md @@ -1293,6 +1293,32 @@ 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. +## Stable: 0.2.0 + +The experiment is over. 0.1.50 was taken to the church and everything a +container could not answer was answered on the hardware: Plasma and KWin +boot, autologin works, the panel comes back after a reboot, the panel and +Chrome are the right size, Wonder Ink runs, Parent Call opens in the +corner, accepts a typed name and reaches the sanctuary, notifications are +readable and silent, HDMI audio and the volume keys work, and the room +looks the way it was meant to. + +So the Plasma classroom is the stable line, and this branch's work is on +master. The promotion was a fast-forward: the experiment was cut from the +published stable source and never diverged from it, so there is one +history and no merge. + +One thing changed for the promotion and nothing else did. The channel +rules turned around: `classroom-v2` and `hyprland` are the obsolete +channels now and a room on either comes home to `stable`, while `canary` +— the next development release's channel — and any channel named by hand +are left exactly where somebody put them. A fresh installation has always +defaulted to `stable` and still does. + +Publishing followed the existing path: the package goes up through a +channel publish, and `update_stable.sh` moves the manifest afterwards, +manifest last. + ## Unresolved risks In the order I would worry about them. @@ -1362,13 +1388,14 @@ In the order I would worry about them. machine's key, and the control computer cannot reach it either — so every result above is the lab's. The package is built and the deploy commands are written down; the room itself is unverified. -16. **The v2 channel still has no manifest.** `update_classroom_v2.sh` - exists now and has not been run. Until it is, a v2 room takes no - 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. **Nobody has typed into the anchored Parent Call card.** Layer shell - gives it the keyboard — the entry takes focus and shows a caret — but +16. **The experiment's channel is now the obsolete one.** It carried the + rooms while this was an experiment and 0.2.0 brings them home to + stable. It is kept, pointed at 0.2.0 so that a machine still on it + takes the release that moves it, and the 0.1.50 package stays hosted + as the rollback. +17. **Typing into the anchored Parent Call card was verified at the + church, not here.** 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 diff --git a/scripts/classroom-migrate b/scripts/classroom-migrate index 1b8b979..2bc39d6 100755 --- a/scripts/classroom-migrate +++ b/scripts/classroom-migrate @@ -189,13 +189,19 @@ import re import sys OBSOLETE_KEYS = ("COMPOSITOR", "HYPR_APPEARANCE") -# Every channel that serves a desktop this package replaces. A machine -# that has just installed the Plasma classroom must not be left pointed at -# a line that will hand it the sway build back at the next release: stable -# and canary both would. A room already on the v2 channel, or on one -# somebody named deliberately, is left where it is. -OBSOLETE_CHANNELS = {"stable", "canary", "hyprland"} -CHANNEL = "classroom-v2" +# Every channel that serves a desktop this package replaces. +# +# This list was the other way round while the Plasma desktop was an +# experiment: rooms were moved off stable onto a channel of its own so +# that a sway release could not take them back. The Plasma classroom is +# the stable one now, so the experiment's channel is the obsolete one and +# rooms come home. hyprland never carried anything anybody runs. +# +# canary is deliberately not here. It is the next development release's +# channel, and a room an administrator put there is a room somebody meant +# to put there — as is one on a channel named by hand. +OBSOLETE_CHANNELS = {"classroom-v2", "hyprland"} +CHANNEL = "stable" # The church broker. One address for every room. BROKER_HOST = "10.40.0.2" diff --git a/tests/test-classroom-migrate-config.sh b/tests/test-classroom-migrate-config.sh index 0563fa4..aa686e7 100755 --- a/tests/test-classroom-migrate-config.sh +++ b/tests/test-classroom-migrate-config.sh @@ -107,8 +107,7 @@ check("the password is untouched", check("and is never printed", "hunter2" not in output) check("the compositor setting is gone", "COMPOSITOR" not in after) check("and the appearance setting with it", "HYPR_APPEARANCE" not in after) -check("the channel moves off the experiment", - "CHANNEL=classroom-v2" in after) +check("the channel comes home to stable", "CHANNEL=stable" in after) check("the room's scale is preserved", "UI_SCALE=2.0" in after) check("and everything else is left alone", "UPDATE_URL=https://updates.riverofglorymn.org" in after @@ -146,13 +145,13 @@ check("the settings are added", "MQTT_ENABLED=true" in after and "MQTT_HOST=10.40.0.2" in after and "MQTT_PORT=1883" in after) check("no credentials are invented", "MQTT_USERNAME" not in after and "MQTT_PASSWORD" not in after) -# stable and canary are both the sway line. A machine that has just taken -# the Plasma package and is left pointed at one of them is handed the old -# desktop back by the next release there: the upgrade undoing itself. -check("canary moves onto the v2 channel", "CHANNEL=classroom-v2" in after) +# canary is where the next development release goes. A room somebody put +# there is a room somebody meant to put there. +check("canary is left where it is", "CHANNEL=canary" in after) -after, _ = migrate("CHANNEL=stable\nUI_SCALE=1.0\n") -check("and so does stable", "CHANNEL=classroom-v2" in after) +after, _ = migrate("CHANNEL=classroom-v2\nUI_SCALE=1.0\n") +check("and the experiment's own channel comes home", + "CHANNEL=stable" in after) print() print("4. running it twice changes nothing the second time") diff --git a/tests/test-deployment-support.sh b/tests/test-deployment-support.sh index 67831ab..2a05aeb 100755 --- a/tests/test-deployment-support.sh +++ b/tests/test-deployment-support.sh @@ -215,8 +215,10 @@ check("Trixie validation runs before any upload", validation < first_rsync) # upgraded room ends on the v2 channel with every setting this release # has, exactly once, and the command a technician runs is safe to run on # a machine that is already converged. -check("the gate checks the upgraded channel", - "'^CHANNEL=classroom-v2$'" in validation_script) +check("the gate checks a deliberate channel survives", + "'^CHANNEL=canary$'" in validation_script) +check("and that the experiment's channel comes home", + "'^CHANNEL=stable$'" in validation_script) check("and that every new setting arrived exactly once", "for setting in LIVE_ENABLED AUDIO_OUTPUT UI_SCALE" in validation_script) check("and that running the migration by hand is safe", diff --git a/tests/test-display-settings.sh b/tests/test-display-settings.sh index 02bb300..7d136b4 100755 --- a/tests/test-display-settings.sh +++ b/tests/test-display-settings.sh @@ -26,7 +26,9 @@ with tempfile.TemporaryDirectory() as tmp: for channel in ('stable', 'canary', 'hyprland', 'classroom-v2', 'custom'): path.write_text(original.replace('CHANNEL=classroom-v2', 'CHANNEL='+channel)) subprocess.run([sys.executable, '-c', code, str(path)], check=True, capture_output=True) - expected = channel if channel in ('classroom-v2', 'custom') else 'classroom-v2' + # The experiment's channel and hyprland come home to stable; + # everything anybody chose deliberately is left alone. + expected = 'stable' if channel in ('classroom-v2', 'hyprland') else channel assert 'CHANNEL='+expected+'\n' in path.read_text() assert 'MQTT_PASSWORD=literal $ and = characters\n' in path.read_text() print('Display settings: scale bounds, config preservation, idempotence and channel migration passed.') diff --git a/tests/test-migration.sh b/tests/test-migration.sh index 5f828b2..2126d91 100755 --- a/tests/test-migration.sh +++ b/tests/test-migration.sh @@ -158,8 +158,12 @@ check( 'OBSOLETE_KEYS = ("COMPOSITOR", "HYPR_APPEARANCE")' in migrate, ) check( - "and comes off any channel that would undo the upgrade", - 'OBSOLETE_CHANNELS = {"stable", "canary", "hyprland"}' in migrate, + "and comes off the channels that carried the experiment", + 'OBSOLETE_CHANNELS = {"classroom-v2", "hyprland"}' in migrate, +) +check( + "onto the stable line, which the Plasma classroom now is", + 'CHANNEL = "stable"' in migrate, ) check( "the rest of device.conf is rewritten line by line, not regenerated", diff --git a/tools/validate-trixie-release.sh b/tools/validate-trixie-release.sh index ca09c68..89a42f7 100755 --- a/tools/validate-trixie-release.sh +++ b/tools/validate-trixie-release.sh @@ -147,11 +147,19 @@ if [[ -n "$previous" ]]; then grep -q '^MQTT_PASSWORD=preserve-me$' /etc/ekklesia-classroom/device.conf grep -q '^CUSTOM_SETTING=preserve-me-too$' /etc/ekklesia-classroom/device.conf - # And the one value the upgrade is supposed to change. canary is the - # sway line: a room that has just taken the Plasma package and is left - # pointed at it is handed the old desktop back by the next release - # there, which is the upgrade undoing itself. - grep -q '^CHANNEL=classroom-v2$' /etc/ekklesia-classroom/device.conf + # The channel a room was put on deliberately survives the upgrade. + # canary is where the next development release goes, and the Plasma + # classroom is the stable line now, so nothing here has to move. + grep -q '^CHANNEL=canary$' /etc/ekklesia-classroom/device.conf + + # And a room that was carried through the experiment on its own + # channel comes home, because that channel is the obsolete one now. + sed -i 's/^CHANNEL=.*/CHANNEL=classroom-v2/' /etc/ekklesia-classroom/device.conf + classroom-migrate >/tmp/migrate-from-v2.log 2>&1 + grep -q '^CHANNEL=stable$' /etc/ekklesia-classroom/device.conf + grep -q '^MQTT_PASSWORD=preserve-me$' /etc/ekklesia-classroom/device.conf + grep -q '^CUSTOM_SETTING=preserve-me-too$' /etc/ekklesia-classroom/device.conf + sed -i 's/^CHANNEL=.*/CHANNEL=canary/' /etc/ekklesia-classroom/device.conf # Every setting this release has that the room predates, appended # exactly once. classroom-migrate hands device.conf to the shared @@ -171,7 +179,7 @@ if [[ -n "$previous" ]]; then done grep -q '^MQTT_PASSWORD=preserve-me$' /etc/ekklesia-classroom/device.conf grep -q '^CUSTOM_SETTING=preserve-me-too$' /etc/ekklesia-classroom/device.conf - grep -q '^CHANNEL=classroom-v2$' /etc/ekklesia-classroom/device.conf + grep -q '^CHANNEL=canary$' /etc/ekklesia-classroom/device.conf # And by hand, on a machine that is already converged: the command a # technician runs must be safe to run twice.