From e8a5d7bc7e5dc5c5308727d78d52df016d706a2d Mon Sep 17 00:00:00 2001 From: Dogfather Date: Thu, 1 Oct 2026 23:26:01 +0200 Subject: [PATCH] pruef-glocke: drei Viertel der Pruefung sind nie gelaufen MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 8 Pruefungen standen am Ende da. Jetzt sind es 36. SCHRITT FUER SCHRITT NACHGEMESSEN, statt der Meldung zu glauben: 1. Drei von acht Rollen scheiterten mit „Zeitsperre nach 25 s" beim Warten auf start.html -- hand, linke, modi. Danach brach die Datei ab; alles dahinter lief nie. 2. Nicht an der Last: allein dasselbe Bild. 3. Was antwortet die Anmeldung im Browser? 401 ungueltig. 4. Dieselbe Anmeldung ueber die Schnittstelle, am SELBEN laufenden Server: 200. Es lag also nie am Server. 5. Der Unterschied ist die KACHEL. Es gibt zwei Anmeldeseiten: workspace/index.html spicy, admin, manager, scout, creator workspace/crew-index.html admin, hand, linke, modi, gast Auf 127.0.0.1 kommt die Agenturseite. KEIN FEHLER AM PRODUKT. Der Server ist auf einer Pruefadresse absichtlich grosszuegig, damit Pruefungen alles testen koennen (das steht so im Quelltext); die zwei Seiten sind die Trennung der zwei Haeuser. DER FEHLER WAR EIN NOTNAGEL IN DER PRUEFUNG: const kachel = await seite.$(`.rolle[data-rolle="${rolle}"]`) || await seite.$(".rolle"); Er sollte verhindern, dass ein Klick auf eine fehlende Kachel abbricht. Seit die Kachel am 30.09. BINDEND ist (`718b267d`, auf Filipes Wunsch), macht er aus „diese Kachel gibt es hier nicht" etwas Schlimmeres: Er klickt irgendeine, der Server weist zu Recht ab, und heraus kommt eine Zeitsperre nach 25 Sekunden, die wie ein Fehler an der Glocke aussieht. EIN NOTNAGEL, DER STILL DAS FALSCHE GREIFT, IST SCHLIMMER ALS EIN LAUTER ABBRUCH. Jetzt wird die richtige Seite PROBIERT (nicht aus einer Liste von Crew-Rollen gelesen -- die waere die naechste, die beim sechsten Eintrag nicht mitwaechst), und findet sich die Kachel auf keiner der beiden, bricht es mit Namen ab und zeigt, welche Kacheln dastehen. DAS IST HEUTE DER ZWEITE FALL DERSELBEN WURZEL. Bei pruef-crew-wand-bild war es dieselbe Folgewirkung der bindenden Kachel, nur sichtbarer. Nach jener Aenderung bin ich die Pruefungen zum Zugang gelaufen und nicht die, die nebenbei eine Anmeldung brauchen. DENSELBEN NOTNAGEL GIBT ES NOCH EINMAL, in pruef-gifs. Dort zielt er auf `creator`, und die Kachel steht auf der Agenturseite -- er greift heute nie. Das ist Glueck und kein Entwurf, also ist er auch dort weg. GEPRUEFT: pruef-glocke 8 -> 36 Pruefungen, 0 Fehler, alle acht Rollen. pruef-gifs 17 Pruefungen, 0 Fehler. Co-Authored-By: Claude Opus 5 --- server/pruef-gifs.mjs | 10 ++++++++- server/pruef-glocke.mjs | 46 ++++++++++++++++++++++++++++++++++++++--- 2 files changed, 52 insertions(+), 4 deletions(-) diff --git a/server/pruef-gifs.mjs b/server/pruef-gifs.mjs index a2718649..4eb07d27 100644 --- a/server/pruef-gifs.mjs +++ b/server/pruef-gifs.mjs @@ -231,7 +231,15 @@ try { const k2 = await browser.newContext({ viewport: { width: 1200, height: 900 } }); const s2 = await k2.newPage(); await s2.goto(BASIS + "/workspace/", { waitUntil: "domcontentloaded" }); - const kachel = await s2.$('.rolle[data-rolle="creator"]') || await s2.$(".rolle"); + /* KEIN NOTNAGEL AUF IRGENDEINE KACHEL (01.10.2026). Hier stand + `|| await s2.$(".rolle")`. Er greift heute nie -- die + Creator-Kachel steht auf der Agenturseite. Dieselbe Zeile hat in + pruef-glocke drei Rollen unpruefbar gemacht: Seit die Kachel + bindend ist, wird eine falsch geklickte Anmeldung zu Recht + abgewiesen, und heraus kam eine Zeitsperre, die wie ein Fehler + am Produkt aussah. */ + const kachel = await s2.$('.rolle[data-rolle="creator"]'); + if (!kachel) throw new Error('Kachel "creator" steht nicht auf der Anmeldeseite'); if (kachel) await kachel.click(); await s2.fill("#code", "CODE-CREA-0001"); await s2.click("button[type=submit]"); diff --git a/server/pruef-glocke.mjs b/server/pruef-glocke.mjs index f9fbedbf..4431fc4c 100644 --- a/server/pruef-glocke.mjs +++ b/server/pruef-glocke.mjs @@ -220,9 +220,49 @@ async function anmelden(ctx, rolle, code) { Seit sie alle acht ansieht, waere `click` auf eine Kachel, die es nicht gibt, ein Abbruch -- und der saehe aus wie ein Fehler an der Glocke, obwohl er einer an der Pruefung waere. */ - const kachel = await seite.$(`.rolle[data-rolle="${rolle}"]`) - || await seite.$(".rolle"); - if (!kachel) throw new Error("keine einzige Rollenkachel auf der Anmeldeseite"); + /* ==== DIE RICHTIGE ANMELDESEITE (01.10.2026) ===================== + + Es gibt ZWEI, und sie gehoeren zu den zwei Haeusern: + + workspace/index.html spicy, admin, manager, scout, creator + workspace/crew-index.html admin, hand, linke, modi, gast + + Auf 127.0.0.1 kommt die Agenturseite. Wer sich als `hand`, + `linke` oder `modi` anmelden will, findet seine Kachel dort + nicht. + + HIER STAND EIN NOTNAGEL: + + ... || await seite.$(".rolle"); + + Er sollte verhindern, dass ein Klick auf eine fehlende Kachel + abbricht. Seit die Kachel am 30.09. BINDEND ist, macht er aus + „diese Kachel gibt es hier nicht" etwas Schlimmeres: Er klickt + irgendeine, der Server weist die Anmeldung zu Recht ab (401), + und heraus kommt eine Zeitsperre nach 25 Sekunden, die wie ein + Fehler an der Glocke aussieht. Drei von acht Rollen waren so + unpruefbar, ohne dass es jemandem auffiel. + + Gemessen: Dieselbe Anmeldung ueber die Schnittstelle antwortet + mit 200. Es lag nie am Server. + + Die Seite wird PROBIERT, nicht aus einer Liste gelesen -- eine + Liste von Crew-Rollen waere die naechste, die beim sechsten + Eintrag nicht mitwaechst. */ + let kachel = await seite.$(`.rolle[data-rolle="${rolle}"]`); + if (!kachel) { + await seite.goto(`${BASIS}/workspace/crew-index.html`, + { waitUntil: "domcontentloaded" }); + kachel = await seite.$(`.rolle[data-rolle="${rolle}"]`); + } + if (!kachel) { + /* LAUT ABBRECHEN STATT IRGENDEINE NEHMEN. Diese Meldung nennt + die Rolle; die Zeitsperre von vorher nannte nur eine Adresse, + auf die man nicht wartet. */ + const da = await seite.$$eval(".rolle", (ks) => ks.map((k) => k.dataset.rolle)); + throw new Error(`Kachel "${rolle}" gibt es auf keiner der beiden` + + ` Anmeldeseiten. Hier stehen: ${da.join(", ") || "keine"}`); + } await kachel.click(); await seite.fill("#code", code); await seite.click("button[type=submit]");