UI Bug: Pending task count inconsistent (Header: 274 vs Task Queue: 278) #336

Closed
opened 2026-03-02 12:50:43 +00:00 by jack · 2 comments
Owner

Problem

Header und Task Queue zeigen unterschiedliche Pending-Zahlen:

  • Header: 274 Pending
  • Task Queue: 278 Pending

Differenz: 4 Tasks

Header
Task Queue

Mögliche Ursachen

1. Unterschiedliche Datenquellen

// Header
const headerCount = await taskService.countPending(); // → 274

// Task Queue
const queueCount = await taskRepo.count({ status: 'pending' }); // → 278

Problem: Zwei verschiedene Queries liefern unterschiedliche Ergebnisse.

2. Cache/Stale State

// Header lädt Count einmal beim Mount
const [pendingCount, setPendingCount] = useState(274);

// Task Queue lädt bei jedem Refresh neu
const tasks = await fetchTasks(); // → 278 aktuell

Problem: Header aktualisiert nicht bei Task-Änderungen.

3. Filter-Unterschied

// Header: Alle Pending
SELECT COUNT(*) FROM tasks WHERE status = 'pending'; // 274

// Task Queue: Nur sichtbare (Filter aktiv?)
SELECT COUNT(*) FROM tasks WHERE status = 'pending' AND visible = true; // 278

Erwartetes Verhalten

Header und Task Queue müssen identische Zahlen zeigen.

Acceptance Criteria

  • Header zeigt korrekte Pending-Zahl
  • Task Queue zeigt identische Zahl
  • Updates in Real-Time (oder spätestens nach Refresh)
  • Keine Race-Conditions

Priority

Low - Kosmetischer Bug, keine Funktionseinschränkung.

## Problem **Header** und **Task Queue** zeigen unterschiedliche Pending-Zahlen: - **Header:** 274 Pending - **Task Queue:** 278 Pending **Differenz:** 4 Tasks ![Header](attachment:claude-mem-header.jpg) ![Task Queue](attachment:claude-mem-task-queue.jpg) ## Mögliche Ursachen ### 1. Unterschiedliche Datenquellen ```typescript // Header const headerCount = await taskService.countPending(); // → 274 // Task Queue const queueCount = await taskRepo.count({ status: 'pending' }); // → 278 ``` **Problem:** Zwei verschiedene Queries liefern unterschiedliche Ergebnisse. ### 2. Cache/Stale State ```typescript // Header lädt Count einmal beim Mount const [pendingCount, setPendingCount] = useState(274); // Task Queue lädt bei jedem Refresh neu const tasks = await fetchTasks(); // → 278 aktuell ``` **Problem:** Header aktualisiert nicht bei Task-Änderungen. ### 3. Filter-Unterschied ```typescript // Header: Alle Pending SELECT COUNT(*) FROM tasks WHERE status = 'pending'; // 274 // Task Queue: Nur sichtbare (Filter aktiv?) SELECT COUNT(*) FROM tasks WHERE status = 'pending' AND visible = true; // 278 ``` ## Erwartetes Verhalten **Header und Task Queue müssen identische Zahlen zeigen.** ## Acceptance Criteria - [x] Header zeigt korrekte Pending-Zahl - [x] Task Queue zeigt identische Zahl - [x] Updates in Real-Time (oder spätestens nach Refresh) - [x] Keine Race-Conditions ## Priority **Low** - Kosmetischer Bug, keine Funktionseinschränkung.
Author
Owner

Zusätzlich: Limit pro Task-Typ

Aktuell: "Showing 100 of 100 tasks" (global)

Problem:

  • Wenn 278 Pending vorhanden sind, werden nur die ersten 100 angezeigt
  • Processing/Completed werden eventuell gar nicht angezeigt (weil Limit erschöpft)

Gewünscht: Limit pro Spalte

// Statt global 100 Tasks
const tasks = await taskRepo.find({ limit: 100 });

// Besser: Pro Status
const pending = await taskRepo.find({ status: 'pending', limit: 100 });
const processing = await taskRepo.find({ status: 'processing', limit: 100 });
const completed = await taskRepo.find({ status: 'completed', limit: 100 });

Vorteil:

  • Alle Spalten zeigen Daten (nicht nur Pending)
  • User sieht Completed-Tasks auch wenn 200+ Pending vorhanden
  • Bessere UX
## Zusätzlich: Limit pro Task-Typ **Aktuell:** "Showing 100 of 100 tasks" (global) **Problem:** - Wenn 278 Pending vorhanden sind, werden nur die ersten 100 angezeigt - Processing/Completed werden eventuell gar nicht angezeigt (weil Limit erschöpft) **Gewünscht: Limit pro Spalte** ```typescript // Statt global 100 Tasks const tasks = await taskRepo.find({ limit: 100 }); // Besser: Pro Status const pending = await taskRepo.find({ status: 'pending', limit: 100 }); const processing = await taskRepo.find({ status: 'processing', limit: 100 }); const completed = await taskRepo.find({ status: 'completed', limit: 100 }); ``` **Vorteil:** - ✅ Alle Spalten zeigen Daten (nicht nur Pending) - ✅ User sieht Completed-Tasks auch wenn 200+ Pending vorhanden - ✅ Bessere UX
Author
Owner

Fehlende Icons

Task-Typ "compression" hat kein Icon (nur leeres Quadrat im Screenshot).

Betroffene Task-Typen prüfen:

  • observation - Icon vorhanden
  • claude-md - Icon vorhanden
  • compression - Icon fehlt
  • summarize, embedding - prüfen

Icon-Mapping vervollständigen:

const TASK_ICONS = {
  observation: 'ph--eye',
  'claude-md': 'ph--file-text',
  compression: 'ph--file-zip',  // ← NEU
  summarize: 'ph--list-bullets',
  embedding: 'ph--vector-three'
};
## Fehlende Icons **Task-Typ "compression" hat kein Icon** (nur leeres Quadrat im Screenshot). **Betroffene Task-Typen prüfen:** - ✅ `observation` - Icon vorhanden - ✅ `claude-md` - Icon vorhanden - ❌ `compression` - **Icon fehlt** - ❓ `summarize`, `embedding` - prüfen **Icon-Mapping vervollständigen:** ```typescript const TASK_ICONS = { observation: 'ph--eye', 'claude-md': 'ph--file-text', compression: 'ph--file-zip', // ← NEU summarize: 'ph--list-bullets', embedding: 'ph--vector-three' }; ```
review.bot 2026-03-02 14:38:32 +00:00
  • closed this issue
  • added the
    has-pr
    label
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
customable/claude-mem#336
No description provided.