You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
In Canvas mode, clicking an Agent Island Done attention card correctly navigates to and focuses the target pane, but the completion reminder does not disappear after the user views that pane in the active, visible Prowl window.
This is a Canvas follow-up to #777 and the read-state guards in #778 (currently open). The analysis below is based on the #778 implementation, not a claim that those guards have already shipped on main. The behavior was reported by the user; this issue's scope was refined through static code inspection, without a separate manual GUI reproduction.
Code path
AgentIslandView sends .island(.entryTapped(id)); the app brings Prowl forward.
RepositoriesFeature.reduceCore requests Canvas navigation to the entry's tab and calls terminalClient.focusSurface for the target surface.
Canvas resolves the navigation request, selects the primary card, and moves the viewport/focus to it.
WorktreeTerminalState.isViewingWorktree() unconditionally returns false for isCanvasManaged, so Canvas can never satisfy that predicate, even after successful navigation and foreground viewing.
The pane remains idle + seen == false, which projects as Done. islandAttentionEntries continues to include it.
Canvas is intentionally excluded from the normal viewing predicate because normal-mode window observers are torn down there and their cached flags may be stale. Simply removing the Canvas guard would risk reintroducing background auto-read behavior.
Expected behavior
After clicking a Done reminder, once the target pane is actually viewed in Canvas, acknowledge its completion and remove the Done attention card.
Require the Canvas window to be key and visible.
Require the target to be the focused pane of the primary card and visible in the Canvas viewport.
Keep reminders unread while the window is inactive/hidden/minimized, or while the target is not actually viewed.
Do not acknowledge other cards merely because they are visible, multi-selected, or receive broadcast input.
Clicking Blocked is not a dismissal: its reminder should remain until the agent leaves the blocked state.
Suggested direction
Provide Canvas-owned window activity and viewed-surface context to the terminal viewing predicate, keeping a single read policy for detection and focus acknowledgment. Avoid reusing normal-mode syncFocus directly: it also applies single-selected-tab surface activity, which does not match Canvas rendering.
Acceptance / regression coverage
Click Done from Canvas: the correct card/split is focused and brought into view; Done clears once viewed.
Perform navigation while the Canvas window remains inactive: Done stays unread.
Background, non-primary, off-viewport, and non-focused split completions remain unread.
Multi-selection and broadcast input do not clear unrelated reminders.
Blocked remains visible after clicking until its underlying state changes.
Entering/exiting Canvas and closing cards do not leave stale viewing context.
Problem
In Canvas mode, clicking an Agent Island Done attention card correctly navigates to and focuses the target pane, but the completion reminder does not disappear after the user views that pane in the active, visible Prowl window.
This is a Canvas follow-up to #777 and the read-state guards in #778 (currently open). The analysis below is based on the #778 implementation, not a claim that those guards have already shipped on main. The behavior was reported by the user; this issue's scope was refined through static code inspection, without a separate manual GUI reproduction.
Code path
AgentIslandViewsends.island(.entryTapped(id)); the app brings Prowl forward.RepositoriesFeature.reduceCorerequests Canvas navigation to the entry's tab and callsterminalClient.focusSurfacefor the target surface.markAgentSeenrequireisViewedSurface(surfaceID).WorktreeTerminalState.isViewingWorktree()unconditionally returns false forisCanvasManaged, so Canvas can never satisfy that predicate, even after successful navigation and foreground viewing.idle + seen == false, which projects as Done.islandAttentionEntriescontinues to include it.Canvas is intentionally excluded from the normal viewing predicate because normal-mode window observers are torn down there and their cached flags may be stale. Simply removing the Canvas guard would risk reintroducing background auto-read behavior.
Expected behavior
After clicking a Done reminder, once the target pane is actually viewed in Canvas, acknowledge its completion and remove the Done attention card.
Suggested direction
Provide Canvas-owned window activity and viewed-surface context to the terminal viewing predicate, keeping a single read policy for detection and focus acknowledgment. Avoid reusing normal-mode
syncFocusdirectly: it also applies single-selected-tab surface activity, which does not match Canvas rendering.Acceptance / regression coverage