• v0.6.6-rc22 23e982d692

    v0.6.6-rc22
    All checks were successful
    continuous-integration/drone/push Build is passing
    continuous-integration/drone/tag Build is passing
    Stable

    admin-mrrm released this 2026-06-14 02:12:53 +02:00 | 55 commits to main since this release

    Schließt die UX-Lücke aus rc21: Der Empty-State-CTA 'Manuelle Aufgabe erstellen' versprach, dass eine in der Todo-Liste angelegte Aufgabe automatisch auf /heute landet — aber Todos und Candidates waren zwei getrennte Datenmodelle. rc22 hängt die Brücke ein: Jedes Todo-List-Item mit gesetztem dueDate wird synchron als source='todo'-Candidate in die Planner-Pipeline geschrieben. Das geschieht im selben DB-Transaction-Schritt wie der Todo-Insert/Update/Delete (Sync-Source-Pattern aus arch-Entscheidung in #472). Heute-Datum + dueDate=heute → erscheint sofort auf /heute nach POST /planner/run. dueDate=null oder Item-Löschung → Candidate wird sauber entfernt. done=true → lifecycleState=done, der Planner ignoriert es. Architektur-Entscheidung per arch-bot konsultiert (Option a, Sync-Source-Pattern).

    Highlights

    • TodoCandidateWriterService: upsertFromTodo / removeForTodo mit ON CONFLICT (ownerSub, source='todo', sourceRef=list_item.id) DO UPDATE; Sub-Issue #472
    • ListsService.addItem / updateItem / removeItem laufen jetzt in db.transaction und rufen den Writer im selben Tx auf — kein Drift zwischen list_items und candidates möglich
    • Migration 0021: candidate_source += 'todo' (additiv, forward-only, rollback-safe)
    • 7 neue E2E-Integration-Tests (todo-candidate-flow.int-spec.ts) decken den ganzen Loop ab; API-Suite 459 unit + 91 integration tests grün
    Downloads