Chat: "@rudel" ruft das ganze Team -- und nur die vier duerfen es

Filipe: "dan will ich auch dass nur die modis, rechte hand, linke hand
und dogfather, alle auch auf einmal markieren koennen im chat mit
einem, @rudel ,dann sollen alle eine benarichtigung bekommen."

DAS WAR EINE OFFENE FRAGE, UND ER HAT SIE BEANTWORTET
-----------------------------------------------------
In chat-erwaehnung.js stand seit dem 20.09. woertlich: "KEIN @alle. Es
waere in fuenf Minuten gebaut und ist der zuverlaessigste Weg, dass alle
die Benachrichtigungen abschalten -- und dann kommt auch die an, die
wirklich fuer einen bestimmten Menschen gedacht war. Wenn Filipe es
ausdruecklich will, gehoert dazu eine Entscheidung, WER es benutzen
darf; das ist eine Frage an ihn, keine, die ich hier beantworte."

Seine Antwort ist genau diese Entscheidung, und sie ist die Sicherung:
Team Dogi und DogFather duerfen rufen, sonst niemand.

WEN DER RUF ERREICHT: DAS TEAM IM RAUM, NICHT DEN RAUM
------------------------------------------------------
"Rudel" heisst das Team -- dieselben vier Gruppen, die auch rufen
duerfen. In einem Team-Kanal ist das jeder Anwesende, also "alle auf
einmal". Sichtbar wird der Unterschied im TREFF, und dort haette die
andere Lesart wehgetan: Dort sitzt die Community. Ein Ruf, der jeden
Zuschauer weckt, waere etwas anderes als der bestellte -- und beim
zweiten Mal haetten sie die Benachrichtigungen abgeschaltet.

WO WAS ENTSCHIEDEN WIRD
-----------------------
chat-erwaehnung.js bleibt ohne Abhaengigkeiten (die Pruefung soll sie
lesen koennen, ohne einen Server hochzufahren). Sie sagt nur, DASS
gerufen wurde; der Aufrufer sagt ihr, ob der Schreibende darf. Wer zum
Rudel gehoert, entscheidet workspace-chat.js ueber istTeamDogi().

Das Schluesselwort gewinnt gegen einen Menschen, der "Rudel" heisst.
Heute heisst niemand so -- aber das ist eine Tatsache von heute, kein
Gesetz. So herum verliert niemand eine Meldung (wer so heisst, ist im
Rudel dabei); andersherum haette ein einziger Zugang den Ruf ans Team
stillschweigend abgeschaltet.

istTeamDogi() NEU IN workspace.js
---------------------------------
Derselbe Ausdruck ("admin oder TEAM_DOGI_ROLLEN") stand dort dreimal
wortgleich: siehtModis, kanaeleFuer, kategorienFuer. Drei gleiche
Ausdruecke sind drei Gelegenheiten, dass einer beim naechsten
Rollenzuschnitt nicht mitgeht. Jetzt eine Stelle, die drei benutzen.

DIE NACHRICHT MERKT SICH DEN RUF (Spalte chat_nachrichten.rudel)
----------------------------------------------------------------
Beim Lesen muesste der Browser sonst wissen, ob der Absender es DAMALS
durfte. Er kennt nur dessen heutige Rolle -- wechselt jemand die Rolle,
verschwaende die Hervorhebung rueckwirkend aus einem Satz von vorletzter
Woche. Und es waere die zweite Rechnung ueber dieselbe Frage.
Vorgabe 0; alle alten Nachrichten haben kein Rudel gerufen, und das ist
keine Annahme, sondern eine Tatsache: Das Wort gab es noch nicht.

DIE MELDUNG SAGT, WAS LOS IST
-----------------------------
"X hat das Rudel gerufen", nicht "X hat dich erwaehnt" -- letzteres
stimmt beim Rudel nicht, und wer dreimal liest, dass er gemeint sei,
und jedes Mal merkt, dass es alle betraf, glaubt beim vierten Mal auch
dem echten nicht mehr. Auf DEMSELBEN Schalter wie die Erwaehnung: Ein
vierter Schalter waere der, den jemand abschaltet und der dann genau im
wichtigen Moment fehlt. Jeder Ruf steht im Protokoll (chat_rudel) --
"@rudel wird zu oft benutzt" soll eine Zahl sein koennen, kein Gefuehl.

