docs: Fahrplan, Aenderungen und DEVLOG fuer M7

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Florian Wilde
2026-09-13 01:34:16 +02:00
co-authored by Claude Opus 5
parent f9a616e596
commit 6b14981766
4 changed files with 150 additions and 5 deletions
+102 -1
View File
@@ -13,7 +13,108 @@ die Übersicht aus `scripts/zeit.sh summe`.
| M4 | claude | 167 | 2,78 |
| M5 | claude | 420 | 7,00 |
| M6 | claude | 733 | 12,22 |
| **Gesamt** | | **1566** | **26,10** |
| M7 | claude | 886 | 14,77 |
| **Gesamt** | | **2452** | **40,87** |
---
## 2026-09-13 – M7: Schnellerfassung und API
**Dauer:** 886 Minuten (10:15–01:01), Art `claude`.
> Wie schon bei M6 sagt die Zahl mehr über den Rechner als über die Arbeit:
> Fünf hängende Docker-Bauten, einer davon mit einem einzelnen Schritt über
> drei Stunden. Die Bildaufnahme musste achtmal angestoßen werden.
**Ziel der Sitzung:** Etwas festhalten können, wo man gerade steht — und
andere Anwendungen hereinlassen, ohne ihnen die Schlüssel zum ganzen Haus zu
geben.
### Erledigt
- Regeln der Schnittstelle als reine Logik: Rechte, Tokenaufbau, Eingaben
(30 Tests)
- `/api/v1`: Aufgaben lesen, anlegen, ändern, abhaken
- Tokens mit Rechten und wahlweise Ablauf, verwaltbar in der Anwendung
- Schnellerfassung fürs Handy mit Warteschlange in IndexedDB
- Manifest und Symbol: der Planer lässt sich als App ablegen
- 10 neue E2E-Tests, 6 neue Integrationsprüfungen, Handbuchseite, API-Doku
### Entscheidungen mit Begründung
**Von einem Token liegt nur der Hash in der Datenbank.** Ein Token ist ein
Passwort; es gibt keinen Grund, es zurücklesen zu können, und jeden Grund,
es nicht zu können. SHA-256 ohne Salz ist hier richtig — der Wert hat 32
Byte Zufall, gegen so etwas hilft kein Wörterbuch, und die Prüfung muss bei
jeder Anfrage schnell sein.
**Kein Recht schließt ein anderes ein.** „Erfassen" darf nicht lesen. Ein
Dienst, der nur meldet „hier ist etwas Neues", braucht den Bestand nicht zu
sehen — und das ist der häufigste Fall.
**Der sichtbare Anfang heißt `planer_`.** Wer so einen Wert versehentlich in
ein öffentliches Verzeichnis schiebt, soll ihn beim Durchsehen erkennen.
**`/selbst` braucht kein Recht.** Sonst müsste man beim Einrichten raten, ob
der Token falsch ist oder nur zu wenig darf.
**Die Schnittstelle kann Bereich und Projekt nicht setzen.** Was von außen
kommt, landet in der Inbox. Die Einordnung ist Sache dessen, der plant,
nicht dessen, der meldet. Löschen kann sie auch nicht: Ein Fehler im fremden
Skript soll keine Planung vernichten.
**Erst anstellen, dann senden.** Die Schnellerfassung schreibt zuerst in die
Warteschlange des Geräts und versucht dann zu senden. Andersherum wäre der
Eintrag weg, wenn der Browser mitten im Senden geschlossen wird.
**IndexedDB statt localStorage.** Das sind echte Daten des Benutzers. Ein
Eintrag, der beim Aufräumen des Speichers verschwindet, ist eine verlorene
Aufgabe — genau das, was der Planer verhindern soll.
**Der Dienstarbeiter hält genau eine Seite vor.** Ein halb veralteter Planer
wäre schlimmer als gar keiner; ein leeres Eingabefeld dagegen veraltet
nicht. Und ohne die Seite nützte die Warteschlange niemandem: Man käme gar
nicht erst hin.
**Die Navigation wurde geteilt statt weiter gedehnt.** Nach M6 hatte ich die
Leiste verbreitert; mit dem dreizehnten Eintrag verschluckte sie erneut
Punkte. Das war die falsche Antwort: Das Problem ist nicht die Breite,
sondern die Vermischung. Alltag steht in der Leiste, Einrichtung und
Verwaltung liegen hinter „Mehr".
### Probleme und Lösungen
| Problem | Lösung |
| -------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Die Erfassungsseite zählte die Inbox anders als die Kopfleiste | Sie zählte Ideen mit. Jetzt benutzt sie dieselbe Abfrage. Derselbe Fehlertyp wie in M2 — und wieder nur im Bild aufgefallen, im Code sah jede Seite für sich richtig aus. |
| Die Leiste verschluckte mit dem dreizehnten Eintrag wieder Punkte | Aufgeteilt statt verbreitert, siehe oben. Zwei E2E-Tests greifen den neuen Weg über „Mehr" auf. |
| Ein E2E-Test brach mit `ERR_ABORTED` ab | Die Erfolgsmeldung kommt, bevor das Neuladen der Liste fertig ist; wer dann navigiert, bricht es ab. Der Test wartet jetzt darauf. |
| `exactOptionalPropertyTypes` und Prismas Update-Typen vertragen kein `undefined` | Das Datenobjekt wird Feld für Feld gebaut statt per Spread. Ein gesetztes `undefined` ist etwas anderes als ein fehlendes Feld. |
| Ein Devanagari-Zeichen war in ein Token-Präfix der Demo-Daten geraten | Entfernt. Beim Schreiben über die Shell passiert so etwas; die Datei danach durchsucht. |
| Fünf hängende Docker-Bauten, einer über drei Stunden | Kein Codeproblem: Nach Abbruch und Neustart lief derselbe Bau in Minuten durch. Zweimal scheiterte zusätzlich das Anlegen des Compose-Netzes. |
### Offene Punkte
- **Die Bilder der Erfassungsseite zeigen die alte Inbox-Zahl.** Der Bildlauf
ließ sich nach der Korrektur nicht mehr durchbringen. Ein Lauf, wenn Docker
wieder mitspielt, räumt das auf.
- Keine Begrenzung der Aufrufzahl je Token. Bei einer Handvoll eigener
Tokens wäre sie mehr Zeremonie als Schutz — bei einem Token, der außer
Haus geht, sähe das anders aus.
- Die Warteschlange kennt keinen Abbruch: Ein Eintrag, der dauerhaft
scheitert, wird ewig erneut versucht. Bisher gibt es keinen Fall, in dem
das passieren könnte, ohne dass gleichzeitig die Anmeldung fehlt.
### Commits
- d5c7974 feat: Datenmodell und Regeln für die öffentliche Schnittstelle
- 6d3ebd0 feat: API v1 für Aufgaben
- b17c42a feat: Tokens verwalten
- 9565b9a feat: Schnellerfassung vom Handy, auch ohne Netz
- 10b49cf test: Die Tür der Schnittstelle scharf prüfen
- 2e57713 docs: Handbuchseite zum Erfassen und Beschreibung der Schnittstelle
- 7919149 fix: Navigation aufteilen, statt sie weiter zu dehnen
- f9a616e docs: Handbuchbilder für M7 aufnehmen
---