← Back to Kontasks
Topic Badge Bug Analysis
Root cause of 'Default' badges - timeline not reading server-side edges
Output
🐛 Root Cause Found: Duplicate Classification Systems
The Bug
The timeline does client-side keyword detection instead of reading the server-side topic edges that already exist.
Proof: Server-Side Edges Exist!
Kontask 20ed0a6f (Ready to Work) has these edges:
| topic_planning | belongs_to | "matched keywords [work, task, tasks]" |
| topic_standards | touches | "matched keywords [refactor, standard]" |
| flow_...DFZEPP | evidence | "Gravity-linked (score: 50)" |
Why "Default" Appears
// flow-timeline-pane.ts:2181 var query = '/api/kontasks?limit=' + pageSize; // ↑ Returns kontasks WITHOUT topic edges // flow-timeline-pane.ts:2348-2375 function detectTopicOrDomain(kontask) { var title = (kontask.title || '').toLowerCase(); // ↑ Re-classifies using CLIENT-SIDE keywords // ↑ "ready to work" doesn't match → "default" }
✅ The Fix
- Option A (Preferred): Modify
/api/kontasksto includeprimaryTopicandprimaryDomainfields from existing edges - Option B: Timeline fetches edges separately via
/api/gv/edges?sourceId=kontask_xxx - Option C: Delete client-side
detectTopicOrDomain()entirely, require server data
💡 Recommendation: Option A - augment /api/kontasks response with primaryTopic/primaryDomain from the edge store. This is a single API change, no client rework needed.
Quick Actions
Original Request
No layout configured
Details
Type
General
Status
Completed
Scope
greatvibe
Tags
kontasksuitimelinebug
Created
11 Jan 2026, 9:46 pm
Updated
11 Jan 2026, 9:46 pm
Timing
⏱️ 106.9s
0 tools
● TTFE 0%
● Thinking 100%
● Tools 0%
Created By
claude
📋 Claude's Context
Session
ses_f1a97fe1...
Raw Data
{
"id": "2a9e1d39-51c2-43b1-8758-1719ebd38bb1",
"type": "general",
"status": "completed",
"title": "Topic Badge Bug Analysis",
"description": "Root cause of 'Default' badges - timeline not reading server-side edges",
"context": {
"output": "<div style=\"background:#1e1e1e;color:#e0e0e0;padding:20px;border-radius:8px;font-family:'Consolas','Monaco',monospace;\"><h2 style=\"font-family:sans-serif;color:#fff;margin:0 0 16px 0;\">🐛 Root Cause Found: Duplicate Classification Systems</h2><div style=\"background:#2d2d2d;padding:16px;border-radius:6px;margin-bottom:16px;\"><h3 style=\"color:#ef4444;margin:0 0 12px 0;\">The Bug</h3><p style=\"margin:0;\">The timeline does <strong>client-side keyword detection</strong> instead of reading the <strong>server-side topic edges</strong> that already exist.</p></div><div style=\"background:#2d2d2d;padding:16px;border-radius:6px;margin-bottom:16px;\"><h3 style=\"color:#e5c07b;margin:0 0 12px 0;\">Proof: Server-Side Edges Exist!</h3><p style=\"margin:0 0 8px 0;\">Kontask <code style=\"color:#61afef;\">20ed0a6f (Ready to Work)</code> has these edges:</p><table style=\"width:100%;border-collapse:collapse;font-size:0.9rem;\"><tr style=\"border-bottom:1px solid #444;\"><td style=\"padding:6px;color:#98c379;\">topic_planning</td><td style=\"padding:6px;color:#7f848e;\">belongs_to</td><td style=\"padding:6px;\">\"matched keywords [work, task, tasks]\"</td></tr><tr style=\"border-bottom:1px solid #444;\"><td style=\"padding:6px;color:#98c379;\">topic_standards</td><td style=\"padding:6px;color:#7f848e;\">touches</td><td style=\"padding:6px;\">\"matched keywords [refactor, standard]\"</td></tr><tr><td style=\"padding:6px;color:#56b6c2;\">flow_...DFZEPP</td><td style=\"padding:6px;color:#7f848e;\">evidence</td><td style=\"padding:6px;\">\"Gravity-linked (score: 50)\"</td></tr></table></div><div style=\"background:#2d2d2d;padding:16px;border-radius:6px;margin-bottom:16px;\"><h3 style=\"color:#e5c07b;margin:0 0 12px 0;\">Why \"Default\" Appears</h3><pre style=\"background:#1e1e1e;padding:12px;border-radius:4px;color:#7f848e;margin:0;\"><span style=\"color:#c678dd;\">// flow-timeline-pane.ts:2181</span>\nvar query = '/api/kontasks?limit=' + pageSize;\n<span style=\"color:#7f848e;\">// ↑ Returns kontasks WITHOUT topic edges</span>\n\n<span style=\"color:#c678dd;\">// flow-timeline-pane.ts:2348-2375</span>\nfunction detectTopicOrDomain(kontask) {\n var title = (kontask.title || '').toLowerCase();\n <span style=\"color:#7f848e;\">// ↑ Re-classifies using CLIENT-SIDE keywords</span>\n <span style=\"color:#7f848e;\">// ↑ \"ready to work\" doesn't match → \"default\"</span>\n}\n</pre></div><div style=\"background:#2d2d2d;padding:16px;border-radius:6px;margin-bottom:16px;\"><h3 style=\"color:#22c55e;margin:0 0 12px 0;\">✅ The Fix</h3><ol style=\"margin:0;padding-left:20px;\"><li style=\"margin-bottom:8px;\"><strong style=\"color:#98c379;\">Option A (Preferred):</strong> Modify <code style=\"color:#61afef;\">/api/kontasks</code> to include <code>primaryTopic</code> and <code>primaryDomain</code> fields from existing edges</li><li style=\"margin-bottom:8px;\"><strong style=\"color:#61afef;\">Option B:</strong> Timeline fetches edges separately via <code>/api/gv/edges?sourceId=kontask_xxx</code></li><li><strong style=\"color:#c678dd;\">Option C:</strong> Delete client-side <code>detectTopicOrDomain()</code> entirely, require server data</li></ol></div><div style=\"background:#1a1a2e;padding:12px;border-radius:6px;border:1px solid #3b82f6;\"><p style=\"margin:0;color:#7f848e;\">💡 <strong style=\"color:#3b82f6;\">Recommendation:</strong> Option A - augment <code>/api/kontasks</code> response with <code>primaryTopic</code>/<code>primaryDomain</code> from the edge store. This is a single API change, no client rework needed.</p></div></div>",
"requestedAt": "2026-01-11T11:40:00.000Z",
"requestId": "eae5e578-69b0-49fa-852f-868e0f1e4378",
"choices": [
{
"label": "Implement Option A",
"value": "Modify /api/kontasks to include primaryTopic and primaryDomain fields by looking up the kontask's topic/domain edges. Then update the timeline to use these fields instead of detectTopicOrDomain().",
"primary": true
},
{
"label": "Implement Option B",
"value": "Have the timeline fetch edges separately for each kontask batch using /api/gv/edges"
},
{
"label": "Show me the code",
"value": "Show me the exact code changes needed for Option A"
}
],
"turnTiming": {
"totalMs": 106927,
"ttfeMs": 47,
"thinkingMs": 106880,
"toolExecutionMs": 0,
"toolCallCount": 0,
"thinkingPct": 100,
"toolsPct": 0,
"ttfePct": 0
}
},
"createdBy": "claude",
"createdAt": "2026-01-11T11:46:10.443Z",
"updatedAt": "2026-01-11T11:46:21.790Z",
"requestId": "eae5e578-69b0-49fa-852f-868e0f1e4378",
"scope": "greatvibe",
"tags": [
"kontasks",
"ui",
"timeline",
"bug"
],
"sessionId": "ses_f1a97fe1-589"
}