Vier Sackgassen, zwei Kacheln namens "Chat" -- und eine Seite ohne Kopf

Durchgang durch die Team-Dogi-Seiten aus der Sicht von jemandem, der
sie zum ersten Mal sieht. Alles hier ist am Code belegt und nachgemessen.

1. "KLINGELT NICHTS?" WARF ALLE DREI TEAM-ROLLEN AUF DIE STARTSEITE.

anruf-probe.html erklaert, WARUM das Telefon stumm bleibt. Sie steht in
der Rechtetafel offen, und aus dem Chat zeigen zwei Knoepfe darauf. Nur
hatte sie nie eine Kachel -- absichtlich, sie ist kein Bereich. Seit die
Adressregel vom 15.09. eine Kachel VERLANGT, landete jeder Klick wortlos
auf start.html.

Das ist die schlimmste Sorte Sackgasse: Man ruft sie auf, WEIL schon
etwas nicht geht, und sie wirft einen hinaus.

Mit derselben Zeile geheilt: Die Hinweisleiste wirft jeden Hinweis weg,
dessen Ziel es auf dieser Adresse nicht gibt -- "Bei dir klingelt nichts"
wurde auf crew deshalb NIE angezeigt. Ausgerechnet der Hinweis, der acht
von elf Leuten betrifft.

2. UND DIESE SEITE HATTE GAR KEINE GESTALTETE KOPFLEISTE.

.kopfleiste, __zurueck, __mitte, __titel stehen in KEINER Stilvorlage --
sie leben in start.css, die diese Seite absichtlich nicht laedt. Die
Leiste war nackter Text. Auf einer Seite, die man im Stoerfall aufruft,
sieht unfertig aus wie kaputt. Jetzt im <style>-Block der Seite, aus
demselben Grund wie ihr uebriges CSS.

3. EIN MODI KAM NICHT AN SEINE EIGENE AUSWERTUNG.

entwicklung.html und werdegang.html haben BEIDE eine ausgearbeitete
Eigensicht, und die Rechtetafel laesst ihn hinein. In seiner Kachelliste
stand keine von beiden -- der Weg existierte fuer ihn nicht. Die ganze
Eigensicht war toter Code, ausgerechnet fuer den, fuer den sie ist.
Mein eigener Fehler vom Vortag.

Zwei eigene Kacheln in "Fuer dich", aus den Leitungskacheln abgeleitet.
Sie loesen zugleich eine Namenskollision: Bis heute setzten BEIDE Seiten
fuer ihn die Ueberschrift "Deine Entwicklung".

4. DER KALENDER-LINK WAR FUER DIE COMMUNITY EINE SACKGASSE.

Auf jeder Brettkarte mit Termin stand "Im Kalender am 24.09." als Link.
kalender.html steht auf ALLE -- und ALLE ist ausdruecklich ohne "gast".
Jetzt fragt der SERVER die beiden Schranken (kalender_offen) und die
Karte zeigt den Termin als Text statt als Link. Die Auskunft bleibt, nur
der Weg ins Leere faellt weg. Die Regel im Browser nachzubauen waere die
vierte Stelle fuer dieselbe Frage gewesen.

5. EIN MODI KAM AN DIE TALENTE-NOTIZEN, DIE IHM VERWEHRT SIND.

