Keine Mischung mehr -- Team Dogi nur noch bei Team Dogi

Filipe: "ich will dass du im workspace alles von team dogi weg nimmst.
nur was ich im kalender eintrage soll ich im workspace sehen und im
team dogi. aber die kacheln von team dogi soll ich nur bei team dogi
sehen und die von workspace nur bei workspace bitte. ich will keine
mischung mehr von kacheln. wie gesagt nur die der kalender soll
verbunden sein von dogfather sonst nichts."

GEMESSEN, WIE SCHLIMM ES WAR: Auf der Agenturadresse bekam DogFather
0 eigene Kacheln ueber die Schnittstelle und 17 fremde -- Dein Team,
Ideen-Board, Rueckmeldung, Wer sieht was, Entwicklung, Werdegang,
Talente und den ganzen Treff samt Moderation. Zwei Betriebe auf einer
Seite.

Das Bittere daran: Dieselbe Datei hatte den Fehler fuer die ANDERE
Richtung am 10.09. schon erkannt und behoben ("Fuenfundzwanzig
Kacheln, von denen zwei Drittel Creator, Scouts und Agentur betreffen,
waeren dort Fenster in ein Haus, in dem er gerade nicht ist"). Nur
andersherum stand es weiter so.

DIE AUSNAHME BRAUCHTE NICHTS: Nachgemessen filtern die Terminabfragen
in workspace-kalender.js NICHT nach Haus. Was er eintraegt, steht
ohnehin auf beiden Adressen. Die Verbindung, die er will, existierte
schon -- sie musste nur nicht zerschnitten werden.

STATT SIEBZEHN BRETTERN STEHT DORT EINE TUER. Ohne sie waere von der
Agenturadresse aus kein Weg mehr zu Team Dogi sichtbar; er muesste die
Adresse tippen. Das ist die Sorte Sackgasse, die dieses Haus nicht
baut. Eine Tuer ist keine Mischung: Sie zeigt kein Brett, sie geht
hinueber. Und sie kommt vom Server, nur fuer `admin` -- in keiner
ausgelieferten Datei steht sie.

MEIN ERSTER ENTWURF GAB SIE AUCH DER RECHTEN HAND UND DER MODERATION.
pruef-modi-checkliste hat es sofort gemeldet: "Modi bekommt 1
Zusatzkachel(n), erwartet keine". Wer NUR zu Team Dogi gehoert, hat
auf der Agenturadresse nichts zu suchen -- die Tuer waere dort seine
einzige Kachel gewesen, also eine Seite, die aus nichts als einem
Ausgang besteht.

VIER PRUEFUNGEN VERLANGTEN DANACH DIE ALTE WELT. Keine davon war ein
Mangel; alle vier haben am falschen Ort gesucht:

  pruef-haus-trennung  verlangte woertlich, dass die Team-Kachel AUCH
     auf der Agenturadresse steht. Sie prueft jetzt die Trennung in
     beide Richtungen -- kein Brett von Team Dogi drueben, aber die
     eine Tuer -- und leitet die Namen aus der Antwort von crew. ab,
     statt sie abzuschreiben.
  pruef-start-ansicht  zaehlte acht Gruppennamen in fester
     Reihenfolge. Gemeint war eine Ordnung ("die Community steht ganz
     unten, denn dort stehen Namen und Saetze von Zuschauern"), und
     die wird jetzt als Regel geprueft -- bedingt, mit drittem Ausgang
     auf Adressen, wo es diese Gruppen gar nicht gibt.
  pruef-treff und pruef-rueckmeldung fragten ueber die Agenturadresse
     nach Brettern, die dort nicht mehr stehen. Sie fragen jetzt dort,
     wo diese Bretter zuhause sind.

EINE HALBE STUNDE WAERE DABEI FAST VERLOREN GEGANGEN: `fetch` kann den
Host-Kopf nicht setzen -- er ist ein verbotener Kopfzeilenname und
wird STILLSCHWEIGEND verworfen. Die Anmeldung ueber die Crew-Wand
genuegt nicht; jede einzelne Abfrage braucht die Adresse. Deshalb geht
die Messung jetzt ueber http.request, so wie es `anmelden()` in
derselben Datei laengst tut.

pruef-haus-trennung 74/0 · pruef-modi-checkliste 75/0 · pruef-treff
72/0 · pruef-rueckmeldung 30/0 · pruef-start-ansicht 153/0 ·
pruef-haus-seiten 34/0 · pruef-entwicklung 46/0 · pruef-befinden
113/0 · pruef-rechte-umstellen 46/0

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-09-21 14:00:14 +02:00
co-authored by Claude Opus 5
parent a39d02da5a
commit 8a214ecd0e
42 changed files with 769 additions and 572 deletions
+89 -58
View File
@@ -34,7 +34,7 @@ import { darfSeite, OHNE_ANMELDUNG, seitenFuer } from "./rechte.js";
import { treffTabellen, treffSperreLesen, MINDESTALTER } from "./treff-tabellen.js";
import { hilfeTabellen } from "./hilfe-tabellen.js";
import { sitzungPasstZurAdresse, istOhneModiAdresse, istCrewAdresse, istPruefAdresse, AUSSEN_ROLLEN,
TEAM_DOGI_ROLLEN } from "./crew-adresse.js";
TEAM_DOGI_ROLLEN, CREW_ADRESSE } from "./crew-adresse.js";
/* Weitergereicht, damit die Fachmodule sie wie alles andere aus
workspace.js beziehen und nicht wissen muessen, wo sie wohnt. */
export { TEAM_DOGI_ROLLEN };
@@ -1439,6 +1439,15 @@ export function darfTelefonieren(person) {
function nurOffeneKacheln(liste, person) {
if (!Array.isArray(liste) || !person) return liste;
return liste.filter((k) => {
/* EINE KACHEL, DIE HINAUSFUEHRT, HAT HIER KEINE SEITE (21.09.2026).
Unten wird aus dem Ziel ein Pfad gebaut ("/workspace/" + ziel)
und die Rechtetafel gefragt. Bei einer vollstaendigen Adresse --
der Tuer zu Team Dogi -- kaeme dabei
"/workspace/https://crew..." heraus, das steht in keiner Tafel,
und die Kachel waere lautlos verschwunden. Lautlos ist das
Schlimme daran: Man sucht den Fehler dann bei der Rolle. */
if (k?.aussen) return true;
const ziel = String(k?.ziel || "");
if (!ziel) return true;
const pfad = "/workspace/" + ziel.split("?")[0];
@@ -2005,71 +2014,93 @@ const TEAM_GRUPPE = {
gruppeNach: "Team & System",
};
const ZUSATZ_BEREICHE = {
admin: [
{ ...TEAM_GRUPPE, ...EINGANG_KACHEL, gruppe: TEAM_GRUPPE.gruppe,
gruppeUnter: TEAM_GRUPPE.gruppeUnter },
{
...TEAM_GRUPPE,
name: "Ideen-Board", unter: "Gesammelt und nach Dringlichkeit sortiert",
zeichen: "content", ton: 23, ziel: "bereich.html?b=ideen", szene: "portal",
},
/* DIESELBE Kachel wie im Team, nur in seiner Gruppe. Name, Ton und
Ziel sind Wort fuer Wort dieselben -- wer sie hier anders nennt,
hat zwei Namen fuer eine Sache, und das Team liest den einen,
DogFather den anderen. */
{
...TEAM_GRUPPE,
name: "Rückmeldung", unter: "Was gut läuft, was hakt – in beide Richtungen",
zeichen: "reports", ton: 25, ziel: "bereich.html?b=rueckmeldung", szene: "lounge",
},
/* Eine eigene Gruppe, direkt hinter Team Dogi: Was ueber Menschen
aufgeschrieben wird, steht nicht zwischen den taeglichen
Werkzeugen. */
/* WER SIEHT WAS (11.09.2026).
/* =====================================================================
KEINE MISCHUNG MEHR (21.09.2026)
Filipe: "egal welche Rolle oder Person hinzugefuegt wird, soll
immer nur das sehen, was ich erlaube."
Filipe: "ich will dass du im workspace alles von team dogi weg
nimmst. nur was ich im kalender eintrage soll ich im workspace sehen
und im team dogi. aber die kacheln von team dogi soll ich nur bei
team dogi sehen und die von workspace nur bei workspace bitte. ich
will keine mischung mehr von kacheln. wie gesagt nur die der kalender
soll verbunden sein von dogfather sonst nichts."
Dazu gehoert, dass er es nachsehen kann. Die Seite rechnet die
Uebersicht aus derselben Tafel, aus der die Schranke ihre
Entscheidung holt (rechte.js) -- eine von Hand gepflegte
Uebersicht waere eine zweite Wahrheit, und ausgerechnet die, der
man glaubt.
---------------------------------------------------------------------
WAS HIER BIS HEUTE STAND
IN "Team & System" UND NICHT BEI DEN PERSONEN: Es geht nicht um
Menschen, sondern um das Haus. */
{
...TEAM_GRUPPE, ...RECHTE_KACHEL,
gruppe: TEAM_GRUPPE.gruppe, gruppeUnter: TEAM_GRUPPE.gruppeUnter,
},
{ ...ENTWICKLUNG_KACHEL, gruppeNach: TEAM_GRUPPE.gruppe },
{ ...WERDEGANG_KACHEL, gruppeNach: TEAM_GRUPPE.gruppe },
{ ...TALENTE_KACHEL, gruppeNach: TEAM_GRUPPE.gruppe },
/* DER TREFF -- GANZ UNTEN, UND ZWAR ABSICHTLICH.
Eine Liste ZUSATZ_BEREICHE mit siebzehn Kacheln, die auf der
AGENTURADRESSE an DogFathers Seite gehaengt wurden: Dein Team,
Ideen-Board, Rueckmeldung, Wer sieht was, Entwicklung, Werdegang,
Talente -- und der ganze Treff samt Moderation. Nachgemessen am
21.09.2026 bekam er dort 0 eigene Kacheln und 17 fremde; auf der
Team-Adresse 30, in sechs Gruppen, aus beiden Haeusern.
Filipe zu den beiden Gruppen darueber: "das sind private
informationen von meiner community." Dasselbe gilt hier, nur
noch deutlicher: Im Treff stehen Namen und Saetze von Leuten,
die nichts mit der Agentur zu tun haben.
Der Gedanke dahinter war gut gemeint: Er soll ueberall an alles
herankommen. Die Wirkung war eine Seite, auf der zwei Betriebe
uebereinanderliegen -- und zwar genau der Zustand, den dieselbe
Datei am 10.09. fuer die andere Richtung schon als Fehler erkannt
hatte ("Fuenfundzwanzig Kacheln, von denen zwei Drittel Creator,
Scouts und Agentur betreffen, waeren dort Fenster in ein Haus, in
dem er gerade nicht ist").
Ohne `gruppeNach` haengt eine Gruppe hinten an -- genau richtig.
Wer sich den Bildschirm teilt oder jemandem ueber die Schulter
schauen laesst, hat sie dann nicht als Erstes im Blick. */
...TREFF_BEREICHE,
TREFF_MODERATION_KACHEL,
],
};
---------------------------------------------------------------------
DIE EINE AUSNAHME IST DER KALENDER -- UND SIE BRAUCHT NICHTS
/* NICHT AUF DER TEAM-ADRESSE (10.09.2026). Dort liefert bereicheFuer()
ohnehin schon die Kacheln des Teams -- Eingang, Ideen-Board und
Rueckmeldung stuenden sonst zweimal auf der Seite, einmal in
"Taeglich" und einmal in "Team Dogi". Zwei gleiche Kacheln sind
schlimmer als eine fehlende: Man klickt die falsche und sucht den
Unterschied. */
Nachgemessen: Die Terminabfragen in workspace-kalender.js filtern
NICHT nach Haus. Was er eintraegt, steht ohnehin auf beiden
Adressen. Die Verbindung, die er will, existiert also bereits; sie
musste nicht gebaut, sondern nur nicht zerschnitten werden.
---------------------------------------------------------------------
EINE TUER IST KEINE MISCHUNG
Ohne Ersatz waere von der Agenturadresse aus kein Weg mehr zu Team
Dogi sichtbar -- er muesste die Adresse tippen. Das ist die Sorte
Sackgasse, die dieses Haus nicht baut. Statt siebzehn Brettern steht
dort jetzt EINE Kachel, die hinuebergeht.
SIE VERRAET NICHTS: Sie kommt vom Server und nur fuer die, die zu
Team Dogi gehoeren. In keiner ausgelieferten Datei steht sie, und
ein Manager bekommt sie nie zu sehen -- genau wie bei den Kacheln,
die sie ersetzt.
===================================================================== */
export function zusatzBereicheFuer(person) {
/* Auf der Team-Adresse liefert bereicheFuer() ohnehin die Kacheln des
Teams. Eine Tuer zu dem Haus, in dem man schon steht, waere ein
Knopf, der nichts tut. */
if (person?.haus === "crew") return [];
return ZUSATZ_BEREICHE[person?.rolle] || [];
/* NUR DOGFATHER UND VANVAN -- also `admin`.
Der erste Entwurf gab die Tuer auch an TEAM_DOGI_ROLLEN (die
rechte Hand und die Moderation). Das war falsch, und pruef-modi
-checkliste hat es sofort gemeldet: "Modi bekommt 1
Zusatzkachel(n), erwartet keine".
WARUM ES FALSCH IST: Wer NUR zu Team Dogi gehoert, hat auf der
Agenturadresse gar nichts zu suchen -- die Tuer waere dort seine
einzige Kachel, also eine Seite, die aus nichts als einem Ausgang
besteht. Und sie wuerde eine Adresse nennen, die auf dieser Seite
niemand nennen soll.
`admin` ist der einzige Fall, der wirklich zwei Haeuser hat. */
if (person?.rolle !== "admin") return [];
return [{
gruppe: "Team Dogi",
gruppeUnter: "Das andere Haus \u2014 eigene Seite, eigene Daten",
name: "Zu Team Dogi",
unter: "Der Treff, das Team und die Moderation \u2014 auf ihrer eigenen Adresse",
zeichen: "hinaus",
ton: 40,
szene: "portal",
ziel: CREW_ADRESSE + "/workspace/start.html",
/* AUSSEN heisst: Diese Kachel fuehrt aus dem Haus hinaus. Ohne das
Merkmal wuerde nurOffeneKacheln() sie wegfiltern -- es baut aus
dem Ziel einen Pfad ("/workspace/" + ziel) und fragt die
Rechtetafel. Bei einer vollstaendigen Adresse kommt dabei
Unsinn heraus, und die Kachel verschwaende lautlos. */
aussen: true,
}];
}
/* scrypt-Parameter. N=2^15 braucht auf diesem Server rund 150 ms — spürbar