DIE FARBE WIRD ABGELEITET, NICHT GESETZT
----------------------------------------
Eine Nachricht liegt in der Blase, deren Farbe ihr Absender AUSGESUCHT
hat -- siebzehn Moeglichkeiten. Eine feste Farbe darauf ist eine Wette,
und genau die habe ich am 22.09. beim Loeschknopf verloren (1,91:1 auf
Babyblau, gemessen, nachdem es live war). Die Marke nimmt deshalb
`--blase-text` -- die Schrift, die schriftFuer() fuer DIESE Blase mit
mindestens 7:1 ausgerechnet hat. Unterschieden wird ueber Form statt
Farbton: Toenung, Kante, Gewicht 700, ein Zeichen davor. In der
Auswahlliste darf es einen eigenen Ton haben -- sie liegt auf der
Flaeche des Hauses, deren Farbe feststeht.

DER VORSCHLAG ERSCHEINT NUR, WO ER ETWAS BEWIRKT
------------------------------------------------
In einem Zweier-Gespraech mit einem Creator ist ausser mir niemand aus
dem Team. `darf_rudel` fragt deshalb beides: darf ich, und sitzt hier
noch jemand aus dem Team. Dieselbe Ueberlegung wie beim eigenen Namen,
den die Liste auch nicht anbietet. Die Schranke beim Schreiben haengt
nicht daran -- wer es von Hand tippt, ruft eben niemanden.

GEPRUEFT
--------
pruef-erwaehnung: 119 Pruefungen, 0 Fehler (vorher 66).
Neu darin, und die zweite ist die wichtigere:
  * der Modi ruft im Treff genau das Team -- die Liste wird aus der
    Besetzung ABGELEITET, nicht abgeschrieben
  * der Gast im selben Raum ruft NICHTS: kein Eintrag, kein Merkmal,
    kein Vorschlag. Ohne diese Pruefung stuende Filipes "nur die
    modis, rechte hand, linke hand und dogfather" bloss im Kommentar
  * beide Fassungen der Regel (Server und Browser) an 14 zusaetzlichen
    Proben nebeneinander, mit beiden Rechten -- samt Gegenprobe, dass
    der Vergleich einen Unterschied ueberhaupt sehen kann
  * am Bildschirm: der Ruf steht oben in der Liste, sagt daneben, was
    er bedeutet, Enter setzt ihn ein, und im Satz ist er an Gewicht
    und Rahmen erkennbar -- nicht nur an der Farbe

Beim Bauen gemessen statt vermutet: Ein Scout und ein Modi kommen gar
nicht in denselben Raum (403, Haeusertrennung) -- deshalb prueft der
Verhaltenstest im Treff. Und ein Gast meldet sich nur mit
Altersbestaetigung an (400 ohne).

Die Nachtruhe des Treffs wird in dieser Pruefung abgeschaltet (gleiche
Stunden = keine Nachtruhe). Sonst waere sie zwischen Mitternacht und
sechs rot und danach gruen -- ein Test, der die Wanduhr misst.