BRETTER_UEBER_SEITEN war eine feste Liste ("wer die Seite darf, muss
auch dorthin kommen") und fragte nie, WER fragt. Ueber
bereich.html?b=talente kam er an Notizen zu Zuschauern, obwohl
talente.html fuer ihn gesperrt ist -- Begruendung dort: "Hier stehen
Namen von Menschen, die nichts davon wissen."

Aus der Liste wurde eine Zuordnung Brett -> Seite, gefragt wird
darfSeite(). Nachgemessen: modi/talente 404, modi/entwicklung darf,
hand+admin unveraendert.

Dazu stand in workspace-bereiche.js ein Kommentar, der das GEGENTEIL des
Codes behauptete ("entwicklung, talente bleiben 404"). Ein falscher
Kommentar an einer Rechtestelle ist schlimmer als keiner.

6. ZWEI KACHELN "CHAT", BEIDE AUF DIESELBE SEITE.

Seit dem Treff-Chat von gestern sahen Modi und rechte Hand zweimal
"Chat" mit demselben Ziel. Jetzt "Treff-Chat" mit ?raum=treff, das den
Raum direkt oeffnet -- gesucht an denselben zwei Merkmalen, an denen ihn
der Rest der Datei erkennt.

7. VERTRAUEN: "WIE GEHT'S DIR?" VERSPRACH MEHR, ALS ES HALTEN KANN.

Dort stand: "Niemand aus dem Team sieht deine Antworten -- auch
DogFather nicht." Punkt. Fast wahr und deshalb gefaehrlich: Aus
denselben Antworten entsteht eine namenlose Ampel fuer die Leitung.

Der ehrliche Satz war laengst geschrieben und wurde vom Server sogar
mitgeliefert (block.text) -- nur hat ihn nie jemand angezeigt. Er steht
jetzt im HTML, nicht im Skript: Wer die Seite oeffnet, soll ihn lesen,
BEVOR er tippt.

8. DIE NEUE AUSWERTUNG, AUS BENUTZERSICHT NACHGEBESSERT.

- Der Streifen hatte keine Zeichenerklaerung. Im Dateikopf stand "wer
  Farben schlecht unterscheidet, liest dasselbe Zeichen" -- das stimmt
  nur, wenn irgendwo steht, was die Zeichen heissen. Jetzt eine Legende,
  aus `stufen` gebaut statt abgeschrieben.
- "nie gesetzt" war ein Mittelpunkt, "Kann ich nicht sagen" ein
  Halbgeviertstrich. Zwei kurze Striche nebeneinander fuer den
  Unterschied zwischen "niemand hat hingesehen" und "jemand hat
  hingesehen und konnte es nicht sagen". Leer ist jetzt wirklich leer,
  mit gestricheltem Rahmen.
- Die Aufschluesselung der Balken stand nur im Mausueberfahren -- am
  Handy also nie, und dort steht jemand damit im Stream. Jetzt als Text.
- Die Modi-Sicht bekam Balken ohne Erklaerung, ein "Frag danach" ohne
  Adressaten und bei fehlender Bewegung ein LEERES Element. Jetzt
  Lesehilfe, ein Leerkasten mit Satz und zwei Wege weiter.

9. NEBENBEFUNDE, DIE DIE PRUEFUNG GEFUNDEN HAT.

pruef-css-klassen war schon VOR dieser Arbeit rot (nachgemessen mit
git stash). Alle drei Befunde behoben:
  - hilfe.html und unsere-seiten.html luden ihre Seitendatei NACH
    module.css und haus.css und ueberschrieben damit das Haus.
  - Zwei Schriftgroessen unter 11,5 px aus dem gestrigen Bau
    (.71rem Monatsbeschriftung, .68rem Marke) auf .75 und .72 gehoben.
  - Die Pruefung selbst war blind fuer <style>-Bloecke in der Seite und
    meldete deshalb dauerhaft drei Fehler an einer Seite, die ihre
    Stile mit Absicht selbst traegt. Eine Warnung, die immer kommt, ist
    keine Warnung mehr -- jetzt sieht sie hin, statt die Seite
    auszunehmen.

Kleinkram nebenbei: "die Antworten sieht nur du" -> "siehst nur du" auf
der Kachel zur empfindlichsten Seite des Hauses. "Bewertet wird dort" ->
"Eingeschaetzt wird dort" in teamlage.html, zwei Zeilen unter "keine
Bewertung von Menschen". "1 Aufgabe(n) angelegt" ausgeschrieben.

GEMESSEN: pruef-css-klassen ALLES IN ORDNUNG (vorher 3 Fehler),
pruef-meldungen 8/0, pruef-rechtetafel 19/0, alle Module laden,
keine doppelten Kachelnamen/-ziele/-farben mehr in allen vier Rollen.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-09-19 14:57:55 +02:00
co-authored by Claude Opus 5
parent 461d41943a
commit 273318dd9c
48 changed files with 1054 additions and 509 deletions
+130 -16
View File
@@ -910,7 +910,7 @@ const RECHTE_KACHEL = {
einfacher -- sie tut nur noch eine Sache. */
const BEFINDEN_KACHEL = {
gruppe: "Für dich", gruppeUnter: "Dein Platz im Team",
name: "Wie geht's dir?", unter: "Ein paar Fragen – die Antworten sieht nur du",
name: "Wie geht's dir?", unter: "Ein paar Fragen – die Antworten siehst nur du",
zeichen: "steckbrief", ton: 37, ziel: "befinden.html", szene: "lounge",
};
@@ -1006,8 +1006,23 @@ const TREFF_BEREICHE = [
TON 41: gezaehlt in start.css, nicht in dieser Datei. 40 war die
hoechste (siehe die Warnung an WERDEGANG_KACHEL, dort ist genau
dieser Fehler heute schon einmal passiert). */
{ ...TREFF_GRUPPE, name: "Chat", unter: "Miteinander reden – nachts schläft er",
zeichen: "chat", ton: 41, ziel: "chat.html", szene: "lounge" },
/* „TREFF-CHAT“ UND NICHT NUR „CHAT“ (nachgeschärft 19.09.2026).
Gefunden beim Durchgehen aus Benutzersicht: Ein Modi und die
rechte Hand sahen ZWEI Kacheln mit demselben Namen „Chat“, beide
mit demselben Ziel `chat.html` -- eine unter „Täglich“ (das Team),
eine hier unter „Community“. Sie taten auch dasselbe: Man landete
in der Gesprächsliste und musste den richtigen Raum suchen.
Zwei gleich benannte Wege zum selben Ort sind schlimmer als ein
fehlender -- man klickt den falschen und sucht den Unterschied.
Jetzt trägt sie ihren eigenen Namen UND ihr eigenes Ziel:
`?raum=treff` öffnet den Raum der Community direkt. Für die
Community selbst ändert sich am Namen nichts Wesentliches -- sie
hat nur diese eine. */
{ ...TREFF_GRUPPE, name: "Treff-Chat", unter: "Miteinander reden – nachts schläft er",
zeichen: "chat", ton: 41, ziel: "chat.html?raum=treff", szene: "lounge" },
{ ...TREFF_GRUPPE, name: "Anschlagbrett", unter: "Was gerade gilt",
zeichen: "reports", ton: 33, ziel: "bereich.html?b=anschlag", szene: "halle" },
{ ...TREFF_GRUPPE, name: "Was ansteht", unter: "Die n\u00e4chsten Streams und Events",
@@ -1129,7 +1144,54 @@ const HILFE_KACHEL = {
Zusammengesetzt und nicht in MODI_BEREICHE hineingeschrieben, weil
diese Liste weiter oben steht als die Kacheln des Treffs. Eine Kopie
dort waere die Stelle, an der beim naechsten neuen Brett eines fehlt. */
const MODI_MIT_TREFF = [...MODI_BEREICHE, BEFINDEN_KACHEL, ...TREFF_BEREICHE,
/* =====================================================================
WAS DER MODI UEBER SICH SELBST SIEHT (19.09.2026)
GEFUNDEN BEIM DURCHGEHEN DER SEITE AUS BENUTZERSICHT, und es war
mein eigener Fehler vom Vortag: `entwicklung.html` und
`werdegang.html` haben BEIDE eine ausgearbeitete Eigensicht --
entwicklung.js zeigt die eigene Karte, werdegang.js die eigene
Bewegung. Die Rechtetafel laesst den Modi auf beide Seiten
(rechte.js).
Nur: In seiner Kachelliste stand keine von beiden. Der Weg dorthin
existierte fuer ihn nicht -- er haette die Adresse von Hand tippen
muessen. Die ganze Eigensicht war damit toter Code, ausgerechnet
fuer den Menschen, fuer den sie geschrieben wurde.
ZWEI KACHELN UND NICHT DIE DER LEITUNG. Dieselben Ziele, aber die
Leitungstexte passen nicht: "Wie sich jemand ueber die Zeit bewegt"
liest sich, als ginge es um andere Leute. Aus seiner Sicht geht es
um ihn.
UND SIE LOESEN EINE NAMENSKOLLISION. Bis heute setzten BEIDE Seiten
fuer ihn die Ueberschrift "Deine Entwicklung" -- wer aus der Glocke
kam, konnte nicht sagen, auf welcher er stand. Jetzt heisst der
Katalog "Deine Aufgaben" (passend zur Kachel "Eure Aufgaben") und
die Auswertung "Deine Entwicklung". Ein Name, eine Sache.
ABGELEITET, NICHT ABGESCHRIEBEN: Ziel, Zeichen und Ton kommen aus
den Kacheln der Leitung. Wer dort das Ziel aendert, aendert es hier
mit -- zwei Kachelobjekte mit demselben Ziel waeren sonst zwei
Gelegenheiten, eines davon zu vergessen. */
const FUER_DICH = {
gruppe: "Für dich", gruppeUnter: "Deine Seite im Team",
};
const MEINE_AUFGABEN_KACHEL = {
...FUER_DICH,
zeichen: ENTWICKLUNG_KACHEL.zeichen, ton: ENTWICKLUNG_KACHEL.ton,
ziel: ENTWICKLUNG_KACHEL.ziel, szene: ENTWICKLUNG_KACHEL.szene,
name: "Deine Aufgaben", unter: "Was du kannst – und was als Nächstes kommt",
};
const MEINE_ENTWICKLUNG_KACHEL = {
...FUER_DICH,
zeichen: WERDEGANG_KACHEL.zeichen, ton: WERDEGANG_KACHEL.ton,
ziel: WERDEGANG_KACHEL.ziel, szene: WERDEGANG_KACHEL.szene,
name: "Deine Entwicklung", unter: "Was sich bei dir bewegt hat – ohne Note",
};
const MODI_MIT_TREFF = [...MODI_BEREICHE, BEFINDEN_KACHEL,
MEINE_AUFGABEN_KACHEL, MEINE_ENTWICKLUNG_KACHEL, ...TREFF_BEREICHE,
TREFF_MODERATION_KACHEL];
const HAND_MIT_TREFF = [...HAND_BEREICHE, ...TREFF_BEREICHE,
TREFF_MODERATION_KACHEL, HILFE_KACHEL];
@@ -1283,20 +1345,49 @@ const AGENTUR_LISTE = new Set(["spicy", "admin", "manager", "scout", "creator"])
Bretter, zu denen eine erlaubte SEITE verlinkt. Wer ein drittes
dazunimmt, ohne es einzutragen, bekommt dasselbe 404 und findet
diesen Absatz. */
const BRETTER_UEBER_SEITEN = [
/* Beide sind von entwicklung.html bzw. talente.html aus verlinkt --
das Notizbrett neben dem Katalog. Wer die Seite oeffnen darf,
muss auch dorthin kommen. */
"entwicklung",
"talente",
];
/* Bretter, die kein eigenes Kachelziel haben, sondern von einer SEITE
aus verlinkt sind -- das Notizbrett neben dem Katalog.
export const MODI_BEREICHE_ERLAUBT = new Set([
...HAND_MIT_TREFF
AUS EINER LISTE WURDE EINE ZUORDNUNG (19.09.2026), und das war ein
echtes Loch, kein Schoenheitsfehler:
Der Satz darueber lautete "Wer die Seite oeffnen darf, muss auch
dorthin kommen." Der Gedanke ist richtig -- nur stand er als feste
Liste da und fragte nie, WER gerade fragt. Ergebnis: Ein Modi kam
ueber `bereich.html?b=talente` an die Notizen zu Kandidaten, obwohl
`talente.html` fuer ihn ausdruecklich gesperrt ist. Die Begruendung
der Sperre steht in rechte.js und gilt hier genauso: "Hier stehen
Namen von Menschen, die nichts davon wissen."
Schlimmer noch: In workspace-bereiche.js stand ein Kommentar, der
das Gegenteil des Codes behauptete ("entwicklung, talente bleiben
404"). Ein falscher Kommentar an einer Rechtestelle ist schlimmer
als gar keiner -- der Naechste liest ihn und prueft nicht nach.
Jetzt steht neben jedem Brett die Seite, von der es abhaengt, und
gefragt wird `darfSeite()` -- dieselbe Tafel, die auch die Seite
selbst bewacht. Eine zweite Regel kann damit nicht auseinanderlaufen. */
const BRETTER_UEBER_SEITEN = {
entwicklung: "/workspace/entwicklung.html",
talente: "/workspace/talente.html",
};
/** Bretter mit eigener Kachel. Diese darf jeder aus dem Team, der die
* Kachel sieht -- sie sind daraus abgeleitet, nicht abgeschrieben. */
export const MODI_BEREICHE_ERLAUBT = new Set(
HAND_MIT_TREFF
.map((k) => (/bereich\.html\?b=([a-z]+)/.exec(k.ziel) || [])[1])
.filter(Boolean),
...BRETTER_UEBER_SEITEN,
]);
.filter(Boolean));
/** Und die Bretter hinter einer Seite -- nur fuer den, der die Seite darf.
*
* DER DRITTE AUSGANG FEHLT HIER ABSICHTLICH: Ein Brett, das nicht in
* der Zuordnung steht, ist keine offene Frage, sondern schlicht nicht
* gemeint. `false` ist die richtige Antwort. */
export function brettHinterSeiteOffen(person, brett) {
const seite = BRETTER_UEBER_SEITEN[brett];
return !!seite && darfSeite(person, seite);
}
/* Der Satz unter der Begruessung. Die fuenf bekannten Rollen haben ihn
in assets/js/start.js stehen ("Creator · dein eigener Bereich"); fuer
@@ -4533,6 +4624,29 @@ const OHNE_KACHEL_UEBERALL = new Set([
ein Hinweis, kein Grund.) */
"/workspace/bewerben.html",
"/workspace/bewerbungen.html",
/* „KLINGELT NICHTS?“ (nachgetragen 19.09.2026).
Gefunden beim Durchgehen der Seite aus Benutzersicht, und es war
der peinlichste Fund des Tages: `anruf-probe.html` ist die Seite,
die erklaert, WARUM das Telefon stumm bleibt. Sie steht in der
Rechtetafel fuer alle offen, und aus dem Chat zeigen zwei Knoepfe
darauf (chat.js, anruf.js).
Nur hatte sie nie eine Kachel -- absichtlich, sie ist kein
Bereich. Seit die Adressregel vom 15.09. eine Kachel VERLANGT,
landete damit jeder Klick auf der Startseite. Wortlos.
Das ist die schlimmste Sorte Sackgasse: Man ruft sie auf, WEIL
schon etwas nicht geht, und sie wirft einen hinaus. Wer das
erlebt, schliesst daraus, dass die ganze App kaputt ist -- und
genau das ist sie in dem Moment fuer ihn auch.
Die Hinweisleiste haengt mit dran: workspace-hinweise.js wirft
jeden Hinweis weg, dessen Ziel auf dieser Adresse nicht existiert.
Der Hinweis „Bei dir klingelt nichts -- kein Geraet angemeldet"
wurde auf crew deshalb NIE angezeigt. Ausgerechnet der, der acht
von elf Leuten betrifft. Eine Zeile hier heilt beides. */
"/workspace/anruf-probe.html",
]);
/** Gibt es diese Seite auf der Adresse, auf der die Person gerade steht? */