diff --git a/server/helfer-kachel-echtfarbe.mjs b/server/helfer-kachel-echtfarbe.mjs index cad39a4e..4d8b44f9 100644 --- a/server/helfer-kachel-echtfarbe.mjs +++ b/server/helfer-kachel-echtfarbe.mjs @@ -150,7 +150,10 @@ export async function pruefeEchteFarben({ port = 4369, breite = 1500 } = {}) { (an, ab) => { const weiter = httpAnfrage({ host: "127.0.0.1", port, path: an.url, method: an.method, - headers: { ...an.headers, host: CREW }, + /* MIT PORT (01.10.2026) -- siehe pruef-werdegang: Ohne + ihn vergleicht `gleicheHerkunft` Herkunft und Host und + antwortet 403. */ + headers: { ...an.headers, host: `${CREW}:${HTTPS_PORT}` }, }, (antwort) => { ab.writeHead(antwort.statusCode, antwort.headers); antwort.pipe(ab); }); weiter.on("error", () => { try { ab.destroy(); } catch { /* Zugabe */ } }); an.on("error", () => {}); diff --git a/server/mess-vanvan-karte.mjs b/server/mess-vanvan-karte.mjs index caf7525f..b5401ab6 100644 --- a/server/mess-vanvan-karte.mjs +++ b/server/mess-vanvan-karte.mjs @@ -305,32 +305,90 @@ console.log("=== 4. Was VanVan an einem Punkt sieht ==="); await seite.screenshot({ path: "server/mess-vanvan-karte-leitung.png", fullPage: true }); console.log(" Bild: server/mess-vanvan-karte-leitung.png"); - /* ---- Und der Filter: grenzt er wirklich ein? ------------------ - Ohne diesen Griff hiesse „der Knopf ist da" nur, dass ein Knopf - da ist. */ - const nachFilter = await seite.evaluate(() => { + /* ---- WOMIT GEHT DIE KARTE AUF? (01.10.2026) ----------------- + + Filipe: „mach alles los" -- damit auch: „Zugetragen" ist die + Vorgabe, wenn es etwas zu zeigen gibt. + + VORHER KLICKTE DIESE MESSUNG AUF DEN FILTER und zaehlte nach. + Seit er beim Aufmachen schon steht, haette derselbe Klick ihn + AUSgeschaltet -- die Messung haette das Gegenteil gemessen und + trotzdem eine Zahl gemeldet. Genau die Sorte gruener Haken, die + nichts prueft. + + Gefragt wird deshalb, was DASTEHT, bevor jemand etwas anfasst. */ + const beimAufmachen = await seite.evaluate(() => { + const gedrueckt = [...document.querySelectorAll(".e-stufen__knopf")] + .find((k) => k.getAttribute("aria-pressed") === "true"); + return { + filter: gedrueckt?.querySelector(".e-stufen__name")?.textContent.trim() || null, + punkte: document.querySelectorAll(".e-punkt").length, + alleZugetragen: [...document.querySelectorAll(".e-punkt")] + .every((p) => p.dataset.zugetragen === "ja"), + }; + }); + console.log(` Beim Aufmachen steht der Filter auf „${beimAufmachen.filter}": ` + + `${beimAufmachen.punkte} Punkte, alle zugetragen=${beimAufmachen.alleZugetragen}`); + if (beimAufmachen.filter !== "Zugetragen" || beimAufmachen.punkte !== 2 + || !beimAufmachen.alleZugetragen) { + console.log(" ACHTUNG: Die Karte geht nicht auf dem Zugetragenen auf."); + } + + /* GEGENPROBE: „Alle" ist einen Klick entfernt und zeigt wieder alle + 68. Ohne sie hiesse „2 Punkte" womoeglich nur, dass es nicht + mehr gibt. */ + const zurueck = await seite.evaluate(() => { const k = [...document.querySelectorAll(".e-stufen__knopf")] - .find((x) => x.querySelector(".e-stufen__name")?.textContent.trim() === "Zugetragen"); + .find((x) => x.querySelector(".e-stufen__name")?.textContent.trim() === "Alle"); if (!k) return null; k.click(); return true; }); - if (nachFilter) { + if (zurueck) { await seite.waitForTimeout(1200); - const n = await seite.evaluate(() => ({ - punkte: document.querySelectorAll(".e-punkt").length, - alleZugetragen: [...document.querySelectorAll(".e-punkt")] - .every((p) => p.dataset.zugetragen === "ja"), - })); - console.log(` Nach „Zugetragen": ${n.punkte} Punkte, ` - + `alle zugetragen=${n.alleZugetragen}`); - if (n.punkte !== 2 || !n.alleZugetragen) { - console.log(" ACHTUNG: Der Filter grenzt nicht auf das Zugetragene ein."); + const alle = await seite.evaluate(() => document.querySelectorAll(".e-punkt").length); + console.log(` Nach „Alle": ${alle} Punkte`); + if (alle !== 68) { + console.log(` ACHTUNG: „Alle“ zeigt nicht mehr alle 68.`); } - await seite.screenshot({ path: "server/mess-vanvan-karte-filter.png", fullPage: true }); - console.log(" Bild: server/mess-vanvan-karte-filter.png"); } else { - console.log(` ACHTUNG: Den Knopf „Zugetragen“ gibt es nicht.`); + console.log(` ACHTUNG: Den Knopf „Alle“ gibt es nicht.`); + } + + await seite.screenshot({ path: "server/mess-vanvan-karte-filter.png", fullPage: true }); + console.log(" Bild: server/mess-vanvan-karte-filter.png"); + + /* ==== UND WER NICHTS ZUGETRAGEN HAT? (01.10.2026) ============== + + Das ist die Gegenprobe, die der alte Kommentar verlangt: „Ein + Filter, der beim Öffnen schon etwas versteckt, lässt einen + Punkte suchen, die gestern noch da waren." Bei einem Menschen + ohne zugetragene Punkte zeigte „Zugetragen" eine LEERE Karte -- + und eine leere Karte sieht aus wie ein Fehler. + + VanVan hat in diesem Aufbau nichts zugetragen bekommen; ihre + Karte muss deshalb auf „Alle" aufgehen. */ + const beiVanVan = await seite.evaluate(async () => { + const k = [...document.querySelectorAll("#personen .e-person")] + .find((x) => (x.querySelector(".e-person__name")?.textContent || "").includes("VanVan")); + if (!k) return null; + (k.querySelector("button, a") || k).click(); + await new Promise((r) => setTimeout(r, 2200)); + const gedrueckt = [...document.querySelectorAll(".e-stufen__knopf")] + .find((x) => x.getAttribute("aria-pressed") === "true"); + return { + filter: gedrueckt?.querySelector(".e-stufen__name")?.textContent.trim() || null, + punkte: document.querySelectorAll(".e-punkt").length, + }; + }); + if (!beiVanVan) { + console.log(" KONNTE NICHT NACHSEHEN: VanVans Kachel war nicht zu finden."); + } else { + console.log(` Bei jemandem OHNE Zugetragenes: Filter „${beiVanVan.filter}", ` + + `${beiVanVan.punkte} Punkte`); + if (beiVanVan.filter !== "Alle" || beiVanVan.punkte !== 68) { + console.log(" ACHTUNG: Wer nichts zugetragen hat, bekommt eine leere Karte."); + } } if (konsole.length) console.log(" KONSOLE:", konsole.slice(0, 3).join(" | ")); await kontext.close(); diff --git a/server/pruef-werdegang.mjs b/server/pruef-werdegang.mjs index 494e0ea4..34a7d7bd 100644 --- a/server/pruef-werdegang.mjs +++ b/server/pruef-werdegang.mjs @@ -636,7 +636,13 @@ melde("=== 11. Im Browser ==="); (von, an) => { const weiter = httpWeiter({ host: "127.0.0.1", port: PORT, path: von.url, method: von.method, - headers: { ...von.headers, host: CREW }, + /* MIT PORT (01.10.2026). Der Browser schickt seine + Herkunft als `https://crew...:PORT`; wer den Host hier + ohne Port weitergibt, laesst `gleicheHerkunft` die + beiden vergleichen und 403 antworten. So macht es + mess-reaktion seit Langem richtig -- gefunden hat es + der erste POST, der auf JEDER Seite laeuft. */ + headers: { ...von.headers, host: `${CREW}:${HTTPS_PORT}` }, }, (antwort) => { an.writeHead(antwort.statusCode, antwort.headers); antwort.pipe(an); }); weiter.on("error", () => { try { an.destroy(); } catch { /* Zugabe */ } }); von.on("error", () => {}); @@ -655,6 +661,15 @@ melde("=== 11. Im Browser ==="); const konsole = []; seite.on("console", (m) => { if (m.type() === "error" && !/favicon|ERR_/i.test(m.text())) konsole.push(m.text()); }); seite.on("pageerror", (e) => konsole.push("Absturz: " + e.message)); + /* WELCHE ADRESSE ES WAR (01.10.2026). „403 (Forbidden)" allein + nennt den Weg nicht -- und dann sucht man ihn im ganzen Haus. + Eine Meldung, die nicht sagt, WORAN sie scheitert, ist der + dritte Ausgang ohne Auskunft. */ + seite.on("response", (a) => { + if (a.status() >= 400 && !/favicon/i.test(a.url())) { + konsole.push(`${a.status()} ${a.url().replace(/^https?:\/\/[^/]+/, "")}`); + } + }); await kontext.addCookies(kDogi.split("; ").filter(Boolean).map((teil) => { const i = teil.indexOf("="); diff --git a/workspace/anruf-probe.html b/workspace/anruf-probe.html index f26386f1..982bbeb5 100644 --- a/workspace/anruf-probe.html +++ b/workspace/anruf-probe.html @@ -16,8 +16,8 @@ verdeckt. Gefunden hat es pruef-struktur. Richtig sind `gate.css` (die Farbwerte des Hauses) und `haus.css`. --> - - + + - +