Dopplung weg: "Bei dir klingelt nichts" stand zweimal auf einem Schirm

Der neue Kasten von heute Mittag hat die alte Tagesblick-Zeile nicht
ersetzt, sondern sich darueber gesetzt. Beide sagten dasselbe,
untereinander, auf derselben Seite.

GEFUNDEN HAT DAS NUR EIN BILDSCHIRMFOTO. Beide Teile waren fuer sich
gruen: pruef-glocke verlangte die Zeile, pruef-push-hinweis den
Kasten, und keine der beiden konnte sehen, dass die andere existiert.
Zahlen zeigen so etwas nie. Deshalb macht pruef-push-hinweis jetzt
bei jedem Lauf ein Foto -- und scrollt vorher hin, weil der erste
Versuch brav die Begruessungskachel zeigte und den Kasten gar nicht
im Bild hatte. Ein Beweisbild ohne das, was es beweisen soll, ist
schlimmer als keins: Man glaubt ja, hingesehen zu haben.

Entfernt wurde die aeltere der beiden (19.09.2026). Sie war gut
gebaut, server-seitig und nicht wegklickbar -- aber sie hat das
Problem nicht geloest: Am 03.10. nachgemessen hatten immer noch
12 von 20 kein Geraet, darunter die linke Hand und ein Modi. Sie SAGT
es und man kann nichts tun; sie fuehrt nur auf eine andere Seite. Der
neue Kasten hat einen Knopf und erklaert den iPhone-Fall, in dem
Web-Push ohne Home-Bildschirm gar nicht geht.

Entscheidung von Filipe am 03.10. Offen gesagt, was damit aufgegeben
ist: Wer "Nicht jetzt" tippt, bekommt keine zweite Erinnerung mehr.
Gegensicherung ist die Personenliste -- dort steht seit heute bei
jeder Person, die nichts bekommt, genau das.

pruef-glocke 36 -> 33, und die Zahl ist erklaert: 5 Pruefungen zur
alten Zeile entfernt, 2 neue dafuer. Die neuen pruefen das
GEGENTEIL von vorher -- dass die Zeile nicht unbemerkt
zurueckkommt -- mit der Zahl der geprueften Hinweise in der
Bedingung, damit eine leere Antwort der Schnittstelle nicht als
"steht nicht drin" durchgeht.

Die alte Gegenprobe ("mit angemeldetem Geraet ist der Hinweis weg")
ist ersatzlos entfallen, nicht aus Bequemlichkeit: Sie waere ab jetzt
IMMER gruen, egal was das Haus tut. Eine Pruefung, die nichts mehr
widerlegen kann, taeuscht nur Deckung vor. Was sie geprueft hat,
prueft pruef-push-hinweis am neuen Kasten, mit einer echten
Anmeldung.

OHNE_ZAHL in start.js bleibt als leere Liste stehen -- der naechste
Zustandshinweis braucht sie wieder, und als Liste ist sie die eine
Stelle dafuer.

