docs: DEVLOG-Eintrag für M2
Ziel, Erledigtes, die Entwurfsentscheidungen mit Begründung, die Probleme samt Lösung und die offenen Punkte. Dazu die eigenen Fehler dieser Sitzung. Dauer laut zeiten.csv: 44 Minuten. Gesamt bislang 205 Minuten. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
881fdf0819
commit
7d1f91e740
+92
-1
@@ -8,7 +8,98 @@ die Übersicht aus `scripts/zeit.sh summe`.
|
||||
| Meilenstein | Art | Minuten | Stunden |
|
||||
| ----------- | ------ | ------- | -------- |
|
||||
| M1 | claude | 161 | 2,68 |
|
||||
| **Gesamt** | | **161** | **2,68** |
|
||||
| M2 | claude | 44 | 0,73 |
|
||||
| **Gesamt** | | **205** | **3,42** |
|
||||
|
||||
---
|
||||
|
||||
## 2026-09-10 – M2: Aufgaben und Projekte
|
||||
|
||||
**Dauer:** 44 Minuten (15:57–16:41), Art `claude`.
|
||||
|
||||
**Ziel der Sitzung:** Erfassen und Wiederfinden — Aufgaben, Inbox, Ideen und
|
||||
Projekte. Noch ohne Kalender.
|
||||
|
||||
### Erledigt
|
||||
|
||||
- Datenmodell `Aufgabe` und `Projekt` samt Migration
|
||||
- Schnellerfassung, Inbox mit Einsortieren, Aufgabenliste mit Filtern
|
||||
- Ideen als eigene Ansicht, mit Übernahme in eine Aufgabe
|
||||
- Projekte mit Arbeitspaketen, Meilensteinen und Fortschritt
|
||||
- Startseite zeigt jetzt, was überfällig oder demnächst fällig ist
|
||||
- 53 neue Unit-Tests, 11 neue Integrationsprüfungen, 4 neue E2E-Tests
|
||||
- Handbuchseiten zu Aufgaben, Ideen und Projekten; Bilder neu aufgenommen
|
||||
|
||||
### Entscheidungen mit Begründung
|
||||
|
||||
**Die Inbox ist kein eigener Zustand.** Eine Aufgabe liegt genau dann in der
|
||||
Inbox, wenn sie keinen Bereich hat. Ein zusätzliches Feld „einsortiert"
|
||||
hätte mit der Zuordnung auseinanderlaufen können; so ist der Zustand nicht
|
||||
darstellbar.
|
||||
|
||||
**Projekt als eigenes Modell, nicht als Aufgabentyp.** Ein Projekt hat
|
||||
selbst weder Aufwand noch Fälligkeit — beides ergibt sich aus dem Inhalt.
|
||||
`ARBEITSPAKET` und `MEILENSTEIN` bleiben Typen der Aufgaben _innerhalb_
|
||||
eines Projekts.
|
||||
|
||||
**Verworfene Aufgaben zählen gar nicht in den Fortschritt.** Weder als
|
||||
erledigt noch als offen. Sonst sähe ein Projekt fertig aus, weil die Hälfte
|
||||
gestrichen wurde — eine Zahl, die lügt, ist schlechter als keine.
|
||||
|
||||
**Sortiert wird in der Anwendung, nicht in SQL.** Die Reihenfolge ist
|
||||
mehrstufig (offen vor abgeschlossen, dann Termin, dann Priorität, dann Titel
|
||||
mit deutscher Sortierung). Als geprüfte reine Funktion steht sie an einer
|
||||
Stelle; eine zweite Fassung in SQL wäre eine Fehlerquelle. Bei den erwarteten
|
||||
Mengen ist das unkritisch — sollte es einmal eng werden, ist der Ort für die
|
||||
Änderung klar.
|
||||
|
||||
**Filter stehen in der Adresse.** Eine gefilterte Liste lässt sich als
|
||||
Lesezeichen ablegen, und der Zurück-Knopf tut, was er soll.
|
||||
|
||||
**Statuswechsel folgen festen Übergängen.** Aus `ERLEDIGT` und `VERWORFEN`
|
||||
geht es nur zurück nach `OFFEN`. Wer per Formular etwas anderes einreicht,
|
||||
bekommt eine Meldung — nicht einen stillen Zustandssprung.
|
||||
|
||||
**Fälligkeit in Kalendertagen, nicht in Stunden.** Was heute um 23:00 fällig
|
||||
ist, ist heute fällig. Alles andere fühlt sich beim Benutzen falsch an.
|
||||
|
||||
**Natives `<select>` statt einer eigenen Auswahlkomponente.** Es bedient
|
||||
sich auf dem Handy mit dem Systemdialog, ist ohne Zusatzcode
|
||||
tastaturbedienbar und braucht kein JavaScript zum Absenden.
|
||||
|
||||
### Probleme und Lösungen
|
||||
|
||||
| Problem | Lösung |
|
||||
| ----------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| ESLint beanstandete `String(antwort.meldung)` | Ich hatte die Rückmeldung als `Record<string, unknown>` typisiert, statt den vorhandenen `Rueckmeldung`-Typ zu nehmen. Mit dem richtigen Typ entfällt die Umwandlung ganz. |
|
||||
| Zwei Stellen rechneten die Tagesgrenze mit einem `toLocaleString`-Trick | `src/lib/zeit.ts` konnte das längst sauber. Beide Stellen nutzen jetzt `tagesBeginn()` beziehungsweise `alsTagesschluessel()`; die Tests belegen gleiche Ergebnisse bei weniger Code. |
|
||||
| Typfehler nach der Migration | Der Prisma-Client muss nach jeder Schemaänderung neu erzeugt werden. `npm run pruefen` tut das inzwischen selbst, wenn er fehlt — hier war er nur veraltet. |
|
||||
|
||||
### Eigene Fehler, die ich korrigiert habe
|
||||
|
||||
- Im Demo-Seed stand versehentlich ein kyrillisches Wort als Titel eines
|
||||
Meilensteins. Ersetzt durch „Seite ist online".
|
||||
- Ein Test erwartete, dass 481 Minuten Aufwand erlaubt sind; die Grenze
|
||||
liegt bei 480. Der Test war falsch, nicht der Code — jetzt prüft er die
|
||||
Grenze selbst und den ersten Wert darüber.
|
||||
|
||||
### Offene Punkte
|
||||
|
||||
- Kein Wiederholungsrhythmus für Aufgaben und keine Verknüpfung von Aufgaben
|
||||
untereinander. Beides steht bewusst unter „Ideen für später" und wartet
|
||||
darauf, ob es im Alltag wirklich fehlt.
|
||||
- Die Aufgabenliste lädt bis zu 500 Einträge auf einmal. Für den erwarteten
|
||||
Bestand reicht das; eine Blätterfunktion kommt, wenn es eng wird.
|
||||
|
||||
### Commits
|
||||
|
||||
- 63c3c15 feat(aufgaben): Datenmodell und Regeln für Aufgaben und Projekte
|
||||
- b3ca1c9 feat(aufgaben): Server Actions und Abfrageschicht
|
||||
- a4a889f feat(aufgaben): Inbox, Aufgabenliste, Ideen und Projekte
|
||||
- 7c8fe10 test: Erfassungsweg und Eindeutigkeit der Quellen absichern
|
||||
- 144457b fix(aufgaben): Ideen aus Aufgabenliste und Inbox heraushalten
|
||||
- 4d0f83f chore: Demo-Daten für die neuen Seiten erweitern
|
||||
- d01c49b docs: Handbuchseiten zu Aufgaben, Ideen und Projekten
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user