Das Farbhaus von Team Dogi lag oeffentlich im Netz
Ausgeloest von pruef-modi-wortleck, die seit Tagen rot war: "24
Fundstellen -- der verborgene Zugang waere damit auffindbar." Die
erste Frage war, ob sie recht hat. Gemessen: ja, und schlimmer als
gedacht.
WER DIESE DATEIEN BEKOMMT: Nicht nur Kollegen. `curl` ohne jeden Keks
auf workspace.dogfather-universe.com liefert die Skripte und
Stilvorlagen des Arbeitsplatzes mit HTTP 200 -- fuer jeden im Netz
lesbar.
DARUNTER crew-haus.css, 27 806 Byte, das ganze Farbhaus von Team Dogi
samt seiner Kommentare. In deren Kopf stand seit dem 10.09. woertlich
"Diese Datei wird NUR auf crew.dogfather-universe.com ausgeliefert."
Das war eine Behauptung, keine Tatsache: Die Weiche biegt `haus.css`
auf diesen Namen um, wer den Namen direkt nannte, ging an ihr vorbei.
Ein Kommentar, der eine Absicht beschreibt, erfuellt sie nicht.
Zwei Stellen im Haus haben sich damit widersprochen -- die Datei sagte
"nur auf crew.", pruef-crew-adresse verlangte ausdruecklich das
Gegenteil ("sie ist kein Geheimnis"). Durchgesetzt war die offene
Fassung. Filipe hat am 21.09. entschieden: zusperren. Die alte
Begruendung dagegen war die Sorge, eine Sperre koenne die Pruefung
blind machen -- die ist jetzt beantwortet statt vermieden: Jeder
Eintrag der Tafel wird in BEIDE Richtungen gemessen, und dass die
Umbiegung von `haus.css` auf crew. weiterhin greift, ebenfalls.
DIE ADRESSE WAR DAS EIGENTLICHE GEHEIMNIS, nicht das Wort. Die
Rollennamen stehen auf der Zugangswand von Team Dogi ohnehin offen --
so gewollt. WO sie liegt, stand dagegen im Klartext in gate.css,
gate.js und crew-haus.css, alle drei oeffentlich abrufbar. Jetzt steht
sie in keiner ausgelieferten Datei mehr.
DIE PRUEFUNG SELBST HATTE DREI MAENGEL:
1. Sie kannte die Mehrzahl nicht. `\bmodi\b` fand "ein Modi", nicht
"die Modis" -- 23 weitere Stellen, darunter der Satz "Fuer die
rechte Hand und die Modis gibt es dort den stillen Zugang". Also
genau die Auskunft, die sie verhindern soll, in der Form, die sie
nicht sah.
2. Ihre Ausnahmeliste war abgeschrieben. Sie nannte eine Datei; die
zweite, die der Server auf crew. begrenzt, haette sie nie
erfahren. Ausgenommen ist jetzt genau das, was der Server auch
durchsetzt (GEHOERT_ZU_ADRESSE) -- kein Muster, sondern die
Durchsetzung selbst.
3. Sie mahnte 45 Kommentare an. Filipes Entscheidung: in Kommentaren
ja, in Code und sichtbaren Texten nein. Rot, das immer da ist,
wird ueberlesen -- und dann faengt sie auch den echten Fall nicht.
Dafuer neu: helfer-ohne-kommentar.mjs, ein Zerleger, der Kommentare
zeichengenau durch Leerzeichen ersetzt, ohne Zeichenketten,
Vorlagen oder Suchmuster zu beschaedigen. KEIN Suchausdruck -- genau
daran ist am 20.09. die Portumstellung gescheitert, mit gueltigem
JavaScript ohne das Feld `port`. Dreizehn Proben in beide Richtungen
beweisen, dass er weder zu viel noch zu wenig wegnimmt; ein Zerleger,
der zu viel nimmt, macht die ganze Pruefung STILL gruen.
Von 45 blieben damit drei echte, alle behoben:
- daten.modis -> daten.leute (Feldname in der Auskunft, also Code)
- zwei Saetze, die Menschen lesen, auf "die Moderation" umgestellt --
fuer jemanden, der neu im Treff ist, sogar klarer
Nebenbei, beim selben Durchgang gefunden und geschlossen:
- teamlage.js fiel auf einen Rollennamen zurueck. Nachgemessen: Die
Stilvorlage kennt zu dieser Karte gar keine solche Regel -- der
Rueckfall hat nie etwas bewirkt und nur das Wort ausgeliefert.
- werdegang.js fuehrte die Saetze ueber den Rollengruppen selbst,
mit den Rollennamen als Schluessel. Der Kommentar daneben
behauptete sogar, sie seien "abgeleitet, nicht abgeschrieben".
Sie kommen jetzt vom Server, und pruef-werdegang misst, dass
jede Gruppe ihren eigenen behaelt.
pruef-modi-wortleck 8/0 (war 5, davon 1 rot)
pruef-crew-adresse 144/0 (war 135)
pruef-werdegang 98 statt 95 Pruefungen, dieselben 3 alten Fehler
pruef-team-ampel 32/0, pruef-team-stufen 28/0, pruef-hilfe 84/0
Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
@@ -306,9 +306,16 @@
|
||||
/* =====================================================================
|
||||
DIE ALTERSFRAGE ERSCHEINT MIT DER COMMUNITY-KACHEL (15.09.2026)
|
||||
|
||||
Sie steht in crew-index.html und nirgends sonst -- auf der
|
||||
Sie steht auf der zweiten Zugangswand und nirgends sonst -- auf der
|
||||
Agenturwand gibt es sie gar nicht. Deshalb hier ueberall mit „?.“:
|
||||
Diese Datei laeuft auf beiden Waenden.
|
||||
|
||||
UND DESHALB STEHT HIER AUCH KEIN DATEINAME (21.09.2026): "Diese
|
||||
Datei laeuft auf beiden Waenden" heisst, dass sie von beiden
|
||||
Adressen ausgeliefert wird -- ohne Anmeldung, fuer jeden im Netz
|
||||
lesbar. Ein Kommentar darin ist keine interne Notiz, sondern
|
||||
Veroeffentlichung. Wo welche Wand zuhause ist, steht in
|
||||
crew-adresse.js; dort wird es auch durchgesetzt.
|
||||
===================================================================== */
|
||||
(() => {
|
||||
const alterFrage = document.getElementById('alterfrage');
|
||||
|
||||
@@ -110,8 +110,15 @@
|
||||
$('seiten-unter').textContent =
|
||||
'Was die Community vertraulich gemeldet hat. Du siehst den Namen; sonst niemand.';
|
||||
$('vertrauen-text').textContent =
|
||||
'Diese Meldungen sehen nur du und die rechte Hand. Weder Modis noch '
|
||||
+ 'andere Mitglieder haben Zugriff — auch nicht auf die Namen.';
|
||||
/* „die Moderation“ statt des Rollennamens (21.09.2026).
|
||||
Dieser Satz steht in einer Datei, die jeder im Netz ohne
|
||||
Anmeldung herunterladen kann. Die Aussage bleibt dieselbe
|
||||
-- und fuer jemanden, der neu im Treff ist, sogar klarer:
|
||||
„die Moderation“ erklaert sich selbst, ein Rollenname
|
||||
muss erst gelernt werden. */
|
||||
'Diese Meldungen sehen nur du und die rechte Hand. Weder die '
|
||||
+ 'Moderation noch andere Mitglieder haben Zugriff — auch nicht '
|
||||
+ 'auf die Namen.';
|
||||
}
|
||||
|
||||
const faelle = d.faelle || [];
|
||||
|
||||
@@ -94,8 +94,26 @@
|
||||
vergisst man eine.
|
||||
|
||||
`rolle` kam bis heute gar nicht erst mit -- die Abfrage im
|
||||
Server las sie nicht einmal. */
|
||||
k.dataset.rolle = m.rolle || 'modi';
|
||||
Server las sie nicht einmal.
|
||||
|
||||
KEIN RUECKFALL AUF EINEN ROLLENNAMEN (21.09.2026). Hier stand
|
||||
`m.rolle || 'modi'`. Der Rueckfall war doppelt daneben:
|
||||
|
||||
(1) Er stand in einer Datei, die JEDER herunterlaedt, der den
|
||||
Arbeitsplatz oeffnet -- auch jeder Manager, Scout und
|
||||
Creator auf der Agenturadresse, und zwar OHNE Anmeldung.
|
||||
Rollennamen der Community gehoeren dort nicht hin; darueber
|
||||
wacht eine eigene Pruefung im Serverordner.
|
||||
|
||||
(2) Er hat nie etwas bewirkt. Nachgemessen: Die Stilvorlage
|
||||
kennt zu dieser Karte nur `[data-rolle="hand"]`. Fuer jeden
|
||||
anderen Wert sieht sie gleich aus -- ob dort ein Rollenname
|
||||
steht oder nichts.
|
||||
|
||||
Der Server liefert `rolle` seit dem 20.09. immer mit (die
|
||||
Abfrage holt sie, und sie ist auf zwei Werte begrenzt). Fehlt
|
||||
sie doch einmal, bleibt das Merkmal weg statt falsch. */
|
||||
if (m.rolle) k.dataset.rolle = m.rolle;
|
||||
|
||||
const kopf = el('div', 'tperson__kopf');
|
||||
/* DAS BILD BEKOMMT SEINE KLASSE -- UND DAS WAR EIN ECHTER FEHLER.
|
||||
@@ -546,7 +564,7 @@
|
||||
ziel.textContent = '';
|
||||
ziel.setAttribute('aria-busy', 'false');
|
||||
|
||||
const leute = daten.modis || [];
|
||||
const leute = daten.leute || [];
|
||||
const offenGesamt = leute.reduce((s, m) =>
|
||||
s + Object.values(m.bereiche).reduce((x, b) => x + b.offen, 0), 0);
|
||||
/* Eine leere Seite ohne Erklaerung sieht aus wie ein Fehler --
|
||||
|
||||
@@ -360,12 +360,26 @@
|
||||
meisten Bewegung nach oben stellt, ist eine Rangliste mit einem
|
||||
anderen Namen. Der Server sortiert nach Namen, und dabei bleibt es.
|
||||
===================================================================== */
|
||||
/* Was über einer Gruppe steht. Aus der Rolle abgeleitet, nicht
|
||||
abgeschrieben -- der Rollenname kommt vom Server. */
|
||||
const GRUPPENSATZ = {
|
||||
hand: 'Koordiniert den Alltag und schaut mit dir zusammen auf das Team.',
|
||||
modi: 'Die Leute, die im Chat und im Live stehen.',
|
||||
};
|
||||
/* DER SATZ ÜBER EINER GRUPPE KOMMT VOM SERVER (21.09.2026).
|
||||
|
||||
Hier stand er als Liste im Quelltext -- mit den Rollennamen als
|
||||
Schlüssel. Der Kommentar daneben behauptete sogar, er sei
|
||||
"abgeleitet, nicht abgeschrieben"; das stimmte für den NAMEN
|
||||
daneben, nicht für diese Liste.
|
||||
|
||||
ZWEI GRÜNDE, WARUM ER JETZT VOM SERVER KOMMT:
|
||||
|
||||
(1) Diese Datei lädt JEDER herunter, der den Arbeitsplatz öffnet
|
||||
-- auch jeder Manager, Scout und Creator auf
|
||||
der Agenturadresse, und zwar OHNE Anmeldung. Rollennamen der
|
||||
Community gehören dort nicht hin; darüber wacht eine eigene
|
||||
Prüfung im Serverordner. Dieselbe Entscheidung wie bei
|
||||
ROLLENTEXT in start.js.
|
||||
|
||||
(2) Es wäre die zweite Liste gewesen. Kommt eine Rolle dazu,
|
||||
schickt der Server ihren Namen von selbst mit -- ihr Satz
|
||||
hätte hier nachgetragen werden müssen, und genau so entstehen
|
||||
Gruppen mit Überschrift und ohne Erklärung. */
|
||||
|
||||
function listeBauen(d) {
|
||||
const wurzel = el('div', 'w-liste');
|
||||
@@ -394,8 +408,8 @@
|
||||
const kopf = el('div', 'w-gruppe');
|
||||
kopf.dataset.rolle = p.rolle;
|
||||
kopf.append(el('h3', 'w-gruppe__name', p.rolle_name));
|
||||
if (GRUPPENSATZ[p.rolle]) {
|
||||
kopf.append(el('p', 'w-gruppe__satz', GRUPPENSATZ[p.rolle]));
|
||||
if (p.rolle_satz) {
|
||||
kopf.append(el('p', 'w-gruppe__satz', p.rolle_satz));
|
||||
}
|
||||
wurzel.append(kopf);
|
||||
gitter = el('div', 'w-liste__gitter');
|
||||
|
||||
Reference in New Issue
Block a user