atagen

monolith

public
Star0
Watch0
ec80bfaf4c68f1de229668de937b42d38f44e2ed
1
ssh://brewery@pls.lobotomise.me:33/atagen/monolith.git

Blame: design/test-checklist.md

82a6f2fca59fatagen2026-10-16 23:18 UTC1
# Test checklist for M5 to M7
82a6f2fca59fatagen2026-10-16 23:18 UTC2
82a6f2fca59fatagen2026-10-16 23:18 UTC3
Everything below landed while you were away and was only smoke-tested nested. Bare metal, multi-monitor and real apps are still unverified.
82a6f2fca59fatagen2026-10-16 23:18 UTC4
82a6f2fca59fatagen2026-10-16 23:18 UTC5
Build and run from the repo root in nushell.
82a6f2fca59fatagen2026-10-16 23:18 UTC6
82a6f2fca59fatagen2026-10-16 23:18 UTC7
```nu
82a6f2fca59fatagen2026-10-16 23:18 UTC8
nix develop -c cargo build --release -p monolith
82a6f2fca59fatagen2026-10-16 23:18 UTC9
nix develop -c sh -c 'RUST_LOG=monolith=debug target/release/monolith run --backend drm 2> monolith.log'
82a6f2fca59fatagen2026-10-16 23:18 UTC10
```
82a6f2fca59fatagen2026-10-16 23:18 UTC11
82a6f2fca59fatagen2026-10-16 23:18 UTC12
## M5
82a6f2fca59fatagen2026-10-16 23:18 UTC13
82a6f2fca59fatagen2026-10-16 23:18 UTC14
- [ ] **VRR.** The log line `output connected` should say `vrr_capable=true` for DP-2. Fullscreen vkcube and look for `adaptive sync vrr=true`, and check the monitor's OSD shows a varying refresh rate. Leaving fullscreen should log `vrr=false`. The default is `[output] vrr = "fullscreen"`, and `"on"` and `"off"` also work.
82a6f2fca59fatagen2026-10-16 23:18 UTC15
- [ ] **VRR cursor cap.** With a fullscreen game below 165 fps, moving the mouse should not push the refresh rate up. Cursor-only frames are capped at 60 Hz.
82a6f2fca59fatagen2026-10-16 23:18 UTC16
- [ ] Hotplug, a second monitor and the Intel pass, still open from before.
82a6f2fca59fatagen2026-10-16 23:18 UTC17
82a6f2fca59fatagen2026-10-16 23:18 UTC18
## M6
82a6f2fca59fatagen2026-10-16 23:18 UTC19
82a6f2fca59fatagen2026-10-16 23:18 UTC20
- [ ] **layer-shell.** `waybar` reserves its strip and tiles stay clear of it. A fullscreen window covers it. Its workspaces module should list the tags through ext-workspace.
82a6f2fca59fatagen2026-10-16 23:18 UTC21
- [ ] **Launchers.** `fuzzel` takes the keyboard while open and gives it back on close. The launched app should land on the tag you were on when you launched it.
82a6f2fca59fatagen2026-10-16 23:18 UTC22
- [ ] **Session lock.** `swaylock` hides everything, takes input and unlocks with your password. VT switching still works while locked. Killing swaylock leaves the session locked, which is what the protocol wants. Unlock it by starting `swaylock` again from a VT.
82a6f2fca59fatagen2026-10-16 23:18 UTC23
- [ ] **Idle.** `swayidle -w timeout 10 'notify-send idle'` fires after 10 s without input. A playing `mpv` should hold it off while visible and stop holding it off once its tag is hidden.
3b180fd69834atagen2026-10-17 10:40 UTC24
- [ ] **Clipboard.** `wl-copy` and `wl-paste` work both ways with beer. Middle-click paste uses the primary selection.
82a6f2fca59fatagen2026-10-16 23:18 UTC25
- [ ] **Screenshots.** `grim` and `grim -g (slurp)`.
82a6f2fca59fatagen2026-10-16 23:18 UTC26
- [ ] **Portals.** Needs `xdg-desktop-portal-wlr` installed and monolith's package in your profile so `share/xdg-desktop-portal/monolith-portals.conf` is found. Screen sharing a whole output from a browser should work. Window sharing does not exist yet.
82a6f2fca59fatagen2026-10-16 23:18 UTC27
- [ ] **Xwayland.** Run an X app, like `xeyes`, Steam or a Proton game. The log shows `starting Xwayland` on its first connection. Check keyboard input, fullscreen and menu placement. Dialogs should float. After the last X client closes, Xwayland exits and should start again for the next one.
82a6f2fca59fatagen2026-10-16 23:18 UTC28
- [ ] **Activation.** Launch something slow from fuzzel on tag 2, switch to tag 3 before it appears. It should land on tag 2 and mark it urgent.
82a6f2fca59fatagen2026-10-16 23:18 UTC29
82a6f2fca59fatagen2026-10-16 23:18 UTC30
## M7
82a6f2fca59fatagen2026-10-16 23:18 UTC31
82a6f2fca59fatagen2026-10-16 23:18 UTC32
- [ ] **Submit stall.** It used to drop one frame every 6.2 s at 165 Hz. With vkcube running, the `frame rate` debug lines should read 165 of 165 indefinitely, with no `frame missed its vblank` in steady state.
82a6f2fca59fatagen2026-10-16 23:18 UTC33
- [ ] **vkcube black start.** Is the half second of black at launch gone?
82a6f2fca59fatagen2026-10-16 23:18 UTC34
- [ ] **Fullscreen switches.** Toggle fullscreen on vkcube a few times and look for `slow frame` lines. First-time imports now run on a worker thread.
66ef0437d73eatagen2026-10-17 06:25 UTC35
- [ ] **Direct scanout.** Fullscreen vkcube should log `direct scanout scanout=true`, and its `frame rate` lines should show `scanned_out` close to `presented`. If it logs `scanout=false` or never switches, the `elements`, `overlay_planes` and `cursor_plane` fields on that line show what was on screen with it.
9b87063809e1atagen2026-10-17 13:28 UTC36
- [ ] **Output rotation.** `[output.DP-1] transform = "90"` with a `position` puts DP-1 on its side where you placed it. The `output connected` log line shows the transform and position. The pointer should cross between outputs where their edges meet.
66ef0437d73eatagen2026-10-17 06:25 UTC37
- [ ] **CPU target.** `cpu_p99_us` on the `frame rate` lines should stay under 500, the target in decisions.md.
3b180fd69834atagen2026-10-17 10:40 UTC38
- [ ] **NixOS module.** Add the flake as an input, import `monolith.nixosModules.default` and set `programs.monolith.enable = true`. A `monolith` session appears in the display manager. With the default `realtime-scheduling = true`, the log should show `compositor thread runs SCHED_RR` and `queue global priority priority=Some(REALTIME)`. Programs launched from monolith should not inherit CAP_SYS_NICE, which `grep Cap /proc/(pgrep beer)/status` shows as an all-zero `CapAmb`.
82a6f2fca59fatagen2026-10-16 23:18 UTC39
82a6f2fca59fatagen2026-10-16 23:18 UTC40
## Known
82a6f2fca59fatagen2026-10-16 23:18 UTC41
82a6f2fca59fatagen2026-10-16 23:18 UTC42
- Nested monolith stops redrawing when the host compositor stops sending it frame callbacks, for example while its window is hidden. Clients inside then freeze until it is shown again.
82a6f2fca59fatagen2026-10-16 23:18 UTC43
- See `parked.md` for what is left over.