Filipe: "wenn vanvan rangeht und redet klingelt es immer noch bei mir
weiter, der anruf verbindet nicht richtig."
=== WAS DAS PROTOKOLL SAGT ===
17:04:52 anruf_start Person 1 (Filipe)
17:05:25 anruf_ende Person 4 (VanVan) 24 s
17:05:31 anruf_ende Person 1 (Filipe) 39 s
Sie WAR im Gespraech -- der Server hat sie 24 Sekunden als
Teilnehmerin gefuehrt. Das Ereignis "dabei" ist also verschickt
worden. Bei Filipe kam es nicht an: `tonAus()` ist das Erste im
`dabei`-Zweig, noch vor jeder Pruefung, und das Tuten lief weiter.
=== GEPRUEFT UND AUSGESCHLOSSEN ===
Raumzugehoerigkeit beide in Raum 1, bei keinem `raus_am` gesetzt
Verkabelung Server sendet mit `art: "anruf"`, chat.js reicht
an window.anrufEreignis weiter, anruf.js nimmt
entgegen -- alle drei Stellen stimmen
Tonsteuerung ein einziger Taktgeber, `tonAus` raeumt ihn;
kein zweiter Weg, der ihn neu startet
Ereignisstrom Keep-alive vorhanden, Kopfzeilen richtig
(no-transform, X-Accel-Buffering: no)
Service Worker hat gar keinen fetch-Handler, kann also kein
altes Skript ausliefern
teilnehmerVon vs.
teilnehmerFuerAnruf reicht nur durch, dieselbe Abfrage
Es geht unterwegs verloren, auf einem Weg, der von hier aus nicht
messbar ist: Ereignisstrom ueber Cloudflare, ein schlafender Reiter,
ein Neustart im falschen Moment.
=== ALSO NICHT WEITERSUCHEN, SONDERN DIE ABHAENGIGKEIT BESEITIGEN ===
Ein klingelndes Telefon darf nicht an einem einzigen, zerbrechlichen
Kanal haengen. Solange es klingelt, fragt der Anrufer jetzt SELBST
nach: "ist schon jemand dran?" -- alle zwei Sekunden an
`/workspace/api/anruf/:raum`, das es laengst gibt.
Der Ereignisstrom bleibt der erste Weg, er ist schneller. Das hier ist
das Netz darunter. Kommt das Ereignis an, hat die Nachfrage nichts
mehr zu tun und haelt von selbst an (sie prueft `anruf.beginn` und die
bekannten Teilnehmer).
Sie hoert an JEDEM Ende auf: beim Auflegen, wenn die Verbindung steht,
wenn das Ereignis doch ankommt, wenn der Anruf vorbei ist. Eine
Schleife, die weiterlaeuft, fragt sonst auf jedem Geraet, das je
telefoniert hat, alle zwei Sekunden nach einem Anruf, den es nicht
mehr gibt.
Alle zwei Sekunden und nicht jede halbe: Es klingelt hoechstens zwei
Minuten, das sind sechzig Abrufe.
=== ZWEI DINGE, DIE DIESE SUCHE ERST SO MUEHSAM GEMACHT HABEN ===
DAS PROTOKOLL KANNTE ANFANG UND ENDE, ABER NICHT DEN MOMENT DAZWISCHEN.
Die wichtigste Frage -- "ist sie ueberhaupt rangegangen?" -- war nur
ueber einen Umweg zu beantworten (ein `anruf_ende` mit ihrer Nummer).
Das ist eine Schlussfolgerung, keine Auskunft. `anruf_dabei` steht
jetzt drin, mit der Zahl der Beteiligten.
UND EINE PRUEFUNG WAR GRUEN, OHNE ETWAS ZU PRUEFEN. In chatEreignis
stand `(zuschauer.get(personId) || []).length` -- `zuschauer` haelt
aber Mengen, und eine Menge hat kein `length`. Der Ausdruck war IMMER
undefined, also immer falsch, also wurde nie uebersprungen: Wer die
Seite offen hatte, bekam zusaetzlich zur Nachricht auf dem Bildschirm
noch eine Meldung aufs Handy.
Der Kommentar drei Zeilen darueber warnt woertlich davor ("der
schnellste Weg, dass er Benachrichtigungen abschaltet"), und
`siehtZu()` weiter unten macht es mit `.size` richtig. Die Absicht
stand da, die Zeile tat das Gegenteil.
Meine eigene Pruefung hat das mitgetragen: Sie bestaetigte den alten
WORTLAUT statt sein VERHALTEN und war deshalb gruen. Genau die
Hausregel vom 01.09. -- ein gruener Haken sagt nur, dass die Bedingung
erfuellt war, nicht dass sie das Richtige geprueft hat. Jetzt prueft
sie auf `.size`.
GEMESSEN: pruef-anruf-klingelt 24/0 (vorher 17), pruef-anruf 114/0,
pruef-turn-wege 15/0, pruef-meldungen 8/0.
Co-Authored-By: Claude Opus 5 <[email protected]>
117 lines
4.9 KiB
HTML
117 lines
4.9 KiB
HTML
<!doctype html>
|
||
<html lang="de">
|
||
<head>
|
||
<meta charset="utf-8" />
|
||
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
|
||
<title>Eure Aufgaben · Spicy & Dogi</title>
|
||
<meta name="robots" content="noindex, nofollow" />
|
||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||
<meta name="theme-color" content="#06090f" />
|
||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609191915" />
|
||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609191915" />
|
||
<link rel="stylesheet" href="assets/css/gate.css?v=202609191915" />
|
||
<link rel="stylesheet" href="assets/css/start.css?v=202609191915" />
|
||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609191915" />
|
||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609191915" />
|
||
<link rel="stylesheet" href="assets/css/module.css?v=202609191915" />
|
||
<link rel="stylesheet" href="assets/css/haus.css?v=202609191915" />
|
||
</head>
|
||
|
||
<body class="start">
|
||
|
||
<div class="schleier" aria-hidden="true"></div>
|
||
|
||
<header class="kopfleiste">
|
||
<button type="button" class="zurueck-knopf" id="zurueck" hidden>
|
||
<svg class="zurueck-knopf__pfeil" viewBox="0 0 24 24" aria-hidden="true">
|
||
<path d="M14.5 5.5 8 12l6.5 6.5" />
|
||
</svg>
|
||
<span class="zurueck-knopf__text">Zurück</span>
|
||
</button>
|
||
<p class="marke"><span class="marke__text"><a class="zurueck" href="start.html">Team Dogi</a> · Eure Aufgaben</span></p>
|
||
<div class="kopfleiste__rechts">
|
||
<span class="wer" id="wer">…</span>
|
||
<button type="button" class="abmelden" id="abmelden">Abmelden</button>
|
||
</div>
|
||
</header>
|
||
|
||
<main class="inhalt inhalt--breit">
|
||
|
||
<section class="kopf-zeile">
|
||
<div>
|
||
<p class="marke" id="ober">Entwicklung & Nachwuchs</p>
|
||
<!-- UMBENANNT AM 19.09.2026 (siehe workspace.js). Diese Seite ist
|
||
der Aufgabenkatalog: was ein Modi koennen soll und wo er
|
||
gerade steht. Der Name "Entwicklung" bleibt dem vorbehalten,
|
||
was Filipe darunter versteht -- einer Auswertung je Person. -->
|
||
<h1 class="titel" id="titel">Eure Aufgaben</h1>
|
||
<p class="unterzeile" id="unterzeile">
|
||
Anklicken statt tippen. Keine Noten, keine Punktzahl – ein Gesprächsanlass.
|
||
</p>
|
||
</div>
|
||
</section>
|
||
|
||
<p class="fehler" id="fehler" role="alert" aria-live="polite"></p>
|
||
|
||
<!-- ==================================================================
|
||
DIE REIHENFOLGE AUF DIESER SEITE IST DAS EIGENTLICHE DESIGN
|
||
|
||
1. Die Ampel — sie betrifft Menschen, nicht Prozesse.
|
||
2. Die Personen — wen gehe ich heute durch.
|
||
3. Die Karte — und darin die ABWEICHUNGEN zuerst.
|
||
4. Ganz unten der Weg zu den eigenen sechs Fragen — sie haben
|
||
seit dem 15.09.2026 eine eigene Seite.
|
||
|
||
Wer die Seite öffnet, soll die wichtigste Sache zuerst sehen, und
|
||
das ist nicht die Liste. Eine Ampel unter 34 Beobachtungen hätte
|
||
niemand je gelesen.
|
||
============================================================== -->
|
||
|
||
<section id="ampel" class="e-ampel" hidden></section>
|
||
|
||
<section id="personen-block" hidden>
|
||
<h2 class="e-abschnitt">Wen gehst du durch?</h2>
|
||
<div id="personen" class="e-personen" role="group" aria-label="Person wählen" aria-busy="true"></div>
|
||
</section>
|
||
|
||
<section id="karte" class="e-karte" hidden></section>
|
||
|
||
<!-- DEINE EIGENE KARTE.
|
||
|
||
Sie steht ÜBER den sechs Fragen und UNTER der Liste der anderen:
|
||
Wer diese Seite als DogFather öffnet, kommt zuerst zu seiner
|
||
Arbeit; wer beurteilt wird, sieht die Liste gar nicht und
|
||
landet direkt hier.
|
||
|
||
Sie erscheint erst, wenn alle gesetzt haben — eine halbe Karte
|
||
ist schlimmer als keine. -->
|
||
<section id="karte-block" class="e-meine" hidden>
|
||
<h2 class="e-abschnitt">Deine Karte</h2>
|
||
<p class="e-meine__satz" id="karte-satz">…</p>
|
||
<div id="meine-karte" aria-busy="true"></div>
|
||
</section>
|
||
|
||
<!-- ==== DIE SECHS FRAGEN STEHEN WOANDERS (15.09.2026) ==========
|
||
Sie hatten hier ihren Platz, solange es keine eigene Seite gab.
|
||
Jetzt gibt es eine – und zwei Stellen für dieselben sechs Fragen
|
||
wären zwei Stände, die auseinanderlaufen. Hier bleibt der Weg
|
||
dorthin, nicht eine Kopie. -->
|
||
<section class="e-meins e-meins--verweis" id="meins-block" hidden>
|
||
<h2 class="e-abschnitt">Und wie geht es dir?</h2>
|
||
<p class="e-meins__satz">
|
||
Ein paar Fragen über dich – die Antworten sieht niemand außer dir.
|
||
</p>
|
||
<a class="knopf knopf--klein" href="befinden.html">Zu deinen Fragen</a>
|
||
</section>
|
||
|
||
</main>
|
||
|
||
<script src="assets/js/meldung.js?v=202609191915" defer></script>
|
||
|
||
<script src="assets/js/wahl.js?v=202609191915" defer></script>
|
||
<script src="assets/js/bereiche.js?v=202609191915" defer></script>
|
||
<script src="assets/js/kopf.js?v=202609191915" defer></script>
|
||
<script src="assets/js/entwicklung.js?v=202609191915" defer></script>
|
||
</body>
|
||
</html>
|