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]>
141 lines
6.2 KiB
HTML
141 lines
6.2 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>Wie geht's dir? · 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> · Wie geht's dir?</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">
|
||
|
||
<!-- ==================================================================
|
||
DIESE SEITE GEHÖRT DEM MENSCHEN, DER SIE ÖFFNET.
|
||
|
||
Hier steht kein anderer Name, keine Beobachtung über jemanden und
|
||
keine Zahl, die jemand anders sieht. Genau das war der Grund für
|
||
die eigene Seite: Die Kachel verspricht „die Antworten sieht nur
|
||
du" – und führte vorher auf eine Seite voller anderer Leute.
|
||
|
||
Was DogFather sieht, ist eine einzige Zahl ohne Namen: wie viele
|
||
im Team es gerade schwer haben. Nicht wer, nicht womit.
|
||
============================================================== -->
|
||
|
||
<section class="kopf-zeile">
|
||
<div>
|
||
<p class="marke">Für dich</p>
|
||
<h1 class="titel">Wie geht's dir?</h1>
|
||
<!-- ================================================================
|
||
DIE EINE AUSNAHME GEHÖRT DAZU (ergänzt 19.09.2026).
|
||
|
||
Hier stand: „Niemand aus dem Team sieht deine Antworten – auch
|
||
DogFather nicht." Punkt. Das ist fast wahr und deshalb
|
||
gefährlich: Aus denselben Antworten entsteht eine Ampel für die
|
||
Leitung (workspace-entwicklung.js). Sie ist sauber gebaut – sie
|
||
nennt keine Namen, keinen Punkt, kein Datum, und unter drei
|
||
Personen schweigt sie ganz. Aber sie existiert.
|
||
|
||
Der ehrliche Satz war längst geschrieben und wurde vom Server
|
||
sogar mitgeliefert (`block.text`) – nur hat ihn nie jemand
|
||
angezeigt. Er steht jetzt hier im HTML und nicht im Skript:
|
||
Wer diese Seite öffnet, soll ihn lesen, BEVOR er tippt, nicht
|
||
nachdem ein Abruf zurückgekommen ist.
|
||
|
||
Wenn jemand später davon erfährt und die Seite hatte „niemand"
|
||
gesagt, ist das Vertrauen weg – und mit ihm die ganze Funktion.
|
||
============================================================= -->
|
||
<p class="unterzeile">
|
||
Ein paar Fragen über dich. Deine Antworten liest niemand – auch
|
||
DogFather nicht.
|
||
</p>
|
||
<p class="unterzeile unterzeile--zusatz">
|
||
Das Einzige, was nach außen dringt: ob es im Team gerade
|
||
<em>jemandem</em> zu viel ist. Ohne Namen, ohne Frage, ohne Datum –
|
||
und erst ab drei Personen im Team, weil es darunter dasselbe wäre
|
||
wie ein Name.
|
||
</p>
|
||
</div>
|
||
</section>
|
||
|
||
<p class="fehler" id="fehler" role="alert" aria-live="polite"></p>
|
||
|
||
<!-- Der Rhythmus. Steht VOR den Fragen: Wer hereinkommt, soll zuerst
|
||
wissen, ob gerade etwas von ihm erwartet wird. -->
|
||
<section class="b-takt" id="takt" hidden>
|
||
<p class="b-takt__satz" id="takt-satz">…</p>
|
||
<button type="button" class="knopf knopf--klein" id="takt-knopf" hidden>Runde abschließen</button>
|
||
</section>
|
||
|
||
<section id="fragen-block">
|
||
<div id="fragen" aria-busy="true"><p class="leise">wird geladen …</p></div>
|
||
</section>
|
||
|
||
<!-- Der Verlauf. Nur für die Person selbst – er wird nirgends sonst
|
||
im Haus gelesen. Er steht unter den Fragen, weil er sie erklärt
|
||
und nicht ersetzt. -->
|
||
<section class="b-verlauf" id="verlauf-block" hidden>
|
||
<h2 class="e-abschnitt">Wie es sich entwickelt</h2>
|
||
<p class="b-verlauf__satz" id="verlauf-satz">…</p>
|
||
<div id="verlauf" class="b-verlauf__gitter"></div>
|
||
</section>
|
||
|
||
<!-- ==================================================================
|
||
WAS DEIN VERLAUF SAGT (15.09.2026)
|
||
|
||
Filipe: „mach mir auch eine analyse […] eine professionelle auch
|
||
mit infos und so aus aller welt was tiktok angeht."
|
||
|
||
Sie steht UNTER dem Verlauf: erst die Antworten, dann das Muster
|
||
darin. Andersherum läse man die Deutung, bevor man weiß, worauf
|
||
sie sich bezieht.
|
||
|
||
Sie wird gerechnet, nicht gespeichert – und sie bewertet nicht.
|
||
Keine Punktzahl über das eigene Befinden: Eine Zahl lädt dazu
|
||
ein, sie zu verbessern statt ehrlich zu antworten.
|
||
============================================================== -->
|
||
<section class="b-analyse" id="analyse-block" hidden>
|
||
<h2 class="e-abschnitt">Was dein Verlauf sagt</h2>
|
||
<p class="b-analyse__satz" id="analyse-satz">…</p>
|
||
<div id="analyse" class="b-analyse__liste"></div>
|
||
<p class="b-analyse__quelle" id="analyse-quelle"></p>
|
||
</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/befinden.js?v=202609191915" defer></script>
|
||
</body>
|
||
</html>
|