Files
dogfather-universe/workspace/werdegang.html
T
DogFatherGitandClaude Opus 5 26937dda16 Ein klingelndes Telefon haengt nicht mehr an einem einzigen Kanal
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]>
2026-09-19 19:15:51 +02:00

155 lines
6.2 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!doctype html>
<html lang="de">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
<title>Entwicklung · Spicy &amp; 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/werdegang.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&nbsp;Dogi</a> · Entwicklung</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">
<!-- ==================================================================
ENTWICKLUNG — die Auswertung je Person (19.09.2026)
Filipe: „dan perfektionierst du eine neue wo diagramme texte und
so zu jedem modi gemacht wird und diese kategorie kannst du
entwicklung nenen."
DIESE SEITE HAT ZWEI GESICHTER, und welches man sieht, entscheidet
der Server:
Leitung -> die Karten aller, die eine haben
Ein Modi -> ausschliesslich die Bewegung in der EIGENEN Karte,
ohne Namen, ohne Anlass, ohne wer-hat-was
WAS HIER NICHT STEHT UND NIE STEHEN WIRD: eine Punktzahl, ein
Prozentwert, ein Durchschnitt, eine Rangliste, ein Vergleich
zwischen zwei Menschen. Eine Zahl ueber einen Menschen wird
gelesen, verglichen und weitererzaehlt — gebraucht wird ein
Gespraechsanlass.
============================================================== -->
<section class="kopf-zeile">
<div>
<p class="marke">Entwicklung &amp; Nachwuchs</p>
<h1 class="titel" id="titel">Entwicklung</h1>
<p class="unterzeile" id="unterzeile">
Wie sich jemand über die Zeit bewegt. Keine Note, kein Vergleich –
jede Karte nur mit sich selbst.
</p>
</div>
</section>
<p class="fehler" id="fehler" role="alert" aria-live="polite"></p>
<!-- ---- Die Liste (nur Leitung) ---------------------------------- -->
<section id="liste-block" hidden>
<p class="w-hinweis" id="liste-hinweis"></p>
<div id="liste" class="w-liste" aria-busy="true">
<p class="leise">wird geladen …</p>
</div>
</section>
<!-- ---- Eine Karte (nur Leitung) --------------------------------- -->
<section id="karte-block" hidden>
<button type="button" class="knopf knopf--still knopf--klein" id="zur-liste">
← Alle Karten
</button>
<h2 class="w-name" id="karte-name">…</h2>
<p class="w-satz" id="karte-satz">…</p>
<!-- Diagramm 1: Bewegung. Zwei Richtungen um eine Nulllinie —
vorwaerts und rueckwaerts sind dieselbe Groesse mit
verschiedenem Vorzeichen, nicht zwei Themen. -->
<section class="w-teil" id="bewegung-block">
<h3 class="e-abschnitt">Was sich bewegt hat</h3>
<p class="w-teil__satz" id="bewegung-satz"></p>
<div id="bewegung"></div>
</section>
<!-- Diagramm 2: der Streifen. Eine Zeile je Punkt, eine Spalte je
Monat. Das Zeichen sagt die Stufe, die Farbe verstaerkt nur. -->
<section class="w-teil" id="streifen-block">
<h3 class="e-abschnitt">Punkt für Punkt, Monat für Monat</h3>
<p class="w-teil__satz" id="streifen-satz"></p>
<div id="streifen" class="w-streifen"></div>
</section>
<!-- Die Texte. Reihenfolge ist Absicht: erst was sich bewegt hat,
dann was traegt, erst danach was liegt. -->
<section class="w-teil" id="texte-block">
<h3 class="e-abschnitt">Was dazu zu sagen ist</h3>
<div id="texte"></div>
</section>
<p class="w-fuss">
Auf dieser Seite gibt es keine Punktzahl und keinen Vergleich zwischen
Personen. Was hier steht, ist ein Gesprächsanlass – kein Zeugnis.
Einschätzungen setzt und ändert man im Katalog:
<a href="entwicklung.html">Eure Aufgaben</a>.
</p>
</section>
<!-- ---- Die eigene Sicht (Modi) ---------------------------------- -->
<!-- ==================================================================
WAS DER MENSCH SELBST SIEHT.
Hier steht kein fremder Name, keine Beobachtung über jemand
anderen und kein Anlasstext. Nur: ob sich etwas bewegt hat.
Die Lesehilfe und die zwei Wege am Ende sind am 19.09.2026
dazugekommen. Vorher standen hier Balken ohne Erklärung und ein
„Frag danach" ohne Adressaten – eine Sackgasse mit freundlichem
Ton.
============================================================== -->
<section id="mich-block" hidden>
<h2 class="e-abschnitt">Deine Entwicklung</h2>
<p class="w-satz" id="mich-satz">…</p>
<p class="w-lesehilfe" id="mich-lesehilfe" hidden></p>
<div id="mich-bewegung"></div>
<p class="w-fuss" id="mich-hinweis"></p>
<div class="w-wege" id="mich-wege" hidden></div>
</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/werdegang.js?v=202609191915" defer></script>
</body>
</html>