Ein Anruf faengt leise an
Filipe: "uebrigens soll man auswaehlen koennen ob man lautsprecher will oder nicht bitte. es soll ohne lautsprecher anfangen das gespraech und nur wenn man drauf klickt soll es laut werden ... es soll nicht raushaengen oder so, das ist nicht cool." DER GRUND IST DER STREAM. Ein Anruf, der beim Annehmen sofort aus den Lautsprechern kommt, ist im schlimmsten Fall fuer alle Zuschauer zu hoeren, bevor irgendjemand reagieren kann. Das laesst sich nicht zurueckholen. HIER STAND `hoeren = true` mit der Begruendung: "Wer den Ton abgestellt hat, will ihn nicht beim naechsten Gespraech wieder an." Das war richtig gedacht und ist jetzt umgedreht -- aus demselben Grund, nur in die andere Richtung: Der Zustand soll NICHT ueberdauern. Eine Entscheidung von vorhin darf nicht fuer ein Gespraech gelten, von dem man noch nichts wusste. Zurueckgesetzt wird an BEIDEN Wegen, beim Anrufen und beim Rangehen -- einer allein waere die Haelfte, und die andere Haelfte faellt niemandem auf, bis es einmal zu laut war. UND MAN SIEHT ES. Leise anfangen ohne Hinweis waere die naechste Sackgasse: "ich hoere nichts" ohne Grund und ohne Weg. Ein Balken sagt es, solange es gilt, und verschwindet in dem Moment, in dem man den Ton anmacht. Er ist SELBST der Knopf -- wer liest "tippen, um den Ton anzumachen", will genau das tun. Gedaempftes Bernstein statt Alarmrot: Es ist kein Fehler, sondern ein Zustand. DABEI EINEN EIGENEN FEHLER GEFANGEN: Der Balken fragte `!anruf` -- und diese Variable wird erst gesetzt, NACHDEM der Kasten aufgeht. Beim Aufbauen blieb er deshalb versteckt, und man sass in einem stummen Gespraech ohne einen Satz dazu. Genau der Zustand, den er verhindern soll. Jetzt haengt er am sichtbaren Kasten. DIE PRUEFUNG WURDE ROT und hat damit ihre Arbeit getan -- sie hielt das alte Verhalten fest. Umgedreht, nicht gestrichen: Die wichtigste Falle (ueberlebt der Schalter das Neuzeichnen, wenn jemand auflegt?) bleibt, nur der erwartete Zustand hat sich gedreht. GEPRUEFT: pruef-anruf 117/0 (war 114) -- drei Aussagen mehr, darunter dass der Hinweis da ist, 44 px hoch und im richtigen Moment verschwindet. Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
+52
-18
@@ -1015,12 +1015,37 @@ melde("=== 8. Zu dritt ===");
|
||||
.map((m) => m.muted));
|
||||
|
||||
{
|
||||
/* ==== JEDES GESPRAECH FAENGT LEISE AN (20.09.2026) ==========
|
||||
|
||||
Filipe: "es soll ohne lautsprecher anfangen das gespraech und
|
||||
nur wenn man drauf klickt soll es laut werden ... es soll
|
||||
nicht raushaengen oder so, das ist nicht cool."
|
||||
|
||||
Diese Pruefung stand hier genau ANDERSHERUM und ist beim
|
||||
Umbau rot geworden -- richtig so, sie hat die Aenderung
|
||||
bemerkt. Der Grund fuer die Umkehr steht bei `hoeren` in
|
||||
anruf.js: Ein Anruf, der beim Annehmen sofort aus den
|
||||
Lautsprechern kommt, ist im schlimmsten Fall fuer alle
|
||||
Zuschauer zu hoeren, bevor jemand reagieren kann. Das laesst
|
||||
sich nicht zurueckholen. */
|
||||
const vorher = await stumm(a);
|
||||
/* Die ANZAHL gehoert in die Bedingung: `every` ist auf einer
|
||||
leeren Liste wahr, und dann waere diese Pruefung gruen,
|
||||
ohne ein einziges Element gesehen zu haben. */
|
||||
ok(vorher.length >= 2 && vorher.every((m) => m === false),
|
||||
`vorher hoert DogFather beide (${vorher.length} Stroeme, keiner stumm)`);
|
||||
ok(vorher.length >= 2 && vorher.every((m) => m === true),
|
||||
`das Gespraech faengt LEISE an (${vorher.length} Stroeme, alle stumm)`);
|
||||
|
||||
/* UND MAN SIEHT ES. Leise anfangen ohne Hinweis waere die
|
||||
naechste Sackgasse: "ich hoere nichts" ohne einen Grund und
|
||||
ohne einen Weg. */
|
||||
const balken = await a.se.evaluate(() => {
|
||||
const b = document.getElementById("anruf-stumm");
|
||||
return b ? { da: !b.hidden, text: b.textContent.trim(),
|
||||
hoch: Math.round(b.getBoundingClientRect().height) } : null;
|
||||
});
|
||||
ok(balken?.da === true, `ein Hinweis sagt es ("${balken?.text}")`);
|
||||
ok((balken?.hoch || 0) >= 44,
|
||||
` und er ist selbst antippbar (${balken?.hoch} px hoch)`);
|
||||
|
||||
const knopf = await a.se.evaluate(() => {
|
||||
const k = document.getElementById("anruf-hoeren");
|
||||
@@ -1032,26 +1057,31 @@ melde("=== 8. Zu dritt ===");
|
||||
durchgestrichene Zeichen den Zustand und das Wort nur die
|
||||
Sache. Geprueft wird deshalb aria-pressed; der Text bleibt
|
||||
gleich und beweist nichts mehr. */
|
||||
ok(knopf?.an === "true",
|
||||
`der Lautsprecher-Knopf ist da und steht auf an („${knopf?.text}")`);
|
||||
ok(knopf?.an === "false",
|
||||
`der Lautsprecher-Knopf steht auf AUS ("${knopf?.text}")`);
|
||||
|
||||
/* ---- UND EIN DRUCK MACHT IHN LAUT ------------------------- */
|
||||
await a.se.click("#anruf-hoeren");
|
||||
await a.se.waitForTimeout(300);
|
||||
const nachher = await stumm(a);
|
||||
ok(nachher.length >= 2 && nachher.every((m) => m === true),
|
||||
`nach dem Druecken ist ALLES stumm (${nachher.length} Stroeme)`);
|
||||
ok(nachher.length >= 2 && nachher.every((m) => m === false),
|
||||
`nach dem Druecken hoert er alle (${nachher.length} Stroeme, keiner stumm)`);
|
||||
const knopf2 = await a.se.evaluate(() => {
|
||||
const k = document.getElementById("anruf-hoeren");
|
||||
return { text: k.textContent.trim(), an: k.getAttribute("aria-pressed") };
|
||||
const b = document.getElementById("anruf-stumm");
|
||||
return { an: k.getAttribute("aria-pressed"), balken: b ? !b.hidden : null };
|
||||
});
|
||||
ok(knopf2.an === "false",
|
||||
`und der Knopf steht auf aus (aria-pressed="${knopf2.an}")`);
|
||||
ok(knopf2.an === "true",
|
||||
`und der Knopf steht auf an (aria-pressed="${knopf2.an}")`);
|
||||
ok(knopf2.balken === false,
|
||||
"der Hinweis verschwindet in dem Moment, in dem er ueberfluessig wird");
|
||||
|
||||
/* NUR BEI IHM. Ein Schalter, der bei den anderen mitwirkt,
|
||||
waere kein Lautsprecher, sondern eine Fernbedienung. */
|
||||
waere kein Lautsprecher, sondern eine Fernbedienung.
|
||||
Bei ihr ist ALLES stumm -- sie hat ihren Ton nie angemacht. */
|
||||
const beiB = await stumm(b);
|
||||
ok(beiB.length >= 2 && beiB.every((m) => m === false),
|
||||
`bei der rechten Hand aendert sich nichts (${beiB.length} Stroeme, keiner stumm)`);
|
||||
ok(beiB.length >= 2 && beiB.every((m) => m === true),
|
||||
`bei der rechten Hand aendert sich nichts (${beiB.length} Stroeme, alle noch stumm)`);
|
||||
}
|
||||
|
||||
/* Einer legt auf -- fuer die anderen laeuft es weiter. */
|
||||
@@ -1065,15 +1095,19 @@ melde("=== 8. Zu dritt ===");
|
||||
`und bei DogFather ist genau ein Strom weniger (${zA.stroeme})`);
|
||||
|
||||
/* DIE FALLE: Die Runde hat sich geaendert, die Elemente wurden
|
||||
neu gebaut. Bliebe der Schalter dabei auf der Strecke, wuerde
|
||||
DogFather ploetzlich wieder mithoeren -- ohne dass irgendwo
|
||||
etwas anders aussieht. */
|
||||
neu gebaut. Bliebe der Schalter dabei auf der Strecke, stuende
|
||||
der Ton ploetzlich anders -- ohne dass irgendwo etwas anders
|
||||
aussieht.
|
||||
|
||||
RICHTUNG UMGEDREHT AM 20.09.2026: DogFather hat den Ton oben
|
||||
eingeschaltet, also muss er JETZT hoeren. Die Falle ist
|
||||
dieselbe geblieben, nur der erwartete Zustand nicht. */
|
||||
const nachWechsel = await stumm(a);
|
||||
ok(nachWechsel.length === 1 && nachWechsel[0] === true,
|
||||
`und der Lautsprecher bleibt aus, obwohl neu gezeichnet wurde (${nachWechsel.length} Strom)`);
|
||||
ok(nachWechsel.length === 1 && nachWechsel[0] === false,
|
||||
`und der eingeschaltete Ton ueberlebt das Neuzeichnen (${nachWechsel.length} Strom)`);
|
||||
const knopfNoch = await a.se.evaluate(() =>
|
||||
document.getElementById("anruf-hoeren")?.getAttribute("aria-pressed"));
|
||||
ok(knopfNoch === "false", "auch der Knopf steht noch richtig");
|
||||
ok(knopfNoch === "true", "auch der Knopf steht noch richtig");
|
||||
|
||||
await a.se.click("#anruf-auflegen");
|
||||
await b.se.click("#anruf-auflegen");
|
||||
|
||||
Reference in New Issue
Block a user