Die Einweisung gibt es jetzt auch fuer Team Dogi -- vier Fassungen, 106 Karten

Filipe hat den Bauplan "Willkommen & Anleitung -- Einweisung je Rolle"
(27 Seiten, Stand 06.10.2026) geschickt: pruefen, perfektionieren und
auf der Crew-Seite umsetzen.

AUSGANGSMESSUNG, bevor etwas angefasst wurde:

    agentur  creator 18 · manager 22 · scout 21 · spicy 23 Karten
    crew     0 Karten -- die Schnittstelle antwortete 404 "nicht_hier"

Die Seite lud also, war aber leer. Baulich vorbereitet war sie schon:
Alle drei Inhaltstabellen tragen `haus` mit UNIQUE (haus, rolle,
kachel), und die Aussaat nimmt das Haus als Parameter.

WAS JETZT DA IST

  gast   14 Karten (5 Muss, 4 Regelmaessig, 5 Bedarf)
  modi   29 Karten (7 / 7 / 15)
  linke  29 Karten (7 / 7 / 15)
  hand   34 Karten (8 / 7 / 19)

Jede Zahl entspricht Kapitel 13 des Bauplans. Dazu je Rolle
Leitgedanke, drei Saetze, fuenf Erste Schritte, "Nicht deins",
Rhythmus und Fragen -- woertlich aus Kapitel 06 bis 09.

VOR DEM SCHREIBEN ABGEGLICHEN, nicht danach: Ein Skript prueft jede
Karte gegen die echte Kachelliste der Rolle. Ergebnis fuer alle vier
Fassungen: Kartenzahl wie im Plan, jede Karte trifft eine Kachel,
jede Kachel hat eine Karte, keine doppelt.

ZWEI KACHELN AUF EINER SEITE. Auf der Crew-Adresse fuehren "Chat"
(das Team) und "Rudel-Chat" (`?raum=treff`) beide auf chat.html.
`schluesselVonZiel` behielt nur `b` -- beide ergaben denselben
Schluessel, und damit konnten sie keine eigenen Karten haben, obwohl
der Bauplan ihnen verschiedene Einordnungen gibt (fuer die rechte
Hand: Team-Chat Muss, Rudel-Chat nur bei Bedarf). Jetzt wird auch
`raum` unterschieden. Auf der Agenturadresse gibt es nur eine
Chat-Kachel; dort aendert sich nichts.

DAS HAUS KOMMT AUS DER ADRESSE, nicht aus der angesehenen Rolle.
`const HAUS = "agentur"` ist einer Funktion gewichen. Nimmt DogFather
die Sicht einer anderen Rolle ein, wechselt er die ROLLE, nicht die
ADRESSE -- wer hier `req.sicht` naehme, bekaeme auf der Crew-Adresse
Agenturinhalte, sobald eine Sicht gesetzt ist.

`FASSUNGEN` stand an zehn Stellen fest und haette die Crew ueberall
abgewiesen. Jetzt `fassungenFuer(haus)` -- eine Funktion statt zweier
Listen an zehn Stellen.

Neue Zeilenart `vorweg` fuer "Drei Dinge vorweg" (nur die Community,
Bauplan Kapitel 04). Fehlt die Liste bei einer Rolle, wird nichts
eingetragen -- kein Sonderfall noetig.

Eigene Datei fuer die Crew-Inhalte: anleitung-tabellen.js traegt
schon die Agenturfassungen und ist 856 Zeilen lang. Getrennte Dateien
sind hier dasselbe Prinzip wie getrennte Haeuser.

pruef-anleitung 125 -> 127. Fuenf Zeilen darin verteidigten den alten
Zustand ("ein Modi bekommt die Anleitung nicht, erwartet 404") -- sie
sind mitgewandert statt stehenzubleiben. Dazu eine neue Gegenprobe
zur Haustrennung: In der Crew-Fassung darf keine Agenturkachel
vorkommen.

