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`. -->
-
-
+
+
-
+