diff --git a/apps/web/src/components/execution/PhaseActions.tsx b/apps/web/src/components/execution/PhaseActions.tsx index e92ad97..2187bb1 100644 --- a/apps/web/src/components/execution/PhaseActions.tsx +++ b/apps/web/src/components/execution/PhaseActions.tsx @@ -19,9 +19,12 @@ export function PhaseActions({ const detailMutation = trpc.spawnArchitectDetail.useMutation(); const [isDetailingAll, setIsDetailingAll] = useState(false); - // Phases eligible for detailing: no tasks AND no active detail agent + // Phases eligible for detailing: no tasks AND no actively running detail agent const eligiblePhaseIds = useMemo( - () => phasesWithoutTasks.filter((id) => !detailAgentByPhase.has(id)), + () => phasesWithoutTasks.filter((id) => { + const agent = detailAgentByPhase.get(id); + return !agent || agent.status === "idle"; + }), [phasesWithoutTasks, detailAgentByPhase], ); diff --git a/apps/web/src/components/execution/PhaseDetailPanel.tsx b/apps/web/src/components/execution/PhaseDetailPanel.tsx index 2a7cbfb..9e72f0c 100644 --- a/apps/web/src/components/execution/PhaseDetailPanel.tsx +++ b/apps/web/src/components/execution/PhaseDetailPanel.tsx @@ -207,7 +207,7 @@ export function PhaseDetailPanel({ detailAgent?.status === "running" || detailAgent?.status === "waiting_for_input"; const showDetailButton = - !detailAgent && !hasTasks; + !hasTasks && (!detailAgent || detailAgent.status === "idle"); const showChangeSet = detailAgent?.status === "idle" && !!latestChangeSet;