Files
dogfather-universe/workspace/befinden.html
T
DogFatherGit 28b492527e Kamera und Chat -- die zwei fehlenden Host-Steuerungen
Filipes Notiz nennt acht: "Host-Steuerung fuer Kamera, Mikrofon,
Video, Gaeste, Lautstaerke, Chat, Layout und Start/Ende."
Nachgezaehlt war sechsmal etwas da und zweimal nichts.

KAMERA

Es gab keinen Weg, das eigene Bild abzuschalten. Wer kurz aufstehen,
trinken oder etwas holen wollte, musste die Sendung verlassen oder
sich dabei filmen lassen.

Jetzt liegt eine SENDERLEISTE ueber dem Bild -- Kamera, Mikro und ein
Pegel. Sie gehoert jedem, der sendet, Host wie Gast: Ein Gast, der
sein eigenes Bild nicht abschalten kann, muesste den Host darum
bitten, und das ist keine Bedienung, sondern eine Bitte.

DAS BILD WIRD AM GERAET ABGESCHALTET (`track.enabled = false`), nicht
am Server: Die Verbindung bleibt stehen, der Ton laeuft weiter, und
beim Wiedereinschalten ist das Bild sofort da. Der Server erfaehrt es
nur, damit bei den ANDEREN "Kamera aus" im Fenster steht. Ohne diese
Beschriftung sind ein abgeschaltetes und ein kaputtes Bild dasselbe
schwarze Rechteck -- und dann fragt jemand im Chat, ob die Technik
hakt.

Erst das Geraet, dann die Ansage. Andersherum stuende bei allen
"Kamera aus", waehrend noch ein Bild fliesst; man glaubte sich
unsichtbar. Geht die Ansage nicht durch, wird das Geraet
zurueckgesetzt -- ein Knopf, der halb wirkt, ist schlimmer als einer,
der gar nicht wirkt.

Das Mikro laeuft denselben Weg. Erst wollte ich es rein oertlich
lassen; das waere dieselbe stille Falle gewesen: Wer sich selbst
stummschaltet und trotzdem redet, saehe bei allen anderen ein ganz
normales Fenster.

CHAT

Es gab Moderation -- Beitraege wegnehmen -- aber keine Steuerung des
Chats selbst. Einen Beitrag zu loeschen, nachdem er stand, ist etwas
anderes, als ihn gar nicht erst zuzulassen.

Drei Stufen: OFFEN, TEAM (wer moderiert, darf -- wer aufraeumen soll,
muss dabei reden koennen) und ZU (nur die zwei, die fuehren). Zwei
Stufen waeren zu wenig: "zu" ist in einer Sendung fast immer zu viel,
dann sitzen alle vor einem stummen Fenster. Die mittlere ist die, die
man wirklich braucht.

Die Schalter stehen im Kopf der Chatschiene, nicht im Regiepult: Man
moderiert, wo man liest. Ein Umweg ueber ein Register waere in dem
Moment, in dem es laut wird, genau ein Umweg zu viel.

EIN GESPERRTES FELD SAGT, WARUM. "Gerade schreibt nur das Team" statt
eines Feldes, das sich nicht beschreiben laesst und schweigt --
sonst schreibt jemand in den Hauschat, dass die Reaction hakt. Und
die Stufe gilt AM SERVER: Ein ausgegrautes Feld haelt niemanden auf,
der die Schnittstelle kennt. Beide Antworten kommen aus derselben
Funktion; zwei Rechnungen waeren zwei Gelegenheiten, dass ein Feld da
ist und mit 403 antwortet.

EIN FUND NEBENBEI: "MEIN MIKRO" WAR EIN PLACEBO

Gemessen: `staende.mikro` wird nirgends gelesen. Der Schieber liess
sich bewegen, die Zahl daneben aenderte sich -- und es passierte
nichts. Das ist schlimmer als ein fehlender Regler: Man glaubt, man
haette leiser gestellt.

