Die zwei Häuser sind getrennt -- und die Tür geht in beide Richtungen

Filipe: "ich will dass du zuerst die komplette site vn der workspace
seite trennst. da soll nichts verknüpft sein. wenn ich bei der einen
was mache soll nichts bei der anderen passieren. … es soll nur für
dogfather eine kachel geben wo er mit einem einfachen klick von der
einen auf die anderen seite kommt aber sonst garnichts."

Das kehrt die Entscheidung vom 10.09.2026 um ("getrennt wird das
AUSSEHEN, nicht der Bestand"). Wer den alten Kommentar liest, liest
einen überholten Stand -- das steht jetzt an jeder betroffenen Stelle.

WAS GEMESSEN WAR, BEVOR ETWAS GEBAUT WURDE
  * Nur drei Module trennten nach Haus (Aufgaben, Bereiche, Dateien).
    Chat, Kalender, Wissen, Material, Personenlisten und der Rest nicht.
  * Die Trennung war EINSEITIG: nurHaus() griff nur auf crew.
  * siehtModis() hebelte sie für DogFather auf der Agenturseite aus --
    in seiner Gesprächsliste standen dort beide Häuser nebeneinander.
  * Keine haus-Spalte in der Datenbank.
  * Der Bestand kreuzte aber kaum: 0 von 86 Terminen gemischt, 0 von 7
    Zweier-/Gruppengesprächen, genau EIN Kanal.

WAS JETZT DASTEHT
  * Drei Rollenmengen in crew-adresse.js (crew / agentur / beide) und
    hausVonRolle(); eine unbekannte Rolle bekommt null, kein Haus.
  * Spalte `haus` an acht Wurzeltabellen, nachgetragen aus Belegen:
    238 Zeilen eindeutig, die Wissensablage geschlossen der Agentur,
    vier Restzeilen namentlich, der gemischte Kanal aufgelöst
    (die zwei Scouts gehen heraus, die 7 Nachrichten sind alle vom
    Team). Offen bleiben: null.
  * nurHaus, hausBedingung und darfAnlegen gelten in BEIDE Richtungen.
  * Der siehtModis-Durchgriff ist weg -- aber in DREI Fällen, nicht
    zwei: Prüfadressen bekommen gar kein Haus und verhalten sich exakt
    wie vorher. Die erste Fassung hatte das übersehen und 19 Prüfungen
    umgeworfen, an denen nichts kaputt war.
  * Kalender: getrennt, aber "belegt" bleibt (Filipes Entscheidung).
    Die Blöcke tragen NUR Beginn und Dauer -- kein Titel, keine Person.
    Gebaut als Gegenstück zur Liste (meine Termine MINUS die sichtbaren),
    damit beide nicht auseinanderlaufen können.
  * Die Wissens-Kachel ist auf der Team-Adresse weg UND die Route
    antwortet dort mit 404 -- eine fehlende Kachel ist nur eine Bitte.
  * Die Wechsel-Kachel für DogFather geht jetzt in beide Richtungen.

GEPRÜFT: pruef-haus-trennung 97 statt 81, 0 Fehler (vorher 7, alle
haben die alte Regel behauptet). Die neuen Abschnitte sind DORT
eingezogen statt in eine zweite Datei -- `pruef-haustrennung.mjs` hätte
sich von `pruef-haus-trennung.mjs` um einen Bindestrich unterschieden.
Dazu grün: haus-seiten, crew-adresse, chat, chat-kanaele,
kanal-besetzung, kalender, serien, treffchat, wissen-neu,
modi-checkliste, modi-katalog, rechtetafel, personen-liste, sicht,
verborgen, fremde-sicht, alle-wege.

NICHT VON MIR: pruef-treff (3) und pruef-kachel-universum (2) waren
schon vorher rot -- beim Treff auf dem Stand 40b48e89 nachgemessen,
bei den Farben steht dieselbe Zahl im Kopf der Prüfung selbst.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-09-24 20:40:20 +02:00
co-authored by Claude Opus 5
parent 40b48e89f1
commit 9863645952
55 changed files with 1718 additions and 697 deletions
+99 -1
View File
@@ -78,6 +78,20 @@ import { fileURLToPath } from "node:url";
export const CREW_ADRESSE = "https://crew.dogfather-universe.com";
/** Und die Adresse des Agenturhauses.
*
* Sie stand bisher nur als Text in `anmeldeAdresseFuer` ganz unten.
* Seit die Wechselkachel in BEIDE Richtungen geht (24.09.2026), wird
* sie an zwei Stellen gebraucht -- und zwei gleiche Zeichenketten sind
* eine Umzugsadresse, die beim naechsten Umzug halb mitwandert. Das
* ist in diesem Haus schon passiert: Der Workspace ist am 06.09.2026
* umgezogen, und die Rueckmeldung an den Server lief danach ins Leere.
*
* KEINE ABLEITUNG AUS `OHNE_MODI_HOSTS`: Dort stehen drei Adressen
* (mit und ohne www, plus die Hauptseite). Welche davon die Tuer ist,
* waere geraten. */
export const WORKSPACE_ADRESSE = "https://workspace.dogfather-universe.com";
/* WELCHE SYMBOLGROESSEN HAT DIE CREW-APP EIGENS?
Abgeleitet aus dem Ordner, nicht aufgezaehlt: Fuer jede Datei
crew-<X>.png, zu der es auch workspace-<X>.png gibt, kann umgebogen
@@ -157,6 +171,90 @@ export const AUSSEN_ROLLEN = new Set(["gast"]);
weniger prueft, sondern mehr: Was vorher die Adresse erledigt hat,
muss jetzt jede einzelne Regel halten. */
/* =====================================================================
DIE ZWEI HAEUSER -- WELCHE ROLLE WO WOHNT (24.09.2026)
=====================================================================
Filipe: „ich will dass du zuerst die komplette site vn der workspace
seite trennst. da soll nichts verknuepft sein. wenn ich bei der einen
was mache soll nichts bei der anderen passieren."
DAS KEHRT DIE ENTSCHEIDUNG VOM 10.09.2026 UM. Damals hiess es
ausdruecklich: „es soll trotzdem so bleiben dass ich die daten hier
und da sehe", und weiter unten in dieser Datei steht bis heute
„Getrennt wird also das AUSSEHEN, nicht der Bestand." Das gilt nicht
mehr. Wer den alten Satz liest, liest einen ueberholten Stand --
deshalb steht die Umkehr hier oben und nicht als Fussnote.
WARUM DIE MENGEN HIER STEHEN: Diese Datei hat keine eigenen Importe
und ist damit der einzige Ort, an dem eine Rollenmenge stehen kann,
ohne einen Kreis zu bauen. TEAM_DOGI_ROLLEN und AUSSEN_ROLLEN wohnen
aus demselben Grund hier.
DREI MENGEN UND NICHT ZWEI. „Alles ausser Team Dogi" waere die
naheliegende Formulierung fuer die Agentur -- und sie waere falsch,
denn DogFather gehoert in BEIDE Haeuser. Eine Bedingung durch
Ausschluss haette ihn stillschweigend der Agentur zugeschlagen. Genau
diese Bauart ist in dieser Datei schon dreimal schiefgegangen (siehe
Falle 2 im Kopf). Deshalb wird jede Rolle einzeln genannt.
UND EINE ROLLE MUSS IRGENDWO STEHEN: `hausVonRolle` gibt fuer eine
unbekannte Rolle `null` zurueck, nicht „beide" und nicht „agentur".
Ein `null` faellt auf -- `pruef-haustrennung` wird rot, sobald eine
Rolle in ROLLEN steht, die hier fehlt. Eine stille Voreinstellung
waere eine offene Tuer, die niemand bemerkt. */
/** Die Rollen, die ausschliesslich im Agenturhaus leben. */
export const AGENTUR_ROLLEN = new Set(["spicy", "manager", "scout", "creator"]);
/** Die Rollen, die in BEIDEN Haeusern arbeiten. Genau eine: DogFather.
* Als Menge und nicht als `rolle === "admin"`, damit die drei Mengen
* zusammen gegen ROLLEN geprueft werden koennen. */
export const BEIDE_HAEUSER_ROLLEN = new Set(["admin"]);
/**
* In welchem Haus wohnt diese Rolle?
*
* @returns {"crew"|"agentur"|"beide"|null} `null` heisst: unbekannte
* Rolle. Das ist ein Fehler, kein Standardfall.
*/
export function hausVonRolle(rolle) {
if (TEAM_DOGI_ROLLEN.has(rolle) || AUSSEN_ROLLEN.has(rolle)) return "crew";
if (AGENTUR_ROLLEN.has(rolle)) return "agentur";
if (BEIDE_HAEUSER_ROLLEN.has(rolle)) return "beide";
return null;
}
/**
* Welche Rollen kommen in diesem Haus vor -- DogFather eingerechnet?
*
* ABGELEITET AUS DENSELBEN MENGEN, nicht abgeschrieben. Wer eine Rolle
* verschiebt, verschiebt damit jede SQL-Abfrage mit, die diese Funktion
* benutzt. Genau das Abschreiben hat am 24.09.2026 dazu gefuehrt, dass
* die „An wen"-Reihe sechs Leute zeigte und der Server vier belieferte.
*/
export function rollenImHaus(haus) {
const eigen = haus === "crew"
? [...TEAM_DOGI_ROLLEN, ...AUSSEN_ROLLEN]
: [...AGENTUR_ROLLEN];
return new Set([...eigen, ...BEIDE_HAEUSER_ROLLEN]);
}
/**
* Und welche Rollen gehoeren NUR dem anderen Haus?
*
* Das ist die Menge, nach der gefiltert wird -- nicht „welche gehoeren
* hierher". Der Unterschied ist DogFather: Er steht in beiden, also
* darf er in keiner der beiden Ausschlussmengen auftauchen. Eine Zeile,
* die „gehoert hierher" fragt, wuerde eine Aufgabe, die DogFather fuer
* einen Creator angelegt hat, ueber `erstellt_von` ins Team-Haus
* ziehen. Derselbe Gedanke steht bei ohneTeamDogi() in workspace.js.
*/
export function nurAnderesHaus(haus) {
return haus === "crew" ? new Set(AGENTUR_ROLLEN)
: new Set([...TEAM_DOGI_ROLLEN, ...AUSSEN_ROLLEN]);
}
/** Die Adresse von Team Dogi -- und seit 11.09.2026 auch die des
* Treffs. Feste Menge, kein Muster -- Falle 1. */
const CREW_HOSTS = new Set(["crew.dogfather-universe.com"]);
@@ -569,5 +667,5 @@ export function crewWeiche(req, res, next) {
export function anmeldeAdresseFuer(rolle) {
return (TEAM_DOGI_ROLLEN.has(rolle) || AUSSEN_ROLLEN.has(rolle))
? CREW_ADRESSE
: "https://workspace.dogfather-universe.com";
: WORKSPACE_ADRESSE;
}