v0.20 physical QA checklist
Canonical v0.20 physical qa checklist from the v0.20.0 published source.
Status
- v0.20.0 was published on 2026-10-18 with partial physical evidence, by maintainer decision. It is the first stable release since v0.18.0 and includes the unpublished v0.19 candidate, so this record covers both (v019-physical-qa.md keeps the v0.19 checklist). Items not run below are outstanding follow-ups, not passes, and the release notes list them as known limitations.
- Reported acceptance (macOS): the maintainer physically tested and accepted the first-run starting point
(Reactive Horizon), the guided Setup and the Tools discovery, selection and install flow on macOS on the final
onboarding line (
a469ba8e, carried unchanged into the release commit). This is the maintainer’s reported result, not an item-by-item record of the checklists below, and it does not stand for any other host or platform. - Stabilization evidence: physical QA of the v0.19 and v0.20 candidates on macOS found the input-ownership, exact-copy, queue, Setup, task-bar and composer-history issues fixed before release (draft PRs #395 and #396 and the onboarding QA record, post-v020-preferences-onboarding.md). Their full retests were not recorded item by item.
- Not performed: any physical Linux terminal (including Omarchy/Hyprland and Linux Fish 3.7), WSL 2, iTerm2, kitty, WezTerm or Windows Terminal; managed Claude against a live account (pass 4); the experimental workspace regions (1E). Linux stays beta on automated CI (Ubuntu, Fedora).
- What does not count: headless PTY fixtures, synthetic keys sent through tmux, and captures of a window driven that way. Each item needs a person at a real terminal with a real keyboard and pointer.
- Build under test: the exact release commit (
v0.20.0). Build it from a clean checkout (npm ci && npm run build) and recordnode dist/index.js --version. - Isolation: a throwaway
HOME(orXDG_CONFIG_HOME), a temporary working directory, and for managed Claude a disposable Claude account directory. Never point a probe at a real account; every secret below is fake.
Results
| Pass | Host and version | OS | Shell and version | Commit (--version) | Result | Notes |
|---|---|---|---|---|---|---|
| Onboarding, guided Setup and Tools | as reported | macOS | as reported | a469ba8e line | Accepted (reported) | maintainer’s physical acceptance; not itemized |
| 1 Workspace regions Off (default) | Ghostty | macOS | zsh | Not recorded | ||
| 1 Workspace regions Off (default) | Terminal.app | macOS | zsh | Not recorded | ||
| 1E Experimental regions (optional, not a release gate) | Ghostty, Terminal.app, tmux | macOS | zsh | Deferred | experimental, Off by default | |
| 2 Background tasks | Ghostty | macOS | zsh | Not recorded | ||
| 2 Background tasks | physical Linux terminal | Linux | Fish 3.7 or Bash | Not run | no physical Linux host | |
| 3 Modules and worktrees | Ghostty | macOS | zsh | Not recorded | ||
| 4 Managed Claude | Ghostty | macOS | zsh | Deferred | Claude plugin toggle off in this release | |
| 5 Regression of v0.19 core | Terminal.app | macOS | Bash or Fish | Not recorded | stabilization fixes from earlier macOS passes |
Pass 1 — workspace regions
The docked sidebar and detail panel are experimental and Off by default in v0.20 (maintainer decision,
workspace-ui-decision.md). The release gate is that Off is really off and that turning them on and off is safe;
the docked regions themselves (1E) are not a release feature and are recorded as Deferred unless someone runs
them. A 1E result never counts as release evidence for anything else.
- 1.0a Fresh QA home:
/sidebar,/panel,/sidebar focus: each prints that the regions are experimental and Off and names Settings → Layout → Workspace sidebar & panel; nothing opens, the composer keeps the keyboard, andtput colsis the full width before and after. - 1.0b Settings → Layout shows Workspace sidebar & panel Off with its experimental description; Setup → Editor
shows the same row.
/keyssays the workspace bindings take no key while it is Off./worktrees,/sessions,/githuband/backgroundwork as usual. - 1.0c Turn it On in Settings,
/sidebarthen/panel focusat 160 columns: both dock andtput colsis the middle width. Turn it Off in Settings: both close at once, focus is back in the composer, andtput colsis the full width again;/sidebaropens nothing until it is turned on again.
1E — experimental regions (optional; turn the setting On first; not a release gate)
- 1.1 At 200, 120, 100, 89, 80, 70 and 40 columns:
/sidebar, then/panel. Wide: both dock, the transcript rewraps to the middle andtput colsin the shell matches the middle width. 70 and below:/sidebaropens a drawer with the keyboard;tput colsis unchanged (opening a drawer never resizes the shell); Esc tucks it and the composer is never covered while it has the keyboard. No horizontal scroll anywhere. - 1.2 Safe glyphs and
NO_COLOR=1: focus, selection and the active item stay distinguishable without color. - 1.3 With the sidebar docked, run
vimandless: the regions hide, the program gets every column, and they come back with focus where it was after the program exits. - 1.4 Inside tmux: the tmux section lists sessions, windows and panes; Enter on another pane switches to it; the
prefix and any
bind -nkeys still reach tmux first (/keysnames them). - 1.5 Enter on a worktree with an empty composer stages
cd -- '…'; with a draft it says the draft is kept. - 1.6 Click the sidebar, the panel and back in the transcript: focus follows; selection and hover in the transcript land on the right rows with the sidebar docked.
- 1.7 A
keymap.jsonbinding Left (empty draft,"replaces": true) tosidebar.focus: Left with a draft still edits; with an empty draft it focuses the sidebar;/keyslists it. On Terminal.app check the Page Up/Down note.
Pass 2 — background tasks
- 2.1
/background run ping -c 100 127.0.0.1(Linux:ping 127.0.0.1): the bar shows it; Up from an empty prompt focuses the bar; Enter shows live output; End follows again after scrolling back. - 2.2
xinterrupts. With a program that ignores SIGINT (/background run sh -c 'trap "" INT; sleep 60'):xsays to wait, then offers terminate; holdingxnever jumps to kill. - 2.3 A dev server (
/background run npx --yes http-server -p 8765, or any local one): stop leaves nothing listening (lsof -i :8765). With a real device or emulator:adb logcatstops andadb devicesstill works. - 2.4 Detach the window while a task runs, reattach with
/resume: the task and its recent output are there and nothing restarted. End the session: the task ends. - 2.5 Task output never appears in the transcript,
/copy, Copy as Report or/compare. - 2.6 By default
tail -f somefile+ Enter runs in the foreground at once. After/background suggestions on, the strip offers it; Enter runs it here;bbackgrounds once; typing another key returns the draft with the key typed. - 2.7 While a foreground command reads input, queued commands run and Up/typing go to the program, never the bar.
Pass 3 — native modules and worktrees
- 3.1 Real projects for .NET, Swift, Zig, Deno, Elixir, Dart, Flutter, Ruby and PHP installed through Homebrew,
asdf, mise or FVM: requested and active versions match what the tools report, and no tool process starts while
collecting (watch with
ps). - 3.2 The build module in a Gradle, Maven, CMake and Bazel project; a Mercurial and a Jujutsu repository.
- 3.3
/github, then/worktreesin the same repository: a worktree whose branch has an open PR offersp, which opens that PR; a fork PR with the same branch name is not offered.
Pass 4 — managed Claude (disposable account only)
- 4.1
/modeland/effortchange the managed target; the change shows as requested until Claude confirms it. - 4.2
/mods: enable and disable a plugin installed in the disposable account; the settings change is Claude’s own; the running managed session reloads it. - 4.3 A multi-line command approval shows every line before you answer.
Pass 5 — v0.19 core on the integrated build
Repeat items 1.1–1.15 of v019-physical-qa.md once on this build in Terminal.app with Bash or Fish, with the default settings (the experimental workspace regions Off). Running half of them again with the regions docked belongs to 1E and is optional.
After the pass
Fill the Results table, attach captures of any failure with the exact keys typed, and open an issue for each failure against v0.20.0. Fixes ship in a patch release; rerun the affected items on that build.