Runtime Smoke Checklist
Run these checks in a nested Hyprland session or another disposable compositor session before publishing a release.
scripts/run-nested.sh launches a disposable nested session with a fresh user-owned build under ${XDG_CACHE_HOME:-$HOME/.cache}/hyprexpo.
scripts/dev-watch.sh rebuilds and relaunches that session on source changes.
Nested test binds:
F10for overviewSUPER+Returnfor a terminalSUPER+1..9for workspacesSUPER+SHIFT+1..9to move a windowSUPER+Qto close a windowSUPER+SHIFT+Qto exit
Checklist
Load the locally built plugin and confirm no API/hash mismatch is reported.
Toggle overview on and off with
hyprexpo:expo, toggle.Cancel overview with the configured
cancel_keyand confirm the workspace does not change.Move keyboard focus with
hyprexpo:kb_focus, then select withhyprexpo:kb_confirm.Select by pointer or touch near the outside edges of the monitor.
Confirm current, hover, focus, label, and border styling render as configured.
Open two or more windows on one workspace, open overview, press on a visible window preview, drag across the move threshold, and confirm the under-pointer drag proxy appears.
Drag that window preview over another valid workspace tile and confirm a positional landing proxy appears inside the hovered target tile.
Move the pointer within the target tile and between target tiles; confirm the landing proxy tracks the pointer position, preserves the original grab offset, and disappears when hovering the source or an invalid target.
Release on a target workspace and confirm the window still moves through the existing safe workspace move behavior. This release is not yet a positional layout insertion.
Exercise the Lua gesture registration path and complete or cancel a swipe.
Open or create a Picture-in-Picture-like pinned window. In the nested session, one practical path is to focus a test window and run
hyprctl dispatch pinfrom a terminal.With the default
plugin:hyprexpo:show_pinned_windows = 0, open overview and confirm the pinned window is not rendered into every workspace preview tile.Set
plugin:hyprexpo:show_pinned_windows = 1, reload or apply the keyword, reopen overview, and confirm pinned windows render in previews again for users who opt in.Set
plugin:hyprexpo:show_pinned_windows = 0again, close overview, and confirm the pinned window is still visible and pinned in the normal Hyprland session.Unload or reload the plugin after closing overview and confirm no stale render pass callback crashes the session.
Enable
dynamic_grid = 1, then test with 1, 2, 3, and 5 non-empty, non-special workspaces. Confirm the overview contains exactly those workspaces without padded empty tiles.Confirm every preview preserves the monitor aspect ratio. For 3 and 5 workspaces, confirm the partial final row is independently centered.
Set
label_pos = top_right, choose a visiblelabel_size, and toggleshow_workspace_names. Confirm every label remains inside its corresponding tile.Toggle
wallpaper_bgand reopen the overview. Confirm the wallpaper changes only the background and does not move or resize tiles.Toggle
mru_sortand confirm the current workspace moves to the first tile only when enabled. Togglefill_gapswith non-contiguous workspace IDs and confirm missing IDs are added only when enabled.With only one active workspace, complete and cancel a swipe. Confirm the overview exits cleanly without a crash or invalid animation state.
With
dynamic_grid = 1, leave the current workspace empty and open a window on a neighboring workspace. Open and close withhyprexpo:expo, toggle; confirm the current workspace does not change.With
dynamic_grid = 1andfill_gaps = 1, create distant workspace IDs (for example 1 and 5000). Open the overview; confirm it rejects gap expansion, remains responsive, and shows only the sparse workspaces.With
dynamic_grid = 1, setlabel_enable = 0, thenlabel_show = never, and set modernborder_color_current/border_color_hovervalues. Confirm labels stay hidden and the modern border colors win over legacy highlight values.
WARNING
The public site and docs should not claim full release readiness until this runtime smoke gate has been completed for the intended release artifact.