Datenbank vorher gesichert und zurueckgelesen (integrity_check,
84 Karten).

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-10-06 16:29:38 +02:00
co-authored by Claude Opus 5
parent a654f74dd1
commit 96eff525d0
53 changed files with 1553 additions and 744 deletions
+38 -8
View File
@@ -96,7 +96,15 @@ const SCHLUESSEL_PROBEN = [
["bereich.html?b=live", "bereich:live"],
["bereich.html?b=agentur", "bereich:agentur"],
["profil.html", "profil"],
["chat.html?raum=treff", "chat"],
/* ZWEI KACHELN AUF EINER SEITE (06.10.2026). Hier stand "chat" --
und damit bekamen "Chat" (das Team) und "Rudel-Chat" (die
Community) denselben Schluessel. Auf der Agenturadresse fiel das
nie auf, dort gibt es nur eine Chat-Kachel. Die Crew hat beide,
und der Bauplan gibt ihnen verschiedene Einordnungen -- fuer die
rechte Hand ist der Team-Chat Muss, der Rudel-Chat nur bei
Bedarf. Ohne eigenen Schluessel waere das nicht abbildbar. */
["chat.html?raum=treff", "chat:treff"],
["chat.html", "chat"],
["", ""],
];
for (const [ziel, erwartet] of SCHLUESSEL_PROBEN) {
@@ -325,12 +333,29 @@ melde(` -- Scout, Manager und Spicy Media haben noch keine Inhalte `
const creatorPflege = creator.j.darf_pflegen;
ok(creatorPflege === false, "ein Creator darf NICHT pflegen");
/* ==== DIE CREW HAT JETZT IHRE EIGENE ANLEITUNG (06.10.2026) ========
Hier stand das Gegenteil: "ein Modi bekommt die Anleitung nicht
(erwartet 404)". Das war bis heute richtig -- die Anleitung gab es
nur im Agenturhaus. Mit dem Bauplan "Einweisung je Rolle" hat auch
Team Dogi vier Fassungen bekommen, und die Zeilen sind mitgewandert
statt stehenzubleiben.
DIE TRENNUNG BLEIBT TROTZDEM, und sie wird hier gemessen: Auf der
Crew-Adresse kommen CREW-Inhalte, nicht die der Agentur. Eine
Anleitung, die auf beiden Adressen dasselbe zeigt, waere der
Rueckschritt hinter die Haustrennung vom 24.09. */
const modi = await holen("modi", CREW_HOST);
ok(modi.code === 404,
`ein Modi bekommt die Anleitung nicht (HTTP ${modi.code}, erwartet 404)`);
ok(modi.code === 200 && (modi.j?.karten?.length ?? 0) === 29,
`ein Modi bekommt seine Anleitung (HTTP ${modi.code}, ${modi.j?.karten?.length ?? 0} Karten)`);
const hand = await holen("hand", CREW_HOST);
ok(hand.code === 404,
`die rechte Hand bekommt sie auf der Crew-Adresse nicht (HTTP ${hand.code}, erwartet 404)`);
ok(hand.code === 200 && (hand.j?.karten?.length ?? 0) === 34,
`die rechte Hand auf der Crew-Adresse ebenso (HTTP ${hand.code}, `
+ `${hand.j?.karten?.length ?? 0} Karten)`);
/* GEGENPROBE ZUR HAUSTRENNUNG: Die Crew-Fassung darf keine
Agenturkachel enthalten. "leistung" gibt es nur dort. */
ok(!(modi.j?.karten || []).some((k) => k.kachel === "leistung"),
"und keine einzige Agenturkachel ist dabei");
/* Die Seite selbst, nicht nur die Schnittstelle.
=====================================================================
@@ -631,7 +656,9 @@ const pScout = await pput("scout", `/workspace/api/anleitung/karte/${eineKarte.i
ok(pScout.code === 403, `ein Scout auch nicht (HTTP ${pScout.code}, erwartet 403)`);
const pModi = await pput("modi", `/workspace/api/anleitung/karte/${eineKarte.id}`,
{ stufe: "bedarf", wozu: "x", tust: "y", merke: "z" }, CREW_HOST);
ok(pModi.code === 404, `ein Modi bekommt die Pflege gar nicht (HTTP ${pModi.code}, erwartet 404)`);
/* 403 STATT 404 (seit 06.10.2026): Die Seite gibt es auf der
Crew-Adresse jetzt -- pflegen darf ein Modi sie trotzdem nicht. */
ok(pModi.code === 403, `ein Modi darf nicht pflegen (HTTP ${pModi.code}, erwartet 403)`);
melde("\n=== Pflege: Spicy aendert eine Stufe, und sie gilt sofort ===");
const vorher = eineKarte.stufe;
@@ -779,9 +806,12 @@ ok(e2.j?.zeigen === false, "beim zweiten Mal nicht mehr");
/* DIE CREW BEKOMMT 200 UND NICHT 404. Das Skript laeuft auf JEDER
Startseite; ein Fehlschlag waere eine rote Zeile in der Konsole bei
jedem Aufruf -- und die verdeckt die naechste, die echt ist. */
/* Seit dem 06.10. hat der Modi eine Fassung -- also soll die
Einweisung bei ihm auch ANGEBOTEN werden. Vorher war die ruhige
Absage richtig, weil es nichts einzuweisen gab. */
const eModi = await einweisung("modi", CREW_HOST);
ok(eModi.code === 200 && eModi.j?.zeigen === false,
`ein Modi bekommt eine ruhige Absage (HTTP ${eModi.code}, zeigen ${eModi.j?.zeigen})`);
ok(eModi.code === 200 && eModi.j?.zeigen === true,
`ein Modi bekommt seine Einweisung angeboten (HTTP ${eModi.code}, zeigen ${eModi.j?.zeigen})`);
const eDogi = await einweisung("admin");
ok(eDogi.code === 200 && eDogi.j?.zeigen === false,
`DogFather auch -- er braucht keine Einweisung (zeigen ${eDogi.j?.zeigen})`);