Die Rueckfragen sagten nicht, was passiert -- und eine lief gar nicht ueber den Hausdialog

`pruef-nachfrage` und `pruef-call-kategorien` standen seit dem 28.09.
rot und waren als „nicht angesehen" vermerkt. Nachgemessen sind es
drei echte Befunde und eine Zeitbombe.

=====================================================================
1. FALSCHE FELDNAMEN -- die Erklaerung erschien NIE
=====================================================================
Der Hausdialog kennt `was:` und `ja:`. An vier Stellen in
`reaktion.js` stand `text:` und `knopf:`. Beides wird stillschweigend
ignoriert.

Wer „Sendung beenden?" las, bekam den Titel und zwei Knoepfe -- genau
die Frage, die `confirm()` stellt und derentwegen `nachfrage.js`
ueberhaupt gebaut wurde. Es stuerzt nichts ab, es fehlt nur; so etwas
findet keine Syntaxpruefung und kein Blick auf den Bildschirm, wenn
man den Satz nicht vermisst.

Alle vier tragen jetzt `was` UND `bleibt`. Beim Beenden steht dabei
das, was seit heute frueh dazugekommen ist: dass Titel, Video,
Vorschaubild, Beginn und das zweite Video geleert werden -- wer das
nicht weiss, traegt danach alles noch einmal ein und haelt es fuer
einen Fehler.

=====================================================================
2. `window.frageNachText` GIBT ES NICHT
=====================================================================
Nur EINE Zeile im ganzen Haus nennt es; gesetzt hat es niemand. Die
Abfrage „Wie viele Dogen waren es?" lief damit IMMER ueber den
nackten `prompt()` -- ausgerechnet die, die am haeufigsten vorkommt.

Der Hausdialog kann das laengst besser: `zahl:` ist ein Zahlenfeld
mit Obergrenze und eigener Fehlerzeile.

=====================================================================
3. DER DOPPELTE NOTNAGEL WAR TOTER CODE
=====================================================================
`window.frageNach ? await frageNach(...) : confirm(...)` -- der
Notnagel fuer Browser ohne <dialog> steckt schon IN `nachfrage.js`,
und zwar mit DEMSELBEN Text. Meiner daneben zeigte im Ernstfall
WENIGER und im Normalfall nie etwas.

Im Notizblock stand sogar der nackte `window.confirm()`, ganz ohne
Hausdialog. Er fragt „bist du sicher"; der Hausdialog sagt, was
passiert und was bleibt. Beim endgueltigen Loeschen ist das `bleibt`
der halbe Grund fuer die Rueckfrage: Der Papierkorb ist der Ort, an
dem man etwas wiederfindet.

=====================================================================
4. EINE ZEITBOMBE IN pruef-call-kategorien
=====================================================================
Sie legte eine Wiederholung „in vier Tagen" an -- im Quelltext stand
woertlich „also mit grosser Wahrscheinlichkeit dieser Monat". Heute
ist der 30.; vier Tage spaeter ist Oktober. Der Server verlangt
kuenftig UND im laufenden Monat, und am Monatsende gibt es beides
zusammen nicht.

DIE ANWENDUNG HATTE RECHT. Dieselbe Art wie bei `pruef-kalender` am
29.09. Die nahe Auspraegung wird jetzt GERECHNET (letzter Tag des
Monats, 23:59) statt gehofft -- plus ein benannter dritter Ausgang
fuer die eine Minute im Monat, in der es keinen kuenftigen Termin
mehr in diesem Monat gibt. Die drei anderen Aussagen werden auch dann
geprueft; ein Ausstieg, der gar nichts mehr misst, waere ein stiller
Aussetzer.

Gemessen: pruef-nachfrage 53/0 (war 51/2), pruef-call-kategorien 22/0
(war 21/1), pruef-notizen 79/0, pruef-reaktion 407/0, mess-reaktion
0/0, pruef-css-klassen 37/0, pruef-struktur 44/0.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-09-30 11:10:49 +02:00
co-authored by Claude Opus 5
parent 9125583120
commit 75ede0a8e9
48 changed files with 772 additions and 696 deletions
+37 -7
View File
@@ -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"),