Iterion Desktop — QA Checklist
Walk this list before tagging a release.
Smoke
- [ ]
task desktop:buildproduces a runnable binary on the current OS. - [ ] First launch (no pre-existing config) shows the Welcome wizard. Critical regression check — this exercises the whole Wails-IPC path: Welcome only renders when
isDesktop && firstRunPending, both of which require the SPA to have access towindow.go.main.App.*. If you see the regular editor home page on a clean config, bindings are gone and the AssetServer handler / runtime injection path is broken (the bug ADR-002 was created to fix). - [ ] Open the WebView's DevTools (View → Toggle DevTools in dev builds) and confirm
window.go.main.Appandwindow.runtimeare both defined. If undefined, Wails is not injecting the runtime into the AssetServer handler's HTML response (regression of ADR-002). - [ ] Second launch restores the previous project + window geometry.
- [ ]
Help → Aboutshows the correct version + commit SHA.
Multi-project
- [ ] Add three projects via the Welcome flow +
+ Add project…in the switcher. All appear in the recent list. - [ ] Cmd+P opens the switcher, fuzzy match works on name and path.
- [ ] Switching projects reloads the SPA on the right working directory.
- [ ] Post-onboarding sanity: complete the Welcome flow on a clean config, then on the studio home page verify that * the file list at the left actually populates (no spinner stuck + no
ERR_CONNECTION_REFUSED), * a workflow can be opened and the Run console connects its/api/ws/runs/...WebSocket without errors in DevTools. In default daemon mode this proves the GUI attached to or spawned the selected project's headless daemon and that the AssetServer handler's/api/*proxy points at itsserverURL. WithITERION_DESKTOP_ATTACH_DAEMON=0, the same check covers the fallback in-process server's fresh ephemeral bind and proxy cache invalidation. - [ ] Cmd+P switch between two projects, then on the new project verify the same two checks above. The window URL in DevTools should remain the AssetServer URL (
wails://wails/on Mac/Linux,http://wails. localhost/on Windows) — the handler retargets invisibly to the selected project's loopback upstream. The DevTools "Network" tab should show/api/*requests resolving against the AssetServer origin (forwarded to that selected local server) and/api/ws/...requests dialingws://127.0.0.1:<selected_port>/api/ws/runs/...directly. Current local desktop builds omit any token query parameter becauseGetSessionTokenreturns an empty string; only a future hosted-auth desktop flow should add one. - [ ] Removing a project leaves its filesystem untouched.
Settings
- [ ] Adding an API key via Settings → API keys → Save persists across restart.
- [ ] If a shell env var of the same name is already set when the desktop launches, the Settings page shows the "shadowed by env" badge for that key.
- [ ] Deleting a key removes the badge and frees the keychain slot.
Workflows
- [ ] A bot scaffolded by
iterion bots create(or any shipped workflow underbots//examples/) runs end-to-end with real-time event stream. - [ ] A workflow that uses
claude_codeeither succeeds (CLI installed) or fails with a clear error message (CLI missing). - [ ] Worktree finalisation: a workflow with
worktree: autoends with a visible new branch on the chosen target.
Lifecycle
- [ ] Closing the window while a run is in-flight triggers the 60s drain and flips the run to
failed_resumable. - [ ]
iterion resume --run-id …(CLI) successfully resumes the run. - [ ] WebSocket reconnects after macOS clamshell sleep (close lid 30s, open) — stream resumes without manual reload.
Single-instance
- [ ] Launching a second instance from Finder/Dock surfaces the existing window and the second process exits silently.
- [ ] If the lockfile is stale (kill -9 the running process), the next launch acquires the lock cleanly.
Auto-update
- [ ] Help → Check for Updates… reports "up to date" when the running version equals the manifest's
version. - [ ] When pointing
ITERION_UPDATE_MANIFEST_URLat a local manifest with a higher version, the Updates tab proposes the new version. - [ ] Tampering with the manifest after signing is rejected with a clear error.
- [ ] Tampering with the artefact after signing is rejected (sha256 fail).
- [ ] After a successful download + verify, the binary is replaced atomically (no half-written
.app/.exe/.AppImage).
Cross-platform
- [ ] Run the smoke checklist on macOS arm64 + amd64.
- [ ] Run on Windows 11 + Windows 10.
- [ ] Run on Ubuntu 22.04 + Fedora latest from the AppImage.
Release artefacts
- [ ] Tagging
vX.Y.Zon a release branch produces 6 binaries + manifest + every.sigin the GitHub Release. - [ ] Manifest URL
releases/latest/download/iterion-desktop-manifest.jsonresolves to the new manifest.
