# Cube repaint and stacking regressions Run these tests as a regular desktop user after installing the package. They start a separate headless Wayfire with three outputs and never enable autostart. Pass a prepared source tree from the same Wayfire revision: the fixture needs the private cube control signal declarations. ```sh python3 run.py --source /path/to/prepared/wayfire-0.11.0 ``` Requires the installed Wayfire development headers, digitalrain sampler plugin, Alacritty, grim, wlr-randr, Python/Pillow, pkg-config and a C++ compiler. The GLES render device defaults to `/dev/dri/renderD128`; override `WLR_RENDER_DRM_DEVICE` if needed. The temporary fixture plugin is never installed. Logs and snapshots remain in the temporary directory printed by the runner. The tests cover: - A settled cube schedules no continuous rendering on three static outputs. - A partial repaint modifies only its requested pixels, including a negative output position, scale 2, and a 90-degree output transform. - A real Wayland window held during cube rotation stays below overlay, screensaver and lock-layer surfaces. The lock test checks layer ordering, not lock protocol authentication or security. - Content changes, movement/resizing, removal and remapping update cached cube textures. The live composition is compared with a fresh desktop render. With 0.11.0-r2, the static test produced 732 render passes per second across the three outputs, partial rendering changed pixels outside every damage region, and held windows appeared above both higher layers. The r3 patch brings those three measurements to zero. `--baseline` reports the known stacking/damage failures without aborting, for before/after checks. The fixture explicitly damages and disables synthetic rectangles on removal: `color_rect_view_t::close()` emits an unmap signal but does not do the surface damage/disable sequence that a real Wayland surface performs. Revision 4 adds panel and overlay regressions in `layer-check.py`. A top-layer panel included by `cube/rotate_layer_shell` must render on all three workspace textures, including empty neighboring workspaces. Overlay surfaces must cover all desktop content during cube rotation, with both fixed and rotating panels. On r3, a 100x20 panel rendered 2,000 pixels on its current workspace and zero on either neighbor; the overlay test exposed 173,249 desktop pixels. Revision 4 renders 2,000 panel pixels on each workspace and zero pixels above overlays. To test a build before installation, pass `--wayfire /path/to/build/src/wayfire` and `--plugin-dir /path/to/build/plugins/cube`. The plugin path is appended after the temporary fixture directory and before the installed plugin directory.