From 40ce4a57b43c66c494c60cc71640b9e8659f16d4 Mon Sep 17 00:00:00 2001 From: hsiegeln <37154749+hsiegeln@users.noreply.github.com> Date: Wed, 1 Apr 2026 17:32:39 +0200 Subject: [PATCH] fix: only show amber on containers where gate blocked all children A container is only gated (amber) when filterMatched=false or duplicateMessage=true AND no descendants were executed. Containers with executed children (split, choice, idempotent that passed) now correctly show green/red based on their execution status. Co-Authored-By: Claude Opus 4.6 (1M context) --- ui/src/components/ProcessDiagram/CompoundNode.tsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ui/src/components/ProcessDiagram/CompoundNode.tsx b/ui/src/components/ProcessDiagram/CompoundNode.tsx index 170f309c..549b1fae 100644 --- a/ui/src/components/ProcessDiagram/CompoundNode.tsx +++ b/ui/src/components/ProcessDiagram/CompoundNode.tsx @@ -68,10 +68,14 @@ export function CompoundNode({ // Execution overlay state for this compound const ownState = node.id ? executionOverlay?.get(node.id) : undefined; - const isGated = ownState?.filterMatched === false || ownState?.duplicateMessage === true; + const hasExecutedChild = ownState && hasExecutedDescendant(node, executionOverlay); const isCompleted = ownState?.status === 'COMPLETED'; const isFailed = ownState?.status === 'FAILED'; + // Gated = gate processor (filter/idempotent) blocked all children from executing + const isGated = ownState && !hasExecutedChild + && (ownState.filterMatched === false || ownState.duplicateMessage === true); + // Color priority: gated (amber) > failed (red) > completed (green) > default const effectiveColor = isGated ? 'var(--amber)' : isFailed ? '#C0392B'