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`. --> - - + + - +