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
+46 -17
View File
@@ -328,9 +328,14 @@
/* EINE RUECKFRAGE, WEIL ES NICHT ZURUECKGEHT. Bei „lösen"
im Chat steht hier keine -- das laesst sich rueckgaengig
machen. Eine Botschaft ist danach weg samt ihrem Text. */
/* `was:` UND NICHT `text:` — der Dialog kennt `text` nicht und
hat den Satz stillschweigend verworfen. `endgueltig` setzt
den Hinweis „nicht rückgängig" von selbst darunter, in
denselben Worten wie überall im Haus. */
const ja = await window.frageNach?.({
titel: 'Botschaft löschen?',
text: `„${b.text}" wird aus dem Band genommen. Das geht nicht zurück.`,
was: `„${b.text}" wird aus dem Band genommen.`,
endgueltig: true,
ja: 'Löschen', nein: 'Behalten',
});
if (ja === false || ja === undefined) return;
@@ -1597,11 +1602,12 @@
const ja = window.frageNach
? await window.frageNach({
titel: `${b.name} aus der Sendung nehmen?`,
text: 'Die Person kann bis zum Ende der Sendung nicht mehr zusehen. '
+ 'Für länger nimm die Maßnahmen im Treff.',
knopf: 'Rausnehmen',
was: 'Die Person kann bis zum Ende der Sendung nicht mehr zusehen.',
bleibt: 'Für länger nimm die Maßnahmen im Treff — die gelten über '
+ 'diese Sendung hinaus.',
ja: 'Rausnehmen', nein: 'Doch nicht',
})
: confirm(`${b.name} aus der Sendung nehmen?`);
: false;
if (ja) massnahme(b.person_id, 'raus');
});
@@ -2209,11 +2215,19 @@
const ja = window.frageNach
? await window.frageNach({
titel: 'Sendung beenden?',
text: 'Der Saal geht zu, der Live-Chat dieser Sendung wird abgeräumt '
+ 'und die Gäste werden entlassen.',
knopf: 'Beenden',
/* SEIT DEM 30.09. WIRD AUCH DER SCHREIBTISCH GELEERT --
Titel, Video, Vorschaubild, Beginn und das zweite Video.
Das gehört in diesen Satz: Wer es nicht weiß, trägt
danach alles noch einmal ein und hält es für einen
Fehler. */
was: 'Der Saal geht zu, der Live-Chat dieser Sendung wird abgeräumt, '
+ 'die Gäste werden entlassen — und Titel, Video, Vorschaubild, '
+ 'Beginn und das zweite Video werden geleert.',
bleibt: 'Die Sendung steht danach im Verlauf. Spenden, Dogen und '
+ 'die Warteschlange bleiben unberührt.',
ja: 'Beenden', nein: 'Weiterlaufen lassen',
})
: confirm('Sendung beenden?');
: false;
if (ja) standSetzen('zu');
});
$('p-holen').addEventListener('click', gastHolen);
@@ -2952,11 +2966,14 @@
const ja = window.frageNach
? await window.frageNach({
titel: 'Schlüssel neu erzeugen?',
text: 'Die alten Adressen hören sofort auf zu arbeiten. Du musst '
+ 'die Quellen in OBS einmal neu eintragen.',
knopf: 'Neu erzeugen',
was: 'Die alten Adressen hören sofort auf zu arbeiten — auch mitten '
+ 'in einer laufenden Sendung.',
bleibt: 'Du musst die Quellen in OBS einmal neu eintragen. Die '
+ 'Adressen stehen danach hier.',
endgueltig: true,
ja: 'Neu erzeugen', nein: 'Doch nicht',
})
: confirm('Schlüssel neu erzeugen? Die alten Adressen gehen dann nicht mehr.');
: false;
if (!ja) return;
const a = await hole('/workspace/api/buehne/schluessel', { method: 'POST' });
if (!a.ok) { melde(await a.json().catch(() => null), 'Das ging nicht.'); return; }
@@ -4107,10 +4124,22 @@
async function spendeMelden() {
let mille = gemeldeterBetrag;
if (!mille) {
const wort = window.frageNachText
? await window.frageNachText({ titel: 'Wie viele Dogen waren es?', knopf: 'Melden' })
: prompt('Wie viele Dogen waren es?');
mille = dogenInMille(wort);
/* `frageNachText` GAB ES NIE. Nur diese Zeile nannte es; gesetzt
hat es niemand. Die Abfrage lief damit IMMER über den nackten
`prompt()` — ausgerechnet die, die am häufigsten vorkommt.
Der Hausdialog kann das längst besser: `zahl:` ist ein
Zahlenfeld mit eigener Fehlerzeile („Das ist keine gültige
Anzahl"). Es gibt `{ zahl }` zurück oder `false`. */
const antwort = await window.frageNach?.({
titel: 'Wie viele Dogen waren es?',
was: 'Trag ein, was in der Spende stand. Kommastellen gehen auch.',
zahl: 'Dogen',
zahlHinweis: 'zum Beispiel 0,5 oder 2,5',
ja: 'Melden', nein: 'Doch nicht',
});
if (!antwort || antwort === true) return;
mille = dogenInMille(antwort.zahl);
if (!mille) return;
}
try {