# Flimmer 0.8.0 Zwei größere Bausteine: **Anmeldung per Passkey** und die **Jellyfin-Anbindung**. Dazu vier Nacharbeiten aus dem laufenden Betrieb. > ⚠️ **Beim Aktualisieren kommen zwei Migrationen mit** (`passkeys`, > `medienserver`). Der Container spielt sie beim Start selbst ein; `./update.sh` > legt vorher eine Sicherung an. ### Hinzugefügt - **Anmeldung per Passkey (WebAuthn).** Windows Hello, Face ID, Touch ID oder ein Sicherheitsschlüssel — statt Passwort. Anlegen und verwalten unter *Einstellungen → Passkeys*, anmelden über „Mit Passkey anmelden" **ohne vorherige E-Mail-Eingabe**. Ein Passkey ist der dritte Weg in denselben Trichter: am Ende steht dieselbe Sitzung wie bei Passwort und OIDC. Das Passwort bleibt daneben bestehen, und den letzten verbleibenden Anmeldeweg lässt Flimmer nicht entfernen. Drei Dinge, die beim Selbsthosten zählen: - **HTTPS ist Pflicht** (Ausnahme: `localhost`). Läuft die Instanz über einfaches HTTP, verschwindet die Verwaltung mit einem Hinweis, statt einen kryptischen Browserfehler zu zeigen. - Der Hostname kommt aus `APP_URL`, nicht aus dem `Host`-Header — hinter einem Reverse Proxy hinge er sonst am falschen Namen. - **Ein Domainwechsel entwertet alle Passkeys.** Sie sind fest an den Hostnamen gebunden und müssen danach neu angelegt werden. Abschaltbar über `ENABLE_PASSKEYS`. - **Jellyfin anbinden** — Bestand und Sichtungen übernehmen, unter *Einstellungen → Medienserver*. Zugeordnet wird über die **TMDB-Kennung**, die Jellyfin zu jedem Item mitliefert; dieselbe Kennung, auf der Flimmers Katalog ohnehin aufbaut. Kein Raten über Titel und Jahreszahlen — die Zuordnung ist eindeutig oder sie findet nicht statt. Was Jellyfin ohne Kennung führt, landet im Bericht. Angemeldet wird mit Benutzername und Passwort, **nicht** mit einem API-Schlüssel: mit einem Schlüssel liefert Jellyfin den Bestand ohne Gesehen-Status, und zwar ohne Fehlermeldung. Der Verbindungstest prüft das ausdrücklich nach und sagt es. Das Zugangstoken liegt verschlüsselt in der Datenbank (AES-256-GCM, Schlüssel aus `AUTH_SECRET`), das Passwort wird nicht gespeichert. Der Abgleich ist eine **Einbahnstraße**: er ergänzt und löscht nie etwas, das in Flimmer steht. Fehlende Titel werden nur mit gesetztem Häkchen aufgenommen — im täglichen Lauf also nie. Danach läuft er im Hintergrundlauf mit. *Grenze der Quelle:* Jellyfin kennt `PlayCount` und `LastPlayedDate`, aber keine Liste einzelner Sichtungen. Ein dreimal gesehener Film kommt deshalb mit **einem** Termin an, nicht mit drei. Das steht auch in der Anleitung. Das Zurückschreiben nach Jellyfin (Stufe 3) ist noch nicht dabei; das Feld liegt im Datenmodell bereit. - **Standardreihenfolge je Universum.** Welche Reihenfolge beim Öffnen erscheint, lässt sich jetzt festlegen — wer Schreibrecht hat, setzt sie für alle. Die Rangfolge bleibt schlicht: Adresse schlägt Standard schlägt erste. Über die Schnittstelle mit `PATCH /api/v1/universen/{id}`. ### Geändert - **Rückmeldung beim Tippen** in Suche und Bibliothek. Beim Suchen wird das Trefferraster gedämpft und auf `aria-busy` gesetzt, der Hinweis „sucht …" steht jetzt auch in der Bibliothek. Die alten Treffer bleiben sichtbar — sie verschwinden zu lassen ließe die Liste bei jedem Tastendruck springen. Die Sammelverzögerung liegt einheitlich bei 250 ms. - **`update.sh` erkennt jetzt den Container-Zustand.** Schlägt die Abfrage über den veröffentlichten Port fehl, zählt der Healthcheck des Containers — hinter einem Reverse Proxy ist der App-Port oft gar nicht auf dem Host veröffentlicht, und das Skript meldete dann einen Fehlschlag, obwohl das Update sauber durchgelaufen war. Im Fehlerfall nennt es außerdem den Zustand und ordnet ihn ein. *Zur Klarstellung:* Der Changelog zu 0.7.1 führte diese Rückfallprüfung bereits auf. Sie war dort beschrieben, aber nicht umgesetzt — jetzt ist sie es. - Die Entwicklungsdatenbank hat einen eigenen Compose-Projektnamen (`flimmer-dev`). Vorher leiteten beide Compose-Dateien ihn aus dem Verzeichnis ab, und ein `docker compose down -v` auf dem Produktivstack nahm das Volume der Entwicklungsdatenbank mit. ### Behoben - **Ein als gesehen markierter Film ließ sich nicht mehr zurücksetzen.** Im Zustand „gesehen" stand statt eines Knopfes ein Etikett ohne Klickziel, und eine Gegenfunktion gab es nicht — Serien hatten längst einen Umschalter, Filme nur einen Hinweg. Die grüne Plakette ist jetzt klickbar. Zurückgenommen wird dabei **nur der laufende Durchlauf**: wer einen Film dreimal gesehen hat, verliert die früheren Sichtungen nicht. - **Die Beschriftungen im Titelraster sprangen**, sobald ein Titel zweizeilig umbrach — die Metazeile saß dann eine Zeilenhöhe tiefer als bei den Nachbarn, und die Reihen waren unterschiedlich hoch. Der Titelblock belegt jetzt immer zwei Zeilen; in der Bibliothek wird zusätzlich der Platz des Fortschrittsbalkens freigehalten, den es nur bei Serien gibt. ### Getestet 78 Tests (vorher 52). Neu dazu: Passkey-Verwaltung samt Aussperrsperre, der Jellyfin-Abgleich gegen nachgebildete Antworten, die Standardreihenfolge samt Eindeutigkeit, und das Zurücknehmen einer Filmsichtung über Durchlaufgrenzen hinweg. Zusätzlich wurden die Klickwege gegen einen **Produktionsbau** geprüft — die Passkey-Anmeldung mit einem virtuellen Authenticator, der Jellyfin-Abgleich gegen einen nachgebildeten Server samt des Falls, in dem der Gesehen-Status fehlt.