Der 06:00-Job rollt bei einer fehlenden Baseline den ganzen Tag zurück #23

Open
opened 2026-09-29 11:34:11 +00:00 by claude · 1 comment
Collaborator

Was passiert: Der Job um 06:00 (CaptainReminderService.run, backend/…/service/CaptainReminderService.java:76) verschickt Erinnerungen, bestätigt Resultate automatisch und rechnet am Ende die Elo der Saison neu – alles in einer Transaktion.

Seit jede Baseline erst ab ihrem Datum gilt (Plan Elo-Baselines), kann die Neuberechnung berechtigt mit 409 scheitern: ein Spieler hat eine Partie vor seiner Erstmeldung. Dann werden alle Erinnerungen und Auto-Bestätigungen des Tages zurückgerollt – und am nächsten Morgen wieder, bis jemand die Baseline nachträgt. Sichtbar ist davon nichts, ausser dass nichts passiert.

Vorschlag: die Elo je Saison in einer eigenen Transaktion rechnen und die 409 ins Log schreiben – oder die Auto-Bestätigung ganz vom Rechnen trennen.

Herkunft: Review des Branches Elo-Baselines (e8, Befund I5), 29.09.2026.

**Was passiert:** Der Job um 06:00 (`CaptainReminderService.run`, `backend/…/service/CaptainReminderService.java:76`) verschickt Erinnerungen, bestätigt Resultate automatisch und rechnet am Ende die Elo der Saison neu – alles in **einer** Transaktion. Seit jede Baseline erst ab ihrem Datum gilt (Plan Elo-Baselines), kann die Neuberechnung berechtigt mit 409 scheitern: ein Spieler hat eine Partie vor seiner Erstmeldung. Dann werden **alle** Erinnerungen und Auto-Bestätigungen des Tages zurückgerollt – und am nächsten Morgen wieder, bis jemand die Baseline nachträgt. Sichtbar ist davon nichts, ausser dass nichts passiert. **Vorschlag:** die Elo je Saison in einer eigenen Transaktion rechnen und die 409 ins Log schreiben – oder die Auto-Bestätigung ganz vom Rechnen trennen. Herkunft: Review des Branches Elo-Baselines (e8, Befund I5), 29.09.2026.
Author
Collaborator

Am Code nachgeprüft (20.10.): Die fehlende Baseline ist nur ein Auslöser. Die Ursache liegt in der Bauweise. run hält alle Begegnungen, die Auto-Bestätigungen und die Elo-Rechnung in einer Transaktion, und die Erinnerungsmails gehen mitten darin raus. Jede Ausnahme rollt darum den ganzen Tag zurück, und weil die Protokolleinträge mit zurückgerollt werden, gehen die schon verschickten Erinnerungen am nächsten Morgen doppelt raus.

Das Mail-Muster betrifft alle 12 Versandstellen, nicht nur den Job, und steht darum in #122. #23 baut darauf auf: je Begegnung eine eigene Transaktion, Erinnerungen über den Versand nach dem Commit. Offen bleibt die Entscheidung, was eine fällige Auto-Bestätigung tut, wenn die Elo nicht rechnet: (A) gleiche Regel wie beim Bestätigen von Hand, die Begegnung bleibt eingereicht, oder (B) bestätigen und die Elo später rechnen.

Am Code nachgeprüft (20.10.): Die fehlende Baseline ist nur ein Auslöser. Die Ursache liegt in der Bauweise. `run` hält alle Begegnungen, die Auto-Bestätigungen und die Elo-Rechnung in **einer** Transaktion, und die Erinnerungsmails gehen mitten darin raus. Jede Ausnahme rollt darum den ganzen Tag zurück, und weil die Protokolleinträge mit zurückgerollt werden, gehen die schon verschickten Erinnerungen am nächsten Morgen **doppelt** raus. Das Mail-Muster betrifft alle 12 Versandstellen, nicht nur den Job, und steht darum in #122. #23 baut darauf auf: je Begegnung eine eigene Transaktion, Erinnerungen über den Versand nach dem Commit. Offen bleibt die Entscheidung, was eine fällige Auto-Bestätigung tut, wenn die Elo nicht rechnet: (A) gleiche Regel wie beim Bestätigen von Hand, die Begegnung bleibt eingereicht, oder (B) bestätigen und die Elo später rechnen.
Sign in to join this conversation.
No description provided.