Superset Updates & Release Notes
80 updates curated from 83 sources by the Releasebot Team. Last updated: Aug 10, 2026
- Aug 8, 2026
- Date parsed from source:Aug 8, 2026
- First seen by Releasebot:Aug 10, 2026
Resume interrupted agent sessions, a dedicated Pull requests view, and per-project controls
Superset adds interrupted agent session resume, a deeper pull requests view, and richer project settings with icons, colors, naming instructions, and sparse checkout. It also brings an interactive CLI browser, broader model and skill support, plus bug fixes and workflow improvements across the app.
Resume Interrupted Agent Sessions #6253 #6265
Resume Interrupted Agent Sessions
A dead terminal no longer means a lost conversation. When an agent session ends without a clean exit (laptop reboot, crashed process, killed terminal), the pane shows an interrupted banner. Click Resume and the agent relaunches with its own resume command (claude --resume, codex resume, amp threads continue, and so on) in the same pane, conversation intact.
- Works across every built-in agent with a resume command; adjust it per agent under Settings → Agents → Resume args
- Panes migrated from the original interface resume too, so the 2.0 upgrade no longer strands in-flight sessions
- Scriptable from the CLI: superset agents create --resume-session
The interrupted-session banner on a terminal pane offering to resume Claude
A Dedicated Pull Requests View #5975 #6201
A Dedicated Pull Requests View
Tasks and pull requests each get their own sidebar destination, and the new PR view goes a lot deeper, contributed by @Roshvan:
- Filter across several repositories at once, plus by author, review state, and open/all
- CI check summaries in the list and a full checks section in PR detail, so you don't leave Superset to see what's red
- One click adds any PR to a workspace; Linear and GitHub Issues stay as sources inside Tasks
Open it from Pull requests in the sidebar.
The Pull requests view filtering three repositories with check summaries on every row
Make Each Project Yours #6249 #6250 #6034
Make Each Project Yours
Project settings picked up three new controls, all under Settings → Projects:
- Icon and color - pick a glyph and accent color per project (colors also carry over from the original interface on import)
- Naming instructions - a free-text prompt that steers AI-generated workspace titles and branch names, like "include the ticket id" or "prefix branches with fix/ or feat/"
- Sparse checkout - list the folders your worktrees actually need and new workspaces materialize only those, contributed by @ihvo. On a big monorepo this makes workspace creation dramatically lighter
The project icon and color picker open on a project settings page
Naming instructions and branch prefix fields on the project settings page
A CLI That Shows You Around #6273 #6270
A CLI That Shows You Around
Run superset with no arguments in any terminal and you get an interactive command browser: arrow through the whole command tree, read each command's flags, and commands with required inputs walk you through a guided form that shows the exact command before running it. superset --help got the same treatment with grouped commands and copy-paste examples. There's also a built-in Superset CLI preset in the workspace preset bar for a one-click tour.
The interactive command browser after running superset with no arguments
Improvements
- Superset skills for every agent - superset:* skills (orchestrate, setup, doctor, standup, 10x, and more) now provision automatically for Claude Code, Codex, Kimi, Vibe, and Grok, including superset:feedback for sending feedback straight to the team
- Claude Opus 5 and GPT-5.6 Terra/Luna - the newest models joined the model pickers across chat, Codex, Cursor, and OpenCode
- Retry failed automations - failed runs get an inline retry button, plus a retry-all button when several fail at once
- The public roadmap is back - refreshed and synced from our internal roadmap at superset.sh/roadmap
- Settings search highlights matches - the matched text lights up on every settings page
- Resources menu - per-workspace CPU and memory now sits in a top-level menu, or press ⌘⇧U
- Agent hooks stay in their lane - hooks only fire in Superset terminals, and each agent gets a hooks toggle in Settings → Agents
- Polygraph harness picker - choose whether polygraph drives Claude, Codex, or OpenCode, contributed by @MaxKless
- Sign out from onboarding - switch accounts without finishing setup first
- Docs overhaul - a new onboarding funnel, six workflow recipes with copyable prompts, CLI terminal command docs, and a demo video on getting started
Bug fixes
- Opening a workspace in Zed works on every Zed release channel, contributed by @aaronrosenthal
- Dragging a single-pane tab no longer corrupts the pane layout
- Terminal input no longer duplicates under load, long agent launch commands no longer truncate, and the terminal stream recovers after oversized frames, the last contributed by @andyst-dev
- Workspace creation tolerates slow or failing post-checkout git hooks instead of hanging
- Teardown scripts run when workspaces are deleted from the CLI, SDK, or MCP, not just the app
- Image attachments on the new-workspace screen survive navigating away and back
- Errors in billing, API keys, secrets, base-branch picking, and automation edits surface as toasts instead of failing silently
- New workspaces default to the project you're currently working in
- The Projects chevron stays visible while collapsed, doubled borders are gone, and the local main row lost its accidental remove button
- Timed-out background tasks no longer leak zombie processes
- Electron and dependency security updates, including a fix contributed by @DivyamTalwar
- Aug 8, 2026
- Date parsed from source:Aug 8, 2026
- First seen by Releasebot:Aug 10, 2026
feat(desktop): add Resources menu with Cmd+Shift+U shortcut - #6267
Superset adds a new Resources menu with a Check Resources item that opens the existing CPU and RAM monitor, making the feature easier to find with the mouse while keeping the customizable Cmd+Shift+U shortcut unchanged.
Summary
- Add a top-level Resources menu (alongside File/Edit/View/Window/Help) with a "Check Resources" item that opens the existing resource usage (CPU/RAM) view — for mouse-driven discoverability of the feature.
- The ⇧⌘U shortcut that already opened this view continues to be owned by the renderer's user-customizable hotkey system (Settings > Keyboard), unchanged by this PR.
Why / Context
Cmd+Shift+U already opened the resource monitor via a renderer useHotkey binding, but "Resources" wasn't discoverable anywhere in the UI (menu or otherwise) for users who don't know the shortcut.
An earlier version of this PR also added the shortcut as a native Electron menu accelerator. Cubic's review correctly flagged that as a regression: CHECK_RESOURCES is rebindable/disable-able via Settings > Keyboard (hotkeyOverridesStore, persisted in renderer localStorage, no main-process access), and a native accelerator is unconditionally live on macOS — it would fire and ignore a user's override or disable. That's been reverted; the renderer's useHotkey remains the sole source of truth for the actual keybinding, matching what the command palette already displays.
How It Works
- main/lib/menu.ts: new "Resources" → "Check Resources" menu item, no accelerator. Click emits a check-resources event via the shared menuEmitter.
- lib/trpc/routers/menu.ts: added check-resources to the MenuEvent union and wired it into the existing observable subscription.
- renderer/commandPalette/CommandPaletteHost.tsx: useHotkey("CHECK_RESOURCES", ...) still owns the keyboard shortcut (override-aware); a new subscription to the check-resources menu event triggers the same action when the menu item is clicked.
Manual QA Checklist
- "Resources" menu appears in the app menu bar between Window and Help
- Clicking Resources → Check Resources opens the resource usage view in the command palette
- Cmd+Shift+U still opens the same view
- Rebinding or disabling CHECK_RESOURCES in Settings > Keyboard changes/disables the shortcut, and the command palette hint reflects it (menu click still works regardless)
- Behavior verified after app restart (native menu is main-process, not renderer-hot-reloaded)
Testing
- bun run lint:fix (clean)
- bun run typecheck --filter=@superset/desktop (passes)
- Not yet verified end-to-end against a running app — no dev instance was running for this worktree, and native OS menu chrome isn't inspectable via CDP. Flagging for reviewer/manual QA per the checklist above.
Known Limitations
- No automated test coverage added; this is a small, mechanical menu/IPC wiring change consistent with existing untested sibling menu items (Settings, Keyboard Shortcuts).
- The menu item doesn't display the shortcut hint text — Electron accelerators are unconditionally live on macOS, so showing one would reintroduce the override-bypass bug above. The shortcut is discoverable via the command palette and Settings > Keyboard instead.
Summary by CodeRabbit
- New Features
- Added a Resources section to the application menu with a Check Resources option.
- Selecting Check Resources opens the resource-checking command palette.
- Native menu actions now use the same resource-checking workflow as the configurable keyboard shortcut.
- Existing keyboard shortcuts for opening resource checks remain available and customizable.
Additional notes
Good catch, confirmed valid — pushed a fix in commit 2994a4f. CHECK_RESOURCES is user-customizable/disable-able via Settings > Keyboard (hotkeyOverridesStore, renderer-only localStorage, no main-process access). A native Electron accelerator is unconditionally live on macOS regardless of that override, so it would have silently ignored a rebind or disable. Reverted to the renderer owning the keybinding via useHotkey("CHECK_RESOURCES", ...) (override-aware, matches what the command palette displays); the "Resources" menu item now has no accelerator and only opens the view on click, for mouse-driven discoverability.
Original source All of your release notes in one feed
Join Releasebot and get updates from Apache and hundreds of other software products.
- Aug 7, 2026
- Date parsed from source:Aug 7, 2026
- First seen by Releasebot:Aug 10, 2026
docs(recipes): add command-your-fleet recipe and CLI variations to existing recipes
Superset adds a new "Command Your Fleet from the CLI" recipe and CLI-friendly variants for race-agents, fan-out-refactor, and nightly-audit, giving users copy-paste loops for reading terminals, broadcasting follow-ups, and running multi-agent workflows.
Summary
• New recipe Command Your Fleet from the CLI (recipes/command-your-fleet): read every agent's terminal across a project, broadcast a follow-up to all of them, and clean up — three composable shell loops over workspaces list + terminals list/read/send.
• Added "From the CLI" variations to existing recipes: one-paste agent race loop (race-agents), one-worker-per-slice loop (fan-out-refactor), and a create-and-fire-in-one-pipe automation variant (nightly-audit).
• Registered the new page in meta.json after nightly-audit.Why / Context
The recipes were UI-first (⌘N flows) with almost no CLI presence, while the CLI docs cover commands individually but never compose them. These loops came out of scripting a CLI walkthrough video: the fleet read/broadcast patterns weren't documented anywhere, and the race/fan-out recipes had no copy-paste path for CLI users.
Testing
• bun run lint passes (docs-only change)
• The fleet read/broadcast loops were run for real against a local demo project (multiple workspaces, live agent sessions) and produce the documented output; race/fan-out loops use the same verified workspaces create --agent invocationSummary by cubic
Adds the "Command Your Fleet from the CLI" recipe and CLI one-paste variations to race-agents, fan-out-refactor, and nightly-audit. Documents fleet read/broadcast/cleanup loops, now with a note that loops are host-scoped and support --host for remote hosts.
New Features
• New recipe: Command Your Fleet from the CLI — sweep terminal logs, broadcast follow-ups, and clean up with shell loops using workspaces list + terminals list/read/send; note host-scoped behavior and remote sweep via --host .
• Added "From the CLI" snippets:
■ race-agents: start a multi-agent race in one loop
■ fan-out-refactor: launch one worker per slice
■ nightly-audit: create and run an automation in one pipe
• Registered the new page in meta.json.Summary by CodeRabbit
• Documentation
◦ Added a recipe for managing multiple agent workspaces, including viewing output, sending follow-up instructions, deleting workspaces, filtering fleets, targeting hosts, and monitoring agents.
◦ Added examples for running parallel migration refactors across separate workspaces and branches.
◦ Added a nightly audit automation workflow with JSON output and immediate execution.
◦ Added a workflow for launching multiple agents from a shared prompt.
◦ Updated documentation navigation to include the new fleet management recipe.Additional Notes
• Fleet enumeration is host-scoped: If a project has agent workspaces on multiple hosts, these unqualified workspaces list loops enumerate only the current host, causing remote agents to be omitted from reads and broadcasts and leaving their workspaces untouched during cleanup.
• Expose terminal-list failures: Both 2>/dev/null redirections hide superset terminals list errors. When a listing fails, jq receives no sessions and the loop continues as if the workspace has no terminals.This update adds significant CLI-oriented fleet management capabilities and documentation improvements, enabling users to better manage multiple agent workspaces and automate workflows from the command line.
Original source - Aug 6, 2026
- Date parsed from source:Aug 6, 2026
- First seen by Releasebot:Aug 10, 2026
fix(desktop): stop duplicating backpressured PTY stdin writes - #6222
Superset fixes desktop terminal host input corruption under backpressure, preventing duplicate stdin writes, frame misalignment, and frozen sessions. It also adds regression coverage for byte-for-byte input handling and oversized frame recovery.
Follow-up to #6184, which fixed the symptom of #6153 (a poisoned decoder froze the session forever). This fixes the source of the corruption.
flushSubprocessStdinQueue(apps/desktop/src/main/terminal-host/session.ts) wrotequeue[0]and, whenstdin.write()returned false, returned without dequeuing that chunk. Node buffers the chunk regardless — a false return only means the internal buffer passed its high-water mark. So the same chunk was written again on drain, injecting duplicate bytes into the framed stdin stream and shifting every following frame boundary. The subprocess then read payload text as a 5-byte header, which is exactly why #6153 reported ASCII-looking lengths: a paste of x characters yields 2021161080 = "xxxx" as u32LE.The fix dequeues the chunk as soon as
write()accepts it and uses the return value only to arm the drain and stop sending more. The 2 MB memory bound is unchanged (later frames still queue and the cap still drops them), and this matches the siblingflushNotifyQueueinlib/terminal-host/client.ts, which already shifts before writing — which is why the client path never had this bug.How I tested it
End-to-end in the dev desktop app (v1 terminal pane, the surface that routes through terminal-host), same 20 × 1.2 MB paste flood each time:
Build frame too large errors Session after the flood before #6184 94, all one identical length dead — input never echoed again #6184 only 499 across ~50 distinct lengths alive #6184 + this 0 alive, echo executes- New regression test
Terminal Host Session stdin backpressuredrives the real Session through a backpressuring fake stdin and asserts the reassembled payload equals the original paste byte for byte. It fails without this fix (PtySubprocess IPC frame too large: 2021161080) and passes with it. - Also rewrites the decoder test that
fix(desktop): resync PTY IPC decoder after oversized frame #6184's review flagged (CodeRabbit + cubic + Greptile): it claimed to cover an oversized header sharing a chunk with a valid frame, but fed them in separatepush()calls, duplicating the test above it. It now builds the shared chunk and asserts the real semantics — a corrupted header has no framing marker to resync against, so trailing bytes in that chunk are abandoned and the next chunk decodes normally. That documents the residual behavior Greptile raised; with corruption no longer occurring, the path is not reachable from this bug class. bun test apps/desktop/src/main/terminal-host/— 40 pass, 0 fail.bun run lintclean.bun run typecheck— 37/37.
Checklist
- PR title follows conventional commits (type(scope): subject)
- bun run lint and bun run typecheck pass
Summary by cubic
Fixes duplicated PTY stdin writes under backpressure in the desktop terminal host, preventing frame corruption and frozen sessions. Each chunk is now sent exactly once, even when
stdin.write()returns false.Bug Fixes
- Dequeue the head chunk immediately after
stdin.write(); use the return value only to pause on drain. This stops duplicate bytes that misalign framed stdin (root cause behind [bug] Large Codex input freezes terminal with PtySubprocess IPC frame too large #6153; follow-up tofix(desktop): resync PTY IPC decoder after oversized frame #6184). - Matches
flushNotifyQueuebehavior; 2 MB queue cap unchanged. - Added a regression test for backpressured stdin that verifies byte‑for‑byte integrity, and corrected the decoder test to reflect real recovery semantics.
Summary by CodeRabbit
Bug Fixes
- Fixed terminal input handling under backpressure to prevent queued input from being written more than once.
- Improved recovery when processing oversized terminal data, ensuring trailing bytes are discarded correctly and subsequent data remains readable.
Tests
- Added regression coverage for terminal input buffering and oversized data recovery.
Greptile Summary
Fixes v1 desktop terminal input corruption by removing each accepted stdin frame from the application queue even when Node signals backpressure.
- Prevents backpressured frames from being written again after drain.
- Adds a regression test that verifies byte-for-byte input preservation across repeated drain cycles.
- Corrects decoder coverage for an oversized header and trailing frame data in the same chunk.
Confidence Score: 5/5
The PR appears safe to merge with no actionable correctness or security issues identified.
The revised queue lifecycle matches Node stream semantics: a false write result still accepts the chunk, which is now removed exactly once while later frames remain queued until drain.
Original source - Aug 5, 2026
- Date parsed from source:Aug 5, 2026
- First seen by Releasebot:Aug 10, 2026
feat(desktop): add sign-out option to onboarding flow
Superset adds a Sign out button to the onboarding footer, giving users a way to exit Setup Superset and switch accounts if they land in the wizard signed into the wrong account. It reuses the existing sign-out flow and redirects back to sign-in after logout.
Summary
• Add a "Sign out" button to the onboarding footer (next to "Get support"), so a user who lands on onboarding signed into the wrong account has a way out.
Why / Context
The onboarding wizard ("Setup Superset" → connect agent tools → create/add a project) previously had no exit affordance — only "Get support" and "Continue". A user stuck there (e.g. signed into the wrong account) had no way to sign out short of force-quitting the app.
How It Works
Reuses the existing useSignOut() hook (same one used in Account Settings and the org dropdown menu) in OnboardingNavigation. The _authenticated route guard already redirects reactively to /sign-in once the session clears, so no extra navigation logic was needed.
Manual QA Checklist
Verified end-to-end via CDP against a running dev build (not just a synthetic handler call):
- "Sign out" renders in the onboarding footer alongside "Get support"
- A real synthetic click (Input.dispatchMouseEvent) on the button triggers the actual sign-out flow (posthog reset, electron tRPC mutation, better-auth signOut)
- App redirects to /sign-in after sign-out completes
- Confirmed via screenshots before/after the click
To reach the onboarding screen for a normally-onboarded dev account, the onboardedAt field was spoofed client-side at the network layer (CDP Fetch domain intercepting /api/auth/get-session) — no database writes were involved, and the actual sign-out click and its consequences were completely real.
Testing
• bun run lint:fix (clean)
• cd apps/desktop && bun run typecheck (clean)
Summary by cubic
Adds a "Sign out" button to the onboarding footer (next to "Get support") so users can switch accounts from the wizard without quitting the app. Uses the existing useSignOut() hook and now awaits it to handle errors correctly; the _authenticated guard redirects to /sign-in after the session clears.
Summary by CodeRabbit
• New Features
◦ Added a “Sign out” option to the onboarding navigation.
◦ Positioned sign-out access alongside support and continuation controls.
◦ Users can now securely exit their session directly from the onboarding flow.Greptile Summary
Adds an onboarding footer action that lets users sign out when they entered setup with the wrong account.
• Reuses the desktop useSignOut() hook.
• Adds a ghost “Sign out” button and icon beside the existing support action.
• Relies on the authenticated route guard to redirect after session clearance.Confidence Score: 5/5
The PR appears safe to merge, with the new onboarding action correctly delegating to the established sign-out flow.
The added button invokes the existing desktop sign-out hook, and successful session clearance is handled by the authenticated route’s reactive redirect.
Original source Similar to Superset with recent updates:
- Qlik Sense updates22 release notes · Latest May 1, 2026
- Qlik Cloud updates274 release notes · Latest Aug 6, 2026
- Tableau updates22 release notes · Latest Feb 24, 2026
- ThoughtSpot Cloud updates19 release notes · Latest Jul 1, 2026
- Power BI updates53 release notes · Latest Jul 2, 2026
- Tableau Server updates33 release notes · Latest Jul 21, 2026
- Aug 5, 2026
- Date parsed from source:Aug 5, 2026
- First seen by Releasebot:Aug 10, 2026
docs: overhaul onboarding, add workflow recipes, and refresh docs site UI
Superset revamps its docs with a guided onboarding funnel, task-focused workflow recipes, and a refreshed site UI. It also adds pages for shipped features like Agent Status, Tasks & PRs, Editor & Files, and Slack Integration, plus a new landing page, FAQ, and troubleshooting help.
Content
- Rebuilds the docs around a proper onboarding funnel, adds task-oriented workflow recipes, documents several shipped-but-undocumented features, and refreshes the docs site UI.
- New onboarding funnel: "What is Superset?" pitch → Install → "Your First Parallel Session" tutorial → "The Superset Model" concepts page
- Recipes (new section): six named workflows with copyable prompts — racing agents on one task, parallel workstreams, clearing PR feedback in the background, fanning out refactors, nightly audit automations, and agent orchestration
- New feature pages: Agent Status & Notifications, Tasks & PRs, Editor & Files, Slack Integration — features that shipped in the changelog but had no docs home
- FAQ rewritten + Troubleshooting page added: answers sourced from recurring support threads, GitHub issues, and community questions (org/account mix-ups, host-offline semantics, terminal environment differences, update issues, worktree locations, and more)
- Community & Support page under Help mirroring the website's community links
- Docs landing page at / with start-here, task-oriented, and build-on-it card sections (replaces the redirect to /overview)
Structure
- Sidebar regrouped: Get Started → Recipes → Core Features → CLI → SDK → Integrations → Configuration → Help (the old catch-all "Guides" section split by content type)
- Section eyebrows above page titles; clean section names in search breadcrumbs (icon prefixes no longer leak into search results)
UI
- Brand color tokens; orange section labels and page eyebrows; dithered selected-state in the sidebar
- Card grids with icons, product screenshots on major pages, minimal search field, nav links + Download CTA
- Fixed: landing page Copy Markdown fetched /.mdx (404)
Verification
- Production build green (138 static pages), typecheck and lint clean
- Full crawl: every page, internal link, image, and anchor checked; zero console errors across key pages
- Interaction pass via headless Chrome: search, TOC, prev/next, mobile layout, light mode
Summary by cubic
Revamped the docs with a guided onboarding funnel, practical workflow recipes, and a refreshed site UI so new users can get productive fast. Added a new landing page at /, expanded feature docs, and tightened navigation and copy.
New Features
- Guided onboarding: overview → install → “Your First Parallel Session” → “The Superset Model”
- Recipes with copyable prompts: race agents, parallel workstreams, PR feedback, fan-out refactors, nightly audit
- New/updated feature docs: Editor & Files (built-in editor, cross-workspace search), Agent Status & Notifications (incl. dock badge), Tasks & PRs, Slack Integration, Agent Orchestration
- Diff Viewer docs now cover the Review tab (PR comments, sync, and check status)
- FAQ rewritten, new Troubleshooting, and Community & Support; sidebar regrouped by content type
UI Improvements
- Brand color tokens with section “eyebrows,” improved contrast, cleaner search and breadcrumbs
- Card grids with icons and screenshots; nav bar adds Changelog/Website links and a Download CTA
- Dithered selected state in the sidebar and refined prose styling
- Intel download link on Install; fixed “Copy Markdown” 404 on the landing page; redirect /docs → /
Summary by CodeRabbit
- Documentation
- Added a redesigned documentation landing page, installation guide, first-workspace walkthrough, and Superset concepts overview.
- Added guides for agent status, orchestration, tasks and PRs, editor workflows, Slack integration, troubleshooting, community support, and FAQs.
- Added practical recipes for parallel workstreams, refactors, PR feedback, nightly audits, and racing agents.
- Reorganized navigation, expanded cross-links, and improved documentation page structure and redirects.
- Style
- Refined sidebar, navigation, branding, page layouts, imagery, and active-link presentation.
- Added reusable cards, steps, icons, and visual background treatments.
- Aug 5, 2026
- Date parsed from source:Aug 5, 2026
- First seen by Releasebot:Aug 10, 2026
fix(desktop): stop pane layout corruption when dragging a single-pane tab
Superset fixes a crash in pane drag and drop by guarding react-mosaic updates on leaf-root tabs, preventing TypeError and layout corruption while keeping cross-tab dragging and structural updates working.
Problem
TypeError: Cannot create property 'splitPercentage' on string 'pane-…' thrown from immutability-helper in the renderer (Sentry DESKTOP-HA, recurring since May as DESKTOP-A8/2D, ~160 events).
Root cause
react-mosaic only connects a MosaicWindow's drag source when path.length > 0 (draggableAndNotRoot in MosaicWindow.tsx), because its drag lifecycle mutates the parent branch of the dragged node:
- drag start: mosaicActions.hide(path) → createHideUpdate(path) → {path: dropRight(path), spec: {splitPercentage: {$set: 100}}}
- drag end without a drop: updateTree([{path: dropRight(path), spec: {splitPercentage: {$set: undefined}}}])
RootDraggable in BasePaneWindow deliberately re-enables the drag source for root panes (path === []) so a single pane can be dragged to another tab. For a tab with one pane the layout root is a bare string leaf, so both updates target path [] and immutability-helper tries to assign a property on a string → TypeError. The same shape mismatch occurs for any path that resolves to a leaf after the tree changed shape mid-drag.
Fix
guardMosaicActions wraps the mosaic root actions the window sees: an update whose spec is not a $set is skipped when its path does not resolve to a branch node in the current tree. $set updates (splits, drops, removals) pass through untouched, so cross-tab drag of a single pane keeps working; the meaningless hide/restore at a leaf root becomes a no-op instead of a crash.
Verification
- New unit tests in mosaic-update-guards.test.ts, including a reproduction asserting that react-mosaic's own hide update throws on a leaf root.
- bun test over TabView/ and stores/tabs/: 116 pass, 0 fail.
- bun run typecheck clean for the touched files (pre-existing @superset/chat-legacy module-resolution errors elsewhere are unrelated).
Summary by cubic
Stops pane layout corruption and TypeError when dragging a single-pane tab. Guards react-mosaic-component updates so leaf-root changes become no-ops while cross-tab dragging still works.
Bug Fixes
- Wrapped MosaicContext with guardMosaicActions to skip non-$set updates when the path resolves to a leaf or goes stale.
- Let $set updates through (splits, drops, removals) to keep drag-and-drop behavior intact.
- Added unit tests in mosaic-update-guards.test.ts; relevant test suites pass.
Greptile Summary
The PR prevents react-mosaic drag lifecycle updates from applying branch-only mutations to leaf pane nodes.
- Wraps each pane window’s mosaic actions with current-tree validation.
- Continues forwarding structural $set updates needed for pane splits, drops, and removals.
- Adds focused tests for leaf roots, branch roots, and forwarded structural updates.
Confidence Score: 5/5
The PR appears safe to merge, with no concrete changed-code regression or security issue identified.
The guard validates branch-only mutations against the current mosaic tree while retaining structural updates required by pane drag-and-drop behavior, and the accompanying tests cover the relevant leaf and branch cases.
Original source - Aug 5, 2026
- Date parsed from source:Aug 5, 2026
- First seen by Releasebot:Aug 10, 2026
fix(desktop,host-service): tolerate slow or failing post-checkout hooks during worktree creation - #6168
Superset improves worktree creation and PR checkout by tolerating slow or failing post-checkout hooks when the worktree is actually in place. It raises timeouts to 10 minutes and shares the fix across desktop and host-service for more reliable setup.
Summary
- Workspace creation no longer fails when a repo's post-checkout hook exits non-zero or runs long: if the worktree is verifiably in place (registered + valid HEAD/branch), the hook error is demoted to a warning and creation succeeds.
- Worktree-add / PR-checkout timeouts raised from 2 min to 10 min so hooks that install dependencies on fresh worktrees can finish.
- The tolerance helper moved to @superset/shared/git-hook-tolerance and now also guards the host-service (v2) addBranchWorktree path, so both creation surfaces behave identically.
Why / Context
A user (drew) hit "Workspace setup failed" on every creation attempt in a repo whose post-checkout hook installs dependencies and builds packages (Fresh worktree detected — installing dependencies… Done in 1m 5.7s Building packages…). Two compounding bugs:
- The 120s exec timeout killed git mid-hook. Checkout of ~11k files + a 1m+ install blows past 120s; Node SIGTERMs git and creation reports failure — with the worktree fully checked out on disk.
- The existing hook tolerance (SUPER-594) was gated backwards. It pattern-matched the error text for the literal string post-checkout before checking whether the worktree actually exists. A timeout kill (or any hook that doesn't print that marker) never engages it.
Each failure stranded a fully valid worktree + branch, so retries failed on "already exists". These failures are also invisible in telemetry: updateProgress("failed") is never captured, only thrown tRPC errors are — the sibling PR-checkout path shows the same fatal: '' already exists loop in PostHog (one user hit it 42×).
How It Works
- runWithPostCheckoutHookTolerance (now in @superset/shared/git-hook-tolerance) consults didSucceed() on any error and tolerates when ground truth confirms the operation landed. The post-checkout text gate is gone.
- Desktop execWorktreeAdd: ground truth = worktree registered and rev-parse --verify HEAD resolves (a half-created worktree can stay registered); default timeout 600s. Same bump for gh pr checkout and its FETCH_HEAD fallback, which also run hooks.
- Host-service addBranchWorktree: both worktree-add variants wrapped; ground truth = existing findWorktreeAtPath(git, worktreePath, plan.branch) (registered at path with the planned branch — stricter than the desktop probe; this path never detaches). No timeout change needed there: simple-git never had one, so slow hooks were never killed on v2.
Manual QA (CDP, dev desktop from this branch, before/after evidence gate)
Repro repo with a switchable post-checkout hook; "before" = this fix stashed, "after" = this branch. Desktop runs on the v1 surface (drew's surface — the error format Command failed: git -C … is the desktop execFile path).
Before (reproduces both report screenshots):
- Hook exits non-zero (no "post-checkout" marker in output) → step: failed in 2s; error text matches the user report byte-for-byte; failure screen pixel-matches the screenshot
- Hook sleeps 130s → step: failed at 122s (timeout kill), output truncated mid-hook — the second report screenshot
- Ground truth both times: git worktree list shows a fully valid worktree with the branch checked out — the app failed anyway and stranded it
After (same scenarios, same observations):
- Hook exits non-zero → step: ready in 2s
- Hook sleeps 130s → step: ready at 132s (hook simply completes inside the new ceiling; no tolerance needed)
- Stranded before-workspace recovers via a real-UI "Retry Setup" click → ready in 2s, workspace fully functional (old code looped on "already exists" here)
- Main-process log shows the tolerance warning firing exactly where expected, and nowhere else
- Host-service v2 E2E (post-refactor): project.create + workspaces.create via host tRPC against the failing-hook repo → workspace created, worktree registered with the planned branch; [hs:…] … (non-fatal) log line proves the shared helper ran in the host-service process
Creation was triggered via the same tRPC mutations the UI forms call (the folder picker is a native dialog CDP can't drive); navigation, the failure screen, the Retry Setup click, and screenshots were real UI.
Testing
- bun run typecheck (repo-wide, exit 0)
- bun run lint (exit 0)
- bun test on the three touched suites: 44 pass — desktop git.test.ts (4 new edge cases: no-marker hook failure, git SIGTERM'd mid-hook with worktree intact, invalid start point still throws, pre-existing plain dir still throws), shared git-hook-tolerance.test.ts, new host-service worktree-add-tolerance.test.ts (new-branch + existing-branch tolerance, invalid start point)
- Mutation-verified: re-adding the old text-pattern gate fails the timeout-shape test; disabling didSucceed fails exactly the two host-service tolerance tests
Design Decisions
- Ground truth over pattern matching: error-text heuristics can never enumerate every hook failure shape (timeout kills carry no marker at all). Checking the worktree's actual state is exact, and conservative in the right direction — when the probe itself fails, the original error is rethrown.
- Share the policy, not the git clients: desktop (shell-PATH execFile) and host-service (simple-git factory with credential/env handling) keep their own plumbing; with v1 sunsetting, unifying the exec layers is churn with no user benefit. Only the decision logic is shared.
- Exported addBranchWorktree / BranchSourcePlan so the host-service behavior is testable against real git repos.
Known Limitations
- A timeout kill can orphan the hook's child processes (e.g. a package install continuing in the background). The 10-min ceiling makes this rare; creation now succeeds regardless.
- Stranded detached worktrees (PR flow killed mid-hook before gh pr checkout ran) do not self-heal on retry: a detached leftover is indistinguishable from a foreign checkout, so the "already exists" error surfaces — same as before this PR. Branch-add strandings (the common case) do recover. Safe PR-retry self-healing needs a provenance marker; follow-up.
- If the timeout kills git before checkout completes, nothing is registered, didSucceed is false, and the error surfaces as before — genuine failures still fail.
Follow-ups
- Move user hooks out of the creation critical path entirely (core.hooksPath= during add, then run the hook as a streamed, non-fatal setup step).
- workspace_init_failed telemetry — these failures are currently invisible; this bug was only found via user screenshots.
- Clean up stranded worktrees/branches from historical failed attempts and make plain Retry self-heal (dedup at creation time instead of the post-failure button).
- Humanize the failure view: map common git fatals to one-line actionable messages; the raw command spew is line-clamped to 3 lines, which hides the actual fatal: line.
Summary by cubic
Tolerates slow or failing post-checkout hooks during worktree creation and PR checkout by verifying ground truth (registered worktree, expected branch, resolvable HEAD, and PR head OID) so setup succeeds when checkout actually completed. Timeouts are raised to 600s, and the logic is shared via @superset/shared/git-hook-tolerance across desktop and host-service.
- Bug Fixes
- Demote errors only when ground truth confirms success:
- Branch adds: worktree is registered at the path with the requested branch; HEAD resolves. Detached adds only count when this call registered the path (detached retries are not tolerated).
- PR checkout: tolerate only when the local branch is checked out and HEAD equals the PR’s headRefOid (covers gh pr checkout and the FETCH_HEAD fallback).
- Demote errors only when ground truth confirms success:
- Refactors
- Moved tolerance helper to @superset/shared/git-hook-tolerance and adopted in desktop and host-service; host-service now also requires a resolvable HEAD.
- Exported addBranchWorktree and BranchSourcePlan; added targeted tests in desktop, host-service, and shared packages.
Summary by CodeRabbit
- New Features
- Worktree creation now succeeds when post-checkout hooks fail after the worktree is otherwise valid.
- Supports new branches, existing branches, detached worktrees, and pull request checkouts.
- Longer operations have increased time limits.
- Bug Fixes
- Prevents incomplete or mismatched worktrees from being marked successful.
- Invalid references and conflicting worktrees continue to fail safely.
- Successful operations with hook failures now show non-fatal warnings.
- Aug 3, 2026
- Date parsed from source:Aug 3, 2026
- First seen by Releasebot:Aug 10, 2026
feat(desktop): add retry buttons for failed automations - #6139
Superset adds retry actions for failed automations in the Automations tab, including inline per-row retry and a Mine-tab Retry all button. It uses the existing automation.runNow mutation, shows live status updates, and keeps host-offline and stale-agent handling in place.
Adds user-facing retry for automations in the Automations tab. A retry is a fresh dispatch through the existing automation.runNow mutation — no backend changes.
- Per-row Retry: failed rows (skipped_offline / dispatch_failed) get an inline retry icon next to the red "failed" label in the Last run column. Hover-revealed (matching the row-actions pattern), owner-only, spins while the dispatch is in flight.
- Retry all: header button (Mine tab only) with a failed count; re-dispatches every owned automation whose last run failed via Promise.allSettled, then reports one summary — success toast, host-offline dialog if any target host is offline, and a single error toast for other failures (stale-agent help for a single failure, "failed X of N" otherwise).
- Hidden automatically when nothing is failed: statuses stream back via Electric, so the failed set and button unmount without cache invalidation.
- Shared in-flight id set drives per-row spinners for both individual and bulk retries; existing host-offline / stale-agent error handling carries over unchanged.
Test Plan
- bun run typecheck (desktop) and bun run lint pass
- CDP-verified against the dev app with real synced data: "Retry all 10" renders in the header with failed rows present; hovering a failed row reveals the inline Retry button with tooltip
- Click-through of an actual retry dispatch (creates real runs)
Summary by cubic
Adds retry actions for failed automations in the Automations tab, including per-row retry and a “Retry all” option for your automations. Uses the existing automation.runNow mutation; no backend changes.
New Features
- Per-row retry: inline icon next to failed status (skipped_offline / dispatch_failed), hover-revealed, owner-only, with a spinner while dispatching.
- Retry all (Mine tab): button with failed count; retries all owned failed automations via Promise.allSettled and shows one summary (success toast, host-offline dialog if any offline targets, single error toast for other failures with stale-agent help for a single failure or “failed X of N”).
- Live updates: the failed set and “Retry all” unmount automatically as statuses stream back; no cache invalidation needed.
- Shared in-flight state: a unified id set drives per-row spinners for both individual and bulk retries; existing host-offline/stale-agent handling remains unchanged.
Bug Fixes
- Bulk retry error toast counts only non-offline failures (offline ones are handled by the dialog).
- Aug 3, 2026
- Date parsed from source:Aug 3, 2026
- First seen by Releasebot:Aug 10, 2026
feat(shared): add harness selector to the polygraph terminal agent
Superset adds a Polygraph terminal agent selector, letting users choose Claude, Codex, or OpenCode. It uses the existing model picker flow, preserves the default when nothing is selected, and includes new argument-building tests.
Adds an agent selector to the built-in polygraph terminal agent so users can pick which harness polygraph launches: Claude, Codex, or OpenCode.
Follows the pattern established for the effort selector (#5375): one new entry in the AGENT_MODEL_SUPPORT catalog (presetId: "polygraph", flag --agent) plus tests — the generic AgentModelSelect dropdown, localStorage persistence, and submit wiring all activate automatically, no bespoke plumbing.
Details:
- When nothing is selected (Default), the flag is omitted entirely so the polygraph CLI applies its own default (--agent auto).
- Selected values map to polygraph session start --agent <claude|codex|opencode> -- '', with flag and value as separate argv tokens before the -- prompt separator, same as the other flag+value entries.
- Labels (Claude / Codex / OpenCode) match how these harnesses are named in BUILTIN_TERMINAL_AGENTS.
- Stale/unknown stored selections degrade to the Default behavior (flag omitted).
- The entry is inert on mobile surfaces (ModelPickerScreen, NewChatWidget) until polygraph is offered as an agent there.
Testing: bun test in packages/shared (718 pass, including 2 new cases for buildAgentModelArgs with the polygraph preset), bun run typecheck, and biome check on touched files.
Context: discussed with @Kitenite in Slack — polygraph-specific controls for the polygraph agent type, starting with harness selection.
Summary by cubic:
Added a harness selector to the polygraph terminal agent so users can choose Claude, Codex, or OpenCode. This uses the existing model picker logic and emits the correct --agent args for polygraph.
New Features:
- Added polygraph entry to AGENT_MODEL_SUPPORT (presetId: "polygraph", flag --agent) with harness options Claude, Codex, OpenCode.
- Selection emits --agent before the -- prompt; unset/unknown omits the flag so polygraph falls back to --agent auto.
- Added tests for buildAgentModelArgs covering supported and unknown harness values.
Summary by CodeRabbit:
New Features:
- Added support for selecting the Polygraph agent with Claude, Codex, and OpenCode harnesses.
- Added validation to ensure a supported harness is selected when using Polygraph.
Greptile Summary:
Adds a harness selector for the built-in Polygraph terminal agent using the existing agent-model selection infrastructure.
- Registers Claude, Codex, and OpenCode as Polygraph harness choices.
- Emits the selected harness as --agent while preserving Polygraph’s default behavior when no valid selection exists.
- Adds argument-builder coverage for supported, unset, and unknown harness values.
Confidence Score: 5/5
The PR appears safe to merge, with the Polygraph harness selector correctly integrated into the existing selection and command-building paths.
The configured preset identifier, allowlisted values, generic picker behavior, and argument ordering align end to end, and no blocking or independently actionable issue remains.
Original source - Aug 1, 2026
- Date parsed from source:Aug 1, 2026
- First seen by Releasebot:Aug 10, 2026
Workspace pinning & bulk actions
Superset adds pinned workspaces above projects and lets you ⌘-click batches to move, group, or delete them.
Pin workspaces above your projects, then ⌘-click a batch to move, group, or delete them all at once.
Original source - Aug 1, 2026
- Date parsed from source:Aug 1, 2026
- First seen by Releasebot:Aug 5, 2026
Workspace pinning and bulk actions, an agent orchestration skill, and Grok and Kimi Code agents
Superset ships workspace pinning and bulk management, a cleaner denser sidebar, new Grok and Kimi Code agents, and a rolling move to Superset 2.0. It also adds orchestration skills, terminal and diff improvements, and a long list of stability fixes.
Pin and Bulk-Manage Workspaces #5963 #6021
Pin and Bulk-Manage Workspaces
The sidebar now works like a file manager. Right-click any workspace and choose Pin to keep it above your projects. ⌘-click or ⇧-click to select a batch, then move, group, or delete them all at once from the header toolbar or the right-click menu.
- Bulk delete previews every workspace first and flags dirty or unpushed work
- Deleting many workspaces no longer stalls the app
Three selected workspaces in the sidebar with the Pinned section above and the right-click menu offering Move 3 to Group and Delete 3 Workspaces
Turn Your Agent into an Orchestrator #6088
Turn Your Agent into an Orchestrator
The new superset-orchestration skill turns the agent you're already talking to into a coordinator. Ask it to parallelize work and it runs the whole job through the Superset CLI: an isolated workspace per worker, an agent launched in each, follow-ups over their terminals, results collected at the end. The coordinator can be Claude Code or Codex; the workers can be any mix of agents Superset runs.
Typical uses:
- Fan a big refactor or migration out across several worktrees at once
- Hand a branch from one agent to another with its full terminal context
- Dispatch work to agents on a remote host and monitor until every worker reports done or blocked
npx skills add superset-sh/skills
Claude Code users can also get it from the Superset plugin: /plugin marketplace add superset-sh/superset .
A Cleaner, Denser Sidebar #5944 #5824 #5887
A Cleaner, Denser Sidebar
The sidebar got a full restyle: denser rows, muted icons, keycap-style shortcut hints, and a single continuous top bar on workspace views. Ports and running agents now show as compact chips under each workspace row.
- Hover a chip for the full list of ports or agents, each with its own close or stop button
- One click closes all ports or stops all agents for a workspace
- Right-click an agent chip for quick actions
The restyled sidebar with denser rows, a Pinned section, and project groups next to the new-workspace view
Grok and Kimi Code Join the Agent Lineup #5859 #5780
Grok and Kimi Code Join the Agent Lineup
xAI's Grok Build and Moonshot's Kimi Code are now first-class Superset agents, with their own icons, launch presets, and live working/idle status in the sidebar.
- Grok permission prompts surface as desktop notifications, contributed by @psinha40898 #6025
- Panes waiting on your input now show a yellow indicator instead of red #6017
Add either one in Settings → Agents → Add agent and it appears in the new-workspace picker, automations, and the terminal preset bar.
Grok's agent settings page next to the Add agent picker, with Kimi Code highlighted among Amp, Gemini, Copilot, Mistral Vibe, and Cursor Agent
Superset 2.0 Starts Rolling Out #5821 #6118
Superset 2.0 Starts Rolling Out
For months Superset has shipped as two apps in one: the original interface and the new 2.0 experience behind an opt-in. We're consolidating on 2.0 so every fix and feature lands in one place, and the upgrade is rolling out gradually over the coming weeks. If you're still on the original interface, nothing to do: when it's your turn the upgrade happens automatically, and your next launch lands in 2.0, in your last active workspace.
- Projects, workspaces, settings, and presets all come along
- A heads-up card appears before the switch and a welcome card after
- Running terminal sessions don't carry over; workspaces reopen with fresh terminals in their old folders
The welcome card shown on the first launch after migrating to the new Superset
Improvements
- Running terminals come back on open - opening a workspace recreates panes for sessions started by automations or a previous run, and background agents survive host restarts
- Terminal connection status - a dead terminal shows a reconnecting or disconnected dot in the pane header; click it for a diagnosis and a Reconnect button
- Editor and terminal typography controls - line height, letter spacing, weight, ligatures, and cursor style, with live previews, in Settings → Appearance
- Find in the Changes pane - press ⌘F to search the whole diff; next/previous expands collapsed files for you
- Failed agents say so - Claude Code API errors show a red "failed" status on the pane, and Clear Status unsticks an agent stuck on "working"
- Close confirmations - closing a terminal with a running command or active ports asks first, and a workspace action closes all ports at once
- Prompt history - the new-workspace screen keeps your last 50 prompts; click the history icon to search and reuse one
- Diff review on iOS - long-press a line in the mobile app to draft comments, then send the whole review to your agent
- Blank projects - create a fresh git repo without leaving Superset, from the new-workspace picker or onboarding
- Import existing worktrees - right-click a project to adopt worktrees created outside Superset as workspaces
- Resource monitor in the command palette - press ⌘⇧U for per-workspace CPU and memory
- Reveal in Finder - from the file pane header and the project right-click menu
- CLI on Intel Macs - the install script and Homebrew formula now ship Intel builds
- Per-launch reasoning effort - superset workspaces create --effort high overrides the agent's default for one launch
- Better workspace names - titles match your prompt's language, contributed by @kba977, and fall back to your agent's own CLI without Anthropic or OpenAI keys
- Adding an agent creates its launcher - add one in Settings → Agents and it appears everywhere: new-workspace picker, automations, preset bar
- Teardown commands run on delete - deleting a workspace runs the teardown commands from .superset/config.json, not just teardown.sh, contributed by @abhay-codes07
- Tab-drag merge preview and settings polish - a drag affordance for merging tabs plus a cleaner Settings screen, contributed by @mikemilla
- Smoother onboarding - live prerequisite checks, a one-click GitHub CLI install, and clone errors you can act on
- Agent-ready docs - every docs page has a plain-markdown twin and the docs are searchable over MCP
- Experimental: wait for setup before starting agents - the agent chains after your setup script in one terminal, contributed by @MikeMcQuaid; enable it in Settings → Experimental
Bug fixes
- Stability - Fixed white screens from a sign-in redirect loop and from terminal scrollback piling up in local storage
- Stability - Sidebar layout no longer resets, and corrupted local state no longer signs you out
- Stability - Updating the app no longer kills running terminals, and the update button installs the update instead of just closing the app
- Terminal - Fixed garbled text from a shared-atlas rendering bug
- Terminal - A single flooding terminal no longer drops every terminal in the workspace
- Terminal - Terminals reconnect reliably after sleep/wake, network drops, and a recovered daemon
- Terminal - Hidden panes repaint correctly when revealed, and closing a workspace disposes its terminals
- Terminal - Killing an agent mid-session no longer leaves the terminal ignoring input
- Terminal - Agent and preset commands no longer get dropped when the shell starts slowly
- Agents - Refreshed the Cursor model list, and Cursor sessions show Cursor Composer instead of a stale Claude label
- Workspaces - Open in IDE works again in v2 workspaces
- Workspaces - New workspaces fork from a fresh copy of non-default base branches
- Workspaces - Branches past 500 commits show their true commit count, and long base-branch names truncate in the "from" label, contributed by @ethan0905
- Workspaces - PR links attach at creation, and no longer attach to unrelated PRs that just target the default branch
- Workspaces - Deleting a host removes its workspaces too
- Automations - Creation works reliably, the agent survives internal config reseeds, and runs survive a deleted pinned workspace
- Automations - The failure badge clears when you open the page, and offline-host runs point you at the relay settings that fix them
- Files & Markdown - Rendered code blocks keep their whitespace, contributed by @navidRashik
- Files & Markdown - Copying a Markdown preview table keeps the table, contributed by @lizard-kim, and video previews play again in the file viewer
- Files & Markdown - Long commit messages wrap in the commit range modal, contributed by @hackice20
- UI - The template gallery no longer vanishes on outside clicks, project settings render correctly, and preset-bar tooltips show just the hotkey
- Aug 1, 2026
- Date parsed from source:Aug 1, 2026
- First seen by Releasebot:Aug 4, 2026
feat(host-service,desktop): move workspace deletion off the event loop and stop checks gating bulk delete - #6121
Superset moves workspace deletion and git cleanup off the host-service event loop, adds worker tasks for worktree state, removal, and branch deletion, and lets bulk delete continue when checks are incomplete while preserving conflict handling and improving throughput.
Workspace deletion was the last fully on-loop git surface in its class (item 3 in plans/off-loop-git-reads.md): the delete-dialog preview and destroy preflight ran git status + rev-list on the host-service event loop, and destroy ran git worktree remove --force --force there too — all via ctx.git(), which no enforcement layer could see.
Host-service
- New worker tasks in workers/tasks/git.ts: gitWorktreeStateTask (status + unpushed check), gitWorktreeRemoveTask (remove + authoritative registry re-read), gitDeleteBranchTask (existence probe + -D). Saga semantics preserved exactly (best-effort remove with registry verification, absent-branch-is-success, list-failure blocks rather than orphans).
- New workspace-cleanup/git-ops.ts: resolves credential env on-loop, runs the tasks in the host worker pool (15s status / 120s remove timeouts; inspect forwards the request abort signal). Exported as a mutable object because bun mock.module leaks across test files in one process — the unit tests patch and restore it instead.
- The legacy workspace.remove surface reuses the same saga, so it's covered automatically.
- Ratchet: new ctx.git / context.git count rule in no-main-loop-blocking.test.ts, calibrated to the 10 current legacy files — the shared-factory blind spot is closed; new on-loop git call sites now fail CI.
- Plan doc updated: delete moved to Done; workspace create (still mostly on-loop — only its base fetch was ported in perf(host-service,desktop): move hot git reads off the event loops, add ratchet enforcement #6093) added to the backlog along with the small one-shot ctx.git() sites.
Desktop (bulk delete)
- Checks no longer gate confirmation. Only hard blockers (main workspaces) disable the button; pending/failed checks flip the copy to "Delete without checking".
- Confirming with unchecked workspaces: a dirty one hits the host CONFLICT preflight and is force-retried once (same consent semantics as the single-workspace dialog). Checked-clean races still land in the failures pane — feat(desktop): add bulk workspace actions to sidebar #6021's deliberate no-silent-force behavior is preserved and still tested.
Misc
- SUPERSET_HOST_WORKER_SCRIPT_PATH added to turbo globalPassThroughEnv so a dev host-service can be forced into inline pool mode for A/B measurement.
Measured impact (A/B, pool worker vs forced-inline = pre-port behavior)
- 12 concurrent delete chains (9k dirty files each): 4.89s → 2.89s wall (41% faster), ~4× less event-loop busy time.
- Per-op head-of-line stalls were small even pre-port (≤10ms at 60k dirty files) — simple-git streams and parses fast. The win is throughput and aggregate loop relief, not per-op stall elimination; an in-app probe confirmed the ~100ms burst floor is renderer-side rendering, identical in both modes.
How I tested it
- Unit + integration: host-service suite 936 pass / 0 fail (integration exercises the real task handlers against real git fixtures via the pool's inline fallback: dirty preflight, locked worktrees, stale metadata, branch delete). Bulk-delete tests updated + new coverage for the force-retry paths. All 64 DashboardSidebar tests pass. Ratchet green.
- bun run lint and desktop + host-service typecheck clean.
- CDP end-to-end in the dev app from this worktree (renderer port 3445, signed-in session, worker bundle confirmed in worker mode):
- Before/after UI: with the host-service suspended to hold checks open — old code shows a disabled "Delete" while "Checking…"; new code shows an enabled "Delete without checking".
- Bulk: cmd-clicked 4 workspaces, confirmed while checks were still pending, resumed the host → all 4 deleted; the dirty unchecked one exercised the conflict→force-retry path. Worktrees verified gone from disk, git worktree list, and host.db.
- Single: dirty workspace showed "Has uncommitted changes" (the new worker task end-to-end), "Delete anyway" + branch checkbox removed worktree and branch.
Checklist
- ☑ PR title follows conventional commits
- ☑ bun run lint and bun run typecheck pass
- ☑ One clean commit on top of main
Summary by cubic
Moves workspace deletion off the host-service event loop and lets desktop bulk delete proceed without completed checks, improving throughput and reducing UI stalls.
- Refactors
- Ported delete saga git ops to worker tasks: gitWorktreeStateTask, gitWorktreeRemoveTask, gitDeleteBranchTask via workspace-cleanup/git-ops.ts.
- Added a ctx.git count rule to the ratchet and documented direct-access-only matching; updated the off-loop plan.
- A/B: 12 concurrent deletes are ~41% faster (4.89s → 2.89s).
- Bug Fixes
- Delete preflight now fails closed when worktree state can’t be verified (pool timeout/abort), instead of proceeding without a dirty-worktree check.
Summary by CodeRabbit
- New Features
- Bulk workspace deletion can proceed when inspections are incomplete, with unchecked workspaces clearly identified.
- Conflicts caused by unverified workspace state may be retried with force automatically.
- Bug Fixes
- Completed clean inspections continue to block deletion when genuine conflicts are detected.
- Workspace cleanup more reliably handles worktree removal, branch deletion, warnings, and failures.
- Performance
- Git cleanup operations now run in background tasks to help keep the application responsive.
- Aug 1, 2026
- Date parsed from source:Aug 1, 2026
- First seen by Releasebot:Aug 4, 2026
feat(desktop): v1→v2 auto-migration boot trigger, migrate-then-flip gate, continuity restore - #5821
Superset adds boot-time v1-to-v2 auto-migration with a single-flight lock, safe migrate-then-flip gating, and first-launch continuity that restores the last active workspace after upgrade. It also retries unfinished work and emits migration telemetry.
PR 4 of SUPER-1534/SUPER-1577 — the PR that turns the dormant machinery (#5814/#5816/#5818) on.
Existing behavior
- V1AutoMigration (mounted in the authenticated layout only while on the v1 surface): once per boot, when signed in + active org + onboarded + local host-service up, acquires the run lock and executes runV1Migration() with the real targets (presets collection, pending-terminals queue, sidebar/finalize callbacks). Failures log and retry next boot; ledger keeps partial progress.
- Single-flight lock: migration.acquireRunLock/releaseRunLock — pid+timestamp lock file in SUPERSET_HOME_DIR (stale/dead-pid locks stolen; instances sharing the home dir share local.db, so one runner suffices). Closes the concurrency finding from PR 1 review.
- Migrate-then-flip gate: on gateComplete (all v1 projects+workspaces success/linked) the org is marked complete in localStorage; useIsV2CloudEnabled returns v2 when the marker exists — read boot-stable so completion mid-session flips the NEXT launch, never the live one. Per D5, completion overrides an explicit optInV2 === false.
- V1MigrationContinuity (v2 surface, one-shot per org): first v2 launch after the flip navigates to the ledger-mapped counterpart of v1's lastActiveWorkspaceId instead of the dashboard.
Existing v2 users: the marker never gets written (no v1 data → but also V1AutoMigration never mounts since they're already on v2), so nothing changes. v1 users: silent background pass each boot until complete, then next launch lands on v2 with projects/workspaces/settings/presets/terminals already in place.
Test Plan
- 21 unit tests, desktop typecheck, root lint clean
- CDP E2E full loop: fresh v1 fixture → boots on v1 → auto pass runs → marker written → relaunch lands on v2 in the last-active workspace (running next)
Summary by cubic
Enables v1→v2 auto-migration: runs once per boot, flips to v2 after the migrate-then-flip gate, restores the user’s last v1 workspace on their first v2 launch, and emits rollout telemetry. Adds a hardened single-flight lock, a forced-flip backstop, and a first‑v2 catch‑up pass to sync the final v1 session. Supports SUPER-1534/SUPER-1577.
New Features
- Boot-time headless V1AutoMigration with cross-instance atomic lock and ledgered progress; runs on v1, and on v2 only while follow-up work remains or on forced-flip machines.
- Gate: only failures + deferred items block; unmapped workspaces now count as skipped; completion overrides optInV2 === false; optional forced-flip version flips even if the gate never completes.
- Continuity: first v2 launch opens the ledger-mapped counterpart of v1’s last active workspace; the one-shot flag is consumed only after a successful restore (retries on failure).
- Post-flip retries: first gate completion always arms one v2 catch-up pass; best-effort kinds (settings/presets/terminals) retry after flip until clean.
- Telemetry: emits v1_auto_migration_completed with per-kind counts, gate status, trigger, first_completion, duration, and up to 5 failure reasons; emits v1_auto_migration_failed on errors.
Summary by CodeRabbit
New Features
- Added automatic background migration from v1 to v2.
- Prevented simultaneous migrations across app instances.
- Automatically switches to v2 after successful migration, including for opted-out users.
- Restores the most recently active migrated workspace on first v2 launch.
- Supports retrying migration after errors or interrupted sessions.
- Reports migration progress and outcomes for improved reliability monitoring.
Documentation
- Added guidance for the v1-to-v2 migration and transition flow.
Tests
- Added coverage for migration completion, forced switching, continuity, and retry behavior.
- Aug 1, 2026
- Date parsed from source:Aug 1, 2026
- First seen by Releasebot:Aug 4, 2026
feat(desktop): pre-flip notice + post-flip welcome for migrated v1 users
Superset adds a branded v1-to-v2 migration flow with pre-flip and post-flip welcome cards, a shared FlipNoticeCard shell, precise cohort targeting, and tracked dismissals. It also restores continuity after the flip and fixes a welcome card layout bug.
The migration's only visible seam, handled as one branded arc
both cards share a FlipNoticeCard shell that carries the import wizard's visual identity (WelcomePage's dithered warm-gradient cover, sharp corners, title on the cover), and both sell the upgrade instead of listing caveats:
- V1FlipNotice (pre-flip) — shown on the v1 surface only once this machine is provably flipping at next launch (completion marker written this session; D5 makes the flip unconditional from there).
A better Superset is ready — "Superset has been upgraded: faster, cleaner, and built around your projects. Everything comes along on your next launch." + amber callout: "Running terminal sessions won't carry over." - V2FlipWelcome (post-flip) — first v2 boots, until acknowledged.
Welcome to the new Superset — "Same Superset, upgraded. Everything came with you: projects and workspaces in the sidebar, and fresh terminals in each workspace's old folders."
Follows up on #5821 (F5: the flip previously landed with no explanation).
Screenshots (CDP captures of the shipped build)
Pre-flip notice — in context on the v1 surface, appears mid-session the moment migration completes:
[pre-flip card on v1 image]
[pre-flip closeup image]
Post-flip welcome — first v2 boots, survives reload until dismissed:
[welcome on v2 image]
[welcome closeup image]
Precision baseline — v1 surface before completion, no card:
[v1 before completion image]
Why not the server-side pre-update notice
desktop_notices renders on the already-shipped old build, which only filters by version/platform/channel — it can't see surface or flag state, so it would warn every updater while only the flag cohort migrates. These cards are precise by construction: flag-excluded domains, unflagged users, v2-native users, and machines whose gate never completes see neither.
How
• markV1MigrationComplete dispatches a v1-migration-completed window event on first completion (notice appears mid-session, no polling) and arms the welcome flag (consumed on dismiss, so it survives reloads).
• Shared FlipNoticeCard shell: lazy-loaded Dithering shader cover (same ramp as the import wizard), body isolated below, primary CTA.
• Tracks v1_flip_notice_shown/dismissed, v2_flip_welcome_shown/dismissed (org-keyed, counted once per org).Verification
Both cards CDP-verified end-to-end (transcripts in comments):
• Pre-flip: absent before completion → appears mid-session via the real markV1MigrationComplete path → dismiss works. The feat(desktop): v1→v2 auto-migration boot trigger, migrate-then-flip gate, continuity restore #5821 rollout flag gate verified live as a side effect.
Original source
• Post-flip: renders with the welcome flag armed → survives reload → dismiss consumes → gone.
• Negative cohorts: existing v2 users, unflagged v1 users, and gate-blocked (stuck) v1 users all see neither card.
• The CDP pass caught a real mount bug (welcome card's layout edit had silently no-op'd) — fixed and re-verified. 41 unit tests green; the CI Test failure from leaked test shims is fixed (shims now scoped).
Curated by the Releasebot team
Releasebot is an aggregator of official product update announcements from hundreds of software vendors and thousands of sources.
Our editorial process involves the manual review and audit of release notes procured with the help of automated systems.