Technisch ist das auch richtig. Die eigene Lautstaerke laesst sich
nicht am Regler aendern; man muesste den Ton umrechnen und die Spur
in jeder Verbindung austauschen. Was man beim eigenen Mikro braucht,
ist AN oder AUS -- und ein Pegel, der zeigt, dass es ankommt. Genau
das steht jetzt dort, als vierte Spalte im Pult, mit demselben
Zustand wie die Senderleiste. Die drei anderen Regler bleiben Regler:
Sie steuern, was ICH hoere, und das geht am Empfaenger.

UND EINER IN MEINER EIGENEN ARBEIT

`kasten.append(el("div","pegel")).append(el("i"))` -- `Node.append()`
gibt `undefined` zurueck, nicht das angehaengte Element. Ein
TypeError beim Aufbau des Pults, den `node --check` nicht sieht.
Beim Verkuerzen nicht nachgesehen, was die Methode zurueckgibt.

Dazu: Die Pegel-Takte liefen in `pultAufbauen()`. Das Pult hat nur,
wer die Sendung fuehrt -- ein Gast haette seinen Pegel nie gesehen,
und genau er braucht ihn am dringendsten.

GEMESSEN

  mess-reaktion   Der Host schaltet ab, und bei der Zuschauerin steht
                  "Kamera aus" bei DogFather, Bild verdeckt.
                  Stufe "Team": Feld gesperrt mit Grund, und der
                  Server lehnt denselben Versuch mit 403 ab.
  pruef-reaktion  154 Punkte, 0 Fehler (vorher 132), neuer Abschnitt
                  13 mit 22 Punkten und Gegenprobe (es geht auch
                  wieder auf -- eine Sperre, die man nicht loesen
                  kann, ist keine Stufe, sondern ein Ende)
  dazu gruen      handy 180, css-klassen 33, struktur 35,
                  tippziele 11, aufbewahrung 45, meldungen 8

Der neue Abschnitt baut sich seine Buehne selbst. Abschnitt 9 beendet
die Sendung; sich auf den Stand eines frueheren Abschnitts zu
verlassen ist die Kopplung, die spaeter jemand aus Versehen
zerreisst.

SCHEMA: drei Spalten (reaktion_dabei.kamera_aus, .mikro_aus,
reaktion.chat_modus), alle per ALTER TABLE. Auf einer Kopie der
echten Datenbank durchgespielt: 20 Personen, keine Tabelle verliert
eine Spalte.
2026-09-28 08:16:49 +02:00

