diff --git a/server/pruef-call-kategorien.mjs b/server/pruef-call-kategorien.mjs
index b7fb5f8b..a5405158 100644
--- a/server/pruef-call-kategorien.mjs
+++ b/server/pruef-call-kategorien.mjs
@@ -372,11 +372,30 @@ melde("\n=== Wiederholungen: eigene Gruppe, nur dieser Monat ===");
const serieId = d2.prepare("SELECT last_insert_rowid() AS id").get().id;
const rein = d2.prepare(`INSERT INTO termine (titel, art, beginn, dauer_min, serie_id, erstellt, erstellt_von)
VALUES (?,?,?,?,?,?,1)`);
- /* Zwei Auspraegungen derselben Serie: eine in vier Tagen (also mit
- grosser Wahrscheinlichkeit dieser Monat) und eine in sechzig Tagen
- (sicher ein anderer). Der Monatsschnitt wird aus dem Datumstext
- gerechnet, nicht aus einer Zeitzone. */
- const nah = inTagen(4), fern = inTagen(60);
+ /* ZWEI AUSPRAEGUNGEN -- und die nahe wird GERECHNET, nicht gehofft.
+
+ Hier stand „in vier Tagen (also mit grosser Wahrscheinlichkeit
+ dieser Monat)". Am 30.09.2026 war das der Oktober, die Pruefung
+ wurde rot, und die Anwendung hatte recht: Der Server verlangt
+ kuenftig UND im laufenden Monat, und am Monatsende gibt es
+ beides zusammen fuer „in vier Tagen" nicht.
+
+ Genau die Zeitbombe aus den Hausregeln -- dieselbe Art wie bei
+ `pruef-kalender` am 29.09. „Mit grosser Wahrscheinlichkeit" ist
+ keine Voraussetzung, sondern eine Hoffnung.
+
+ Der letzte Tag des laufenden Monats um 23:59 liegt im Monat,
+ weil er so gebaut ist, und in der Zukunft an jedem Tag ausser in
+ der letzten Minute des Monats. Fuer die gibt es unten den
+ dritten Ausgang. */
+ const heute = new Date();
+ const letzterTag = new Date(heute.getFullYear(), heute.getMonth() + 1, 0);
+ const zz = (x) => String(x).padStart(2, "0");
+ const nah = `${letzterTag.getFullYear()}-${zz(letzterTag.getMonth() + 1)}`
+ + `-${zz(letzterTag.getDate())}T23:59`;
+ const fern = inTagen(60);
+ /* Liegt die nahe Auspraegung ueberhaupt noch in der Zukunft? */
+ const nochZeit = new Date(nah).getTime() > Date.now();
rein.run("Serie dieser Monat", "call", nah, 30, serieId, new Date().toISOString());
rein.run("Serie spaeter", "call", fern, 30, serieId, new Date().toISOString());
d2.close();
@@ -400,8 +419,19 @@ melde("\n=== Wiederholungen: eigene Gruppe, nur dieser Monat ===");
const gleicherMonat = nah.slice(0, 7) === fern.slice(0, 7);
ok(!gleicherMonat,
`die beiden Auspraegungen liegen in verschiedenen Monaten (${nah.slice(0, 7)} / ${fern.slice(0, 7)})`);
- ok(serien.includes("Serie dieser Monat"),
- `die Wiederholung dieses Monats steht in "Laeuft automatisch" (${serien.join(", ") || "leer"})`);
+ /* DER DRITTE AUSGANG, und zwar benannt: In der letzten Minute des
+ Monats gibt es keinen kuenftigen Termin mehr in diesem Monat.
+ Das ist eine Auskunft ueber den Kalender, kein Befund ueber die
+ Software -- und die drei anderen Aussagen werden trotzdem
+ geprueft. Ein Ausstieg, der gar nichts mehr misst, waere ein
+ stiller Aussetzer. */
+ if (!nochZeit) {
+ melde(" KONNTE NICHT NACHSEHEN: letzte Minute des Monats -- es gibt "
+ + "keinen kuenftigen Termin mehr in diesem Monat.");
+ } else {
+ ok(serien.includes("Serie dieser Monat"),
+ `die Wiederholung dieses Monats steht in "Laeuft automatisch" (${serien.join(", ") || "leer"})`);
+ }
ok(!serien.includes("Serie spaeter"),
"die des naechsten Monats nicht -- keine Monate im Voraus");
ok(!anstehend.includes("Serie dieser Monat") && !anstehend.includes("Serie spaeter"),
diff --git a/workspace/anruf-probe.html b/workspace/anruf-probe.html
index 8acef641..cd1b9595 100644
--- a/workspace/anruf-probe.html
+++ b/workspace/anruf-probe.html
@@ -16,8 +16,8 @@
verdeckt. Gefunden hat es pruef-struktur.
Richtig sind `gate.css` (die Farbwerte des Hauses) und `haus.css`. -->
-
-
+
+
-
+