Repository navigation
Resume toast: say what happened and name its action - #28068
Conversation
📝 Walkthrough
Priority: ⬇️ Low Merge Risk: 🔵 Low · up to
|
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to GitHub limitations.
🟡 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 winKeep
Reviewfor synthesized unconfirmed outcomes.When the host omits both
continuedandfailed,restartContinuationHistorysynthesizesunknownoutcomes. With no continued chats, this produces an unconfirmed warning, but the condition passesundefinedtoannounceResume, so the toast has noReviewaction.reopenNativeChatRestartOffercan 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
📒 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.
…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>
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:
The wording of the title and description lines is unchanged.
Mechanism:
native-chat-restart-action-notifications.tsraisestoast.success,toast.warningortoast.errorinstead of a plaintoast(). Orca's toaster already gives each kind its icon, and 285 other toasts use them.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.showis replaced byviewChatsandreviewin 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.Before (main), the real restart flow, for comparison:
Measured in the app:
Testing
224 focused resume and status-bar tests pass. New checks cover:
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:cifails 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
Notes
Checklist
N/Awith reasonpnpm lint,pnpm typecheck,pnpm test, andpnpm buildpass (or CI will cover; local preferred)