Vier Meldungen -- und dahinter zweimal derselbe alte Fehler

DIE SYMBOLE IN DER TAGESKACHEL WAREN DIESELBEN -- OHNE IHRE GESTALTUNG

Sie kommen vom selben Bauer wie alle anderen, bekamen aber nie dessen
Aussehen: Alle Lagenregeln waren auf `.kachel__svg` eingegrenzt, und
dieses Zeichen heisst `.dran__svg`. Uebrig blieb eine flache Kontur --
daneben, auf derselben Seite, dieselben Zeichen mit drei Lichtern,
Tiefe und Randlicht. Die Regeln gelten jetzt fuer beide Traeger, und
das Feld darum ist dasselbe gefasste Schild wie auf den Kacheln.

"UNDEFINED" IM CHAT -- DERSELBE FEHLER WIE HEUTE FRUEH, NUR ALS OBJEKT

Ueber Cigdems Namen stand woertlich "UNDEFINED". Die Rollennamen
standen als Objekt in FUENF Skripten (chat.js zweimal, dateien.js,
kalender.js zweimal), in keinem davon 'spicy'.

Heute Frueh war es dieselbe Sache als Menge (`new Set([...])`), und
seitdem sucht `pruef-css-klassen.mjs` danach. Ein Muster, das nur eine
Schreibweise kennt, findet auch nur eine -- die Pruefung sucht jetzt
auch nach Rollen-OBJEKTEN, mit Gegenprobe. Die Namen stehen an EINER
Stelle in bereiche.js.

DOGFATHER UND SPICY MEDIA SIND IM CHAT FUER JEDEN ERREICHBAR

DogFather kam bisher als Nebeneffekt ueber die Betreuungskette mit
hinein, Spicy Media gar nicht -- die Rolle steht in keiner Kette, sie
steht daneben. Beide werden jetzt ausdruecklich hinzugefuegt: Eine
Zustaendigkeit, die nur zufaellig aus einer anderen Regel herausfaellt,
faellt beim naechsten Umbau genauso zufaellig wieder heraus.
Gemessen aus der Sicht eines Creators -- wer bei ihm ankommt, kommt
ueberall an.

DIE PERSONENLISTE: SPICY MEDIA SIEHT ALLES AUSSER DOGFATHER

Der Abschnitt "Spicy Media" fehlte in der Liste komplett -- die Rolle
gibt es seit heute Frueh, die Personenseite kannte sie nicht. Und Spicy
Media selbst sah dort bisher nur das Anlegen-Formular; sie bekommt
jetzt die Liste, ohne DogFathers Zeile, und weiterhin ohne Codes,
Sperren, Loeschen und Protokoll. Ueberblick ist nicht Verwaltung.

ZWEI FOLGEFEHLER, BEIDE VON DEN PRUEFUNGEN GEFUNDEN

  * `next("route")` TUT DAS GEGENTEIL VON DEM, WONACH ES KLINGT. Mein
    erster Versuch war eine Ausnahme-Route VOR der Schranke, die mit
    `next("route")` weiterreicht -- das ueberspringt aber die restlichen
    Handler DIESER Route und geht zur naechsten Schicht, also genau zur
    Schranke. Spicy bekam weiter 404, die Oberflaeche verstand das als
    "nicht erlaubt" und sprang zur Startseite. Gemessen: Auf
    personen.html standen die Kategorien der STARTSEITE.
  * DAS PROTOKOLL WARF SIE VON DER SEITE. Es bleibt bei DogFather und
    antwortet ihr mit 404 -- und `hole()` versteht ein 404 unter
    `/verwaltung/` als "nicht erlaubt". Die Seite baute sich auf und
    sprang im naechsten Atemzug weg. Eine Abfrage, von der man weiss,
    dass sie 404 gibt, stellt man nicht.

UND EINE MEINER EIGENEN NEUEN PRUEFUNGEN WAR WERTLOS

"bei ihr fehlt der Abschnitt DogFather" -- gruen, mit dem Zusatz
"(keine Abschnitte)". Sie war gruen, weil die Liste bei ihr GAR NICHT
DA war. Genau der Haken, der nichts beweist. Er steht jetzt neben einem
Ergebnis, das etwas enthaelt: "Spicy Media | Manager | ...".

