From 036f30454c4868b644e4ddc4a1e6263c808b37ac Mon Sep 17 00:00:00 2001 From: Dogfather Date: Wed, 23 Sep 2026 11:32:25 +0200 Subject: [PATCH] Vorlagenbrett: was wartet, steht jetzt ganz oben -- quer ueber alle Kategorien MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit EIN LOCH, DAS ICH SELBST GEBAUT HABE ------------------------------------ Die Bewerbungen stehen an ihrer Karte, und das ist richtig: Man entscheidet ueber eine bestimmte Aufgabe, und ihr Text ist die halbe Auskunft. Nur steht die Karte in EINER von vierzehn Kategorien. Bewirbt sich Frida unter "Wachstum" und DogFather oeffnet wie immer "Chat-Moderation", sieht er nichts -- die Bewerbung ist da, das Brett ist offen, und trotzdem findet er sie nie. Die Benachrichtigung von heute frueh hilft, aber sie ist ein Moment: Wer sie wegwischt, hat keinen zweiten Weg mehr. Ein Brett, auf dem etwas wartet, muss das selbst sagen koennen. Jetzt steht ganz oben, ueber den Kategorie-Reitern: "Eine Bewerbung wartet auf deine Antwort: Marina · Zehn Neue fragen, wie sie hergefunden haben". Ein Tippen springt in die richtige Kategorie, zur richtigen Karte, und hebt sie zwei Sekunden hervor. DER SPRUNG STELLT AUCH DIE STUFE ZURUECK. Ohne das landet man in der richtigen Kategorie und sieht trotzdem nichts, weil der Stufenfilter die Karte gerade ausblendet -- eine Reise ins Nichts ist schlimmer als kein Knopf. ES DIENT BEIDEN SEITEN, und deshalb steht es nur einmal da: Wer entscheidet, liest "wartet auf deine Antwort"; wer sich beworben hat, liest "du hast dich beworben". Der Server schickt ohnehin jedem nur, was ihn angeht. UND WIEDER: ERST STAND DIE ABSICHT NUR IM KOMMENTAR ---------------------------------------------------- Im Kommentar stand "ES STEHT GANZ OBEN, ueber den Kategorie-Reitern". Der Code haengte es darunter -- gesehen auf dem Bildschirmfoto, nicht beim Lesen. Das ist heute das zweite Mal (nach "gleiche Mittel, gleiche Staerke" bei den Handkarten). Ein Kommentar, der eine Absicht beschreibt, erfuellt sie nicht; ich schreibe sie offenbar gern auf, bevor ich sie baue. VORHER GEMESSEN, NICHT VERMUTET ------------------------------- Rundgang als Modi, 390 px, ueber alle 27 Kacheln der Startseite -- die Liste aus den Kacheln GELESEN, nicht aufgeschrieben. Ergebnis: kein Querscrollen, keine zu kleinen Ziele, kein Text auf Text, keine Konsolenfehler. 27 von 27 sauber. Dabei sah ich im Chat einen magentafarbenen Kasten ohne Beschriftung und hielt ihn fuer kaputt. Nachgemessen mit echtem Finger (hasTouch): 44x44-Knopf, 36x36-Farbprobe, quadratisch -- und am Laptop 30x30 / 22x22, ebenfalls quadratisch. Der schmale Balken entstand nur in meinem Messaufbau (390 px OHNE Beruehrung), also in einer Lage, die kein Geraet hat. Kein Fehler, und ich habe nichts "repariert", was nicht kaputt war. GEPRUEFT -------- pruef-modi-katalog: 125 Pruefungen, 0 Fehler (vorher 116). Gemessen wird genau der Fall, um den es geht: eine Bewerbung in einer Kategorie, die gerade NICHT gewaehlt ist. Dazu der Sprung (landet auf der richtigen Karte, und dort stehen Annehmen und Ablehnen), die Daumengroesse (40 px) und der Wortlaut. MIT GEGENPROBE, und die ist der Kern: Wartet nichts, steht auch nichts da. Ohne sie bewiese alles darueber nur, dass das Band immer dasteht -- und ein Hinweis, der immer da ist, wird ueberlesen. Co-Authored-By: Claude Opus 5 --- server/pruef-modi-katalog.mjs | 107 ++++++++++++++++++++++++++++++ workspace/anruf-probe.html | 10 +-- workspace/app.webmanifest | 8 +-- workspace/assets/css/aufgaben.css | 76 +++++++++++++++++++++ workspace/assets/js/aufgaben.js | 74 +++++++++++++++++++++ workspace/aufgaben.html | 36 +++++----- workspace/automation.html | 32 ++++----- workspace/befinden.html | 32 ++++----- workspace/bereich.html | 44 ++++++------ workspace/bewerben.html | 36 +++++----- workspace/bewerbungen.html | 34 +++++----- workspace/calls.html | 34 +++++----- workspace/chat.html | 38 +++++------ workspace/content.html | 34 +++++----- workspace/crew-index.html | 12 ++-- workspace/crew.webmanifest | 8 +-- workspace/dateien.html | 34 +++++----- workspace/entwicklung.html | 32 ++++----- workspace/hilfe.html | 28 ++++---- workspace/index.html | 10 +-- workspace/kalender.html | 34 +++++----- workspace/leistung.html | 32 ++++----- workspace/material.html | 32 ++++----- workspace/personen.html | 32 ++++----- workspace/profil.html | 36 +++++----- workspace/rechte.html | 32 ++++----- workspace/report.html | 36 +++++----- workspace/scouting.html | 32 ++++----- workspace/start.html | 32 ++++----- workspace/startcheck.html | 34 +++++----- workspace/steckbrief.html | 36 +++++----- workspace/talente.html | 34 +++++----- workspace/team.html | 32 ++++----- workspace/teamlage.html | 32 ++++----- workspace/teilen.html | 28 ++++---- workspace/treff-moderation.html | 30 ++++----- workspace/treff-regeln.html | 30 ++++----- workspace/uebersicht.html | 32 ++++----- workspace/unsere-seiten.html | 28 ++++---- workspace/werdegang.html | 30 ++++----- workspace/willkommen.html | 30 ++++----- workspace/wissen.html | 34 +++++----- 42 files changed, 842 insertions(+), 585 deletions(-) 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`. --> - - + + - +