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
+32 -4
View File
@@ -46,6 +46,8 @@
===================================================================== */
/** Die drei Stufen. Reihenfolge ist die Anzeigereihenfolge. */
import { INHALTE_CREW, FASSUNGEN_CREW } from "./anleitung-inhalte-crew.js";
export const STUFEN = [
{ schluessel: "muss", name: "Muss",
titel: "Das brauchst du sofort",
@@ -70,6 +72,19 @@ export const STUFEN_SCHLUESSEL = STUFEN.map((s) => s.schluessel);
* Pflege-Ansicht. */
export const FASSUNGEN = ["creator", "scout", "manager", "spicy"];
/** Welche Fassungen gibt es in DIESEM Haus?
*
* DAS HAUS ENTSCHEIDET, NICHT DIE ROLLE (06.10.2026). Die Agentur
* hat vier Fassungen, die Crew hat vier andere -- und keine Rolle
* kommt in beiden vor. Vorher stand `FASSUNGEN` an zehn Stellen
* fest; jede davon haette die Crew stillschweigend abgewiesen.
*
* EINE FUNKTION STATT ZWEIER LISTEN AN ZEHN STELLEN: Wer eine
* Fassung ergaenzt, traegt sie an einer Stelle ein. */
export function fassungenFuer(haus) {
return haus === "crew" ? FASSUNGEN_CREW : FASSUNGEN;
}
/** Wer die Texte aendern darf.
*
* DogFather UND Spicy — Entscheidung Filipe am 06.10.2026, und zwar
@@ -99,6 +114,11 @@ export const ZEILEN_ARTEN = {
takt: { titel: true, ziel: false },
/* "Haeufige Fragen" — `titel` die Frage, `text` die Antwort. */
frage: { titel: true, ziel: false },
/* "Drei Dinge vorweg" — NUR die Community (Bauplan, Kapitel 04).
`titel` die Regel in drei Worten, `text` was sie bedeutet.
Sie steht VOR allem anderen, weil sie nichts erklaert, sondern
sagt, woran sich alle halten. */
vorweg: { titel: true, ziel: false },
};
export const ARTEN_SCHLUESSEL = Object.keys(ZEILEN_ARTEN);
@@ -821,6 +841,9 @@ function rolleEinspielen(d, haus, rolle, inhalt, jetzt) {
["nicht", inhalt.nicht],
["takt", inhalt.takt],
["frage", inhalt.fragen],
/* Nur die Community bringt "Drei Dinge vorweg" mit. Fehlt die
Liste, wird nichts eingetragen -- kein Sonderfall noetig. */
["vorweg", inhalt.vorweg || []],
];
for (const [art, liste] of listen) {
liste.forEach((z, i) => {
@@ -840,15 +863,20 @@ export function anleitungTabellen(d) {
const jetzt = new Date().toISOString();
let gesamt = 0;
const neu = [];
for (const rolle of FASSUNGEN) {
const inhalt = INHALTE[rolle];
for (const [haus, rollen, quelle] of [
["agentur", FASSUNGEN, INHALTE],
["crew", FASSUNGEN_CREW, INHALTE_CREW],
]) {
for (const rolle of rollen) {
const inhalt = quelle[rolle];
/* Eine Rolle ohne Inhalte ist kein Fehler, sondern der Stand der
Arbeit: Etappe 1 bringt nur den Creator, die drei anderen kommen
in Etappe 3. Still uebergehen — aber die Zuordnungspruefung
weiss davon und meldet es als offen, nicht als in Ordnung. */
if (!inhalt) continue;
const n = rolleEinspielen(d, "agentur", rolle, inhalt, jetzt);
if (n) { gesamt += n; neu.push(`${rolle} ${n}`); }
const n = rolleEinspielen(d, haus, rolle, inhalt, jetzt);
if (n) { gesamt += n; neu.push(`${haus}/${rolle} ${n}`); }
}
}
if (gesamt) {
console.log(`[workspace] Anleitung: ${gesamt} Zeilen erstbefuellt (${neu.join(", ")}).`);