Startseite: ein Zuschauer hat keine Aufgaben -- und keine toten Knoepfe
ZUM ERSTEN MAL MIT GAST-AUGEN ANGESEHEN. Gemessen wurden bisher immer nur die sieben Bretter, nie die Seite davor -- dabei ist sie das Erste, was ein Mitglied sieht. Sie zeigte: "DEINE AUFGABEN" mit sieben Zaehlern (Ueberfaellig, Heute faellig, Offen, In Arbeit, Review, Erledigt, Abgebrochen), darunter "Nichts offen. Alles abgearbeitet - goenn dir was." und im Kopf "Nichts liegt an - guter Tag zum Vorarbeiten." Das ist die Sprache eines Arbeitsplatzes. Eine Zuschauerin hat hier keinen: Sie arbeitet nicht vor, ihr wird nichts zugewiesen, und "Review" sagt ihr nichts. UND JEDE DER SIEBEN ZAHLEN WAR EIN LINK auf aufgaben.html. Die Rechtetabelle nennt dort "ALLE" -- was die Rolle der Community ausdruecklich NICHT einschliesst. Nachgemessen: Ein Klick landet wieder auf start.html. Sieben tote Knoepfe, und der Kommentar direkt daneben sagt selbst: "Ein toter Knopf ist keine Antwort." WORAN DIE ENTSCHEIDUNG HAENGT -- nicht an der Rolle. Rollennamen der Community gehoeren nicht in eine Datei, die jeder herunterladen kann (pruef-modi-wortleck wacht darueber, und ROLLENTEXT laesst sie aus demselben Grund aus). Gefragt wird stattdessen nach etwas, das der Server ohnehin beantwortet hat: Hat diese Person die Aufgaben-Kachel? Er schickt nur, was jemand sehen darf. Keine zweite Wahrheit, kein Rollenname -- und es bleibt richtig, wenn sich die Rechte aendern. GEGENPROBE IM MESSWERKZEUG: ein zweiter Durchgang als DogFather auf derselben Seite. DogFather : Block DA, 7 Links, "Vorarbeiten" ja Community : Block weg, 0 Links, keine Arbeitswoerter Ohne diesen Durchgang saehe eine abgeschaffte Funktion genauso aus wie eine, die richtig entscheidet. Nebenbei: Die Startseite ist fuer die Community von 1436 auf 1231 px geschrumpft. Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
@@ -201,6 +201,53 @@ await ctx.addCookies(kGast.split("; ").filter(Boolean).map((z) => {
|
||||
return { name, value: rest.join("="), domain: "127.0.0.1", path: "/" };
|
||||
}));
|
||||
|
||||
console.log("");
|
||||
/* ---- ZUERST DIE STARTSEITE ---------------------------------------
|
||||
Sie ist das Erste, was ein Mitglied sieht -- und der einzige Weg zu
|
||||
den sieben Brettern. Bisher habe ich sie nie mit Gast-Augen
|
||||
angesehen; gemessen wurden immer nur die Bretter selbst. */
|
||||
{
|
||||
await seite.goto(`${BASIS}/workspace/start.html`, { waitUntil: "networkidle" });
|
||||
await seite.waitForTimeout(1600);
|
||||
const z = await seite.evaluate(() => {
|
||||
const kacheln = [...document.querySelectorAll(".kachel")];
|
||||
return {
|
||||
anzahl: kacheln.length,
|
||||
namen: kacheln.map((k) => (k.querySelector(".kachel__name, h2, h3")?.textContent || "").trim()),
|
||||
ohneUnterzeile: kacheln.filter((k) =>
|
||||
!(k.querySelector(".kachel__unter, .kachel p")?.textContent || "").trim()).length,
|
||||
hoehen: [...new Set(kacheln.map((k) => Math.round(k.getBoundingClientRect().height)))].length,
|
||||
ueberschrift: document.querySelector("h1")?.textContent?.trim() || "",
|
||||
seitenhoehe: document.body.scrollHeight,
|
||||
aufgabenBlock: !document.getElementById("zahlen-block")?.hidden,
|
||||
arbeitswoerter: [...document.body.innerText.matchAll(/Vorarbeiten|goenn dir was|gönn dir was|Betreut|Review|Abgebrochen/g)].map((m) => m[0]),
|
||||
};
|
||||
});
|
||||
console.log("");
|
||||
console.log("=== Die Startseite mit Gast-Augen ===");
|
||||
console.log(` Ueberschrift: „${z.ueberschrift}"`);
|
||||
console.log(` ${z.anzahl} Kacheln, ${z.hoehen} verschiedene Hoehen, ${z.ohneUnterzeile} ohne Unterzeile`);
|
||||
console.log(` ${z.namen.join(" · ")}`);
|
||||
console.log(` Seitenhoehe ${z.seitenhoehe} px · Aufgabenblock: ${z.aufgabenBlock ? "DA" : "weg"}`);
|
||||
console.log(` Arbeitswoerter auf der Seite: ${z.arbeitswoerter.join(", ") || "(keine)"}`);
|
||||
|
||||
/* FUEHREN DIE ZAHLEN IRGENDWOHIN? Sieben Links auf aufgaben.html --
|
||||
und die Rechtetabelle nennt dort „ALLE", was die Rolle „gast"
|
||||
ausdruecklich NICHT einschliesst. Also nachsehen statt annehmen. */
|
||||
const zahlenlinks = await seite.evaluate(() =>
|
||||
[...document.querySelectorAll("#zahlen a")].map((a2) => a2.getAttribute("href")));
|
||||
console.log(` Zahlen-Links: ${zahlenlinks.length}`);
|
||||
if (zahlenlinks.length) {
|
||||
const ziel = new URL(zahlenlinks[0], `${BASIS}/workspace/`).href;
|
||||
const antwort = await seite.goto(ziel, { waitUntil: "domcontentloaded" });
|
||||
console.log(` Klick auf die erste Zahl -> ${antwort.status()} ${seite.url().split("/").pop()}`);
|
||||
await seite.goto(`${BASIS}/workspace/start.html`, { waitUntil: "networkidle" });
|
||||
}
|
||||
await seite.screenshot({
|
||||
path: `C:/Users/qciga/AppData/Local/Temp/comm-start${BREITE < 700 ? "-handy" : ""}.png`,
|
||||
fullPage: true });
|
||||
}
|
||||
|
||||
console.log("");
|
||||
console.log("=== Was ein Mitglied sieht ===");
|
||||
for (const b of BRETTER) {
|
||||
@@ -252,6 +299,34 @@ console.log(fehlerAufSeite.length
|
||||
? `ACHTUNG: ${fehlerAufSeite.length} Konsolenfehler: ${fehlerAufSeite.slice(0, 3).join(" | ")}`
|
||||
: "Keine Konsolenfehler.");
|
||||
|
||||
/* ---- GEGENPROBE: SIEHT DAS TEAM SEINEN ARBEITSPLATZ NOCH? --------
|
||||
|
||||
„Deine Aufgaben" verschwindet seit dem 18.09.2026 fuer alle, die
|
||||
keine Aufgaben-Kachel haben. Die Gefahr dabei ist immer dieselbe:
|
||||
dass es auch dort verschwindet, wo es hingehoert. Ohne diese
|
||||
Messung saehe eine abgeschaffte Funktion genauso aus wie eine, die
|
||||
richtig entscheidet. */
|
||||
{
|
||||
const ctx2 = await browser.newContext({ viewport: { width: BREITE, height: 1100 } });
|
||||
const seite2 = await ctx2.newPage();
|
||||
await seite2.goto(BASIS + "/workspace/", { waitUntil: "networkidle" });
|
||||
await seite2.click('.rolle[data-rolle="admin"]');
|
||||
await seite2.fill("#code", "CODE-DOGI-0001");
|
||||
await seite2.click("button[type=submit]", { noWaitAfter: true });
|
||||
await seite2.waitForURL("**/start.html", { timeout: 25000 });
|
||||
await seite2.waitForTimeout(1600);
|
||||
const z = await seite2.evaluate(() => ({
|
||||
block: !document.getElementById("zahlen-block")?.hidden,
|
||||
links: document.querySelectorAll("#zahlen a").length,
|
||||
satz: document.body.innerText.includes("Vorarbeiten"),
|
||||
}));
|
||||
console.log("");
|
||||
console.log("=== Gegenprobe: DogFather auf derselben Seite ===");
|
||||
console.log(` Aufgabenblock: ${z.block ? "DA" : "FEHLT"} · Zahlen-Links: ${z.links}`
|
||||
+ ` · „Vorarbeiten": ${z.satz ? "ja" : "nein"}`);
|
||||
await ctx2.close();
|
||||
}
|
||||
|
||||
await browser.close();
|
||||
kind.kill();
|
||||
try { rmSync(ordner, { recursive: true, force: true }); } catch { /* Rest */ }
|
||||
|
||||
Reference in New Issue
Block a user