Abgebrochene Aufgaben mahnen nicht mehr -- an zwoelf Stellen, nicht an einer

Filipe, screen12: "die abgebrochenen sollen oben nicht mehr mit zaehlen
die sollen ihre eigenen kategorie kriegen".

DIE URSACHE war eine Bedingung, die harmlos aussieht: `a.status <>
'erledigt'`. Eine abgebrochene Aufgabe ist nicht "erledigt" -- also fiel
sie durch, und zwar in JEDE Zahl, die "noch zu tun" bedeutet. Eine
Aufgabe, die niemand mehr anfassen wird, mahnte weiter als ueberfaellig.

Das ist die Kehrseite einer bewussten Entscheidung: "abgebrochen" steht
absichtlich NICHT in STATUS, damit der normale Weg es nicht setzen kann.
Genau deshalb rutscht es aber durch jede Pruefung, die nur gegen
'erledigt' vergleicht.

FILIPE HAT EINE STELLE GESEHEN. Gesucht werden musste nach dem MUSTER:
Es waren zwoelf, in sieben Dateien.

  workspace-aufgaben.js   2   ueberfaellig und heute (die Zahlen "oben")
  workspace-hinweise.js   2   die Hinweiszeilen der Startseite
  workspace-kalender.js   1   Aufgaben mit Frist im Kalender
  workspace-personen.js   1   "offene_aufgaben" je Person
  workspace-profil.js     1   dieselbe Zahl im Profil
  workspace-push.js       2   ERINNERUNGEN, die verschickt werden
  workspace-reports.js    3   Berichte

Am schwersten wiegt workspace-push.js: Dort gingen Push-Nachrichten
hinaus -- fuer Aufgaben, die laengst abgebrochen waren.

`NOT IN ('erledigt', 'abgebrochen')` statt einer zweiten Ungleichung: Wer
spaeter einen dritten Endzustand einfuehrt, ergaenzt eine Liste, statt
eine Kette von `<>` zu verlaengern, bei der das Vergessen niemandem
auffaellt.

DIE EIGENE KATEGORIE, die Filipe verlangt hat, gibt es jetzt in der
Schnittstelle (`abgebrochen`) und auf der Startseite -- hinten bei
"Erledigt", weil beides dasselbe bedeutet: vom Tisch.

GEGENPROBE an einer abgebrochenen Aufgabe mit Frist von gestern:
  alte Bedingung  "<> erledigt"            -> ueberfaellig = 3
  neue Bedingung  "NOT IN (erledigt, abg)" -> ueberfaellig = 2
  Unterschied 1 = genau die abgebrochene. Die Schnittstelle liefert 2
  und abgebrochen = 1.

pruef-start-ansicht hat den Umbau bemerkt und "die Aufgabenzahlen stehen
(7)" gemeldet -- sie zaehlt die Kategorien und erwartete sechs. Die Zahl
steht in der Bedingung, nicht nur im Meldetext; deshalb faellt eine
Kategorie, die still verschwindet, sofort auf. Auf 7 nachgezogen:
EXIT=0, 140 Pruefungen. pruef-aufgabenbrett EXIT=0, 44.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-09-08 11:27:08 +02:00
co-authored by Claude Opus 5
parent 5925a61dfe
commit 29785cc2a4
9 changed files with 59 additions and 15 deletions
+2 -2
View File
@@ -241,7 +241,7 @@ export async function laufen() {
/* --- Aufgaben, die morgen faellig sind ---------------------------- */
for (const a of d.prepare(`
SELECT a.id, a.titel, a.verantwortlich_id FROM aufgaben a
WHERE a.status <> 'erledigt' AND a.frist = ? AND a.verantwortlich_id IS NOT NULL`).all(morgen)) {
WHERE a.status NOT IN ('erledigt', 'abgebrochen') AND a.frist = ? AND a.verantwortlich_id IS NOT NULL`).all(morgen)) {
await senden(a.verantwortlich_id, "aufgabe_faellig", {
titel: "Morgen fällig",
text: a.titel,
@@ -253,7 +253,7 @@ export async function laufen() {
/* --- Aufgaben, die ueberfaellig sind ------------------------------ */
for (const a of d.prepare(`
SELECT a.id, a.titel, a.frist, a.verantwortlich_id FROM aufgaben a
WHERE a.status <> 'erledigt' AND a.frist IS NOT NULL AND a.frist < ?
WHERE a.status NOT IN ('erledigt', 'abgebrochen') AND a.frist IS NOT NULL AND a.frist < ?
AND a.verantwortlich_id IS NOT NULL`).all(heute)) {
await senden(a.verantwortlich_id, "aufgabe_ueberfaellig", {
titel: "Überfällig",