diff --git a/server/pruef-glocke.mjs b/server/pruef-glocke.mjs
index 4431fc4c..5f95f161 100644
--- a/server/pruef-glocke.mjs
+++ b/server/pruef-glocke.mjs
@@ -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 || ""),
diff --git a/server/pruef-push-hinweis.mjs b/server/pruef-push-hinweis.mjs
index e08a3bc3..07b5c317 100644
--- a/server/pruef-push-hinweis.mjs
+++ b/server/pruef-push-hinweis.mjs
@@ -165,6 +165,21 @@ const seite = await anmelden(kontext);
return Math.round(k.getBoundingClientRect().right - document.documentElement.clientWidth);
});
ok(ueber <= 0, `nichts steht ueber (${ueber} px)`);
+
+ /* EIN BILD DAZU. Zahlen sagen, dass er passt -- nicht, ob er
+ aussieht wie etwas, das man anfassen moechte.
+
+ ERST HINSCROLLEN. Der erste Versuch zeigte brav die
+ Begruessungskachel: Der Hinweis steht darunter und war im Bild
+ gar nicht drin. Ein Beweisbild ohne das, was es beweisen soll,
+ ist schlimmer als keins -- man glaubt ja, hingesehen zu haben. */
+ await seite.evaluate(() => document.querySelector("#push-hinweis")
+ .scrollIntoView({ block: "center" }));
+ await seite.waitForTimeout(400);
+ await seite.screenshot({
+ path: new URL("./pruef-push-hinweis.png", import.meta.url).pathname
+ .replace(/^\/([A-Za-z]:)/, "$1"),
+ });
}
/* =====================================================================
diff --git a/server/workspace-hinweise.js b/server/workspace-hinweise.js
index fb3f875a..74fc45c7 100644
--- a/server/workspace-hinweise.js
+++ b/server/workspace-hinweise.js
@@ -377,43 +377,37 @@ hinweisRouter.get("/workspace/api/hinweise", (req, res) => {
"neue Anfrage für Modi", "bewerbungen.html",
zaehle("SELECT COUNT(*) n FROM bewerbungen WHERE zustand = 'neu'", []));
- /* ==== BEI DIR KLINGELT NICHTS (19.09.2026) =======================
+ /* ==== BEI DIR KLINGELT NICHTS -- STEHT JETZT WOANDERS =========
- Gemessen an diesem Tag: Von elf Zugaengen hatten SIEBEN kein
- einziges Geraet angemeldet. Bei ihnen kommt keine einzige
- Erinnerung an, solange die Seite zu ist -- keine Aufgabe, kein
- Termin, kein Anruf.
+ Hier stand bis zum 03.10.2026 der Hinweis "Bei dir klingelt
+ nichts -- kein Geraet angemeldet", eingefuehrt am 19.09., als
+ sieben von elf Zugaengen kein Geraet hatten.
- Die Glocke oben rechts sagt das seit jeher korrekt ("Benach-
- richtigungen aus") und kennt sogar den iPhone-Sonderfall. Nur
- tippt sie niemand an: Sie ist ein stiller Schalter in einer
- Leiste, kein Hinweis. Deshalb steht es jetzt dort, wo man
- hinsieht.
+ ER HAT DAS PROBLEM NICHT GELOEST. Am 03.10. nachgemessen:
+ immer noch 12 von 20 ohne Anmeldung, darunter die linke Hand
+ und ein Modi. Der Grund liegt auf der Hand -- er SAGT es, aber
+ man kann nichts tun: Er fuehrt auf anruf-probe.html, wo man
+ sich erst zurechtfinden muss.
- DIESER HINWEIS GEHT NUR AN DIE PERSON SELBST, nicht an die
- Sicht. `req.person` und nicht `person`: Wenn DogFather die Lage
- eines Scouts ansieht, waere "bei DIR klingelt nichts" eine
- Aussage ueber den falschen Menschen -- und eine, die er nicht
- loesen kann.
+ Ersetzt durch einen Kasten auf der Startseite mit einem
+ "Anschalten"-Knopf (glocke.js, `hinweisZeichnen`). Ein
+ Fingertipp statt eines Umwegs -- und er erklaert den
+ iPhone-Fall, in dem Web-Push ohne Home-Bildschirm gar nicht
+ geht. Das wusste hier niemand.
- STUFE "offen", NICHT "warnung". Es ist kein Ausfall, sondern
- etwas, das man einmal einrichtet. Ein rotes Warnzeichen, das
- bei sieben von elf Leuten dauerhaft oben steht, waere nach
- einer Woche unsichtbar -- und mit ihm die echten Warnungen
- daneben.
+ WARUM NICHT BEIDES: Der neue Kasten sitzt auf derselben Seite,
+ direkt ueber dieser Liste. Zwei Saetze zur selben Sache auf
+ EINEM Bildschirm sind kein doppelter Schutz, sondern zwei
+ Stellen, die irgendwann Verschiedenes behaupten -- derselbe
+ Grund, aus dem die Betreuungs-Auswahl am 31.08. zusammengelegt
+ wurde.
- ER VERSCHWINDET VON SELBST, sobald ein Geraet angemeldet ist.
- Nichts zu quittieren, nichts, was veralten kann -- Regel 1
- dieser Datei. */
- if (req.person?.id) {
- const geraete = zaehle(
- "SELECT COUNT(*) n FROM push_anmeldungen WHERE person_id = ?", [req.person.id]);
- if (!geraete) {
- dazu("kein_geraet", "offen",
- "Bei dir klingelt nichts – kein Gerät angemeldet",
- "anruf-probe.html", 1);
- }
- }
+ WAS DAMIT AUFGEGEBEN IST, offen gesagt: Diese Zeile liess sich
+ nicht wegklicken, der neue Kasten schon (einmalig, je Geraet).
+ Eine Entscheidung von Filipe am 03.10. Die Gegensicherung ist
+ die Personenliste: Dort steht seit heute bei jeder Person, die
+ nichts bekommt, genau das -- die Leitung sieht es also
+ weiterhin, auch wenn jemand den Kasten wegtippt. */
/* ---------- Manager-Ziele (02.10.2026) ----------
diff --git a/workspace/anruf-probe.html b/workspace/anruf-probe.html
index 7c498df1..49cb2438 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`. -->
-
-
+
+
-
+