Der Anrufkasten zeigt, WER dran ist -- nicht dreimal "Verbunden"
Filipe, zu Screen 1: "wenn ich anrufe soll das auch viel besser geiler und spezieller aussehen aber es soll nicht raushaengen." Erst gemessen: Es haengt nichts raus. Der Kasten ist 374 px am Handy, 340 am Rechner, 72 Teile geprueft, kein einziges ueber dem Rand. Die Optik war also gar nicht der Mangel -- zwei andere Dinge waren es. 1. DER NAME DES ANRUFERS GING IMMER VERLOREN. `wer(raumName || "Anruf")` lief VOR `kastenBauen()`. Das Element #anruf-wer gab es zu dem Zeitpunkt noch nicht, die Zuweisung lief ins Leere, und oben stand bei jedem Anruf das Wort "Anruf". Die Reihenfolge ist umgedreht: erst bauen, dann beschriften. 2. IN EINEM ANRUF OHNE VIDEO STAND JE PERSON DAS WORT "Verbunden". Bei dreien dreimal dasselbe Wort -- und man sah nicht, WER dabei war. In einer Gruppe ist genau das die Frage: Ist Kessi schon drin? Jetzt steht dort ein Kreis mit den Anfangsbuchstaben und der echte Name; waehrend es klingelt ein wartendes Gesicht mit dem Namen dessen, den man anruft. Vorher war die Flaeche in dieser Sekunde leer, und ein leerer Kasten mit "Es klingelt ..." sieht aus wie einer, der haengt -- ausgerechnet im unsichersten Moment. Der Name kommt NICHT aus einer Abfrage. Wer anruft, bekannt beim Start nur sich selbst; alle weiteren kommen ausschliesslich ueber das Ereignis "dabei", und genau dort fehlte das Einsammeln. Deshalb sah der ANRUFER unter jedem Kreis "Jemand" -- die Angerufenen nicht. UND DIE PRUEFUNG WAR ZU NACHSICHTIG. Sie verlangte einen Namen "laenger als ein Zeichen"; der Rueckfalltext "Jemand" ist sechs Zeichen lang und kam damit durch. Gruen, waehrend der Hauptfall kaputt war. Die zweite Fassung verglich gegen eine abgeschriebene Namensliste -- die nannte "Jonas, Luna, Mara, Pat", angelegt werden aber "Filipe, Rieke, Kessi, Tili", und der Kommentar daneben behauptete schon da, sie sei abgeleitet. Jetzt ist sie es wirklich: Die Namen werden beim Anlegen eingesammelt, und geprueft wird, dass jeder GENAU DIE BEIDEN ANDEREN sieht -- nicht "irgendeinen echten Namen", denn der eigene Name im eigenen Kasten waere auch einer. pruef-anruf: 127 Pruefungen, 0 Fehler. Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
@@ -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."
|
||||
|
||||
|
||||
Reference in New Issue
Block a user