Erinnerungszeit je Konto einstellbar statt fest um 20:00 #10

Merged
mi merged 1 commits from reminder-time into main 2026-10-21 13:47:23 +02:00
Collaborator

Die Arbeitserinnerung kam bis hierher ausschließlich um 20:00 Ortszeit des Geräts und wurde bis 22:00 nachgeholt; beide Zeiten standen als Konstanten in ReminderWindow. Der Beginn ist jetzt je Konto einstellbar, das Nachholfenster leitet sich daraus ab.

Entscheidungen

  • Kontoeinstellung, nicht Geräteeinstellung. Der Ein-/Ausschalter für Push bleibt pro Gerät; die Uhrzeit gilt für alle Geräte desselben Kontos und steht neben Sprache und Arbeitstracker im gemeinsamen Formular mit Versionsprüfung.
  • Viertelstundenschritte zwischen 06:00 und 23:00, Vorgabe 20:00. Ein Konto, das nichts ändert, wird unverändert erinnert.
  • Nachholen bleibt zwei Stunden, endet aber spätestens um Mitternacht. Eine Erinnerung nennt das Datum, um das es geht, und darf nicht in den Folgetag wandern: bei 23:00 bleibt eine Stunde statt zwei. Push-TTL und reminder_delivery.expires_at folgen demselben Ende.
  • Montag bis Freitag und die Prüfung unmittelbar vor dem Versand bleiben unverändert.

ReminderWindow hält Vorgabe, Grenzen, Schrittweite und Nachholdauer an einer Stelle. Dienst, Spaltenbedingung und TimePicker prüfen jeweils dagegen. Ein gespeicherter Wert außerhalb der angebotenen Zeiten hält die Erinnerung zurück, statt eine Stunde zu raten.

Migration

werkjournal:reminder-time fügt app_user.reminder_minute mit DEFAULT 1200 NOT NULL hinzu; bestehende Zeilen behalten damit ihren Zeitplan, keine andere Spalte wird angefasst.

Nachweise

Branch-Pipeline lokal grün (tools/ci-jvm --without-firefox): 25 Browser-Szenarien, 14 Push-Service-Szenarien, 22 Frontend-Tests, 68 Operations-Tests, JVM-Smoke PASS.

  • ReminderWindowTest: Vorgabe erzeugt dasselbe Fenster wie zuvor; eine gewählte Zeit verschiebt Beginn und Ende; eine späte Zeit behält ihr Datum und verliert Nachholzeit an Mitternacht.
  • SettingsServiceTest, ReminderTimeMigrationTest: Speichern, Ablehnen und der erhaltende Migrationsschritt mit befülltem Vorgängerstand.
  • WJ-073/WJ-074 mit echtem Scheduler, Warteschlange und Testtransport; WJ-075 im Browser für Formular, Gerätehinweis und abgelehnte Eingabe.
  • tests/frontend/push-settings.test.cjs: der Gerätehinweis nennt die übergebene Zeit statt einer festen Stunde.

Details: docs/implementation/reminder-time.md.

Nebenbei

Die Erhaltungsprüfung in AccountDeletionProofsTest verglich ganze Zeilen und schlug deshalb bei jedem additiven Changeset an. Sie vergleicht jetzt die Spalten, die es vorher gab, und prüft die Zeilenzahl — die Absicht bleibt, ein zusätzliches Feld sieht nicht mehr wie eine Datenänderung aus.

Offen

docs/plans/ui-refresh-selectors.md hat die neuen Selektoren bekommen; seine BS:-Zeilennummern und die Tag-Liste in Abschnitt 0 waren schon vorher veraltet und sind hier nicht nachgezogen.

🤖 Generated with Claude Code

