From 123a1ff79fb76ea8486e31bdfe167b3673d83033 Mon Sep 17 00:00:00 2001 From: Dotta Date: Tue, 21 Apr 2026 12:07:50 -0500 Subject: [PATCH] Refine subtree control UX remediation flow. Split subtree actions into dedicated pause/resume/cancel entry points, rebuild the subtree dialog with mode-specific safeguards and preview states, and align paused/deferred visual language in issue detail and list views for the Phase 4.2 UX remediation pass. Co-Authored-By: Paperclip --- ui/src/components/IssueChatThread.tsx | 13 +- ui/src/components/IssuesList.tsx | 40 +- ui/src/pages/IssueDetail.tsx | 552 +++++++++++++++++++++++++- 3 files changed, 597 insertions(+), 8 deletions(-) diff --git a/ui/src/components/IssueChatThread.tsx b/ui/src/components/IssueChatThread.tsx index 058bf5ad501..37b7bf5552d 100644 --- a/ui/src/components/IssueChatThread.tsx +++ b/ui/src/components/IssueChatThread.tsx @@ -227,6 +227,7 @@ interface IssueChatComposerProps { mentions?: MentionOption[]; agentMap?: Map; composerDisabledReason?: string | null; + composerHint?: string | null; issueStatus?: string; } @@ -265,6 +266,7 @@ interface IssueChatThreadProps { suggestedAssigneeValue?: string; mentions?: MentionOption[]; composerDisabledReason?: string | null; + composerHint?: string | null; showComposer?: boolean; showJumpToLatest?: boolean; emptyMessage?: string; @@ -1189,7 +1191,7 @@ function IssueChatUserMessage({ message }: { message: ThreadMessage }) { {queued ? (
- Queued + ⏸ Deferred wake {queueTargetRunId && onInterruptQueued ? ( + + +
+ ) : null} + + ) : ( +
+ This issue is paused by ancestor{" "} + {activePauseHoldRoot?.identifier ? ( + + {activePauseHoldRoot.identifier} + + ) : ( + activePauseHold.rootIssueId.slice(0, 8) + )} + . Resume from the root issue to deliver deferred work. +
+ )} + + )}
@@ -2605,7 +2912,49 @@ export function IssueDetail() { - + + {canShowSubtreeControls ? ( + <> + + {canResumeSubtree ? ( + + ) : null} + + + ) : null}