Gegengemessen: pruef-tagesblick 23, pruef-start-ansicht 160,
pruef-push-hinweis 16 -- alle 0 Fehler.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-10-03 13:47:50 +02:00
co-authored by Claude Opus 5
parent cc716a9c1c
commit e00a905ce8
50 changed files with 773 additions and 764 deletions
+35 -37
View File
@@ -512,42 +512,40 @@ melde("\n=== Anmelden und wieder abmelden ===");
const zahl = () => p.prepare("SELECT COUNT(*) AS n FROM push_anmeldungen").get().n;
ok(zahl() === 0, `vorher ${zahl()} Anmeldungen in der Datenbank`);
/* ==== "BEI DIR KLINGELT NICHTS" (19.09.2026) ======================
/* ==== "BEI DIR KLINGELT NICHTS" IST HIER WEG (03.10.2026) ========
Gemessen an diesem Tag auf dem echten Server: Von elf Zugaengen
hatten SIEBEN kein einziges Geraet angemeldet. Bei ihnen kommt
nichts an, solange die Seite zu ist -- keine Aufgabe, kein Termin,
kein Anruf.
Bis heute stand dieser Hinweis in "Was ist dran?", eingefuehrt am
19.09., als sieben von elf Zugaengen kein Geraet hatten. Er hat
das Problem nicht geloest: Am 03.10. nachgemessen waren es immer
noch 12 von 20, darunter die linke Hand und ein Modi. Er SAGT es,
aber man kann nichts tun -- er fuehrt nur auf eine andere Seite.
Die Glocke sagt das seit jeher korrekt. Nur tippt sie niemand an:
Sie ist ein stiller Schalter in einer Leiste. Deshalb steht es
jetzt auch dort, wo man hinsieht -- in "Was ist dran?".
Ersetzt durch einen Kasten mit "Anschalten"-Knopf, direkt ueber
dieser Liste (gemessen in pruef-push-hinweis.mjs, 16 Pruefungen).
DIE GEGENPROBE IST DER EIGENTLICHE PUNKT: Der Hinweis muss
VERSCHWINDEN, sobald ein Geraet da ist. Eine Warnung, die immer
kommt, ist keine Warnung mehr -- und bei sieben von elf Leuten
stuende sie sonst dauerhaft ueber den echten. */
WAS HIER JETZT GEPRUEFT WIRD, ist das Gegenteil von vorher, und
zwar aus einem Grund: Aufgefallen ist die Dopplung erst auf einem
Bildschirmfoto -- beide Saetze standen untereinander auf
demselben Schirm. Zahlen haetten das nie gezeigt, beide Teile
waren fuer sich genommen gruen. Diese Pruefung sorgt dafuer, dass
die Zeile nicht unbemerkt zurueckkommt. */
const hinweise = async () => (await seite.evaluate(async () => {
const a = await fetch("/workspace/api/hinweise", { credentials: "same-origin" });
return a.json();
})).hinweise || [];
{
const vorher = await hinweise();
const h = vorher.find((x) => x.art === "kein_geraet");
ok(!!h, "ohne Geraet steht der Hinweis in „Was ist dran?“");
ok(h?.ziel === "anruf-probe.html",
`und er fuehrt auf die Seite, die sagt warum (${h?.ziel})`);
ok(h?.stufe === "offen",
`als offener Punkt, nicht als Warnung (${h?.stufe}) — sonst stuende er `
+ "dauerhaft ueber den echten Warnungen");
/* Und auf dem Bildschirm steht er ohne die "1" davor: Er zaehlt
nichts, er beschreibt einen Zustand. */
const sichtbar = await seite.evaluate(() =>
const offen = await hinweise();
/* Die Zahl gehoert in die Bedingung: Kaeme die Schnittstelle gar
nicht zustande, waere die Liste leer -- und "kein_geraet steht
nicht drin" waere gruen, ohne etwas gesehen zu haben. */
ok(Array.isArray(offen) && !offen.some((x) => x.art === "kein_geraet"),
`"Bei dir klingelt nichts" steht nicht mehr in der Liste `
+ `(${offen.length} Hinweise geprueft) -- es stuende sonst zweimal auf einem Schirm`);
const aufDerSeite = await seite.evaluate(() =>
[...document.querySelectorAll(".dran__punkt")]
.map((li) => li.textContent.trim()).find((t) => /klingelt nichts/.test(t)) || "");
ok(/klingelt nichts/.test(sichtbar) && !/^\s*1/.test(sichtbar),
`auf der Seite steht er ohne Zahl davor: „${sichtbar.replace(/\s+/g, " ").slice(0, 60)}“`);
.filter((li) => /klingelt nichts/.test(li.textContent)).length);
ok(aufDerSeite === 0, `und auch nicht auf der Seite (${aufDerSeite})`);
}
await seite.click("#glocke");
@@ -555,17 +553,17 @@ melde("\n=== Anmelden und wieder abmelden ===");
ok(zahl() === 1, `nach dem Klick: ${zahl()} Anmeldung`);
/* GEGENPROBE: Jetzt muss der Hinweis weg sein. */
{
/* OHNE NEULADEN. Der erste Anlauf lud die Seite neu -- danach war
das Test-Doppel fuer den Push-Dienst weg, der Glockenknopf stand
wieder auf "aus", und die drei folgenden Pruefungen meldeten
Fehler, die es nicht gab. Die Schnittstelle antwortet ohnehin
live; eine neue Seite braucht es dafuer nicht. */
const nachher = await hinweise();
ok(!nachher.some((x) => x.art === "kein_geraet"),
"mit einem angemeldeten Geraet ist der Hinweis weg — nichts zu quittieren");
}
/* Hier stand bis zum 03.10.2026 die Gegenprobe "mit angemeldetem
Geraet ist der Hinweis weg". Sie ist ersatzlos entfallen -- nicht
aus Bequemlichkeit, sondern weil sie seit dem Entfernen des
Hinweises IMMER gruen waere, egal was das Haus tut. Eine
Pruefung, die nichts mehr widerlegen kann, bestaetigt nichts;
sie taeuscht nur Deckung vor.
Was sie geprueft hat ("verschwindet von selbst, sobald ein Geraet
da ist"), prueft jetzt pruef-push-hinweis.mjs am neuen Kasten --
dort mit einer echten Anmeldung, die nachweislich in der
Datenbank landet. */
const eintrag = p.prepare("SELECT * FROM push_anmeldungen").get();
ok(eintrag?.person_id === idDogi && /^https:\/\//.test(eintrag?.endpunkt || ""),