Der Hinweis an der Anmeldung sagte seit dem 01.10. das Gegenteil

VanVan im Support, Meldung #5, zweite Runde: „Man kann sich jetzt nur
noch über die richtige Schaltfläche anmelden. Das funktioniert jetzt.
Aber wenn man sich 2x versucht über den falschen Button anzumelden,
dann kommt ein irreführender Text wo steht, dass die Auswahl oben
nicht schuld ist."

SIE HAT RECHT -- UND DER GRUND IST MEINE EIGENE AENDERUNG

Auf der Crew-Wand stand ab dem zweiten Fehlversuch: „Zugangscode
stimmt nicht. Achte auf die Bindestriche -- die Auswahl oben ist
nicht schuld."

Das war am 20.09.2026 richtig. Dort gab es den STILLEN ZUGANG: Die
rechte Hand und die Modis kamen ueber die Codekennung herein, egal
welche Kachel sie antippten. Der Satz „Stimmt die Auswahl oben?"
haette sie in eine Schleife geschickt -- alle Kacheln durchprobieren,
acht Fehlversuche, Adresse gesperrt. Ein Hinweis, der die Sperre
herbeifuehrt, gegen die er helfen soll.

Mit VanVans ERSTER Runde derselben Meldung ist der stille Zugang
weggefallen („es soll fest sein"). Nachgemessen in workspace.js: Die
Kandidaten kommen seither aus `WHERE rolle = ?`, auf beiden Waenden.
Die Kachel entscheidet ueberall -- und der Satz sagte ab diesem Tag
das Gegenteil der Wahrheit, genau an der Stelle, an der jemand
feststeckt.

DAS IST DIE SORTE FEHLER, DIE EIN UMBAU HINTERLAESST: Nicht der neue
Code war falsch, sondern ein Satz drei Dateien weiter, dessen
Voraussetzung er entfernt hat. Er stand sogar ausfuehrlich begruendet
da -- und die Begruendung las sich beim Umbau wie eine Bestaetigung,
weil sie von einem Zustand sprach, den es nicht mehr gab. Gefunden
hat ihn kein Prueflauf, sondern VanVan beim Benutzen.

GEAENDERT: Ein Satz fuer beide Waende. Die Fallunterscheidung nach
Wand ist weg -- es gibt nur noch eine Regel, also auch nur noch eine
Auskunft. Der Hinweis auf die Bindestriche bleibt; er galt nie nur
fuer eine Wand.

  „Zugangscode stimmt nicht. Stimmt die Auswahl oben? Ein Code
   gehört immer zu genau einer davon – und achte auf die
   Bindestriche."

GEPRUEFT -- pruef-modi-verborgen 87 -> 94 ok

  Im echten Browser, beide Waende (crew-index.html und index.html),
  je zweimal mit einem falschen Code:
    · die Waende sind wirklich verschieden (gate--crew true/false)
    · „nicht schuld" steht nirgends mehr
    · stattdessen die Frage nach der Auswahl -- die dort seit dem
      01.10. wirklich gilt (Abschnitt 1 derselben Datei misst das)
    · derselbe Satz auf beiden Waenden
    · Gegenprobe: nach dem ERSTEN Versuch steht er noch nicht da,
      dort steht die kurze Absage. Ein Hinweis, der immer kommt,
      waere keiner.

  DIE VERSUCHSSPERRE WIRD VOR DER MESSUNG GELEERT. Acht Fehlversuche
  je Adresse in zehn Minuten -- die Abschnitte davor verbrauchen
  welche, und ab dem neunten stuende „Zu viele Versuche" statt des
  Satzes. Das waere ein roter Haken ueber die Messumgebung gewesen,
  nicht ueber das Programm.

  Dazu: pruef-struktur 102 ok.

BEIDE HAEUSER BETROFFEN, und das ist hier richtig: Es ist dieselbe
Anmeldung mit derselben Regel. Nachgewiesen wird genau das -- der
Satz ist auf beiden Waenden derselbe, und er stimmt auf beiden.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-10-03 00:16:05 +02:00
co-authored by Claude Opus 5
parent f2f11e8091
commit 1ce2c3785e
48 changed files with 812 additions and 705 deletions
+94
View File
@@ -702,6 +702,100 @@ console.log("\n=== 8. Aufgaben, Einträge und Dateien eines Modis ===\n");
}
}
/* ---------- 8b. Was nach zwei Fehlversuchen dasteht -------------------
=====================================================================
VanVan im Support, Meldung #5, zweite Runde: „Man kann sich jetzt
nur noch über die richtige Schaltfläche anmelden. Das funktioniert
jetzt. Aber wenn man sich 2x versucht über den falschen Button
anzumelden, dann kommt ein irreführender Text wo steht, dass die
Auswahl oben nicht schuld ist."
DER SATZ WAR EINMAL RICHTIG. Auf der Crew-Wand gab es den stillen
Zugang; dort entschied die Kachel wirklich nicht, und wer alle
durchprobierte, sperrte sich nur selbst aus. Mit Abschnitt 1 oben
ist dieser Weg weggefallen -- und ab da sagte der Satz auf der
Wand, auf der jemand gerade feststeckt, das Gegenteil der Wahrheit.
GEPRUEFT WIRD BEIDES ZUSAMMEN: dass die Kachel wirklich entscheidet
(Abschnitt 1) UND dass der Satz das sagt. Eines ohne das andere
waere wieder die Lage von gestern.
DIE SPERRE WIRD VORHER GELEERT. Acht Fehlversuche je Adresse in
zehn Minuten -- die Abschnitte davor verbrauchen welche, und ab
dem neunten steht „Zu viele Versuche" statt des Satzes, um den es
hier geht. Das waere ein roter Haken ueber die Messumgebung, nicht
ueber das Programm. Gemessen werden soll der Hinweis, nicht die
Bremse.
-------------------------------------------------------------------- */
console.log("\n=== 8b. Der Hinweis nach zwei Fehlversuchen ===\n");
{
const { chromium } = await import(
"file:///C:/Users/qciga/Documents/Obelix/Analyse/node_modules/playwright/index.mjs");
const browser = await chromium.launch();
try {
const satzVon = async (wand) => {
/* Die Sperre je Lauf zuruecksetzen -- siehe oben. */
const dx = new DatabaseSync(process.env.WORKSPACE_DB);
dx.exec("DELETE FROM versuche");
dx.close();
const kontext = await browser.newContext({
viewport: { width: 390, height: 844 }, hasTouch: true, isMobile: true });
const seite = await kontext.newPage();
const konsole = [];
seite.on("pageerror", (e) => konsole.push("Absturz: " + e.message));
await seite.goto(`${BASIS}/workspace/${wand}`, { waitUntil: "domcontentloaded" });
await seite.waitForTimeout(400);
/* Irgendeine Kachel und ein Code, der zu keiner gehoert. */
await seite.click(".rolle >> nth=0");
const raus = [];
for (const n of [1, 2]) {
await seite.fill("#code", `FALSCH-CODE-000${n}`);
await seite.click("button[type=submit]");
await seite.waitForTimeout(900);
raus.push((await seite.textContent("#fehler") || "").replace(/\s+/g, " ").trim());
}
const crewKlasse = await seite.evaluate(() =>
document.body.classList.contains("gate--crew"));
await kontext.close();
return { nach1: raus[0], nach2: raus[1], crewKlasse, konsole };
};
const crew = await satzVon("crew-index.html");
const agentur = await satzVon("index.html");
ok(crew.crewKlasse === true && agentur.crewKlasse === false,
`zwei verschiedene Waende gemessen (crew ${crew.crewKlasse}, `
+ `agentur ${agentur.crewKlasse})`);
/* DER EIGENTLICHE BEFUND: Der alte Satz ist weg. */
ok(!/nicht schuld/i.test(crew.nach2),
`auf der Crew-Wand steht nicht mehr „die Auswahl oben ist nicht schuld" `
+ `(„${crew.nach2}")`);
ok(/Auswahl oben/.test(crew.nach2),
"sondern die Frage nach der Auswahl -- die dort seit Abschnitt 1 wirklich gilt");
/* EIN SATZ FUER BEIDE WAENDE. Zwei verschiedene waeren wieder zwei
Antworten auf dieselbe Frage, und eine davon veraltet. */
ok(crew.nach2 === agentur.nach2,
`und es ist derselbe Satz wie auf der Agenturwand (${crew.nach2 === agentur.nach2})`);
/* GEGENPROBE: Nach dem ERSTEN Fehlversuch steht der Hinweis noch
NICHT da. Ohne sie waere „der Hinweis kommt" auch dann gruen,
wenn er immer kaeme -- und ein Hinweis, der immer kommt, ist
keiner. */
ok(!/Auswahl oben/.test(crew.nach1),
`Gegenprobe: nach dem ersten Versuch steht er noch nicht da („${crew.nach1}")`);
ok(crew.nach1.length > 0 && /stimmt nicht/i.test(crew.nach1),
` dort steht die kurze Absage („${crew.nach1}")`);
ok(crew.konsole.length === 0 && agentur.konsole.length === 0,
`kein Skriptfehler auf beiden Waenden (${crew.konsole[0] || agentur.konsole[0] || "keiner"})`);
} finally {
await browser.close();
}
}
/* ---------- 9. Die Gegenprobe ----------------------------------------
Sie steht ABSICHTLICH GANZ UNTEN: Sie haengt eine Person
absichtlich aus der Regel aus. Lief sie weiter oben, tauchte