Files
MindSift/Doku/modules/tasks.md
T
sandrodachandClaude Opus 5.5 73fad1c5db
MindSift CI & Docker Release / Build, Test in Container & Push (push) Successful in 2m36s
feat(tasks): assign tasks in shared lists, unified people search, list avatars
- Tasks in shared task lists can be assigned to one or more people with access
  (task_assignees); assignments are pruned whenever access is lost
- UserAutocomplete: type-to-search everywhere, nothing before typing, max 3 results,
  first match preselected
- Task list and list tabs: avatar stack of members and round monochrome counter
- Shared list items remember who added them (list_items.created_by)
- Doku/ui-patterns.md documents the shared UI patterns

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 20:26:55 +01:00

4.4 KiB

Modul: Aufgaben, Kanban & Alarme

Code: TasksView.tsx, TaskDetailModal.tsx, ManageColumnsModal.tsx; Backend: handleUpdateThought, handleReorderTasks, *TaskList*-Handler, startAlarmTicker.

Datenmodell

Eine Aufgabe ist ein thought (database.md) mit kanbanStatus, priority (low/normal/high/urgent), dueDate (nur Datum), notes (Markdown), subtasks ([{id, title, isCompleted}]), tags, taskListId, sortOrder und assignees (Benutzer-IDs). Aufgaben ohne Liste sind persönlich.

Ansichten

  • Liste mit Filtern (offen, erledigt, Papierkorb), Gruppierung (z. B. nach Status oder Fälligkeit), Sortierung und Hashtag-Filter.
  • Kanban: Spalten pro Liste frei konfigurierbar (Name, Farbe, „Erledigt“-Spalte). Standard: Zu erledigen, In Bearbeitung, Wartet auf andere, Erledigt. Eine Karte in eine „Erledigt“-Spalte zu ziehen setzt isCompleted.
  • Drag & Drop sortiert in der Liste und zwischen Spalten; ein Klick öffnet das Detail-Fenster (Titel, Status, Priorität, Fälligkeit mit Schnellwahl, Liste, Hashtags, Unteraufgaben mit Fortschrittsbalken, Notizen).
  • Aufgaben lassen sich in eine Notiz umwandeln („Als Notiz vertiefen“). Aufgaben aus Notiz-Checkboxen (enhanced-task) bleiben verknüpft: Abhaken wirkt in beide Richtungen (SyncDocBlockAndTask), „In Notiz öffnen“ springt zum Block.

Aufgabenlisten und Freigabe

  • Jede Liste hat Eigentümer, Titel, Symbol, Farbe und eigene Kanban-Spalten.
  • Freigabe an Gruppen oder Benutzer über den Dialog UnifiedShareModal (Stufe pro Freigabe):
    • Bearbeiter: darf Aufgaben anlegen, ändern, abhaken, verschieben, löschen sowie Liste umbenennen und Spalten ändern.
    • Leser: sieht alles, kann nichts ändern. Der Server antwortet mit 403; die Oberfläche blendet Eingaben aus und zeigt „Nur Lesen“.
    • Gruppenmitglieder mit mehreren Wegen erhalten die höchste Stufe. Nur der Eigentümer legt Freigaben an oder entfernt sie und kann die Liste löschen.
  • Umsetzung: Store.GetTaskListPermission liefert owner/editor/viewer/""; ensureTaskListWritable schützt Schreibpfade.
  • Zuweisen (nur in geteilten Listen, also mit mindestens einer Person außer dem Eigentümer): Im Detail-Fenster unter „Zugewiesen“ lassen sich eine oder mehrere Personen mit Zugriff auf die Liste zuweisen, über die einheitliche Personensuche (ui-patterns.md). Zuweisen dürfen Eigentümer und Bearbeiter. Zeilen und Kanban-Karten zeigen die Zugewiesenen als Profilbild-Stapel.
    • Gespeichert in task_assignees; PATCH /thoughts/{id} mit assignees ersetzt die Liste. Der Server lehnt Personen ohne Zugriff ab (403, storage.ErrAssigneeNoAccess).
    • Zuweisungen folgen den Rechten: Store.PruneTaskAssignees entfernt jede Zuweisung, deren Person die Liste nicht mehr sehen kann. Es läuft nach Entfernen einer Freigabe, Ändern von team_id, Austritt aus oder Entfernen aus einer Gruppe, Löschen einer Gruppe, Löschen der Liste und Verschieben der Aufgabe in eine andere oder keine Liste; beim Löschen eines Kontos werden dessen Zuweisungen direkt gelöscht. Wer über einen zweiten Weg (z. B. direkt und über eine Gruppe) weiter Zugriff hat, bleibt zugewiesen.
  • Bekannte Lücken: FLAW-03 (Umsortieren per ID), FLAW-06 (Editor kann weiterteilen).

Alarme

Der Ticker läuft jede Minute (architecture.md). Für offene Aufgaben mit due_date <= heute und alarm_sent = 0 sendet er an die Kanäle des Aufgaben-Eigentümers:

Kanal Ziel Konfiguration
E-Mail alarmEmail (sonst Konto-Adresse) SMTP aus Admin-Einstellungen oder Umgebung (Port 465 mit TLS wird direkt unterstützt, sonst STARTTLS über smtp.SendMail)
Discord Webhook-URL Benutzereinstellungen
Webhook beliebige URL (JSON: event, title, notes, dueDate, priority, timestamp) Benutzereinstellungen

Danach wird alarm_sent = 1 gesetzt, sobald mindestens ein Kanal erfolgreich war.

Einschränkungen (FLAW-12): Fälligkeiten haben keine Uhrzeit, notifyBeforeMinutes wird ignoriert, die Serverzeit gilt, und ein verschobener Termin löst nicht erneut aus. URLs werden nicht geprüft (FLAW-05).