Abnahme Kapitel 13: jede Crew-Rolle erklaert genau ihre eigenen Kacheln

"Community: ... keine Karte zu Team-Kacheln." Das stand bisher nur als
Gesamtzahl da (14/29/29/34) -- und eine Summe stimmt auch dann, wenn
eine Karte zu viel und eine andere zu wenig da ist.

Jetzt wird je Rolle Menge gegen Menge verglichen, und zwar IN BEIDE
RICHTUNGEN: "fehlt" faengt die vergessene Karte zu einer neuen Kachel,
"zuviel" die stehengebliebene zu einer entfernten. Mit nur einer
Richtung waere immer die andere offen.

Dieselbe Frage beantwortet die Pruefung weiter oben fuer die Agentur
-- dort gegen die Kachelliste aus dem Browser, hier gegen die, die der
Server schickt. Zwei Haeuser, zwei Quellen, eine Frage; nachgebaut
wird nichts.

Gegenprobe gleich daneben: dieselbe Rechnung mit der FALSCHEN
Kachelliste (die der rechten Hand gegen die Karten der Community)
muss anschlagen -- sie findet 20 Unterschiede. Ohne diese Zeile waeren
die vier darueber auch dann gruen, wenn `soll` und `ist` versehentlich
aus derselben Quelle kaemen und sich selbst mit sich selbst
vergleichen wuerden.

pruef-anleitung 181 -> 186, gruen.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-10-06 17:50:35 +02:00
co-authored by Claude Opus 5
parent 88a8d302b9
commit b4903ed0c0
+52
View File
@@ -1359,6 +1359,58 @@ melde("\n=== Die Pflege auf der Crew-Adresse (Kapitel 11) ===");
+ `(pflegen ${vj?.darf_pflegen}, abhaken ${vj?.darf_abhaken})`); + `(pflegen ${vj?.darf_pflegen}, abhaken ${vj?.darf_abhaken})`);
} }
/* =====================================================================
JEDE CREW-ROLLE ERKLAERT GENAU IHRE EIGENEN KACHELN
---------------------------------------------------------------------
Dieselbe Frage, die weiter oben fuer die Agentur beantwortet wird --
dort gegen die Kachelliste aus dem Browser, hier gegen die Liste,
die der SERVER schickt. Zwei Haeuser, zwei Quellen (siehe den Kopf
dieser Datei), eine Frage.
DIE ABNAHME NENNT SIE AUSDRUECKLICH: „Community: ... keine Karte zu
Team-Kacheln." Eine einzelne Karte zu einer Seite, die ein Mitglied
nie oeffnet, waere schlimmer als eine fehlende: Sie erklaert jemandem
eine Arbeit, die nicht seine ist, mit einem Knopf, der ihn gegen eine
Tuer schickt.
IN BEIDE RICHTUNGEN, und das ist der Punkt: „fehlt" faengt die
vergessene Karte zu einer neuen Kachel, „zuviel" die
stehengebliebene zu einer entfernten. Mit nur einer Richtung waere
immer die andere offen. */
melde("\n=== Jede Crew-Rolle erklaert genau ihre eigenen Kacheln ===");
for (const rolle of ["gast", "modi", "linke", "hand"]) {
const ich = await roh("/workspace/api/ich", CREW_HOST, null, kekse[rolle]);
let kacheln = [];
try { kacheln = JSON.parse(ich.text)?.bereiche || []; } catch { /* bleibt leer */ }
const soll = new Set(kacheln.map((k) => B.schluesselVonZiel(k.ziel)).filter(Boolean));
/* Die Seite erklaert sich nicht selbst. */
soll.delete("anleitung");
const ist = new Set(((await holen(rolle, CREW_HOST)).j?.karten || []).map((k) => k.kachel));
const fehlt = [...soll].filter((x) => !ist.has(x));
const zuviel = [...ist].filter((x) => !soll.has(x));
ok(soll.size > 0 && fehlt.length === 0 && zuviel.length === 0,
fehlt.length || zuviel.length
? `${rolle.padEnd(6)} stimmt nicht -- ohne Karte: ${fehlt.join(", ") || "nichts"}; `
+ `ohne Kachel: ${zuviel.join(", ") || "nichts"}`
: `${rolle.padEnd(6)} erklaert genau seine ${soll.size} Kacheln`);
/* GEGENPROBE, EINMAL: Dieselbe Rechnung mit der FALSCHEN Kachelliste
muss anschlagen. Ohne sie waeren die vier Zeilen darueber auch
dann gruen, wenn `soll` und `ist` versehentlich aus derselben
Quelle kaemen -- und dann verglichen sie etwas mit sich selbst. */
if (rolle === "gast") {
const ichHand = await roh("/workspace/api/ich", CREW_HOST, null, kekse.hand);
let fremd = [];
try { fremd = JSON.parse(ichHand.text)?.bereiche || []; } catch { /* leer */ }
const sollFremd = new Set(fremd.map((k) => B.schluesselVonZiel(k.ziel)).filter(Boolean));
sollFremd.delete("anleitung");
const abweichung = [...sollFremd].filter((x) => !ist.has(x)).length
+ [...ist].filter((x) => !sollFremd.has(x)).length;
ok(abweichung > 0,
`Gegenprobe: an der Kachelliste der rechten Hand gemessen passt es `
+ `NICHT (${abweichung} Unterschiede)`);
}
}
/* ---------- Abschluss ------------------------------------------------ */ /* ---------- Abschluss ------------------------------------------------ */
try { rmSync(ordner, { recursive: true, force: true }); } catch { /* egal */ } try { rmSync(ordner, { recursive: true, force: true }); } catch { /* egal */ }
console.log(`\n${fehler ? "FEHLER: " + fehler : "Alles in Ordnung"} — ${geprueft} Prüfungen`); console.log(`\n${fehler ? "FEHLER: " + fehler : "Alles in Ordnung"} — ${geprueft} Prüfungen`);