Eine Kampagne gehoert zur Agentur -- auch wenn DogFather ueberall admin ist

Aufgefallen beim Nachweis auf der echten Adresse, nicht beim Bauen:
Der Kasten haengt an `bereich === "agentur"` und an der Rolle. DogFather
ist aber in BEIDEN Haeusern `admin`. Oeffnet er auf
crew.dogfather-universe.com von Hand `bereich.html?b=agentur`, dann
stimmt der Bereich, die Rolle stimmt -- und `hausFuerNeuenEintrag` gaebe
der Kampagne das Haus "crew". Eine Agentur-Kampagne staende im Rudel,
und die Trennung waere an genau der Stelle unterlaufen, an der niemand
nachsieht. Bauplan, Teil 11: "Nichts im Haus Team Dogi."

ZWEI FRAGEN, ZWEI SCHWELLEN -- und das ist Absicht:

  /api/ich (ZEIGEN)     haus !== "crew"
  Route    (SCHREIBEN)  haus === "agentur"

Der Unterschied betrifft genau einen Fall: `null`. Den gibt es nur auf
einer PRUEFADRESSE -- `sitzungLesen` vergibt dort seit dem 24.09.2026
bewusst kein Haus, und die Begruendung dort nennt den Schaden:
Als 127.0.0.1 einmal ein Haus bekam, fiel pruef-chat-kanaele mit 13
Fehlschlaegen um, und die naechsten Pruefungen waeren still gruen
geblieben, ohne noch etwas zu messen. Eine echte Anfrage hat immer eine
der beiden Waende; eine Sitzung zu einer dritten lehnt
`sitzungPasstZurAdresse` ohnehin ab.

Beim SCHREIBEN wird trotzdem streng gefragt: Ein Eintrag mit
`haus = null` waere in BEIDEN Haeusern sichtbar -- genau das, was Teil
11 ausschliesst.

WAS ICH DABEI ZWEIMAL FALSCH VERSUCHT HABE
  Zuerst sollte das Bildwerkzeug ueber die Agenturwand kommen, damit
  es den Kasten weiter messen kann. Den Host-Kopf beim Durchreichen zu
  ueberschreiben wirkt nicht -- gemessen: /api/ich meldete weiter
  `darf: false`, der Wirt blieb "127.0.0.1:4338". Chromium laesst
  `Host` nicht ueberschreiben.

  Dann den Namen wirklich aufloesen (--host-resolver-rules). Das
  funktioniert, bringt aber die Anmeldemaske der echten Wand mit einer
  Tuer davor, die ein Bildwerkzeug nicht aufmachen soll. Gemessen
  werden soll die KACHEL, nicht der Zugang.

  Deshalb bleibt bild-kampagne auf der Pruefadresse -- und genau
  deshalb fragt /api/ich `!== "crew"` statt `=== "agentur"`. Beide
  Zeilen tragen jetzt die Begruendung bei sich, damit sie niemand
  "vereinheitlicht": Das macht entweder die Pruefungen blind oder
  laesst eine Kampagne ins Rudel.

Zwei Gegenproben gefahren, beide schlagen an: Route nimmt jede Wand an
-> 2 rot. /api/ich fragt nicht nach dem Haus -> 1 rot.

GEPRUEFT: pruef-kampagne 98 -> 99 gruen · bild-kampagne 20 Messungen
gruen · pruef-struktur, pruef-haus-trennung 107, pruef-agentur 62,
pruef-eventkarte 94, pruef-alle-wege, pruef-schranke, pruef-zeichen 8

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-10-07 17:31:11 +02:00
co-authored by Claude Opus 5
parent 10e24b0c93
commit 8cde56bd96
4 changed files with 122 additions and 8 deletions
+37 -2
View File
@@ -37,7 +37,24 @@ express.response.cookie = function (n, w, o) {
};
await import("./index.js");
await new Promise((r) => setTimeout(r, 1200));
const BASIS = `http://127.0.0.1:${PORT}`;
/* WARUM HIER 127.0.0.1 STEHT UND NICHT DIE AGENTURWAND
(gemessen und wieder zurueckgebaut, 07.10.2026).
Versucht wurde beides. Der Host-Kopf laesst sich in Chromium
nicht ueberschreiben (gemessen: /api/ich meldete weiter
`darf: false`, der Wirt blieb "127.0.0.1"), und laesst man den
Namen wirklich aufloesen, kommt die Anmeldemaske der echten Wand
-- mit einer Tuer davor, die dieses Werkzeug nicht aufmachen
soll. Gemessen werden soll die KACHEL, nicht der Zugang.
Deshalb bleibt es bei der Pruefadresse. Dort vergibt
`sitzungLesen` bewusst KEIN Haus (24.09.2026), und `/api/ich`
fragt genau deshalb `haus !== "crew"` statt `=== "agentur"`:
Der Kasten ist hier sichtbar und damit messbar.
Dass er auf der CREW-Adresse verschwindet, misst
pruef-kampagne mit echten Host-Koepfen -- das geht ohne
Browser und ist dort besser aufgehoben. */const BASIS = `http://127.0.0.1:${PORT}`;
const { DatabaseSync } = await import("node:sqlite");
const { scryptSync, randomBytes } = await import("node:crypto");
@@ -65,11 +82,23 @@ const pw = await import("file:///C:/Users/qciga/Documents/Obelix/Analyse/node_mo
const browser = await pw.chromium.launch();
const fehlerAufSeite = [];
const anmelden = async (seite, rolle, code) => {
await seite.goto(BASIS + "/workspace/", { waitUntil: "networkidle" });
await seite.click(`.rolle[data-rolle="${rolle}"]`);
await seite.fill("#code", code);
await seite.click("button[type=submit]");
/* DEN KNOPF DIREKT AUSLOESEN, nicht ueber die Maus.
page.click wartet darauf, dass das Element "visible, enabled and
stable" ist -- und auf der echten Agenturwand lief es dort in die
30-Sekunden-Frist. Die Anmeldeseite bewegt sich dauerhaft (die
Buehne atmet), also wird "stable" nie erreicht. Auf 127.0.0.1 war
das nie aufgefallen, weil dort eine andere Szene laeuft.
Gemessen wird hier die KACHEL, nicht die Anmeldemaske -- der
direkte Klick ist deshalb kein Umgehen einer Pruefung, sondern
der Weg zum eigentlichen Messgegenstand. */
await seite.$eval("button[type=submit]", (b) => b.click());
await seite.waitForURL("**/start.html", { timeout: 25000 });
};
@@ -107,6 +136,12 @@ async function messen(breite, hoehe, name) {
await seite.waitForTimeout(1600);
console.log(`\n=== ${name} (${breite} px) ===`);
const ichSagt = await seite.evaluate(async () => {
const a = await fetch("/workspace/api/ich", { credentials: "same-origin" });
const j = await a.json().catch(() => ({}));
return { rolle: j.rolle, darf: j.darf_kampagne_einlesen, wirt: location.host };
});
console.log(" /api/ich: " + JSON.stringify(ichSagt));
const mass = await seite.evaluate(() => {
const k = document.getElementById("kampagneholen");
if (!k || k.hidden) return { da: false };