213 lines
9.9 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>Wie geht's dir? · 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=202609280816" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280816" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/start.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/module.css?v=202609280816" />
<link rel="stylesheet" href="assets/css/haus.css?v=202609280816" />
</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> · 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" class="b-flaeche">
<!-- WIE WEIT BIN ICH? (23.09.2026)
---------------------------------------------------------
Filipe: „ich will dass diese seite viel übersichtlicher
aussieht, es soll eine riesßen kachel sein wo alles viel
besser und geiler aussieht."
Auf einer Seite, die man AUSFÜLLT, heißt übersichtlich vor
allem: wissen, wie viel noch kommt. Der Kasten darüber sagt
„9 von 18 Fragen dran" — das ist die Runde, nicht der eigene
Stand. Dieses Band sagt den eigenen.
`aria-live="polite"`: Wer nicht hinsieht, bekommt den neuen
Stand vorgelesen, sobald er eine Frage beantwortet. -->
<div class="b-stand" id="b-stand" hidden aria-live="polite">
<div class="b-stand__bahn"><i class="b-stand__fuellung" id="b-stand-balken"></i></div>
<p class="b-stand__wort" id="b-stand-wort"></p>
</div>
<div id="fragen" aria-busy="true"><p class="leise">wird geladen …</p></div>
</section>
<!-- ===================================================================
DIE EINE ZUSAMMENFASSUNG (20.09.2026)
Filipe: „am ende von allen fragen will ich eine gesamte
zusammenfassung, nicht bei jeder frage oder kategorie eine,
sondern EINE gesamte am ende. eine motivierende zusammenfassung
für die person."
SIE STEHT DIREKT UNTER DEN FRAGEN und über dem Verlauf. Das ist
Absicht: Sie handelt von dem, was man gerade angetippt hat —
Verlauf und Musteranalyse handeln von den Runden davor und
brauchen mindestens zwei. Diese hier gibt es beim ersten Mal.
GERECHNET HAT SIE DER SERVER (workspace-befinden-resuemee.js).
Dort steht auch, warum hier bewusst KEINE KI hängt: Das sind
Gesundheitsdaten, ein Sprachmodell erfindet, und ein fremder
Dienst fällt aus. Alle drei Gründe reichen einzeln.
=================================================================== -->
<section class="b-fazit" id="fazit-block" hidden aria-live="polite">
<h2 class="e-abschnitt">Was das zusammen heißt</h2>
<p class="b-fazit__kopf" id="fazit-kopf"></p>
<div class="b-fazit__traegt" id="fazit-traegt" hidden>
<p class="b-fazit__schild">Das trägt gerade</p>
<ul class="b-fazit__liste" id="fazit-traegt-liste"></ul>
</div>
<p class="b-fazit__thema" id="fazit-thema" hidden></p>
<!-- ================================================================
DEIN NAECHSTER SCHRITT (22.09.2026)
Filipe: "das resume unten auf jeder frage ... muss weg ich will
ein ganzes gesamtresume ... aber auch individuel so dass jeder
sich selber auch verbessert und steigert fuers team."
Vorher stand unter jeder der neun Fragen ein eigener Ratschlag.
Neun Ratschlaege auf einmal sind keine Hilfe, sondern eine
Maengelliste -- wer neun Dinge gleichzeitig angehen soll, geht
keins an. Hier steht genau EINER, zu der Sache, die am meisten
haengt, mit dem Grund daneben, warum es dieser ist.
============================================================ -->
<div class="b-fazit__schritt" id="fazit-schritt" hidden>
<p class="b-fazit__schild">Dein nächster Schritt</p>
<p class="b-fazit__schritt-titel" id="fazit-schritt-titel"></p>
<p class="b-fazit__schritt-was" id="fazit-schritt-was"></p>
<p class="b-fazit__schritt-welt leise" id="fazit-schritt-welt" hidden></p>
</div>
<!-- Der Team-Teil. Abgeleitet aus der Lage, nicht immer derselbe
Spruch: Ein "gemeinsam schaffen wir das" an jemanden, bei dem
fuenf von neun Sachen haken, ist das Gegenteil von Hilfe. -->
<p class="b-fazit__team" id="fazit-team" hidden></p>
<p class="b-fazit__schluss" id="fazit-schluss"></p>
<p class="b-fazit__zahlen leise" id="fazit-zahlen"></p>
<p class="b-fazit__quelle leise" id="fazit-quelle" hidden></p>
</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 FRUEHER HIER STAND (bis 22.09.2026)
Ein Block "Was dein Verlauf sagt" mit EINER ZEILE JE FRAGE --
Titel, Marke, Einordnung aus der Forschung und ein "Was hilft".
Bei neun Fragen waren das neun Kaesten untereinander.
Filipe: "ich will dass das viel schoener aussieht und nicht so
ein scheiss durcheinander, man wird ja bekloppt. das resume
unten auf jeder frage hab ich auch schon mehrmals gesagt muss
weg."
Die Erkenntnisse sind nicht verloren: Die staerkste davon steht
jetzt oben im Gesamtresuemee als "Dein naechster Schritt" -- mit
derselben Einordnung, aber einmal statt neunmal. -->
</main>
<script src="assets/js/meldung.js?v=202609280816" defer></script>
<script src="assets/js/nachfrage.js?v=202609280816" defer></script>
<script src="assets/js/wahl.js?v=202609280816" defer></script>
<script src="assets/js/bereiche.js?v=202609280816" defer></script>
<script src="assets/js/installieren.js?v=202609280816" defer></script>
<script src="assets/js/kopf.js?v=202609280816" defer></script>
<script src="assets/js/glocke.js?v=202609280816" defer></script>
<script src="assets/js/holen.js?v=202609280816" defer></script>
<script src="assets/js/befinden.js?v=202609280816" defer></script>
</body>
</html>