@@ -20,6 +20,8 @@ Run the narrowest gate that covers the release risk:
2020- ** When background mode, Start at Login, hidden-window lifecycle, or Shell
2121 control changed:** one clean-permission Flatpak portal smoke in a real GNOME
2222 session.
23+ - ** When preset, output, startup, routing, monitor, or inspector UI behavior
24+ changed:** run the workflow usability gate below before release.
2325- ** When the GNOME Shell extension source changed:** run the extension checker,
2426 build the review zip, test the supported Shell versions, and upload after the
2527 app release is ready.
@@ -31,6 +33,44 @@ TestPyPI is package-index validation. It is not a user beta channel. Flathub PR
3133test builds are the normal stable handoff validation. Flathub beta is a
3234temporary user-installable Flatpak beta, not a permanent second release line.
3335
36+ ## Workflow Usability Gate
37+
38+ Before releasing UI or state-machine changes, review the workflows as state
39+ transitions, not as isolated controls. Every changed workflow should have a
40+ single obvious current state, a reversible path, and no first-frame state
41+ change after the window is shown.
42+
43+ For preset and output changes, cover these cases with unit tests when possible
44+ and with AT-SPI or live smoke when they require real GTK behavior:
45+
46+ - Load, edit, reset to neutral, then reload the same saved preset from the
47+ preset loader. Keep revert-style actions for unsaved sources that are not in
48+ the preset library.
49+ - Verify the preset loader does not pretend to be the running state: the visible
50+ running-curve label must distinguish neutral, exact saved preset, modified
51+ preset, and unsaved/imported curves.
52+ - Import or create an unsaved curve, save it, reset it, and recover a neutral
53+ curve without deleting the only route back.
54+ - Delete the loaded preset, delete or modify it outside the app, and keep the
55+ current curve understandable as an unsaved copy.
56+ - Link, unlink, miss, and modify auto presets for both port-scoped and
57+ output-scoped targets.
58+ - Set, miss, and clear the default preset.
59+ - Change output while a curve is clean, modified, auto-applied, missing, or
60+ unavailable.
61+ - Turn Monitor on/off and freeze/unfreeze it without leaving hidden frozen
62+ state behind.
63+ - Start the app with auto/default preset and auto-route inputs and verify the
64+ visible window appears only after startup state is applied.
65+ - Check Shell extension/D-Bus state after preset, output, background, and
66+ window-visibility changes.
67+
68+ AT-SPI tests should assert externally visible behavior: accessible names, roles,
69+ checked state, sensitivity, and critical status labels. They should not depend
70+ on widget internals when a unit test can cover the state transition directly.
71+ When in doubt, add a small state-level unit test first, then one AT-SPI smoke
72+ assertion for the visible contract.
73+
3474## Prepare Version
3575
3676Set the release version once for the shell session:
0 commit comments