← Back to Kontasks
Todo Progress Recovery Fix
Fixed polling to update todo progress during disconnect recovery
Output
✓ Todo Progress Recovery Fixed
What Was Happening
From your screenshots:
- Status bar showed "1/4 Updating CLAUDE.md" during work
- Connection dropped, polling started
- Polling only checked for final output kontask
- Never updated todo progress from progress kontasks
- Final kontask found, but status bar still showed stale "1/4"
Root Cause
// pollForOutput() only checked for final kontask: for (let i = 0; i < MAX_POLLS; i++) { const hadOutput = await checkForNewKontask(); ✓ // ✗ Never called checkForProgress() to update status bar! }
The Fix
// Now pollForOutput() also updates progress: for (let i = 0; i < MAX_POLLS; i++) { const hadOutput = await checkForNewKontask(); if (hadOutput) return; ✓ Found final output // NEW: Check progress and update status bar const progress = await checkForProgress(); if (progress.found && progress.todos) { dispatch({ type: 'todo_update', todoProgress }); } }
Expected Behavior Now
| During normal SSE | Todo progress updates via todo_update events ✓ |
| After disconnect | Polling checks progress API every 3s ✓ |
| Status bar | Shows latest X/Y progress even during recovery ✓ |
What's Next?
Konui restarted. Test another disconnect scenario to verify progress updates during recovery.
Should I commit this fix?
Quick Actions
Original Request
No layout configured
Details
Type
General
Status
Completed
Scope
vibetools
Tags
consolerecoverytodosfix
Created
2 Jan 2026, 6:03 pm
Updated
2 Jan 2026, 6:03 pm
Created By
claude
Raw Data
{
"id": "474af2e5-7879-4c7a-b9de-ed40e32a4ae8",
"type": "general",
"status": "completed",
"title": "Todo Progress Recovery Fix",
"description": "Fixed polling to update todo progress during disconnect recovery",
"context": {
"output": "<div style=\"background:#1e1e1e;color:#e0e0e0;padding:20px;border-radius:8px;font-family:sans-serif;\">\n<h2 style=\"color:#22c55e;margin:0 0 16px 0;\">✓ Todo Progress Recovery Fixed</h2>\n\n<div style=\"background:#2d2d2d;padding:16px;border-radius:6px;margin-bottom:16px;\">\n<h4 style=\"margin:0 0 12px 0;color:#ef4444;\">What Was Happening</h4>\n<p style=\"color:#9ca3af;margin:0 0 8px 0;\">From your screenshots:</p>\n<ol style=\"margin:0;padding-left:20px;color:#e0e0e0;line-height:1.8;\">\n<li>Status bar showed <strong>\"1/4 Updating CLAUDE.md\"</strong> during work</li>\n<li>Connection dropped, polling started</li>\n<li>Polling only checked for <em>final output kontask</em></li>\n<li><strong>Never updated todo progress</strong> from progress kontasks</li>\n<li>Final kontask found, but status bar still showed stale \"1/4\"</li>\n</ol>\n</div>\n\n<div style=\"background:#2d2d2d;padding:16px;border-radius:6px;margin-bottom:16px;\">\n<h4 style=\"margin:0 0 12px 0;color:#61afef;\">Root Cause</h4>\n<pre style=\"background:#1a1a1a;padding:12px;border-radius:4px;font-family:monospace;font-size:0.8rem;overflow-x:auto;margin:0;color:#e0e0e0;\"><span style=\"color:#7f848e;\">// pollForOutput() only checked for final kontask:</span>\nfor (let i = 0; i < MAX_POLLS; i++) {\n const hadOutput = await checkForNewKontask(); <span style=\"color:#22c55e;\">✓</span>\n <span style=\"color:#ef4444;\">// ✗ Never called checkForProgress() to update status bar!</span>\n}</pre>\n</div>\n\n<div style=\"background:#2d2d2d;padding:16px;border-radius:6px;margin-bottom:16px;\">\n<h4 style=\"margin:0 0 12px 0;color:#22c55e;\">The Fix</h4>\n<pre style=\"background:#1a1a1a;padding:12px;border-radius:4px;font-family:monospace;font-size:0.75rem;overflow-x:auto;margin:0;color:#e0e0e0;\"><span style=\"color:#7f848e;\">// Now pollForOutput() also updates progress:</span>\nfor (let i = 0; i < MAX_POLLS; i++) {\n const hadOutput = await checkForNewKontask();\n if (hadOutput) return; <span style=\"color:#22c55e;\">✓ Found final output</span>\n \n <span style=\"color:#22c55e;\">// NEW: Check progress and update status bar</span>\n <span style=\"color:#98c379;\">const progress = await checkForProgress();</span>\n <span style=\"color:#98c379;\">if (progress.found && progress.todos) {</span>\n <span style=\"color:#98c379;\"> dispatch({ type: 'todo_update', todoProgress });</span>\n <span style=\"color:#98c379;\">}</span>\n}</pre>\n</div>\n\n<div style=\"background:#2d2d2d;padding:16px;border-radius:6px;margin-bottom:16px;\">\n<h4 style=\"margin:0 0 12px 0;color:#c678dd;\">Expected Behavior Now</h4>\n<table style=\"width:100%;border-collapse:collapse;font-size:0.85rem;\">\n<tr style=\"border-bottom:1px solid #444;\">\n<td style=\"padding:8px;color:#9ca3af;\">During normal SSE</td>\n<td style=\"padding:8px;color:#e0e0e0;\">Todo progress updates via <code style=\"background:#3d3d5c;padding:2px 4px;border-radius:3px;\">todo_update</code> events ✓</td>\n</tr>\n<tr style=\"border-bottom:1px solid #444;\">\n<td style=\"padding:8px;color:#9ca3af;\">After disconnect</td>\n<td style=\"padding:8px;color:#e0e0e0;\">Polling checks progress API every 3s ✓</td>\n</tr>\n<tr>\n<td style=\"padding:8px;color:#9ca3af;\">Status bar</td>\n<td style=\"padding:8px;color:#e0e0e0;\">Shows latest X/Y progress even during recovery ✓</td>\n</tr>\n</table>\n</div>\n\n<div style=\"background:#2d2d2d;padding:16px;border-radius:6px;\">\n<h4 style=\"margin:0 0 12px 0;color:#fff;\">What's Next?</h4>\n<p style=\"color:#9ca3af;margin:0;\">Konui restarted. Test another disconnect scenario to verify progress updates during recovery.</p>\n<p style=\"color:#e0e0e0;margin:12px 0 0 0;\">Should I commit this fix?</p>\n</div>\n</div>",
"requestedAt": "2026-01-02T10:30:00Z",
"requestId": "fe5aaa59-e1f7-4453-a25b-bb5f58cefad1",
"choices": [
{
"label": "Yes, commit it",
"value": "commit",
"primary": true
},
{
"label": "Test more first",
"value": "test-more"
}
]
},
"createdBy": "claude",
"createdAt": "2026-01-02T08:03:53.872Z",
"updatedAt": "2026-01-02T08:03:54.009Z",
"requestId": "fe5aaa59-e1f7-4453-a25b-bb5f58cefad1",
"scope": "vibetools",
"tags": [
"console",
"recovery",
"todos",
"fix"
],
"targetUser": "claude"
}