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
+27
View File
@@ -6,6 +6,33 @@ die Versionierung [Semantic Versioning](https://semver.org/lang/de/).
## [Unveröffentlicht] ## [Unveröffentlicht]
### Hinzugefügt
- **Schnellerfassung vom Handy** unter _Erfassen_: ein Feld, ein Knopf. Was
ohne Netz erfasst wird, bleibt im Gerät und geht hinaus, sobald wieder eine
Verbindung da ist — mit einer Kennung je Erfassung, damit eine doppelt
zugestellte Nachricht keine zweite Aufgabe ergibt.
- Der Planer lässt sich als **App auf dem Startbildschirm ablegen**
(Manifest, eigenes Symbol, eigener Startpunkt).
- **Öffentliche Schnittstelle** unter `/api/v1`: Aufgaben lesen, anlegen,
ändern und abhaken. Beschreibung in [docs/API.md](docs/API.md).
- **Tokens je Anwendung** mit Rechten je Token, wahlweise mit Ablauf,
verwaltbar unter _API_.
- Handbuchseite zur Schnellerfassung.
### Sicherheit
- Von einem Token liegt nur der Fingerabdruck in der Datenbank. Der Wert
erscheint genau einmal — beim Anlegen.
- Die drei Rechte schließen einander nicht ein: Ein Dienst, der nur erfasst,
kann den Bestand nicht lesen.
- Jeder Fehlschlag beim Ausweisen sieht gleich aus. Ob ein Token unbekannt,
abgelaufen oder zurückgezogen ist, verrät die Schnittstelle nicht.
- Jede schreibende Nutzung steht im Protokoll, mitsamt dem Token — auch jeder
abgewiesene Zugriff.
- Die Schnittstelle kann weder löschen noch Bereiche, Projekte, Zeitblöcke
oder Kalender anfassen.
## [0.6.0] – 2026-09-12 ## [0.6.0] – 2026-09-12
### Hinzugefügt ### Hinzugefügt
+20 -4
View File
@@ -11,7 +11,7 @@ grünen Prüfungen, aktueller Dokumentation und einem Eintrag im DEVLOG.
| [M4](#m4--wochenplanung-und-zeitblöcke) | Wochenplanung und Zeitblöcke | erledigt | | [M4](#m4--wochenplanung-und-zeitblöcke) | Wochenplanung und Zeitblöcke | erledigt |
| [M5](#m5--benachrichtigungen) | Benachrichtigungen | erledigt | | [M5](#m5--benachrichtigungen) | Benachrichtigungen | erledigt |
| [M6](#m6--integrationen) | Integrationen | erledigt | | [M6](#m6--integrationen) | Integrationen | erledigt |
| [M7](#m7--schnellerfassung-und-api) | Schnellerfassung und API | geplant | | [M7](#m7--schnellerfassung-und-api) | Schnellerfassung und API | erledigt |
| [M8](#m8--mcp) | MCP | geplant | | [M8](#m8--mcp) | MCP | geplant |
--- ---
@@ -134,9 +134,25 @@ im Ticketsystem — sonst weiß die Kollegin nicht, warum es plötzlich zu ist.
## M7 – Schnellerfassung und API ## M7 – Schnellerfassung und API
- [ ] Erfassung vom Handy, auch offline **Erledigt am 12.09.2026 mit Version 0.7.0.**
- [ ] Öffentliche API mit Token je Anwendung
- [ ] Rechte je Token, jede Nutzung im Protokoll **Ziel:** Etwas festhalten können, wo man gerade steht — und andere
Anwendungen hereinlassen, ohne ihnen die Schlüssel zum ganzen Haus zu geben.
- [x] Erfassung vom Handy, auch offline
- [x] Öffentliche API mit Token je Anwendung
- [x] Rechte je Token, jede schreibende Nutzung im Protokoll
- [x] Als App ablegbar (Manifest, eigenes Symbol)
**Offen geblieben:** Die Bilder der Erfassungsseite im Handbuch zeigen noch
eine falsche Inbox-Zahl; der Fehler selbst ist behoben, nur der Bildlauf
kam danach nicht mehr durch.
**Bewusst offen gelassen:** Die Schnittstelle kann keine Bereiche, Projekte
oder Zeitblöcke anfassen und nichts löschen. Was von außen kommt, landet in
der Inbox; die Einordnung bleibt bei dem, der plant. Auch eine Begrenzung der
Aufrufzahl gibt es nicht — bei einer Handvoll eigener Tokens wäre sie mehr
Zeremonie als Schutz.
## M8 – MCP ## M8 – MCP
+102 -1
View File
@@ -13,7 +13,108 @@ die Übersicht aus `scripts/zeit.sh summe`.
| M4 | claude | 167 | 2,78 | | M4 | claude | 167 | 2,78 |
| M5 | claude | 420 | 7,00 | | M5 | claude | 420 | 7,00 |
| M6 | claude | 733 | 12,22 | | 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
--- ---
+1
View File
@@ -5,3 +5,4 @@ datum;start;ende;minuten;meilenstein;art;notiz
2026-09-10;20:42;23:29;167;M4;claude;M4 Wochenplanung fertig 2026-09-10;20:42;23:29;167;M4;claude;M4 Wochenplanung fertig
2026-09-11;06:35;13:35;420;M5;claude;M5 Benachrichtigungen fertig 2026-09-11;06:35;13:35;420;M5;claude;M5 Benachrichtigungen fertig
2026-09-11;20:47;09:00;733;M6;claude;M6 Integrationen fertig 2026-09-11;20:47;09:00;733;M6;claude;M6 Integrationen fertig
2026-09-12;10:15;01:01;886;M7;claude;M7 Schnellerfassung und API fertig
1 datum start ende minuten meilenstein art notiz
5 2026-09-10 20:42 23:29 167 M4 claude M4 Wochenplanung fertig
6 2026-09-11 06:35 13:35 420 M5 claude M5 Benachrichtigungen fertig
7 2026-09-11 20:47 09:00 733 M6 claude M6 Integrationen fertig
8 2026-09-12 10:15 01:01 886 M7 claude M7 Schnellerfassung und API fertig