decisions/v1-acceptance-checklist.md
V1 acceptance checklist
Status: accepted on 14 October 2026.
This checklist has two levels. The quick check runs during everyday development, so builds and iteration stay fast. The release check is the v1 multi-monitor release blocker. It runs as v1 approaches, and whenever Sam asks for it. Record each result in the acceptance ledger.
Quick check
Run on whichever setup is available, with at least 5 windows per strip.
- Scroll each strip in a horizontal and then a vertical arrangement. No off-screen window moves to another display.
- Scroll one strip. No other strip changes its scroll position or focus.
- Move focus and a window to the other display in both directions.
- Unplug and replug the external display 3 times. No window is lost, and each window that left a display returns to it in its old order and stack.
- Close and open the lid once with an external display connected.
- Sleep and wake 3 times.
- Force-quit the engine once. Miri restarts it and restores the layout.
Any failure blocks merging the change that caused it.
Release check
The sections below define the release check.
Pass rules
Each scenario runs on the university setup and the home setup. Mixed arrangements run last, on a friend's MacBook Pro with three displays. Each display has at least 2 native Spaces, and each strip holds at least 10 windows. Use apps with different window behaviors, including a browser, a terminal, an Electron app, and a document app.
A single failure fails the blocker. A failure includes a lost window, a window on the wrong display, a window that macOS relocates off-screen, or an engine that does not recover. After any fix, the full checklist runs again from the start. The release candidate build must pass 3 consecutive full runs.
Arrangements and scrolling
- Arrange displays horizontally, with the external display on the left and then on the right.
- Arrange displays vertically, with the external display above and then below.
- Repeat each arrangement with the laptop as the main display and then with the external display as the main display.
- Scroll every strip to both ends with the keyboard and the trackpad. No off-screen window moves to another display. Repeat trackpad scrolling with each trackpad scrolling setting, and confirm that the correct strip moves.
- Scroll one strip. No other strip changes its scroll position or focus.
- Repeat scrolling on displays with different resolutions and scaling, including the 32-inch TV.
Monitor navigation
- Move focus to the display in each direction where one exists.
- Move a window to the display in each direction where one exists. The window keeps its column and its width relative to the display.
- Issue a monitor command toward a side with no display. Nothing moves.
Display changes
- Unplug and replug the external display 50 times. Include unplugging during a scroll animation and during a window move.
- Close and open the lid 20 times with two external displays connected.
- Sleep and wake 50 times, including at least one overnight sleep.
- Rearrange displays in System Settings > Displays while Miri runs.
- Change the main display while Miri runs.
- Change the resolution and scaling of a connected display.
- Unplug a display that shows a native fullscreen window.
After each change, every window remains reachable. Each window that left a display returns to it in its old order and stack, and other windows keep their place, as Display changes describes.
Engine recovery
- Force-quit the engine 10 times during a multi-monitor session. Miri restarts it, and startup session restore returns the layout.
- Force-quit the engine 3 times within 5 minutes. Miri stops restarting it and shows the failure, logs, and a manual restart control.
- Maximize a tiled window on each display, including a window from a stack, then force-quit the engine. After the restart, each window is maximized and fills its display's usable area. A later restore returns each window to its width before maximizing, and the stacked window to its stack when it has room.
Endurance
- Run an 8-hour working session with two displays and no restarts. Engine memory use stays stable.
- Complete the 2-week daily-use period from the release scope.