- Ausgaben (Name + Redaktionsschluss-Datum) verwalten, mehrere parallel,
Anlegen/Bearbeiten/Löschen nur für Admin, mit Audit-Log-Einträgen
- Erinnerung 28 Tage vor dem Redaktionsschluss an alle aktiven Rezensenten
mit offener (oder fehlender) Planung, Versand über das benachrichtigung-
Plugin je Kanal-Präferenz, Audit als System/benachrichtigt
- Täglicher APScheduler-Job (SPIELE_ERINNERUNG_JOB_UHRZEIT, abschaltbar)
plus manuelle Sofort-Prüfung in der Admin-Ansicht
- Doppelschutz: Protokolltabelle mit Unique (Ausgabe, Benutzer)
- Admin-UI: Ausgabenliste mit Restzeit-Badges, Erinnerungsstatus
(wer wurde wann über welche Kanäle erinnert), deutsche Templates
- Tests mit eingefrorener Uhr (freezegun): Fenster-Grenzen, kein Versand
vor Frist/nach Schluss, Empfänger-/Rollenregeln, keine Duplikate,
Scheduler-Konfiguration; Integrationstest mit den echten Plugins
(167 Tests grün)
- Eigene Migration 0001_archiv_tabellen: Spiegel-Tabellen archiv_neuheiten
und archiv_planung (ohne FK, damit Archiv-Zeilen Benutzerlöschung überleben)
- Service mit eingefrierbarer Uhr: Stichtag „jetzt minus 12 Monate“ in UTC,
strenger Vergleich (genau 12 Monate bleibt aktiv); Neuheiten nach
Erscheinungsjahr (großzügig Jahresende) sonst Eintragsdatum, Planung nach
Eintragsdatum; Monatsarithmetik mit Klemmung (29. Februar)
- Täglicher APScheduler-Cron-Job (Standard 03:00, konfigurierbar über
SPIELE_ARCHIV_JOB_UHRZEIT / SPIELE_ARCHIV_JOB_AKTIV); je archiviertem
Titel ein Audit-Log-Eintrag als System
- Admin-Ansicht /archiv: vereinigte Liste beider Tabellen, Suche über
Titel/Verlag/Autor, Herkunftsfilter, Wiederherstellen in die aktive Liste
(BGG-Konflikt wird abgelehnt, verwaiste Rezensentenzuordnung übernimmt der
Admin — gemeldet und auditiert); Rollen: nur Admin
- Kern minimal erweitert: PluginContext.registry stellt Hintergrund-Jobs die
Plugin-Registry bereit (keine Fachlogik im Kern)
- 30 neue Tests mit eingefrorener Uhr (Grenzfälle, Zeitzonen, Schaltjahr,
Job-Lauf, Wiederherstellen, Rollen, Suche/Filter); 171 Tests grün
- README aktualisiert: neues Plugin-Kapitel, Env-Variablen, Fortschritt #7✅
Plugin dedup:
- Öffentliche Prüf-API check_titel(titel, verlag, bgg_id, user) mit
strukturiertem PruefErgebnis (Konflikte, Verlagsauswahl, Titel-Empfehlung)
- Vier Prüfungen: Verlags-Konflikt, Titel-Varianten (deutsche Version
bevorzugt: Umlaut-/Wort-Heuristik + BGG Alternate-Names), Spiel oder
Vorgänger bereits besprochen (BGG boardgameexpansion-Relation +
rapidfuzz-Fuzzy-Match), Titel in fremder Planungsliste
- BGG-Hilfsclient mit Rate-Limit, netzwerkfrei testbar, degradiert defensiv
- Eigene Migration (Prüfprotokoll dedup_pruefungen) + Prüfseite /dedup
- Fremde Plugin-Tabellen werden nur lesend über die gemeinsame Metadata
gelesen — keine Import-Abhängigkeiten zwischen Plugins
Plugin planung:
- Migration planungsliste: Titel, Verlag, Ausgabe, Rezensent, Status
(offen/in_bearbeitung/abgeschlossen), Quelle, Prüf-Befund (JSON)
- Beide Eintragswege durch die dedup-Prüfung: Verschiebung aus den
Neuheiten (Button „→ Zur Planung“, Neuheit wechselt auf Status planung)
und händisches Nachtragen im Formular
- Bei Treffern: send_notification an den eintragenden Rezensenten
(benachrichtigung-Plugin) + Audit-Log-Eintrag (audit-log-Plugin)
- Verlags-Konflikt → Auswahl-Dialog „Welcher Verlag wird geführt?“,
Entscheidung wird auditiert
- Planungsliste mit Zuordnung, Statuswechsel, Bearbeiten/Löschen;
Rezensenten nur eigene Einträge, Admin/Redakteur alle
Tests: 45 neue Tests (Heuristik, alle vier Prüfungen mit Fake-BGG-Client,
Protokoll, beide Eintragswege mit Stub-gemockten Abhängigkeiten, Rollen,
Integration mit echten Plugins) — 141 Tests grün.