docs: Fahrplan, Aenderungen und DEVLOG fuer M7
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
f9a616e596
commit
6b14981766
@@ -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
@@ -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
@@ -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
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
|
Reference in New Issue
Block a user