Die Arbeitserinnerung kam bis hierher ausschließlich um 20:00 Ortszeit des Geräts und wurde bis 22:00 nachgeholt; beide Zeiten standen als Konstanten in `ReminderWindow`. Der Beginn ist jetzt je Konto einstellbar, das Nachholfenster leitet sich daraus ab. ## Entscheidungen - **Kontoeinstellung, nicht Geräteeinstellung.** Der Ein-/Ausschalter für Push bleibt pro Gerät; die Uhrzeit gilt für alle Geräte desselben Kontos und steht neben Sprache und Arbeitstracker im gemeinsamen Formular mit Versionsprüfung. - **Viertelstundenschritte zwischen 06:00 und 23:00**, Vorgabe 20:00. Ein Konto, das nichts ändert, wird unverändert erinnert. - **Nachholen bleibt zwei Stunden, endet aber spätestens um Mitternacht.** Eine Erinnerung nennt das Datum, um das es geht, und darf nicht in den Folgetag wandern: bei 23:00 bleibt eine Stunde statt zwei. Push-TTL und `reminder_delivery.expires_at` folgen demselben Ende. - Montag bis Freitag und die Prüfung unmittelbar vor dem Versand bleiben unverändert. `ReminderWindow` hält Vorgabe, Grenzen, Schrittweite und Nachholdauer an einer Stelle. Dienst, Spaltenbedingung und `TimePicker` prüfen jeweils dagegen. Ein gespeicherter Wert außerhalb der angebotenen Zeiten hält die Erinnerung zurück, statt eine Stunde zu raten. ## Migration `werkjournal:reminder-time` fügt `app_user.reminder_minute` mit `DEFAULT 1200 NOT NULL` hinzu; bestehende Zeilen behalten damit ihren Zeitplan, keine andere Spalte wird angefasst. ## Nachweise Branch-Pipeline lokal grün (`tools/ci-jvm --without-firefox`): 25 Browser-Szenarien, 14 Push-Service-Szenarien, 22 Frontend-Tests, 68 Operations-Tests, JVM-Smoke PASS. - `ReminderWindowTest`: Vorgabe erzeugt dasselbe Fenster wie zuvor; eine gewählte Zeit verschiebt Beginn und Ende; eine späte Zeit behält ihr Datum und verliert Nachholzeit an Mitternacht. - `SettingsServiceTest`, `ReminderTimeMigrationTest`: Speichern, Ablehnen und der erhaltende Migrationsschritt mit befülltem Vorgängerstand. - WJ-073/WJ-074 mit echtem Scheduler, Warteschlange und Testtransport; WJ-075 im Browser für Formular, Gerätehinweis und abgelehnte Eingabe. - `tests/frontend/push-settings.test.cjs`: der Gerätehinweis nennt die übergebene Zeit statt einer festen Stunde. Details: `docs/implementation/reminder-time.md`. ## Nebenbei Die Erhaltungsprüfung in `AccountDeletionProofsTest` verglich ganze Zeilen und schlug deshalb bei jedem additiven Changeset an. Sie vergleicht jetzt die Spalten, die es vorher gab, und prüft die Zeilenzahl — die Absicht bleibt, ein zusätzliches Feld sieht nicht mehr wie eine Datenänderung aus. ## Offen `docs/plans/ui-refresh-selectors.md` hat die neuen Selektoren bekommen; seine `BS:`-Zeilennummern und die Tag-Liste in Abschnitt 0 waren schon vorher veraltet und sind hier nicht nachgezogen. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
claude-code added 1 commit 2026-10-21 12:14:24 +02:00
Let an account choose when its work reminder arrives
werkator/branch build succeeded after 07:18
dbd45aef3a
The work reminder was fixed to 20:00 local time with catch-up until 22:00,
both constants in ReminderWindow. The start is now a per-account setting and
the catch-up window follows from it.

Chosen in quarter-hour steps between 06:00 and 23:00; 20:00 remains the
default, so an account that changes nothing is reminded exactly as before.
The catch-up stays two hours but never passes midnight, because a reminder
names the date it is about and must not wander into the next day. Push TTL
and reminder_delivery.expires_at follow that same end.

ReminderWindow holds the default, bounds, step and catch-up in one place;
service, column constraint and the time picker each check against it. A
value outside the offered times withholds the reminder instead of guessing
an hour.

The new column defaults to 1200, so existing accounts keep their schedule.
The deletion test's preservation check now compares the columns that existed
rather than whole rows, so an additive changeset no longer looks like a
change to the data.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
mi merged commit 4356eb00ca into main 2026-10-21 13:47:23 +02:00
mi deleted branch reminder-time 2026-10-21 13:47:23 +02:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: mi/werkjournal#10