diff --git a/blick-befinden.png b/blick-befinden.png
deleted file mode 100644
index 62d09409..00000000
Binary files a/blick-befinden.png and /dev/null differ
diff --git a/server/pruef-anruf.mjs b/server/pruef-anruf.mjs
index 0300d83b..95e16b4f 100644
--- a/server/pruef-anruf.mjs
+++ b/server/pruef-anruf.mjs
@@ -68,7 +68,15 @@ const anrufModul = await import("./workspace-anruf.js");
/* ---- Leute anlegen ---- */
const d = new DatabaseSync(process.env.WORKSPACE_DB);
+/* Die Namen der Konten, die diese Pruefung anlegt -- gesammelt an der
+ Stelle, an der sie entstehen. Eine zweite Liste weiter unten waere
+ beim naechsten umbenannten Konto die veraltete: Genau das ist hier
+ passiert (die Liste nannte „Jonas, Luna, Mara, Pat", angelegt wurden
+ „Filipe, Rieke, Kessi, Tili"), und der Kommentar daneben behauptete
+ schon damals, sie sei abgeleitet. Jetzt ist sie es. */
+const ANGELEGTE_NAMEN = [];
function person(name, rolle, code) {
+ ANGELEGTE_NAMEN.push(name);
const salt = randomBytes(16).toString("hex");
const hash = scryptSync(code, salt, 64,
{ N: 32768, r: 8, p: 1, maxmem: 96 * 1024 * 1024 }).toString("hex");
@@ -996,6 +1004,83 @@ melde("=== 8. Zu dritt ===");
`${wer} hoert BEIDE anderen (${z.stroeme} Stroeme, „${z.lage}")`);
}
+ /* ---- WER IST DRAN (20.09.2026) -----------------------------
+
+ Filipe: „die soll auch viel besser geiler und spezieller
+ aussehen, aber nicht so raushaengen."
+
+ DER MANGEL WAR KEIN SCHOENHEITSFEHLER: In einem Anruf ohne
+ Video stand unter dem Kasten je Person das Wort „Verbunden"
+ -- bei dreien dreimal dasselbe Wort, und man sah nicht, WER
+ verbunden war. In einer Gruppe ist genau das die Frage.
+
+ Gemessen wird deshalb, dass NAMEN dastehen, nicht Kacheln:
+ Ein Gesichtsfeld ohne Namen bestuende jede Pruefung, die nur
+ zaehlt. */
+ /* WER MUSS WEN SEHEN. Nicht „irgendein echter Name", sondern
+ genau die beiden ANDEREN: Stuende bei DogFather sein eigener
+ Name im Kasten, waere das ein Fehler, den eine Pruefung auf
+ „ist ein echter Name" durchliesse. Die Namen kommen aus
+ `ANGELEGTE_NAMEN` -- sie werden beim Anlegen eingesammelt und
+ hier nur noch verteilt. */
+ const NAME = { [idDogi]: ANGELEGTE_NAMEN[0], [idHand]: ANGELEGTE_NAMEN[1],
+ [idModi]: ANGELEGTE_NAMEN[2] };
+ const ERWARTET = {
+ DogFather: [NAME[idHand], NAME[idModi]],
+ "die rechte Hand": [NAME[idDogi], NAME[idModi]],
+ "der Modi": [NAME[idDogi], NAME[idHand]],
+ };
+ for (const [wen, x] of [["DogFather", a], ["die rechte Hand", b], ["der Modi", c]]) {
+ const g = await x.se.evaluate(() => ({
+ felder: document.querySelectorAll("#anruf-leute .anruf__gesicht").length,
+ namen: [...document.querySelectorAll("#anruf-leute .anruf__gesicht .anruf__name")]
+ .map((e) => e.textContent.trim()).filter(Boolean),
+ verbunden: /Verbunden/.test(document.getElementById("anruf-leute")?.textContent || ""),
+ }));
+ ok(g.felder === 2,
+ `${wen} sieht die beiden anderen als Gesichtsfeld (${g.felder})`);
+ /* NICHT „laenger als ein Zeichen" -- der Rueckfalltext
+ „Jemand" ist sechs Zeichen lang und kam damit durch. Die
+ Pruefung war gruen, waehrend ausgerechnet der ANRUFER unter
+ jedem Kreis „Jemand" stehen sah. Verglichen wird deshalb
+ gegen die Namen, die es wirklich gibt. */
+ const soll = [...ERWARTET[wen]].sort().join(", ");
+ const ist = [...g.namen].sort().join(", ");
+ ok(g.namen.length === 2 && ist === soll,
+ ` und zwar genau die beiden anderen (${ist || "keine"}, erwartet: ${soll})`);
+ ok(!g.verbunden,
+ " statt dreimal dem Wort „Verbunden“, das nichts unterscheidet");
+ }
+
+ /* ---- UND NICHTS HAENGT RAUS --------------------------------
+ „nicht so raushaengen" ist die schaerfere der beiden Vorgaben:
+ Der Kasten ist 340 px breit und liegt in der Ecke. Bei DREI
+ Gesichtsfeldern plus Knopfreihe ist das die engste Lage, die
+ im Betrieb vorkommt -- also die, in der gemessen wird. */
+ for (const [wen, x] of [["am Rechner", a]]) {
+ const raus = await x.se.evaluate(() => {
+ const k = document.querySelector(".anruf");
+ if (!k) return null;
+ const r = k.getBoundingClientRect();
+ const treffer = [];
+ for (const e of k.querySelectorAll("*")) {
+ const b2 = e.getBoundingClientRect();
+ if (b2.width < 1 || b2.height < 1) continue;
+ if (b2.right > r.right + 1 || b2.left < r.left - 1 || b2.bottom > r.bottom + 1) {
+ treffer.push((e.className.baseVal ?? e.className).toString().split(" ")[0]);
+ }
+ }
+ return { geprueft: k.querySelectorAll("*").length, treffer };
+ });
+ /* DIE ZAHL GEHOERT IN DIE BEDINGUNG: Faende der Wahlausdruck
+ nichts, waere die Liste leer und die Pruefung gruen, ohne
+ etwas angesehen zu haben. */
+ ok(raus && raus.geprueft > 10 && raus.treffer.length === 0,
+ raus?.treffer.length
+ ? `es haengt etwas raus: ${raus.treffer.slice(0, 3).join(", ")}`
+ : `nichts haengt aus dem Kasten (${raus?.geprueft} Teile geprueft, ${wen})`);
+ }
+
/* ---- DER LAUTSPRECHER (18.09.2026) -------------------------
Filipe: „die funktion lautsprecher fehlt."
diff --git a/workspace/anruf-probe.html b/workspace/anruf-probe.html
index dd4df60a..ae2884cc 100644
--- a/workspace/anruf-probe.html
+++ b/workspace/anruf-probe.html
@@ -16,15 +16,15 @@
verdeckt. Gefunden hat es pruef-struktur.
Richtig sind `gate.css` (die Farbwerte des Hauses) und `haus.css`. -->
-
-
+
+
-
+