Completed
on 4 Jan 2026, 11:47 am

Output

✅ shared/tests/retry.test.ts

20 passed 0 failed · 2s

withRetry (8 tests)

succeeds on first attempt5ms
retries on network error and succeeds41ms
gives up after max retries35ms
does not retry non-network errors0ms
calls onRetry callback33ms
uses exponential backoff705ms
respects max delay1s
custom shouldRetry function11ms

withRetryResult (2 tests)

returns success result0ms
returns failure result after max retries33ms

CircuitBreaker (5 tests)

starts closed0ms
opens after threshold failures0ms
success resets failure count0ms
resets after timeout61ms
getState returns current state0ms

withCircuitBreaker (5 tests)

executes when circuit closed0ms
throws when circuit open0ms
returns fallback when circuit open0ms
records success0ms
records failure0ms

Quick Actions

Original Request

No layout configured

Details

Type General
Status Completed
Scope vibetools
Tags sharedtestsretry
Created 4 Jan 2026, 11:47 am
Updated 4 Jan 2026, 11:47 am
Timing
⏱️ 57.8s
2 tools
TTFE 7% Thinking 85% Tools 8%
Created By claude

Raw Data

{
  "id": "85d67dab-53cc-417c-8a2e-c04772e7e788",
  "type": "general",
  "status": "completed",
  "title": "Retry tests: 20 passed",
  "description": "All 20 retry utility tests passed in 2 seconds",
  "context": {
    "output": "<div style=\"background:#1e1e1e;color:#e0e0e0;padding:20px;border-radius:8px;font-family:'Consolas','Monaco',monospace;\">\n<h2 style=\"font-family:sans-serif;color:#fff;margin:0 0 16px 0;\">✅ shared/tests/retry.test.ts</h2>\n<p style=\"font-family:sans-serif;margin:0 0 16px 0;\"><span style=\"background:#22c55e;color:#fff;padding:4px 12px;border-radius:4px;font-weight:bold;\">20 passed</span> <span style=\"color:#9ca3af;margin-left:8px;\">0 failed · 2s</span></p>\n\n<div style=\"background:#2d2d2d;padding:16px;border-radius:6px;margin-bottom:16px;\">\n<h3 style=\"color:#98c379;margin:0 0 12px 0;font-family:sans-serif;\">withRetry (8 tests)</h3>\n<table style=\"width:100%;border-collapse:collapse;font-size:0.85rem;\">\n<tr style=\"border-bottom:1px solid #444;\"><td style=\"padding:4px 0;width:24px;color:#22c55e;\">✓</td><td>succeeds on first attempt</td><td style=\"text-align:right;color:#7f848e;\">5ms</td></tr>\n<tr style=\"border-bottom:1px solid #444;\"><td style=\"padding:4px 0;color:#22c55e;\">✓</td><td>retries on network error and succeeds</td><td style=\"text-align:right;color:#7f848e;\">41ms</td></tr>\n<tr style=\"border-bottom:1px solid #444;\"><td style=\"padding:4px 0;color:#22c55e;\">✓</td><td>gives up after max retries</td><td style=\"text-align:right;color:#7f848e;\">35ms</td></tr>\n<tr style=\"border-bottom:1px solid #444;\"><td style=\"padding:4px 0;color:#22c55e;\">✓</td><td>does not retry non-network errors</td><td style=\"text-align:right;color:#7f848e;\">0ms</td></tr>\n<tr style=\"border-bottom:1px solid #444;\"><td style=\"padding:4px 0;color:#22c55e;\">✓</td><td>calls onRetry callback</td><td style=\"text-align:right;color:#7f848e;\">33ms</td></tr>\n<tr style=\"border-bottom:1px solid #444;\"><td style=\"padding:4px 0;color:#22c55e;\">✓</td><td>uses exponential backoff</td><td style=\"text-align:right;color:#7f848e;\">705ms</td></tr>\n<tr style=\"border-bottom:1px solid #444;\"><td style=\"padding:4px 0;color:#22c55e;\">✓</td><td>respects max delay</td><td style=\"text-align:right;color:#7f848e;\">1s</td></tr>\n<tr><td style=\"padding:4px 0;color:#22c55e;\">✓</td><td>custom shouldRetry function</td><td style=\"text-align:right;color:#7f848e;\">11ms</td></tr>\n</table>\n</div>\n\n<div style=\"background:#2d2d2d;padding:16px;border-radius:6px;margin-bottom:16px;\">\n<h3 style=\"color:#61afef;margin:0 0 12px 0;font-family:sans-serif;\">withRetryResult (2 tests)</h3>\n<table style=\"width:100%;border-collapse:collapse;font-size:0.85rem;\">\n<tr style=\"border-bottom:1px solid #444;\"><td style=\"padding:4px 0;width:24px;color:#22c55e;\">✓</td><td>returns success result</td><td style=\"text-align:right;color:#7f848e;\">0ms</td></tr>\n<tr><td style=\"padding:4px 0;color:#22c55e;\">✓</td><td>returns failure result after max retries</td><td style=\"text-align:right;color:#7f848e;\">33ms</td></tr>\n</table>\n</div>\n\n<div style=\"background:#2d2d2d;padding:16px;border-radius:6px;margin-bottom:16px;\">\n<h3 style=\"color:#c678dd;margin:0 0 12px 0;font-family:sans-serif;\">CircuitBreaker (5 tests)</h3>\n<table style=\"width:100%;border-collapse:collapse;font-size:0.85rem;\">\n<tr style=\"border-bottom:1px solid #444;\"><td style=\"padding:4px 0;width:24px;color:#22c55e;\">✓</td><td>starts closed</td><td style=\"text-align:right;color:#7f848e;\">0ms</td></tr>\n<tr style=\"border-bottom:1px solid #444;\"><td style=\"padding:4px 0;color:#22c55e;\">✓</td><td>opens after threshold failures</td><td style=\"text-align:right;color:#7f848e;\">0ms</td></tr>\n<tr style=\"border-bottom:1px solid #444;\"><td style=\"padding:4px 0;color:#22c55e;\">✓</td><td>success resets failure count</td><td style=\"text-align:right;color:#7f848e;\">0ms</td></tr>\n<tr style=\"border-bottom:1px solid #444;\"><td style=\"padding:4px 0;color:#22c55e;\">✓</td><td>resets after timeout</td><td style=\"text-align:right;color:#7f848e;\">61ms</td></tr>\n<tr><td style=\"padding:4px 0;color:#22c55e;\">✓</td><td>getState returns current state</td><td style=\"text-align:right;color:#7f848e;\">0ms</td></tr>\n</table>\n</div>\n\n<div style=\"background:#2d2d2d;padding:16px;border-radius:6px;\">\n<h3 style=\"color:#56b6c2;margin:0 0 12px 0;font-family:sans-serif;\">withCircuitBreaker (5 tests)</h3>\n<table style=\"width:100%;border-collapse:collapse;font-size:0.85rem;\">\n<tr style=\"border-bottom:1px solid #444;\"><td style=\"padding:4px 0;width:24px;color:#22c55e;\">✓</td><td>executes when circuit closed</td><td style=\"text-align:right;color:#7f848e;\">0ms</td></tr>\n<tr style=\"border-bottom:1px solid #444;\"><td style=\"padding:4px 0;color:#22c55e;\">✓</td><td>throws when circuit open</td><td style=\"text-align:right;color:#7f848e;\">0ms</td></tr>\n<tr style=\"border-bottom:1px solid #444;\"><td style=\"padding:4px 0;color:#22c55e;\">✓</td><td>returns fallback when circuit open</td><td style=\"text-align:right;color:#7f848e;\">0ms</td></tr>\n<tr style=\"border-bottom:1px solid #444;\"><td style=\"padding:4px 0;color:#22c55e;\">✓</td><td>records success</td><td style=\"text-align:right;color:#7f848e;\">0ms</td></tr>\n<tr><td style=\"padding:4px 0;color:#22c55e;\">✓</td><td>records failure</td><td style=\"text-align:right;color:#7f848e;\">0ms</td></tr>\n</table>\n</div>\n</div>",
    "requestedAt": "2026-01-04T00:00:00.000Z",
    "requestId": "4ca895a8-0a76-40ee-ad1f-db4890ce50b6",
    "choices": [
      {
        "label": "Run all shared tests",
        "value": "Run all shared utility tests",
        "primary": true
      },
      {
        "label": "View retry.ts",
        "value": "Show me retry.ts in shared"
      },
      {
        "label": "View test source",
        "value": "Show me the retry.ts tests"
      }
    ],
    "turnTiming": {
      "totalMs": 57799,
      "ttfeMs": 4165,
      "thinkingMs": 49082,
      "toolExecutionMs": 4549,
      "toolCallCount": 2,
      "thinkingPct": 85,
      "toolsPct": 8,
      "ttfePct": 7
    }
  },
  "createdBy": "claude",
  "createdAt": "2026-01-04T01:47:20.206Z",
  "updatedAt": "2026-01-04T01:47:25.481Z",
  "requestId": "4ca895a8-0a76-40ee-ad1f-db4890ce50b6",
  "scope": "vibetools",
  "tags": [
    "shared",
    "tests",
    "retry"
  ],
  "targetUser": "claude"
}
DashboardReportsKontasksSessionsTelemetryLogs + Go