Skip to content

Resume toast: say what happened and name its action - #28068

Merged
brennanb2025 merged 2 commits into
mainfrom
brennanb2025/resume-toast-named-action
Oct 13, 2026
Merged

brennanb2025 merged 2 commits into
mainfrom
brennanb2025/resume-toast-named-action

Conversation

@brennanb2025

@brennanb2025 brennanb2025 commented Oct 12, 2026 •

Copy link
Copy Markdown
Contributor
Files Added Deleted Net
Test 9 $\color{#1a7f37}{\Huge{\mathbf{+}}}$​57 $\color{#cf222e}{\Huge{\mathbf{−}}}$​14 $\color{#1a7f37}{\Huge{\mathbf{+}}}$​43
Prod 11 $\color{#1a7f37}{\Huge{\mathbf{+}}}$​69 $\color{#cf222e}{\Huge{\mathbf{−}}}$​28 $\color{#1a7f37}{\Huge{\mathbf{+}}}$​41

ELI5

After a restart, Orca can resume chats that were in the middle of something. When it does, a notification pops up in the bottom-right corner: "Resumed 14 chats" with a Show button underneath. That button was the problem. "Show" doesn't say what it shows. It sat on its own row, out of line with the text. And the round floating-workspace button that sits in that corner covered part of the notification.

Now the notification leads with an icon for the outcome (✓ all resumed, ⚠ couldn't confirm, ⓧ couldn't resume). The action sits on the same row and says what it does: View chats when everything resumed, Review when something needs you. Both open the same result list as before. Toasts also now sit above the floating-workspace button, so it can't hide them.

What Changed

Before: a plain toast with no icon. A solid Show button wrapped below the text, indented 26px. The floating-workspace button (bottom right) drew over the toast's right edge.

After, for each of the four things this toast can say:

Outcome Toast kind Action
Every chat resumed success (✓) View chats
Some couldn't be resumed error Review
Some couldn't be confirmed (may still be working) warning (⚠) Review
Both error Review

The wording of the title and description lines is unchanged.

Mechanism:

  • native-chat-restart-action-notifications.ts raises toast.success, toast.warning or toast.error instead of a plain toast(). Orca's toaster already gives each kind its icon, and 285 other toasts use them.
  • The action keeps its existing click (it opens the run's result) under a named label, and the toaster's own solid button look, the same as every other toast action. Per-toast classNames (the mechanism the terminal-shortcut toast already uses) change only its placement, keeping it on the title's row. A one-line toast centres its icon, title and button.
  • main.css: the toaster's default layer goes from 40 to 47. The floating workspace sits at 45 (panel) and 46 (launcher) and parks in the toasts' corner. Nothing else uses 41–47. With a dialog open, toasts still rise to 60.
  • Locales: show is replaced by viewChats and review in all six.

Why

Brennan picked this layout from four HTML mocks: just the outcome with no button; a named action on the same row (this one); the whole toast clickable; and the outcome plus chat names. The bottom bar's "✓ N chats resumed" entry (#27580) already reopens the result, so a toast button is a shortcut, and it should say what it does.

The common pattern for an outcome notice is a status icon, a title and an optional description. When there's an action, it's a short named verb on the same row, not a generic "Show". A whole-toast click target was rejected: it's harder to discover and to reach by keyboard, and it needs a custom toast.

Raising the toaster's layer, instead of moving toasts away from the corner, keeps every toast where it already appears. The floating launcher can be dragged anywhere, so no fixed offset could clear it.

Linked Issue

N/A (maintainer request after a screenshot of the resume toast)

Visual Proof

Real app: a hidden dev build of this branch on a throwaway profile, driven only through the developer tools connection. Each toast was raised through the shipped announceRestartResults, so the bottom bar in these shots has no resume entry. The real restart flow with the entry is shown in #27580.

Dark Light
All resumed
Some couldn't be resumed
Couldn't confirm
Both

Before (main), the real restart flow, for comparison:

before

Measured in the app:

  • In all 8 cases, the button sits on the title's row (top 15–33 px into the toast, right of the title).
  • A hit test at the button's centre lands on the button itself, not the floating-workspace launcher. Before the layer change, the launcher covered most of "Review".
  • Clicking the action opened the result exactly once.
  • The button's computed colours, corner radius and height match the toaster's default solid action in both themes (its fill is the toast's text colour, its text is the toast's background).
  • In the one-line toast, the icon, title and button share a vertical centre.

Testing

  • 224 focused resume and status-bar tests pass. New checks cover:

    • the success, warning and error kinds;
    • the "View chats" and "Review" labels;
    • the click still opening the result.
  • A shared test helper (native-chat-resume-sonner-mock.test-support.ts) mocks sonner, so every kind still lands on one call list and the existing assertions keep working.

  • orca-ci-checks: 23 of 24 pass, including the typecheck, lint, design-system and localization checks. typecheck:ci fails locally only on this Mac's Bun ("Script not found"); CI runs it.

  • Checked on macOS only, in both themes.

  • I manually tested these changes locally (hidden dev build, macOS, dark + light; see Visual Proof)

  • Automated tests added/updated, or explained why not below

Review

Agent skill upstream boundary

  • Not applicable, or this change copies or mechanically translates no upstream skill-installer source, tests, fixtures, registry entries, path tables, comments, or documentation.

Notes

  • Platforms, SSH, mobile: renderer only. Nothing changes for platform, SSH, mobile or client-host compatibility.
  • Toast layer: the toaster's new default layer affects every toast, but only relative to the floating workspace.
  • Related PR: Line up a notification's button with its text when it has no icon #28042 (button alignment for other icon-less toasts with a button) is independent and still useful for those toasts.

Checklist

  • This PR is small and focused
  • I explained what changed and why (ELI5, the user-facing before/after, the mechanism, and why over the alternatives)
  • Before/after screenshots or videos attached for UI changes, or N/A with reason
  • Self-reviewed for correctness, security, and performance
  • Cross-platform, SSH/remote, and path/shortcut impact considered (or N/A)
  • pnpm lint, pnpm typecheck, pnpm test, and pnpm build pass (or CI will cover; local preferred)

@brennanb2025
brennanb2025 marked this pull request as ready for review October 13, 2026 02:30
@coderabbitai

coderabbitai Bot commented Oct 13, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

📝 Walkthrough

Resume notifications now use success, error, or warning toasts based on the outcome, with “View chats” or “Review” actions. The updated labels are available in six locales. Tests use shared Sonner mock support. The toaster’s default z-index increases from 40 to 47.

Priority: ⬇️ Low

Merge Risk: 🔵 Low · up to 51ad0

Some unconfirmed-resume warnings lack the promised Review action, making the result list less directly discoverable; the remaining risk is limited to this outcome path.

Pre-merge checks · Passed 4 · Failed 1

Failed Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage Warning Docstring coverage is 62.50% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 8 functions across 13 files. Write docstrings for the functions missing them to satisfy the coverage threshold.
Passed Passed checks (4 passed)
Check name Status Explanation
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Title check Passed The title clearly identifies the main change: improving resume-toast wording and action labels.
Description check Passed The description is complete and relevant. It explains the user-facing changes, implementation, rationale, issue status, visual proof, testing results, platform coverage, and checklist status.
  • Fix all pre-merge checks with AI
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to GitHub limitations.

⚠️ Outside diff range comments (1)

🟡 Minor · Keep Review for synthesized unconfirmed… · native-chat-restart-action-notifications.ts:194

src/renderer/src/components/native-chat-restart-action-notifications.ts:194
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Keep Review for synthesized unconfirmed outcomes.

When the host omits both continued and failed, restartContinuationHistory synthesizes unknown outcomes. With no continued chats, this produces an unconfirmed warning, but the condition passes undefined to announceResume, so the toast has no Review action. reopenNativeChatRestartOffer can re-read the offer and open the result dialog.

Preserve the no-action behavior when no unconfirmed result exists:

Suggested fix
-    hostFailed === undefined && continuedCount === 0 ? undefined : show
+    hostFailed === undefined && continuedCount === 0 && unconfirmedCount === 0
+      ? undefined
+      : show

ℹ️ Review info
⚙️ Run configuration
  • Configuration used: Repository UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: b57620d6-bf49-4287-9692-ccae88895263
📥 Commits

Reviewing files that changed from the base of the PR and between c8a6fe9 and 51ad05f.

📒 Files selected for processing (1)
  • src/renderer/src/components/native-chat-restart-action-notifications.ts

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 5 remain after this review.

@brennanb2025
brennanb2025 merged commit 5de471a into main Oct 13, 2026
30 checks passed
@brennanb2025
brennanb2025 deleted the brennanb2025/resume-toast-named-action branch October 13, 2026 06:02
SimonSQLML added a commit to SimonSQLML/orca that referenced this pull request Oct 20, 2026
…anges

The full sharded E2E run on main fails these specs on every run because
they still expect the product's old behavior:

- Cmd+J placeholder now names tasks (stablyai#28617)
- toaster base z-index is 47, above the floating workspace (stablyai#28068)
- the profile-delay warning has the app toaster's close button (stablyai#28900)
- the worktree meta dialog is titled "Workspace details"
- an editable CSV renders as an ARIA grid, not a table
- a host whose search is off sends the vault box to title-only (stablyai#22453)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant