- Checkliste je Aufgabe (Tabelle kanban_checklist): im Dialog anlegen,
abhaken, entfernen; Karte zeigt den Fortschritt
- "Setzt voraus" (Tabelle kanban_dependencies): Aufgabe ist gesperrt und
bleibt in "Offen", bis alle Voraussetzungen erledigt sind; nur innerhalb
eines Projekts, Kreise und Selbstbezug werden abgelehnt; gelöschte
Voraussetzungen entsperren, archivierte zählen als erledigt
- Ziehen einer gesperrten Karte aus "Offen" zeigt, worauf sie wartet
- Migrationen: Tabellen-Neuaufbau über Zwischennamen, damit Fremdschlüssel
anderer Tabellen nicht auf die gelöschte Alt-Tabelle umgebogen werden
(Test für ganz alte Datenbanken)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Migration Schritt 2: Lese-/Schreibfehler (z. B. Dateirechte) und kaputte
Bilder werden protokolliert und übersprungen, statt den Serverstart
abzubrechen
- bilder.py: alle Pillow-Fehler werden zu einer Eingabe-Fehlermeldung bzw.
"keine Metadaten" statt zu Fehler 500
- Test mit schreibgeschütztem und kaputtem Bild
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Uploads: Server entfernt EXIF/XMP/Text (GPS-Standort, Kamera, Uhrzeit)
per Pillow; Drehung von Hochkant-Fotos wird vorher angewendet, Farbprofil
bleibt; GIFs unverändert (neue Abhängigkeit pillow)
- Produktvorschläge pro Liste (Tabelle list_products): Einträge privater
Listen tauchen bei anderen weder in Vorschlägen noch beim Rezeptabgleich
auf; "Vorschläge verwalten" löscht nur aus eigenen sichtbaren Listen
- Artikel: Bilder nur noch aus den eigenen Uploads (kein Tracking-Pixel
fremder Server); Bereinigung in htmlclean.py
- /api/docs und /api/openapi.json nur noch im Entwicklungsmodus
(RELOAD=1 oder P42_API_DOCS=1)
- Migration Schritt 2: bestehende Vorschläge den Listen zuordnen, Artikel
neu bereinigen, gespeicherte Bilder mit Metadaten säubern
- Tests in test_datenschutz.py (u. a. Rezept-Zuordnung, Umstellung)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Eine ValidationError-Klasse statt zwei (links.py, projects.py), ein
Fehler-Handler in main.py
- clean_text() ersetzt vier fast gleiche Text-Prüfungen (Kanban, Haushalt,
Reisen, Artikel); Fehlermeldungen nennen jetzt überall die Höchstlänge
- Zeitstempel (now_iso, iso_ago, iso_after) und Kontenliste (user_list)
an einer Stelle; ungenutzte Importe entfernt
- Tests für die Helfer und für einheitliche 400-Fehler aus allen Bereichen
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- db.py enthält nur noch Schema (neuester Stand), Verbindungen und Start
- Neue Datenbank: direkt im neuesten Schema, erste Liste "Zuhause",
Version = Anzahl der Schritte
- Bestehende Datenbank: nur fehlende Schritte, jeder genau einmal
- Bisherige Einzel-Umstellungen als Schritt 1 "Altbestand" (prüfen weiter
selbst, was nötig ist); künftige Schritte werden einfach angehängt
- Tests für Versionsnummer und "Schritt läuft nur einmal"
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- backend/tests: jede Test-Funktion bekommt eine frische Datenbank;
test_migrationen.py baut ältere Datenbank-Stände nach und prüft die
verlustfreie Umstellung (auch zweiter Start ohne Änderung)
- requirements-dev.txt mit pytest
- Fix (von den Tests gefunden): Eine neue, leere Datenbank bekam keine
erste Liste "Zuhause"; jetzt einmalig beim ersten Start
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>