18 Pruefungen gelaufen, alle gruen. pruef-spicy von 49 auf 57.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-09-07 16:45:50 +02:00
co-authored by Claude Opus 5
parent 0ea8b27aca
commit dd1f561f3b
30 changed files with 514 additions and 238 deletions
+24 -1
View File
@@ -918,8 +918,31 @@
Spicy Media, und sortierte sie damit ans Ende. */
const ROLLENFOLGE = ['spicy', 'admin', 'manager', 'scout', 'creator'];
/* DIE NAMEN DER ROLLEN -- ebenfalls an EINER Stelle (07.09.2026).
Sie standen als Objekt in fuenf Skripten: chat.js zweimal,
dateien.js, kalender.js zweimal. In keinem davon 'spicy'. Im Chat
stand ueber Cigdems Namen deshalb woertlich "UNDEFINED" -- Filipe
hat es im Bildschirmfoto geschickt.
Es ist derselbe Fehler wie bei der Leitungsliste heute Frueh, nur
in anderer Form: damals ein Set, hier ein Objekt. Deshalb sucht
`pruef-css-klassen.mjs` jetzt auch nach Rollen-OBJEKTEN.
Zwei Schreibweisen, weil beide gebraucht werden: die kurze fuer
Namensschilder ("Scout"), die Gruppenform fuer Ueberschriften
ueber Listen ("Scouts"). */
const ROLLEN_NAME = {
spicy: 'Spicy Media', admin: 'DogFather', manager: 'Manager',
scout: 'Scout', creator: 'Creator',
};
const ROLLEN_GRUPPE = {
spicy: 'Spicy Media', admin: 'DogFather', manager: 'Manager',
scout: 'Scouts', creator: 'Creator',
};
window.Bereiche = {
ZEICHEN, GRUPPEN, zuSeite, zeichenBauen, merkzeichenBauen,
LEITUNG, ROLLENFOLGE,
LEITUNG, ROLLENFOLGE, ROLLEN_NAME, ROLLEN_GRUPPE,
};
})();
+4 -2
View File
@@ -37,7 +37,9 @@
return k;
};
const ROLLENKURZ = { admin: 'DogFather', manager: 'Manager', scout: 'Scout', creator: 'Creator' };
/* Aus der einen Quelle. Stand hier als eigenes Objekt und hatte
'spicy' nicht -- siehe bereiche.js. */
const ROLLENKURZ = window.Bereiche.ROLLEN_NAME;
let ich = null;
let raeume = [];
@@ -509,7 +511,7 @@
const punkt = el('span', 'chat-wahl__punkt');
punkt.setAttribute('aria-hidden', 'true');
titel.append(punkt, document.createTextNode(
{ admin: 'DogFather', manager: 'Manager', scout: 'Scouts', creator: 'Creator' }[rolle]));
window.Bereiche.ROLLEN_GRUPPE[rolle]));
gruppe.append(titel);
const liste = el('div', 'chat-wahl__liste');
+1 -1
View File
@@ -91,7 +91,7 @@
: 'Niemand ausgewählt – dann sieht sie nur DogFather.';
}
const ROLLENKURZ = { admin: 'DogFather', manager: 'Manager', scout: 'Scout', creator: 'Creator' };
const ROLLENKURZ = window.Bereiche.ROLLEN_NAME;
/* ---------- Hochladen -------------------------------------------------- */
+2 -4
View File
@@ -85,12 +85,10 @@
Fehlklick die ganze Auswahl und ist am Handy kaum zu bedienen. */
let alleLeute = [];
const ROLLENKURZ = { admin: 'DogFather', manager: 'Manager', scout: 'Scout', creator: 'Creator' };
const ROLLENKURZ = window.Bereiche.ROLLEN_NAME;
/* Mehrzahl für die Gruppenüberschriften. "Scout" über vier Namen
liest sich falsch -- über der Gruppe steht, was die Leute SIND. */
const ROLLENGRUPPE = {
admin: 'DogFather', manager: 'Manager', scout: 'Scouts', creator: 'Creator',
};
const ROLLENGRUPPE = window.Bereiche.ROLLEN_GRUPPE;
/* Auch diese Liste steht in bereiche.js -- sie hatte denselben
Mangel wie die Leitungsliste: kein 'spicy'. Eine unbekannte Rolle
landet bei indexOf() auf -1 und damit VOR allen anderen; Spicy
+57 -10
View File
@@ -24,8 +24,7 @@
Liste stand dann schlicht „spicy" statt „Spicy Media". Ein
Auffangwert, der halbwegs plausibel aussieht, ist der beste Weg,
eine Luecke jahrelang zu behalten. */
const ROLLENNAME = { spicy: 'Spicy Media', admin: 'DogFather',
manager: 'Manager', scout: 'Scout', creator: 'Creator' };
const ROLLENNAME = window.Bereiche.ROLLEN_NAME;
/* Reihenfolge und Erklaerung an EINER Stelle. Sie gilt fuer die
Rollenwahl im Formular und fuer alles, was sonst Rollen auflistet. */
@@ -547,7 +546,16 @@
Eine Rolle ohne Personen wird weggelassen. Eine leere Überschrift
ist kein Ordnungsmerkmal, sondern eine Lücke. */
/* SPICY MEDIA FEHLTE HIER (07.09.2026). Die Rolle gibt es seit heute
Frueh, die Personenliste kannte sie nicht -- ein Spicy-Zugang stand
damit in KEINEM Abschnitt und war in der Liste unsichtbar, obwohl
der Server ihn geliefert hat. Filipe hat es gemeldet: "bei personen
& zugangscode soll auch die kategorie spicy der rolle dogfather
angezeigt werden."
Die Reihenfolge folgt bereiche.js (Spicy Media ueber DogFather). */
const ROLLEN_ABSCHNITTE = [
{ rolle: 'spicy', name: 'Spicy Media', unter: 'Überblick & Zugänge anlegen' },
{ rolle: 'admin', name: 'DogFather', unter: 'Gesamtübersicht & Freigaben' },
{ rolle: 'manager', name: 'Manager', unter: 'Betreuung & Freigaben' },
{ rolle: 'scout', name: 'Scout', unter: 'Eigene Pipeline & Kontakte' },
@@ -558,7 +566,21 @@
const ziel = $('liste');
ziel.textContent = '';
/* SPICY MEDIA SIEHT ALLES AUSSER DOGFATHER (07.09.2026).
Filipe: "spicy soll genau das sehen koennen, aber nur nicht die
rolle dogfather."
Das ist dieselbe Grenze, die im ganzen Haus gilt: Die Rolle hat
den Ueberblick ueber Manager, Scouts und Creator -- DogFathers
eigene Sachen gehen sie nichts an. Hier faellt deshalb genau
dieser eine Abschnitt weg, nicht mehr und nicht weniger.
DAS IST KEINE SICHERUNG, sondern Aufraeumen: Der Server liefert
ihr die Liste ohnehin nur, wenn sie sie sehen darf. Eine
ausgeblendete Zeile hat noch nie etwas geschuetzt. */
const vorhanden = ROLLEN_ABSCHNITTE
.filter((a) => !(a.rolle === 'admin' && ich?.rolle === 'spicy'))
.map((a) => ({ ...a, drin: alle.filter((p) => p.rolle === a.rolle) }))
.filter((a) => a.drin.length);
@@ -641,7 +663,17 @@
ziel.textContent = '';
ziel.setAttribute('aria-busy', 'false');
listeZeigen();
await protokollLaden();
/* DAS PROTOKOLL BLEIBT BEI DOGFATHER. Fuer Spicy Media antwortet
es mit 404 -- und `hole()` versteht ein 404 unter
`/verwaltung/` als "nicht erlaubt" und schickt zur Startseite
zurueck. Genau so hat der Aufruf sie von der Personenseite
geworfen, kaum dass die Liste da war: Die Seite baute sich auf
und sprang im naechsten Atemzug weg. Gemessen -- auf
personen.html standen die Kategorien der STARTSEITE.
Eine Abfrage, von der man weiss, dass sie 404 gibt, stellt man
nicht. */
if (ich.rolle === 'admin') await protokollLaden();
} catch { /* umgeleitet */ }
}
@@ -764,14 +796,29 @@
'Hier legst du neue Leute an. Codes, Sperren und das Protokoll bleiben bei DogFather.';
zeile.hidden = false;
}
/* UND DIE LISTE HÖRT AUF ZU LADEN. Sie steht mit
aria-busy="true" in der Seite, und `laden()` -- das es wieder
abschaltet -- wird für sie mit Absicht nie aufgerufen. Damit
meldete die Seite einem Screenreader dauerhaft "wird geladen",
und es kam nie etwas. Ein Ladehinweis, der nie endet, ist
schlimmer als keiner. */
/* SPICY MEDIA BEKOMMT DIE LISTE -- ZUM LESEN (07.09.2026).
Filipe: "spicy soll genau das sehen koennen, aber nur nicht die
rolle dogfather." Bis hierher sah die Rolle auf dieser Seite
nur das Anlegen-Formular; die Liste wurde bewusst nicht
geladen, weil die Verwaltungsschnittstelle zu war. Sie ist es
weiterhin -- aber die LISTE ist seit heute offen, ohne
DogFathers Zeile (siehe workspace-personen.js).
Der Manager bekommt sie NICHT: Fuer ihn gilt unveraendert
"anlegen, nicht verwalten". Deshalb steht hier die Rolle und
nicht die Leitung. */
const liste = $('liste');
if (liste) {
if (ich.rolle === 'spicy') {
document.body.dataset.nurLesen = 'ja';
laden();
} else if (liste) {
/* Fuer alle anderen hoert die Liste auf zu laden. Sie steht mit
aria-busy="true" in der Seite, und `laden()` wird fuer sie
nicht aufgerufen -- ohne diese Zeilen meldete die Seite einem
Vorleseprogramm dauerhaft "wird geladen", und es kam nie
etwas. Ein Ladehinweis, der nie endet, ist schlimmer als
keiner. */
liste.setAttribute('aria-busy', 'false');
liste.textContent = '';
}