diff --git a/server/pruef-crew-adresse.mjs b/server/pruef-crew-adresse.mjs
index 94af9e69..dedc4816 100644
--- a/server/pruef-crew-adresse.mjs
+++ b/server/pruef-crew-adresse.mjs
@@ -491,23 +491,69 @@ for (const [rolle, name] of [["admin", "DogFather"], ["hand", "Rechte Hand"], ["
ok(wandCrew.text.includes(`data-rolle="${rolle}"`) && wandCrew.text.includes(`>${name}<`),
`crew.: die Kachel "${name}" steht da`);
}
-/* WELCHES ZEICHEN AUF WELCHER KACHEL (Filipe, 10.09.2026: "bei rechte
- hand soll der husky sein und bei modis soll die pfote sein").
+/* WELCHES ZEICHEN AUF WELCHER KACHEL
+ ---------------------------------------------------------------------
+ HIER STAND BIS ZUM 22.09.2026 DAS GEGENTEIL, und beide Fassungen
+ geben eine Anweisung von Filipe wieder:
- Geprueft wird die ZUORDNUNG, nicht das Aussehen: DogFather und die
- rechte Hand tragen dasselbe, der Modi ein anderes. So gelesen haelt
- die Pruefung auch dann, wenn die Zeichen selbst eines Tages neu
- gezeichnet werden -- gewollt ist die Gruppe, nicht der Husky. */
+ 10.09.: "bei rechte hand soll der husky sein und bei modis soll
+ die pfote sein" -> DogFather und rechte Hand gleich.
+ 22.09.: "bei dogi soll kein husky sein sondern eine krone. die
+ auch extrem auffaellt damit man den unterschied extrem
+ erkennt." -> DogFather eigenes Zeichen.
+
+ Dazwischen ist die LINKE Hand dazugekommen. Damit trugen DREI von
+ fuenf Kacheln denselben Husky -- und drei gleiche Zeichen
+ untereinander sind kein Zeichen mehr, sondern Tapete.
+
+ WAS JETZT GEPRUEFT WIRD, ist deshalb nicht mehr eine einzelne
+ Zuordnung, sondern die Eigenschaft, um die es geht: Jede Kachel
+ traegt ein Zeichen, und das von DogFather kommt kein zweites Mal
+ vor. Das haelt auch, wenn die Zeichen neu gezeichnet werden oder
+ eine sechste Rolle dazukommt -- eine abgeschriebene Paarliste
+ haette beim naechsten Umbau wieder danebengelegen.
+
+ Die zwei Haende teilen sich weiterhin eines, und das ist Absicht:
+ Sie haben denselben Untertitel ("vertritt und koordiniert") und
+ lesen sich als Paar. Geprueft wird deshalb nicht "alle
+ verschieden", sondern "DogFather ist einmalig". */
{
const zeichenVon = (rolle) => {
const stelle = wandCrew.text.indexOf(`data-rolle="${rolle}"`);
if (stelle < 0) return null;
- return (/href="(#r-[a-z]+)"/.exec(wandCrew.text.slice(stelle, stelle + 400)) || [])[1] || null;
+ return (/href="(#r-[a-z-]+)"/.exec(wandCrew.text.slice(stelle, stelle + 400)) || [])[1] || null;
};
- const [zAdmin, zHand, zModi] = ["admin", "hand", "modi"].map(zeichenVon);
- ok(!!zAdmin && zHand === zAdmin,
- `crew.: die Rechte Hand traegt dasselbe Zeichen wie DogFather (${zHand} / ${zAdmin})`);
+ const zeichen = Object.fromEntries(ERWARTETE_REIHE.map((r) => [r, zeichenVon(r)]));
+ const ohne = ERWARTETE_REIHE.filter((r) => !zeichen[r]);
+ ok(ohne.length === 0 && ERWARTETE_REIHE.length > 0,
+ ohne.length ? `crew.: ohne Zeichen: ${ohne.join(", ")}`
+ : `crew.: jede der ${ERWARTETE_REIHE.length} Kacheln traegt ein Zeichen`);
+
+ const zAdmin = zeichen.admin;
+ const wieOft = Object.values(zeichen).filter((z) => z === zAdmin).length;
+ ok(!!zAdmin && wieOft === 1,
+ `crew.: DogFathers Zeichen (${zAdmin}) kommt genau einmal vor (${wieOft})`);
+ ok(zAdmin === "#r-krone", `crew.: und es ist die Krone (${zAdmin})`);
+
+ /* Das Zeichen muss es auch GEBEN. Ein `use` auf eine Kennung, die
+ nirgends steht, zeichnet nichts -- und zwar lautlos: keine
+ Fehlermeldung, kein leeres Kaestchen, einfach nichts. Genau so
+ saehe eine vertippte Kennung aus. */
+ ok(wandCrew.text.includes('id="r-krone"'),
+ "crew.: und die Krone ist auf der Seite auch definiert");
+
+ /* GEGENPROBE: Die Messung muss einen Verstoss auch sehen koennen.
+ Zwei erfundene Verteilungen, eine richtig, eine mit doppeltem
+ DogFather-Zeichen. */
+ const zaehl = (v) => Object.values(v).filter((z) => z === v.admin).length;
+ ok(zaehl({ admin: "#r-krone", hand: "#r-husky", modi: "#r-pfote" }) === 1
+ && zaehl({ admin: "#r-husky", hand: "#r-husky", modi: "#r-pfote" }) === 2,
+ "crew.: Gegenprobe -- ein doppelt vergebenes Zeichen wuerde auffallen");
+
+ const zModi = zeichen.modi;
ok(!!zModi && zModi !== zAdmin, `crew.: der Modi ein eigenes (${zModi})`);
+ ok(zeichen.hand === zeichen.linke && !!zeichen.hand,
+ `crew.: die zwei Haende lesen sich als Paar (${zeichen.hand} / ${zeichen.linke})`);
}
/* Die Namen kommen aus den Kacheln, nicht aus einer Liste in gate.js --
diff --git a/workspace/anruf-probe.html b/workspace/anruf-probe.html
index 3314d4df..44e249ed 100644
--- a/workspace/anruf-probe.html
+++ b/workspace/anruf-probe.html
@@ -16,15 +16,15 @@
verdeckt. Gefunden hat es pruef-struktur.
Richtig sind `gate.css` (die Farbwerte des Hauses) und `haus.css`. -->
-
-
+
+
-
+