feat: amber container for filter/idempotent gate state + red pulse on failed badge
Some checks failed
CI / cleanup-branch (push) Has been skipped
CI / build (push) Failing after 29s
CI / docker (push) Has been skipped
CI / deploy (push) Has been skipped
CI / deploy-feature (push) Has been skipped

When a filter processor rejects a message (filterMatched=false) or an
idempotent consumer detects a duplicate (duplicateMessage=true), the
compound container turns amber (header, border, body tint).

Also adds red pulsing rings on the failed processor badge (same SMIL
pattern as the teal hasTraceData pulse).

Backend: ProcessorNode gains filterMatched/duplicateMessage fields,
threaded from ProcessorExecution JSON path.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
hsiegeln
2026-03-30 10:53:57 +02:00
parent a383b9bcf4
commit e2c0f203f9
5 changed files with 28 additions and 6 deletions

View File

@@ -12,6 +12,10 @@ export interface NodeExecutionState {
hasTraceData?: boolean;
/** Runtime-resolved endpoint URI (for TO_DYNAMIC, etc.) */
resolvedEndpointUri?: string;
/** Filter processor: true if predicate matched, false if message was rejected */
filterMatched?: boolean;
/** Idempotent consumer: true if duplicate message detected and children skipped */
duplicateMessage?: boolean;
}
export interface IterationInfo {

View File

@@ -61,6 +61,8 @@ function buildOverlay(
subRouteFailed: subRouteFailed || undefined,
hasTraceData: !!proc.hasTraceData,
resolvedEndpointUri: proc.resolvedEndpointUri || undefined,
filterMatched: (proc as Record<string, unknown>).filterMatched as boolean | undefined,
duplicateMessage: (proc as Record<string, unknown>).duplicateMessage as boolean | undefined,
});
// Recurse into children