pruef-chat, pruef-treffchat (110), pruef-chat-kanaele (81),
pruef-chat-ausbau (64): alle unveraendert gruen.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-09-23 01:36:09 +02:00
co-authored by Claude Opus 5
parent 2a3058e98e
commit 28b0143166
45 changed files with 1427 additions and 628 deletions
+66 -1
View File
@@ -2393,6 +2393,67 @@
color: var(--text);
}
/* ---- "@RUDEL" -- ALLE AUF EINMAL (23.09.2026) ------------------------
Filipe: „dan will ich auch dass nur die modis, rechte hand, linke
hand und dogfather, alle auch auf einmal markieren können im chat
mit einem, @rudel ,dann sollen alle eine benarichtigung bekommen."
ES MUSS ANDERS AUSSEHEN ALS DER EIGENE NAME. „Alle sind gemeint"
ist etwas anderes als „du bist gemeint" -- sähen beide gleich aus,
verlöre das zweite genau die Wirkung, für die es da ist.
ABER NICHT ÜBER EINE FESTE FARBE, und das ist hier der Kern:
Eine Nachricht liegt in der Blase, deren Farbe ihr Absender
AUSGESUCHT hat -- babyblau, veilchen, tinte, siebzehn Möglichkeiten.
Eine feste Farbe darauf ist eine Wette. Genau die habe ich am
22.09.2026 beim Löschknopf verloren: 1,91:1 auf Babyblau, gemessen,
nachdem es schon live war.
`--blase-text` ist die Schriftfarbe, die schriftFuer() in
workspace-chat.js FÜR DIESE BLASE ausgerechnet hat, mit mindestens
7:1 gegen ihren Hintergrund. Wer sie nimmt, kann nicht unlesbar
werden -- auf keiner der siebzehn Farben und auf keiner, die morgen
dazukommt.
Unterschieden wird deshalb über FORM statt über Farbton: kräftigere
Tönung, geschlossene Kante, fetter, und ein Zeichen davor. Das
überlebt auch einen Farbmodus, in dem Tönungen wegfallen.
AUGENSCHONEND: eine Tönung und eine Kante, kein Leuchten, keine
Bewegung. Ein Ruf ans ganze Team wird oft geschrieben, wenn es eilt
-- der Bildschirm muss deswegen nicht blinken. */
.chat-erwaehnung[data-rudel="ja"] {
color: var(--blase-text, var(--text));
font-weight: 700;
background: color-mix(in srgb, var(--blase-text, var(--text)) 20%, transparent);
box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--blase-text, var(--text)) 52%, transparent);
}
/* Das Zeichen davor trägt die Unterscheidung mit, falls jemand
Tönungen gar nicht sieht. Es steht in derselben Farbe wie die
Schrift -- eine zweite Farbe wäre dieselbe Wette wie oben. */
.chat-erwaehnung[data-rudel="ja"]::before {
content: "C9A0";
opacity: .72;
}
/* ---- IN DER AUSWAHLLISTE --------------------------------------------
Hier DARF es einen eigenen Farbton haben, und der Unterschied zum
Absatz darüber ist kein Geschmack: Die Liste liegt auf der Fläche
des Hauses, deren Farbe feststeht. Eine Blase liegt auf einer Farbe,
die ihr Absender aussucht. Was auf einem bekannten Grund gerechnet
werden kann, muss auf einem unbekannten abgeleitet werden. */
.erwaehn-liste__eintrag[data-rudel="ja"] .erwaehn-liste__zeichen {
background: color-mix(in srgb, var(--rudel-farbe, #f0c987) 20%, transparent);
color: var(--rudel-farbe, #f0c987);
box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--rudel-farbe, #f0c987) 45%, transparent);
}
.erwaehn-liste__eintrag[data-rudel="ja"] .erwaehn-liste__rolle {
color: color-mix(in srgb, var(--rudel-farbe, #f0c987) 78%, #ffffff);
letter-spacing: .04em;
}
/* ---- DAS ZEICHEN IN DER GESPRÄCHSLISTE ------------------------------ */
.chat-raum__erwaehnt {
flex: none;
@@ -2476,7 +2537,11 @@
Deshalb hier ein echter Rahmen -- er überlebt jeden Farbmodus. */
@media (forced-colors: active) {
.chat-erwaehnung,
.chat-erwaehnung[data-ich="ja"] { border: 1px solid CanvasText; }
.chat-erwaehnung[data-ich="ja"],
.chat-erwaehnung[data-rudel="ja"] { border: 1px solid CanvasText; }
.erwaehn-liste__eintrag[data-rudel="ja"] .erwaehn-liste__zeichen {
border: 1px solid CanvasText;
}
.chat-raum__erwaehnt { border: 1px solid CanvasText; }
.erwaehn-liste__eintrag[data-wahl="ja"] { border: 2px solid Highlight; }
}