Skip to content

Commit 7865d9b

Browse files
committed
pr comments
1 parent 4a17367 commit 7865d9b

File tree

4 files changed

+18
-25
lines changed

4 files changed

+18
-25
lines changed

apps/sim/app/workspace/[workspaceId]/logs/components/log-details/components/trace-spans/trace-spans.tsx

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -82,21 +82,16 @@ function hasErrorInTree(span: TraceSpan): boolean {
8282

8383
/**
8484
* Checks if a span or any of its descendants has an unhandled error.
85-
* Container spans (loop, iteration, parallel) are skipped — only leaf
86-
* block spans with errorHandled are considered. Used only for the root
87-
* workflow span to match the actual workflow status.
85+
* Spans with errorHandled: true (including containers that propagate it)
86+
* are skipped. Used only for the root workflow span to match the actual
87+
* workflow status.
8888
*/
89-
const CONTAINER_TYPES = new Set(['loop', 'loop-iteration', 'parallel', 'parallel-iteration'])
9089
function hasUnhandledErrorInTree(span: TraceSpan): boolean {
91-
const type = span.type?.toLowerCase() || ''
92-
if (CONTAINER_TYPES.has(type)) {
93-
return span.children ? span.children.some(hasUnhandledErrorInTree) : false
94-
}
9590
if (span.status === 'error' && !span.errorHandled) return true
9691
if (span.children && span.children.length > 0) {
9792
return span.children.some((child) => hasUnhandledErrorInTree(child))
9893
}
99-
if (span.toolCalls && span.toolCalls.length > 0) {
94+
if (span.toolCalls && span.toolCalls.length > 0 && !span.errorHandled) {
10095
return span.toolCalls.some((tc) => tc.error)
10196
}
10297
return false

apps/sim/lib/logs/execution/logger.ts

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -222,14 +222,8 @@ export class ExecutionLogger implements IExecutionLoggerService {
222222
// Determine if workflow failed by checking trace spans for unhandled errors
223223
// Errors handled by error handler paths (errorHandled: true) don't count as workflow failures
224224
// Use the override if provided (for cost-only fallback scenarios)
225-
const containerTypes = ['loop', 'loop-iteration', 'parallel', 'parallel-iteration']
226225
const hasErrors = traceSpans?.some((span: any) => {
227226
const checkSpanForErrors = (s: any): boolean => {
228-
if (containerTypes.includes(s.type?.toLowerCase() || '')) {
229-
return s.children && Array.isArray(s.children)
230-
? s.children.some(checkSpanForErrors)
231-
: false
232-
}
233227
if (s.status === 'error' && !s.errorHandled) return true
234228
if (s.children && Array.isArray(s.children)) {
235229
return s.children.some(checkSpanForErrors)

apps/sim/lib/logs/execution/logging-session.ts

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -299,14 +299,8 @@ export class LoggingSession {
299299
'@/lib/core/telemetry'
300300
)
301301

302-
const containerTypes = ['loop', 'loop-iteration', 'parallel', 'parallel-iteration']
303302
const hasErrors = traceSpans.some((span: any) => {
304303
const checkForErrors = (s: any): boolean => {
305-
if (containerTypes.includes(s.type?.toLowerCase() || '')) {
306-
return s.children && Array.isArray(s.children)
307-
? s.children.some(checkForErrors)
308-
: false
309-
}
310304
if (s.status === 'error' && !s.errorHandled) return true
311305
if (s.children && Array.isArray(s.children)) {
312306
return s.children.some(checkForErrors)

apps/sim/lib/logs/execution/trace-spans/trace-spans.ts

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -502,11 +502,7 @@ export function buildTraceSpans(result: ExecutionResult): {
502502
}
503503
addRelativeTimestamps(groupedRootSpans, earliestStart)
504504

505-
const containerTypes = new Set(['loop', 'loop-iteration', 'parallel', 'parallel-iteration'])
506505
const checkForUnhandledErrors = (s: TraceSpan): boolean => {
507-
if (containerTypes.has(s.type?.toLowerCase() || '')) {
508-
return s.children ? s.children.some(checkForUnhandledErrors) : false
509-
}
510506
if (s.status === 'error' && !s.errorHandled) return true
511507
return s.children ? s.children.some(checkForUnhandledErrors) : false
512508
}
@@ -711,6 +707,8 @@ function groupIterationBlocks(spans: TraceSpan[]): TraceSpan[] {
711707
const iterDuration = iterLatestEnd - iterEarliestStart
712708

713709
const hasErrors = spans.some((span) => span.status === 'error')
710+
const allErrorsHandled =
711+
hasErrors && spans.every((span) => span.status !== 'error' || span.errorHandled)
714712

715713
const iterationSpan: TraceSpan = {
716714
id: `${containerId}-iteration-${iterationIndex}`,
@@ -720,6 +718,7 @@ function groupIterationBlocks(spans: TraceSpan[]): TraceSpan[] {
720718
startTime: new Date(iterEarliestStart).toISOString(),
721719
endTime: new Date(iterLatestEnd).toISOString(),
722720
status: hasErrors ? 'error' : 'success',
721+
...(allErrorsHandled && { errorHandled: true }),
723722
children: spans.map((span) => ({
724723
...span,
725724
name: span.name.replace(/ \(iteration \d+\)$/, ''),
@@ -730,6 +729,9 @@ function groupIterationBlocks(spans: TraceSpan[]): TraceSpan[] {
730729
})
731730

732731
const hasErrors = allIterationSpans.some((span) => span.status === 'error')
732+
const allErrorsHandled =
733+
hasErrors &&
734+
iterationChildren.every((span) => span.status !== 'error' || span.errorHandled)
733735
const parallelContainer: TraceSpan = {
734736
id: `parallel-execution-${containerId}`,
735737
name: containerName,
@@ -738,6 +740,7 @@ function groupIterationBlocks(spans: TraceSpan[]): TraceSpan[] {
738740
startTime: new Date(earliestStart).toISOString(),
739741
endTime: new Date(latestEnd).toISOString(),
740742
status: hasErrors ? 'error' : 'success',
743+
...(allErrorsHandled && { errorHandled: true }),
741744
children: iterationChildren,
742745
}
743746

@@ -763,6 +766,8 @@ function groupIterationBlocks(spans: TraceSpan[]): TraceSpan[] {
763766
const iterDuration = iterLatestEnd - iterEarliestStart
764767

765768
const hasErrors = spans.some((span) => span.status === 'error')
769+
const allErrorsHandled =
770+
hasErrors && spans.every((span) => span.status !== 'error' || span.errorHandled)
766771

767772
const iterationSpan: TraceSpan = {
768773
id: `${containerId}-iteration-${iterationIndex}`,
@@ -772,6 +777,7 @@ function groupIterationBlocks(spans: TraceSpan[]): TraceSpan[] {
772777
startTime: new Date(iterEarliestStart).toISOString(),
773778
endTime: new Date(iterLatestEnd).toISOString(),
774779
status: hasErrors ? 'error' : 'success',
780+
...(allErrorsHandled && { errorHandled: true }),
775781
children: spans.map((span) => ({
776782
...span,
777783
name: span.name.replace(/ \(iteration \d+\)$/, ''),
@@ -782,6 +788,9 @@ function groupIterationBlocks(spans: TraceSpan[]): TraceSpan[] {
782788
})
783789

784790
const hasErrors = allIterationSpans.some((span) => span.status === 'error')
791+
const allErrorsHandled =
792+
hasErrors &&
793+
iterationChildren.every((span) => span.status !== 'error' || span.errorHandled)
785794
const loopContainer: TraceSpan = {
786795
id: `loop-execution-${containerId}`,
787796
name: containerName,
@@ -790,6 +799,7 @@ function groupIterationBlocks(spans: TraceSpan[]): TraceSpan[] {
790799
startTime: new Date(earliestStart).toISOString(),
791800
endTime: new Date(latestEnd).toISOString(),
792801
status: hasErrors ? 'error' : 'success',
802+
...(allErrorsHandled && { errorHandled: true }),
793803
children: iterationChildren,
794804
}
795805

0 commit comments

Comments
 (0)