Version 0.8.0
CI / pruefen (pull_request) Canceled after 0s

Passkeys und die Jellyfin-Anbindung als groessere Bausteine, dazu vier
Nacharbeiten aus dem Betrieb. Changelog, Release-Notiz, DEVLOG und die
bebilderte Anleitung nachgezogen.

Die Anleitung hat zwei neue Abschnitte samt Screenshots: „Anmelden per
Passkey" und ein Bild im Jellyfin-Abschnitt. Beide Aufnahmen brauchen
Gegenstellen — einen Authenticator und einen Medienserver. Damit
`npm run screenshots` reproduzierbar bleibt, stellt das Skript sie jetzt
selbst bereit: der virtuelle Authenticator kommt ueber CDP vom Browser, der
Jellyfin-Nachbau sind ein paar Zeilen HTTP im Skript. Beide Spuren raeumt es
nach der Aufnahme ueber die Oberflaeche wieder weg.

Der Merkposten zum Entwicklungsmodus in CLAUDE.md war zu absolut: dass unter
Playwright nichts hydratisiert, stimmt nicht durchgehend — im
Screenshot-Lauf gegen denselben Dev-Server funktionierten die Klicks. Der
Eintrag beschreibt jetzt das Beobachtete statt einer Regel, die nicht traegt,
und nennt die Pruefung, mit der sich der Zustand feststellen laesst. Dazu neu:
APP_URL muss zum aufgerufenen Port passen, sonst scheitern Passkeys am
Ursprungsabgleich.

Alle Screenshots neu aufgenommen — die Einstellungsseite hatte sich durch die
neuen Abschnitte ohnehin geaendert.
This commit is contained in:
Florian Wilde
2026-09-02 10:35:43 +02:00
parent 2deb7e1aa5
commit 0f9ad6e29d
27 changed files with 455 additions and 10 deletions
+24 -8
View File
@@ -112,6 +112,13 @@ Statistiken, Benachrichtigungen, REST-API, PWA. Oberflächensprache **Deutsch**.
**Alle sechs Etappen abgeschlossen. Gesamtzeit: 2 h 16 min.**
- ✅ **Nacharbeiten** (v0.7.0/0.7.1) — Docker verifiziert, „hab ich", `update.sh`. 51 min.
- ✅ **Issue-Runde** (v0.8.0) — Passkeys, Jellyfin-Anbindung, Standardreihenfolge,
Rückmeldung beim Tippen, Titelraster, Filmsichtung zurücknehmen. 77 min.
Ab v0.8.0 wird **issue-getrieben** gearbeitet: eigener Branch je Issue,
Zeiterfassung in Gitea, Freigabe durch Florian. Details im DEVLOG.
### Nützliches für spätere Arbeiten
- Suche ohne TMDB-Schlüssel ausprobieren:
`npm run tmdb:stub` und dann
@@ -122,16 +129,25 @@ Statistiken, Benachrichtigungen, REST-API, PWA. Oberflächensprache **Deutsch**.
das ASCII-Schlusszeichen beendet den String. In JSX-Text und Kommentaren ok.
- Heredocs im Bash-Tool sind bei langen TSX-Dateien unzuverlässig — dann das
Write-Werkzeug benutzen.
- **Klickwege niemals gegen `npm run dev` prüfen.** Unter headless Chromium
scheitert der HMR-Socket (`ERR_INVALID_HTTP_RESPONSE`), dadurch hydratisiert
**keine** Seite und kein Knopf reagiert — ohne Seitenfehler, ohne
fehlgeschlagene Anfrage, es passiert einfach nichts. Sieht aus wie ein Fehler
im eigenen Code, ist aber die Umgebung. Stattdessen
`npm run build` und `PORT=3012 npm start`, dann dagegen klicken.
Formulare täuschen zusätzlich: die Anmeldung funktioniert auch ohne
JavaScript, wirkt also intakt.
- **Wenn Klicks unter Playwright wirkungslos bleiben, liegt es meist nicht am
eigenen Code.** Beobachtet: gegen `npm run dev` reagierte unter headless
Chromium **keine** Seite — kein Knopf, nicht einmal der Theme-Umschalter,
ohne Seitenfehler und ohne fehlgeschlagene Anfrage. Begleitet vom
scheiternden HMR-Socket (`ERR_INVALID_HTTP_RESPONSE`).
**Der Zustand ist aber nicht dauerhaft:** in einem späteren Lauf gegen
denselben Dev-Server funktionierten dieselben Klicks. Der HMR-Fehler tritt
in beiden Fällen auf, taugt also nicht als Erklärung.
Vorgehen: erst mit `Object.keys(el).some(k => k.startsWith("__react"))`
prüfen, ob überhaupt hydratisiert wurde. Bleibt es dabei, gegen einen
Produktionsbau prüfen (`npm run build`, `PORT=3012 npm start`) — dort trat
es nie auf. Formulare täuschen zusätzlich: die Anmeldung funktioniert auch
ohne JavaScript und wirkt deshalb intakt.
- Vor `npm start` prüfen, ob der Port noch von einem früheren Lauf belegt ist —
sonst startet der neue Server gar nicht und man testet den alten Bau.
- **`APP_URL` muss zum tatsächlich aufgerufenen Port passen.** In der `.env`
steht `http://localhost:3010`; wer gegen 3011 oder 3012 testet, muss
`APP_URL` mitgeben. Passkeys scheitern sonst am Ursprungsabgleich (500),
und der OIDC-Rücksprung zeigt auf die falsche Adresse.
- Testdaten nach Klickproben wieder herstellen: die Proben schreiben in die
geseedete Entwicklungsdatenbank.