Feste Checklisten statt Vorschlaege - in allen vier Bereichen
"Die neuen Sachen in der LIVE-Analyse soll der Creator FEST sehen, auch
schoen kategorisiert, und der Ansprechpartner soll anklicken koennen,
wenn er findet, dass der Creator was verbessern sollte."
DER UMBAU. Vorher waren die Punkte Vorschlaege zum Uebernehmen: Man
holte sie sich und bekam einen eigenen Eintrag. Das war falsch gedacht.
Eine Checkliste, die man erst anfordern muss, ist keine Checkliste --
und schlimmer: Zwei Creator haetten unterschiedliche Listen gehabt, je
nachdem wer sich was geholt hat. Genau das macht einen Vergleich
unmoeglich, und um Vergleich geht es bei einer Betreuung.
Jetzt stehen dieselben Punkte fuer JEDEN fest da, gruppiert:
LIVE 21 Punkte -- vor, waehrend, nach der Sendung
Community 14 Punkte -- Moderation vorbereiten, aufbauen, wenn es kippt
Technik 12 Punkte -- Einrichtung, Ausfall, was geholfen hat
Content 13 Ideen -- nach Saeule (70/20/10) statt nach Ablauf
Jede Gruppe hat einen Satz, der erklaert, wofuer sie da ist. Eine
Ueberschrift allein sagt das nicht.
Was sich je Creator unterscheidet, ist nur der STAND -- und den setzt
die Betreuung: "Passt so" oder "Verbessern". Ein Creator kann sich nicht
selbst bewerten; koennte er es, stuende alles auf gruen. "Verbessern"
verlangt einen Satz, WAS zu verbessern ist -- eine Bewertung, mit der er
nichts anfangen kann, ist nicht streng, sondern nur entmutigend.
Der Creator sieht alles: die Stufe, den Grund, den Namen und den
Zeitpunkt. Und er kann an JEDEM Punkt antworten -- das ist der Kanal,
ueber den er ueberhaupt etwas sagen kann.
Oben steht eine Bilanz in einer Zeile: wie viele passen, wie viele sind
zu verbessern, wie viele hat noch niemand angesehen. Das ist die Frage,
die beide Seiten zuerst haben.
STABILE SCHLUESSEL statt Positionen. Ein Stand haengt am Schluessel des
Punktes ("ton-geprueft"), nicht an seiner Nummer. Haenge er an der
Position, waere beim Einfuegen eines Punktes in der Mitte jede Bewertung
dahinter am falschen Punkt -- und niemand wuerde es merken, weil beides
plausibel aussieht. 64 Punkte haben jetzt einen.
"Offen" loescht den Stand, statt ihn auf "offen" zu setzen: Ein
Datensatz, der nichts aussagt, ist Ballast.
ZWEI EIGENE FEHLER, VON DEN PRUEFUNGEN GEFUNDEN:
1. DAS CSS LAG IN DER FALSCHEN DATEI. Ich hatte es in content.css
geschrieben -- bereich.html laedt die gar nicht. Die Punkte standen
auf drei von vier Seiten nackt und ohne Flaeche da. Es ist derselbe
Fehler wie im August bei .knopf-still, .schalter und .kopf-zeile, und
es gibt seitdem eine Warnung dazu in start.css. Sie hat nichts
genutzt, solange keine Pruefung sie nachhielt.
Jetzt gibt es eine: Sie misst, ob eine Karte wirklich eine Kante und
Polsterung hat -- nicht nur, ob das Element existiert. Gegenprobe
gemacht: Klasse umbenannt, Pruefung meldet "STIL FEHLT".
2. Ein Betreuer sah beim Oeffnen keine Bewertungsknoepfe, weil noch kein
Creator gewaehlt war -- und musste erst raten, dass er oben jemanden
auswaehlen soll. Jetzt nimmt der Server den ersten betreuten Creator,
wenn keiner angegeben ist.
Die alte Oberflaechenpruefung fuer den Vorschlaege-Block wurde entfernt
statt angepasst: Sie verlangte etwas, das es nicht mehr gibt. Eine
dauerhaft rote Pruefung ist schlimmer als keine -- man gewoehnt sich
daran, und beim naechsten echten Fehler sieht niemand hin.
Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
+11
-66
@@ -208,75 +208,20 @@ console.log("\n=== Hilfe anfordern");
|
||||
ok(leer.status === 400, `ohne Thema wird abgelehnt (${leer.status})`);
|
||||
}
|
||||
|
||||
/* ---------- Im Browser ---------------------------------------------------- */
|
||||
console.log("\n=== Die Seite");
|
||||
const { chromium } = await import(
|
||||
"file:///C:/Users/qciga/Documents/Obelix/Analyse/node_modules/playwright/index.mjs");
|
||||
const browser = await chromium.launch();
|
||||
{
|
||||
const kontext = await browser.newContext({ viewport: { width: 1280, height: 1000 } });
|
||||
const konsole = [];
|
||||
const seite = await kontext.newPage();
|
||||
seite.on("console", (m) => { if (m.type() === "error") konsole.push(m.text()); });
|
||||
seite.on("pageerror", (e) => konsole.push("pageerror: " + e.message));
|
||||
/* ---------- Die Oberflaeche ----------------------------------------------
|
||||
|
||||
await seite.goto(BASIS + "/workspace/", { waitUntil: "domcontentloaded" });
|
||||
await seite.click('.rolle[data-rolle="creator"]');
|
||||
await seite.fill("#code", "CODE-ANNA-0001");
|
||||
await seite.click("button[type=submit]");
|
||||
await seite.waitForURL("**/start.html", { timeout: 15000 });
|
||||
Der Browser-Teil stand hier und prueft den frueheren
|
||||
"Vorschlaege"-Block. Den gibt es seit dem Umbau auf die feste
|
||||
Checkliste nicht mehr: Die Punkte stehen jetzt fuer jeden gleich da,
|
||||
statt einzeln geholt zu werden.
|
||||
|
||||
for (const [seiteName, art] of [["content.html", "Ideen"], ["bereich.html?b=live", "Punkte"]]) {
|
||||
await seite.goto(BASIS + "/workspace/" + seiteName, { waitUntil: "networkidle" });
|
||||
await seite.waitForTimeout(900);
|
||||
const r = await seite.evaluate(() => ({
|
||||
da: !document.getElementById("vorlagen")?.hidden,
|
||||
knopf: document.querySelector(".vorlagen__kopf .knopf")?.textContent?.trim(),
|
||||
offen: document.querySelector(".vorlagen__raster")?.hidden === false,
|
||||
anzahl: document.querySelectorAll(".vorlage").length,
|
||||
}));
|
||||
ok(r.da, `${seiteName}: der Vorlagenblock steht da`);
|
||||
ok(/Vorschläge zeigen/.test(r.knopf || ""), ` mit Aufklappknopf ("${r.knopf}")`);
|
||||
ok(r.offen === false, " und ist zunächst zu");
|
||||
ok(r.anzahl > 0, ` ${r.anzahl} Vorschläge dahinter`);
|
||||
Geprueft wird die Oberflaeche deshalb in pruef-checkliste.mjs. Die
|
||||
Schnittstelle oben bleibt hier -- "Uebernehmen" gibt es weiterhin,
|
||||
fuer eigene Ergaenzungen ueber die feste Liste hinaus.
|
||||
|
||||
/* Aufklappen muss wirklich etwas zeigen. */
|
||||
await seite.click(".vorlagen__kopf .knopf");
|
||||
await seite.waitForTimeout(350);
|
||||
const auf = await seite.evaluate(() => ({
|
||||
offen: document.querySelector(".vorlagen__raster")?.hidden === false,
|
||||
sichtbar: [...document.querySelectorAll(".vorlage")].filter((v) => v.offsetParent !== null).length,
|
||||
hooks: document.querySelectorAll(".vorlage__hook").length,
|
||||
}));
|
||||
ok(auf.offen && auf.sichtbar > 0, ` aufgeklappt sind ${auf.sichtbar} zu sehen`);
|
||||
if (art === "Ideen") {
|
||||
ok(auf.hooks === auf.sichtbar, ` und jede zeigt ihren Aufhänger (${auf.hooks})`);
|
||||
}
|
||||
}
|
||||
|
||||
/* Übernehmen über die Oberfläche -- nicht nur über die Schnittstelle. */
|
||||
await seite.goto(BASIS + "/workspace/content.html", { waitUntil: "networkidle" });
|
||||
await seite.waitForTimeout(900);
|
||||
await seite.click(".vorlagen__kopf .knopf");
|
||||
await seite.waitForTimeout(300);
|
||||
/* Die Karten heissen dort .video -- ein erster Anlauf suchte nach
|
||||
".karte" und zaehlte deshalb immer null. */
|
||||
const vorher = await seite.evaluate(() => document.querySelectorAll(".video").length);
|
||||
await seite.click(".vorlage .schritt");
|
||||
await seite.waitForTimeout(1200);
|
||||
const nachher = await seite.evaluate(() => ({
|
||||
karten: document.querySelectorAll(".video").length,
|
||||
genommen: document.querySelectorAll('.vorlage[data-genommen="ja"]').length,
|
||||
}));
|
||||
ok(nachher.karten > vorher, `Übernehmen legt wirklich an (${vorher} → ${nachher.karten})`);
|
||||
ok(nachher.genommen === 1, `und die Vorlage ist als übernommen markiert (${nachher.genommen})`);
|
||||
|
||||
ok(konsole.length === 0, `keine Fehler in der Konsole${konsole.length ? " -> " + konsole.join(" | ") : ""}`);
|
||||
await seite.screenshot({ path: "pruef-vorlagen.png", fullPage: false });
|
||||
await kontext.close();
|
||||
}
|
||||
|
||||
await browser.close();
|
||||
Eine Pruefung stehen zu lassen, die etwas Abgeschafftes verlangt,
|
||||
waere schlimmer als keine: Sie ist dauerhaft rot, man gewoehnt sich
|
||||
daran, und beim naechsten echten Fehler sieht niemand hin. */
|
||||
try { rmSync(ordner, { recursive: true, force: true }); } catch { /* egal */ }
|
||||
console.log(fehler ? `\n${fehler} Prüfung(en) fehlgeschlagen.` : "\nAlles in Ordnung.");
|
||||
process.exit(fehler ? 1 : 0);
|
||||
|
||||
Reference in New Issue
Block a user