Haustrennung: kein Eintrag mehr aus dem anderen Haus

Filipe, 24.09.2026: "wenn ich bei der einen was mache soll nichts bei
der anderen passieren." -- und heute: "ja los".

GEMESSEN, BEVOR ETWAS ANGEFASST WURDE (jedes Brett x beide Adressen x
vier Rollen):

  AGENTUR-Adresse   DogFather  18 Bretter
                    Manager     6 Bretter
                    Creator     6 Bretter
                    Modi        kommt nicht rein (401)
  CREW-Adresse      DogFather  18 Bretter
                    Modi       13 Bretter
                    Manager     kommt nicht rein (401)
                    Creator     kommt nicht rein (401)

Die Anmeldung war also dicht. Durch griff genau EINE Rolle: DogFather.
Er wohnt in beiden Haeusern, und die Riegel in sichtbarEintrag()
fragten nach der ROLLE, nicht nach der Adresse. Auf der Crew-Adresse
stand damit das Brett der Agentur samt Inhalt.

Nachgemessen ist der Durchgriff AELTER als der gestrige Eventkarten-
Umbau -- zweimal gemessen, mit und ohne ihn, gleiches Ergebnis.

RIEGEL 0 in sichtbarEintrag(): Wer auf einer Adresse angemeldet ist,
sieht nur Eintraege dieses Hauses. Er haengt den uebrigen Riegeln
UM, statt in jeden Ausgang geschrieben zu werden -- die Funktion hat
drei Rueckgabepunkte, und der naechste waere sonst wieder offen.

Nachher, dieselbe Messung: DogFather sieht auf der Agenturadresse nur
Agentur-Eintraege, auf der Crew-Adresse nur die des Rudels. Manager,
Creator und Modi unveraendert.

WAS DABEI SCHIEFGING UND WIE ES AUFFIEL

1. Die erste Fassung liess bei `haus IS NULL` den BEREICH entscheiden.
   pruef-haus-trennung.mjs wurde sofort rot: "Lunas Live vom Montag"
   verschwand von der Agenturadresse. `live`, `technik` und
   `community` tragen BEIDES -- die Kacheln von Team Dogi und die
   Creator-Akten. Eine Regel, die jedem Brett genau ein Haus zuweist,
   kann das nicht. Jetzt bleibt ein Eintrag ohne Haus sichtbar: ein
   Eintrag zu viel faellt auf, ein fehlender nicht.

2. Damit NULL kein Dauerloch ist: FUENF von ACHT Stellen, die
   Eintraege anlegen, setzten `haus` gar nicht (workspace-video.js,
   -content.js, -bewerbung.js, -treff.js, -vorlagen.js). Nachgetragen.

3. Und `person.haus` war dafuer der falsche Massstab: Legt DogFather
   ueber die Agenturadresse ein Highlight an, gehoert es trotzdem dem
   Rudel -- sonst sieht die Community es nie. pruef-treff.mjs hat das
   gefunden (2 Fehler). Neu: hausFuerNeuenEintrag() -- bei den sieben
   Brettern des Rudels entscheidet das BRETT, sonst die Adresse.

NEU: pruef-haus-luecke.mjs (12 Pruefungen). Sie sucht die
Einfuege-Stellen im Quelltext und wird rot, sobald eine neunte
dazukommt, die `haus` vergisst -- mit Gegenprobe, dass das Suchmuster
eine solche Stelle auch wirklich erkennt. Ein Kommentar daneben haette
es nicht verhindert; das steht so schon im Projektgedaechtnis.

NEBENBEI: In bereich.js stand seit gestern `|| "Agentur-Events"` als
Rueckfall fuer das Etikett der Vorschau. pruef-treff.mjs verbietet
das zu Recht -- wie ein Brett heisst, haengt am Haus, und der Server
sagt es. Der Rueckfall ist weg; fehlt die Angabe, steht lieber kein
Etikett da als ein falsches.

pruef-treff.mjs nachgezogen (85 -> 86 Pruefungen, nicht weniger): Die
Zusage "DogFather sieht den Beitrag" wird jetzt auf der Crew-Adresse
geprueft, mit Gegenprobe fuer die Agenturadresse.

GEPRUEFT, alle gruen:
  pruef-haus-luecke     12    pruef-haus-trennung  100
  pruef-crew-adresse   169    pruef-treff           86
  pruef-eventkarte      77    pruef-agentur         62
  pruef-haus-seiten     38    pruef-eintrag-bild    24
  pruef-vorlagen        24    pruef-video, -content, -bewerbung,
                              -bereiche-lesend: in Ordnung

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-10-03 23:33:03 +02:00
co-authored by Claude Opus 5
parent 3e1e0810ba
commit 5d9c8cd377
56 changed files with 1140 additions and 710 deletions
+43
View File
@@ -2296,6 +2296,49 @@ const BRETTER_UEBER_SEITEN = {
/** Bretter mit eigener Kachel. Diese darf jeder aus dem Team, der die
* Kachel sieht -- sie sind daraus abgeleitet, nicht abgeschrieben. */
/** In welches Haus gehoert ein NEU angelegter Eintrag?
*
* ==== WARUM NICHT EINFACH `person.haus` (03.10.2026) ===============
*
* Genau das stand an allen acht Einfuege-Stellen -- und
* pruef-treff.mjs hat gezeigt, dass es falsch ist:
*
* FEHL die Community sieht es SOFORT -- ohne zweiten Klick
* FEHL DogFather sieht den Beitrag
*
* Beide Male legt DogFather ueber die AGENTURADRESSE einen Beitrag
* auf einem Brett des Rudels an (`highlight`, `anschlag`). Mit
* `person.haus` bekam der Beitrag das Haus "agentur" -- und war
* damit fuer die Community auf crew. unsichtbar. Auf einem Brett,
* das es nur dort gibt.
*
* Der richtige Massstab steht schon im Kommentar von
* eintraegeNachHaus() weiter unten: "Das Haus eines Eintrags -- aus
* seinem BEREICH, nicht aus dem Ersteller. `regeln`, `anschlag`,
* `highlight` sind Bretter von Team Dogi, `agentur` gehoert der
* Agentur; das steht fest, unabhaengig davon, wer gerade
* hineingeschrieben hat."
*
* ABER NICHT FUER JEDES BRETT. `live`, `technik` und `community`
* tragen BEIDES: die Kacheln von Team Dogi und die Creator-Akten der
* Agentur. Dort ist die Adresse, auf der jemand schreibt, die beste
* Auskunft, die es gibt -- und die einzige.
*
* Also: Wo das Brett eindeutig ist, entscheidet das Brett. Wo nicht,
* die Adresse. TREFF_BRETTER ist die gepflegte Liste der eindeutigen
* Bretter des Rudels; `agentur` ist das Gegenstueck auf der anderen
* Seite und steht in BEREICHE, nicht hier.
*/
export function hausFuerNeuenEintrag(person, bereich) {
/* Die sieben Bretter des Rudels gibt es nur bei Team Dogi -- egal,
von welcher Adresse aus jemand hineinschreibt. */
if (TREFF_BRETTER.includes(String(bereich))) return "crew";
/* Sonst entscheidet die Adresse. Ohne Adresse (Pruefungen,
127.0.0.1) bleibt es offen -- und ein Eintrag ohne Haus ist in
beiden sichtbar, die bewusst sichere Richtung. */
return person?.haus || null;
}
export const MODI_BEREICHE_ERLAUBT = new Set([
...HAND_MIT_TREFF
.map((k) => (/bereich\.html\?b=([a-z]+)/.exec(k.ziel) || [])[1])