Aus jedem Fenster kommt man heraus, die Kachel dreht sich, der Eingang sieht aus wie das Haus
VIER DINGE, und das erste ist eine Meldung aus dem Support.
1. MISS KAM AUS "AUFGABE BEARBEITEN" NICHT HERAUS.
„Ich konnte da wieder nicht zurück gehen, musste die App schließen
damit ich wieder auf die Hauptseite kam."
Gemessen (mess-dialog-ausgang.mjs), vier Größen:
412x915 App 782 px Inhalt in 784 px -- knapp ja
412x780 Browser 782 px Inhalt in 742 px -- SACKGASSE
360x640 klein 794 px Inhalt in 602 px -- SACKGASSE
412x430 Tastatur 794 px Inhalt in 392 px -- SACKGASSE
`.dialog` hatte `overflow: hidden`, eine Scroll-Höhe gab es NUR für
`.dialog--breit`. Alles unterhalb des Rands wurde abgeschnitten --
samt "Abbrechen". Jetzt rollt JEDES Fenster, und Kopf wie Knopfzeile
bleiben stehen (`position: sticky`), damit man den Ausgang SIEHT,
ohne erst durch acht Felder zu scrollen. Alle vier Größen: ja.
2. DIE VORLAGENKACHEL DREHT SICH.
„wenn ich drauf drücke dreht sich die kachel und dan seh ich wer es
gemacht hat, und immer noch die option es nochmal zu verteilen falls
neue leute ins team zustoßen."
Vorne bleibt die Kurzfassung ("liegt bei 3 von 4"), hinten stehen
die Namen mit ihrem Stand und zwei Knöpfe: "Nachholen – 1 fehlt"
(oder "Nochmal an alle", wenn wirklich alle sie haben) und "Zurück".
Nach dem Verteilen dreht sie sich von selbst; wer nur nachsehen
will, drückt "Wer hat sie?".
3. DER EINGANG SIEHT AUS WIE DAS HAUS.
Fase und Leuchtschiene statt flachem Kasten, die Schiene in der
Farbe des Stands. Die drei Zahlen werden drei Felder -- und die
"0 neu" leuchtet nicht mehr rot: Eine Warnung, die immer kommt, ist
keine Warnung. Ab 760 px steht das Bild neben dem Text statt
darunter; die Karte war dadurch dreimal so hoch wie nötig.
4. DER CREATOR-KATALOG IST AUF DER TEAM-SEITE WEG.
„es gibt keine creator auf dieser seite" -- dort stand "Wähle oben
einen Creator", eine Aufforderung zu etwas Unmöglichem. Gefragt wird
jetzt nach den Daten (gibt es jemanden, dem ich das geben kann?),
nicht nach der Adresse.
DAZU FERTIG GEMACHT, WAS VON GESTERN OFFEN WAR:
* Die zwei Serien ohne Haus ("Community-Call", "Schulung-Agentur").
Ursache war meine eigene Abschrift: Bei den Terminen frage ich die
Teilnehmerliste, bei den Serien hatte ich sie vergessen. Auf einer
Kopie der echten Datenbank: 0 offene Zeilen.
* Sieben Schreibwege setzen jetzt `haus` (Aufgaben, Einträge,
Dateien, Material, Wissen, Video-Titelbild). Dabei gefunden:
`material` verwaltet seine Spalten SELBST -- meine Spalte stand in
der falschen Liste und fehlte auf einer frischen Datenbank
(78 Fehlschläge in pruef-material, jetzt 159/0).
* unterstuetzen.html lud meldung.js gar nicht -- dort stand das
Maschinenwort des Servers statt eines Satzes (pruef-meldungen 8/0).
DREI VERALTETE PRÜFUNGEN NACHGEZOGEN, jede STRENGER als vorher:
* "der Modi legt eine Aufgabe an (201)" -- seit dem 22.09. ist das
403 und gewollt. Geprüft wird jetzt auch das WORT.
* "calls.html ist verboten" -- Filipe hat die Kachel selbst verlangt
("jeder der einen kalender hat"). Mit Gegenprobe ersetzt.
* "Review" heißt seit dem 20.09. "Zur Freigabe". Der Name wird jetzt
aus STATUS_NAME GELESEN statt abgeschrieben.
GEPRÜFT: modi-katalog 150/0 (war 144), modi-verborgen 85/0 (war 80/2),
haus-trennung 97/0, material 159/0, meldungen 8/0, abbrechen-optik 0
Fehler. Dazu grün: an-alle, vorlagen, support, css-klassen,
aufgabenbrett, aufgaben-vorlagen, unterstuetzung, formulare, loeschen,
nachfrage, kalender, chat, leerzustand.
OFFEN UND NICHT ANGEFASST: pruef-breiten meldet auf report.html ein
Berührziel von 27x18 px. Der Link (`class="zurueck"`) ist auf 30
Seiten derselbe und hat gar keinen eigenen Stil; beanstandet wird nur
diese eine Seite, weil dort hinter ihm nur "· Review" steht und die
Prüfung Fließtext-Links erst ab 12 Zeichen Umgebung ausnimmt. Eine
Klasse auf 30 Seiten ohne Prüflauf zu ändern wäre geraten.
Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
@@ -325,11 +325,33 @@ console.log("\n=== 6. Was ein Modi auf seiner Startseite sieht ===\n");
|
||||
/* Nichts aus der Agentur. Nicht "moeglichst wenig", sondern keine
|
||||
einzige -- diese Seiten drehen sich um betreute Creator, um
|
||||
Rechte oder um Automationen. */
|
||||
/* `calls.html` STAND HIER UND IST AM 25.09.2026 HERAUSGENOMMEN.
|
||||
|
||||
Nicht, weil die Pruefung zu streng war, sondern weil sich die
|
||||
Sache geaendert hat: Filipe hat die Calls-Kachel ausdruecklich
|
||||
fuer alle verlangt, die einen Kalender haben („jeder der einen
|
||||
kalender hat soll auch sowas haben danke"), und ein Modi hat
|
||||
einen. Seither war diese Zeile rot, ohne dass etwas kaputt war
|
||||
-- und eine Warnung, die immer kommt, wird ueberlesen.
|
||||
|
||||
DIE LISTE BLEIBT EINE LISTE VON HAND, und das ist ihre Schwaeche:
|
||||
Sie altert genau so wie diese Zeile gealtert ist. Deshalb steht
|
||||
darunter eine Gegenprobe -- ohne sie waere „nichts Verbotenes
|
||||
dabei" auch dann gruen, wenn die Pruefung gar nichts mehr
|
||||
prueft. */
|
||||
const verboten = ["personen.html", "scouting.html", "automation.html",
|
||||
"report.html", "calls.html", "uebersicht.html", "content.html"];
|
||||
const drin = (b || []).map((x) => x.ziel).filter((z) => verboten.includes(z));
|
||||
ok(Array.isArray(b) && drin.length === 0,
|
||||
drin.length ? `ABER AUCH: ${drin.join(", ")} -- FEHLER` : "und nichts aus der Agentur");
|
||||
"report.html", "uebersicht.html", "content.html"];
|
||||
const ziele = (b || []).map((x) => x.ziel);
|
||||
const drin = ziele.filter((z) => verboten.includes(z));
|
||||
ok(Array.isArray(b) && verboten.length >= 6 && drin.length === 0,
|
||||
drin.length ? `ABER AUCH: ${drin.join(", ")} -- FEHLER`
|
||||
: `und nichts aus der Agentur (${verboten.length} Seiten geprueft)`);
|
||||
/* GEGENPROBE: Haette er eine davon, MUSS die Zeile darueber
|
||||
anschlagen. Gepruft wird an einer erfundenen Liste, nicht an
|
||||
echten Daten -- es wird nichts angelegt und nichts veraendert. */
|
||||
const alsHaette = [...ziele, "scouting.html"].filter((z) => verboten.includes(z));
|
||||
ok(alsHaette.length === 1,
|
||||
`und sie wuerde es merken, wenn doch (Probe: ${alsHaette.join(", ") || "merkt nichts"})`);
|
||||
/* Die Beschriftung gehoert zum Empfaenger: "Alle Creator auf einen
|
||||
Blick" waere fuer jemanden ohne Creator schlicht falsch. */
|
||||
ok((b || []).every((x) => x.name && x.unter && x.zeichen && x.ziel),
|
||||
@@ -409,6 +431,44 @@ console.log("\n=== 7. Dieselbe Seite mit einem echten Browser ===\n");
|
||||
|
||||
await seite.screenshot({ path: "pruef-modi-start.png", fullPage: true });
|
||||
console.log(" -- Bildschirmfoto: server/pruef-modi-start.png");
|
||||
|
||||
/* ==== DER CREATOR-KATALOG GEHOERT IHM NICHT (25.09.2026) ========
|
||||
|
||||
Filipe, zu einem Bildschirmfoto der Aufgabenseite: „es gibt
|
||||
keine creator auf dieser seite. die app ist nur fuer modis und
|
||||
community also steht das falsch da."
|
||||
|
||||
Dort stand ein Katalog mit vier Bereichen und vier Stufen -- der
|
||||
fuer CREATOR -- und darunter „Waehle oben einen Creator, dann
|
||||
lassen sich diese Aufgaben uebernehmen". Auf dieser Adresse gibt
|
||||
es keine; der Satz forderte zu etwas auf, das nie geht.
|
||||
|
||||
GEPRUEFT WIRD DER KASTEN UND DER SATZ, nicht nur einer von
|
||||
beiden: Verschwindet der Satz und der leere Kasten bleibt, ist
|
||||
es dieselbe Sackgasse in leise. */
|
||||
await seite.goto(BASIS + "/workspace/aufgaben.html", { waitUntil: "networkidle" });
|
||||
await seite.waitForTimeout(1200);
|
||||
const katalog = await seite.evaluate(() => {
|
||||
const kasten = document.getElementById("vorlagenbrett");
|
||||
return {
|
||||
daUeberhaupt: !!kasten,
|
||||
sichtbar: !!(kasten && !kasten.hidden && kasten.offsetHeight > 0),
|
||||
text: (document.body.textContent || "").includes("Wähle oben einen Creator"),
|
||||
/* GEGENPROBE IM SELBEN ZUG: Sein EIGENES Aufgabenbrett muss da
|
||||
sein. Waere die ganze Seite leer, meldeten die zwei Zeilen
|
||||
darueber brav "nichts Fremdes zu sehen". */
|
||||
eigenes: !!document.querySelector("#brett, .spalten, .aufgabe, #aufgaben"),
|
||||
};
|
||||
});
|
||||
ok(katalog.daUeberhaupt,
|
||||
"der Kasten fuer den Katalog steht im Bauplan der Seite (Gegenprobe)");
|
||||
ok(!katalog.sichtbar,
|
||||
`der Creator-Katalog wird ihm NICHT gezeigt (sichtbar: ${katalog.sichtbar})`);
|
||||
ok(!katalog.text,
|
||||
"und der Satz „Waehle oben einen Creator“ steht nirgends");
|
||||
ok(katalog.eigenes,
|
||||
"sein eigenes Aufgabenbrett ist trotzdem da (Gegenprobe)");
|
||||
|
||||
await kontext.close();
|
||||
} finally {
|
||||
await browser.close();
|
||||
@@ -434,7 +494,27 @@ console.log("\n=== 8. Aufgaben, Einträge und Dateien eines Modis ===\n");
|
||||
method: "POST", headers: { "Content-Type": "application/json", cookie: an.keks },
|
||||
body: JSON.stringify({ titel: MERKMAL + " Aufgabe" }),
|
||||
});
|
||||
ok(t1.status === 201, `der Modi legt eine Aufgabe an (${t1.status})`);
|
||||
/* ==== UMGEDREHT -- UND STRENGER (25.09.2026) ====================
|
||||
|
||||
Hier stand `status === 201`: „der Modi legt eine Aufgabe an". Das
|
||||
war bis zum 22.09.2026 richtig. An dem Tag hat Filipe es
|
||||
abgeschafft: „sie sich nicht selber aufgaben geben" und „die modis
|
||||
sollen nur diese aufgaben wo sie von den drauf markiert werden
|
||||
annehmen koennen". Seither antwortet der Server mit 403 -- und
|
||||
diese Zeile war seitdem rot, ohne dass etwas kaputt war.
|
||||
|
||||
SIE PRUEFT JETZT MEHR ALS VORHER, nicht weniger: nicht nur die
|
||||
Nummer, sondern auch das WORT. Eine 403 aus einem anderen Grund
|
||||
(etwa weil die Anmeldung kaputt ist) saehe sonst genauso aus wie
|
||||
die gewollte Absage -- und die Pruefung waere gruen ueber einem
|
||||
ganz anderen Fehler.
|
||||
|
||||
WARUM DAS WORT ZAEHLT: `nur_leitung_legt_an` hat in meldung.js
|
||||
einen ganzen Satz („Aufgaben werden dir zugeteilt -- anlegen
|
||||
kannst du hier keine"). Eine nackte 403 haette ihn nicht. */
|
||||
const t1Fehler = (await t1.json().catch(() => ({})))?.fehler;
|
||||
ok(t1.status === 403 && t1Fehler === "nur_leitung_legt_an",
|
||||
`der Modi legt KEINE Aufgabe an -- mit Begruendung (${t1.status} ${t1Fehler || "ohne Wort"})`);
|
||||
|
||||
/* (b) Ein Bereichs-Eintrag -- ebenfalls ueber den normalen Weg. */
|
||||
const t2 = await fetch(BASIS + "/workspace/api/bereich/live", {
|
||||
|
||||
Reference in New Issue
Block a user