Show Stack Trace
+${escapeHtml(failureDetail.stack_trace)}
+ diff --git a/ccw/src/templates/dashboard-css/32-issue-manager.css b/ccw/src/templates/dashboard-css/32-issue-manager.css index b28690f6..e7b8d6f0 100644 --- a/ccw/src/templates/dashboard-css/32-issue-manager.css +++ b/ccw/src/templates/dashboard-css/32-issue-manager.css @@ -331,6 +331,79 @@ word-break: break-word; } +/* Failure History Detail */ +.failure-history-list { + display: flex; + flex-direction: column; + gap: 0.75rem; +} + +.failure-history-item { + padding: 0.75rem; + background: hsl(var(--destructive) / 0.06); + border: 1px solid hsl(var(--destructive) / 0.15); + border-radius: 0.5rem; +} + +.failure-history-header { + display: flex; + align-items: center; + gap: 0.5rem; + margin-bottom: 0.5rem; + color: hsl(var(--destructive)); +} + +.failure-history-count { + font-size: 0.875rem; + font-weight: 500; +} + +.failure-history-timestamp { + margin-left: auto; +} + +.failure-history-content { + display: flex; + flex-direction: column; + gap: 0.375rem; + padding-left: 0.5rem; +} + +.failure-history-task, +.failure-history-error { + display: flex; + align-items: center; + gap: 0.375rem; +} + +.failure-history-message pre { + margin: 0; + white-space: pre-wrap; +} + +.failure-history-stacktrace { + margin-top: 0.375rem; +} + +.failure-history-stacktrace summary { + margin-bottom: 0.25rem; +} + +.failure-history-stacktrace pre { + margin: 0; + background: hsl(var(--background)); + padding: 0.5rem; + border-radius: 0.25rem; + border: 1px solid hsl(var(--border)); +} + +.detail-label-sm { + font-size: 0.75rem; + font-weight: 500; + color: hsl(var(--muted-foreground)); + min-width: 60px; +} + /* Priority Badges */ .issue-priority { display: inline-flex; diff --git a/ccw/src/templates/dashboard-js/views/issue-manager.js b/ccw/src/templates/dashboard-js/views/issue-manager.js index 4079ef7b..e0a3d677 100644 --- a/ccw/src/templates/dashboard-js/views/issue-manager.js +++ b/ccw/src/templates/dashboard-js/views/issue-manager.js @@ -431,8 +431,6 @@ function renderIssueCard(issue) { Archived on ${archivedDate} ` : ''} - - ${renderFailureInfo(issue)} `; } @@ -479,6 +477,72 @@ function renderFailureInfo(issue) { `; } +function renderFailureHistoryDetail(issue) { + // Check if issue has failure feedback + if (!issue.feedback || issue.feedback.length === 0) { + return ''; + } + + // Extract failure feedbacks + const failures = issue.feedback.filter(f => f.type === 'failure' && f.stage === 'execute'); + if (failures.length === 0) { + return ''; + } + + return ` +
${escapeHtml(failureDetail.stack_trace)}
+