diff --git a/server/pruef-modi-katalog.mjs b/server/pruef-modi-katalog.mjs
index 1cf7d968..5c546526 100644
--- a/server/pruef-modi-katalog.mjs
+++ b/server/pruef-modi-katalog.mjs
@@ -854,6 +854,113 @@ console.log("");
ok(nachher.nochBeworben === 0,
`und die Bewerbung wartet nicht mehr (${nachher.nochBeworben})`);
+ /* ==== UND WAS IN EINER ANDEREN KATEGORIE WARTET? (23.09.2026) ===
+
+ DAS WAR EIN LOCH, das ich selbst gebaut hatte. Die Bewerbung
+ steht an ihrer Karte -- und die Karte steht in EINER von
+ vierzehn Kategorien. Wer eine andere offen hat, sieht nichts:
+ Die Bewerbung ist da, das Brett ist offen, und trotzdem findet
+ er sie nie.
+
+ Geprueft wird genau dieser Fall: Eine Bewerbung in einer
+ Kategorie, die gerade NICHT gewaehlt ist. Ohne das Band waere
+ hier nichts zu sehen -- und die Pruefung war es, die das
+ beweisen muss, nicht mein Zutrauen. */
+ const fern = katalog.aufgaben.find((v) => v.gruppe === "wachstum");
+ ok(!!fern, `es gibt eine Vorlage in einer anderen Kategorie (${fern?.gruppe})`);
+ await hole(modiAn.keks, "/workspace/api/vorlagen/bewerben", {
+ method: "POST", headers: jsonKopf,
+ body: JSON.stringify({ vorlage: fern.schluessel, text: "das kann ich" }),
+ });
+
+ /* Zurueck auf eine ANDERE Kategorie -- die Ausgangslage. */
+ await seite.evaluate(() => {
+ const reihe = document.querySelector(".vorlagenbrett .stufenleiter");
+ const k = [...(reihe?.querySelectorAll("button") || [])]
+ .find((b) => /Chat-Moderation/i.test(b.textContent));
+ if (k) k.click();
+ });
+ await seite.reload({ waitUntil: "networkidle" });
+ await seite.waitForTimeout(1600);
+ const zu2 = await seite.evaluate(() =>
+ document.getElementById("vorlagenbrett")?.dataset.auf !== "ja");
+ if (zu2) {
+ await seite.click(".vorlagenbrett__kopf").catch(() => {});
+ await seite.waitForTimeout(800);
+ }
+
+ const band = await seite.evaluate(() => {
+ const b = document.querySelector(".vorlagenbrett__warten");
+ if (!b) return null;
+ const knoepfe = [...b.querySelectorAll(".vorlagenbrett__warten-knopf")];
+ const offen = document.querySelector('.stufenleiter__knopf[aria-pressed="true"]');
+ return {
+ schild: b.querySelector(".vorlagenbrett__warten-schild")?.textContent.trim() || "",
+ knoepfe: knoepfe.map((k) => k.textContent.trim()),
+ /* Steht die Karte dazu gerade ueberhaupt auf dem Brett? */
+ karteDa: !!document.querySelector(".vorlagenbrett__karte"),
+ offeneKategorie: offen?.textContent.trim() || "",
+ hoch: Math.round(knoepfe[0]?.getBoundingClientRect().height || 0),
+ };
+ });
+ ok(!!band, "das Band sagt, dass etwas wartet — auch aus einer anderen Kategorie");
+ ok(/wartet|warten/.test(band?.schild || ""),
+ `mit einem Satz, der sagt was zu tun ist ("${band?.schild}")`);
+ ok((band?.knoepfe || []).some((t) => /Marina/.test(t)),
+ `und nennt, wer sich beworben hat (${(band?.knoepfe || []).join(" | ")})`);
+ /* AM DAUMEN TREFFBAR -- 40 px ist die Grenze im Haus fuer alles,
+ was in einer Reihe steht. */
+ ok((band?.hoch || 0) >= 40, `der Knopf ist ${band?.hoch} px hoch`);
+
+ /* DER SPRUNG MUSS AUCH ANKOMMEN. Ein Knopf, der in die richtige
+ Kategorie fuehrt und dort nichts zeigt, ist schlimmer als
+ keiner -- genau das passiert, wenn der Stufenfilter stehen
+ bleibt. */
+ await seite.evaluate(() => {
+ document.querySelector(".vorlagenbrett__warten-knopf")?.click();
+ });
+ await seite.waitForTimeout(1400);
+ const nachSprung = await seite.evaluate(() => {
+ const hervor = document.querySelector('.vorlagenbrett__karte[data-hervor="ja"]');
+ return {
+ vorlage: hervor?.dataset.vorlage || "",
+ titel: hervor?.querySelector(".vorlagenbrett__titel")?.textContent.trim() || "",
+ bewerbungDa: !!hervor?.querySelector(".vorlagenbrett__bewerbung"),
+ };
+ });
+ ok(nachSprung.vorlage === fern.schluessel,
+ `der Sprung landet auf der richtigen Karte (${nachSprung.titel})`);
+ ok(nachSprung.bewerbungDa,
+ "und dort steht die Bewerbung mit Annehmen und Ablehnen");
+
+ /* GEGENPROBE: Wenn nichts mehr wartet, ist das Band WEG.
+
+ Ohne sie bewiesen die Zeilen darueber nur, dass das Band immer
+ dasteht -- und ein Hinweis, der immer da ist, wird ueberlesen.
+ Dieselbe Hausregel wie bei der Warnung, die immer kommt. */
+ const offeneAlle = (await hole(handAn.keks, "/workspace/api/vorlagen"))
+ .daten?.bewerbungen || [];
+ for (const b3 of offeneAlle) {
+ await hole(handAn.keks, "/workspace/api/vorlagen/bewerbung/ablehnen", {
+ method: "POST", headers: jsonKopf,
+ body: JSON.stringify({ id: b3.id, kommentar: "Aufraeumen der Pruefung" }),
+ });
+ }
+ ok(offeneAlle.length > 0,
+ `${offeneAlle.length} offene Bewerbung(en) werden fuer die Gegenprobe beantwortet`);
+ await seite.reload({ waitUntil: "networkidle" });
+ await seite.waitForTimeout(1600);
+ const zu3 = await seite.evaluate(() =>
+ document.getElementById("vorlagenbrett")?.dataset.auf !== "ja");
+ if (zu3) {
+ await seite.click(".vorlagenbrett__kopf").catch(() => {});
+ await seite.waitForTimeout(800);
+ }
+ const ohneBand = await seite.evaluate(() =>
+ document.querySelectorAll(".vorlagenbrett__warten").length);
+ ok(ohneBand === 0,
+ `Gegenprobe: wartet nichts, steht auch nichts da (${ohneBand})`);
+
ok(konsole.length === 0,
konsole.length ? "Fehler in der Konsole: " + konsole[0].slice(0, 80)
: "keine Fehler in der Konsole");
diff --git a/workspace/anruf-probe.html b/workspace/anruf-probe.html
index 771acdfe..8ba25171 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`. -->
-
-
+
+
-
+