Der „Anpassen"-Knopf war nur an EINEM der beiden Bretter geprueft

Beim Nachsehen zu VanVans Meldung #6 aufgefallen, nicht beim Bauen:
Der Knopf haengt an ZWEI Kartenarten -- an den Creator-Vorlagen
(vorlagenbrett.js:459) und am Team-Katalog (:1220). Im Browser
gemessen war nur die erste.

UND DIE ZWEITE IST DIE, DIE VANVAN BENUTZT. Die Creator-Vorlagen
stehen auf „Aufgaben" und richten sich an Betreuer; der Katalog
steht auf „Eure Aufgaben", und dort verteilt die rechte Hand an die
Modis. Genau das war ihre Meldung.

Dass man diese beiden Bretter verwechselt, ist in diesem Haus schon
passiert: In pruef-bewerbung-aufgaben steht es seit dem 30.09. als
Messfehler notiert, „der wie ein Befund aussieht". Diesmal waere es
andersherum gewesen -- ein gruener Haken ueber einem Weg, den
niemand geprueft hat.

GEMESSEN HAT ES NICHTS KAPUTTES GEFUNDEN: Der Katalogzweig
funktioniert. Aber er war unbewiesen, und das ist derselbe Zustand
wie „ungeprueft" -- nur mit besserem Gefuehl.

DIE GEGENPROBE ZUM ANDEREN BRETT STECKT JETZT DRIN. Ein Creator
bekommt den „dauerhaft"-Haken NICHT (geprueft in
pruef-aufgaben-vorlagen), die Leitung MUSS ihn bekommen (geprueft
hier). Zwei Pruefungen, die denselben Unterschied von beiden Seiten
messen -- erst dann ist es eine Regel und nicht ein Zufall.

GEPRUEFT -- pruef-modi-katalog 150 -> 159 ok

  jede Katalogkarte hat einen „Anpassen …"-Knopf (12 von 12)
  das Fenster hat Frist und Anmerkung
  und die Leitung bekommt den „dauerhaft"-Haken
  die Frist der Vorlage steht als Vorgabe drin (2026-10-05,
    fruehestens 2026-10-03)
  mit Haken wird die Frist gesperrt
  die angepasste Aufgabe liegt in ihrer Liste (3 -> 4)
  sie ist wirklich dauerhaft · und hat keine Frist
  die Anmerkung steht als Notiz dabei

  Die letzten drei fragen die DATENBANK, nicht den Bildschirm. Was
  auf dem Brett steht, ist eine Darstellung; was in der Aufgabe
  steht, gilt.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-10-03 11:04:03 +02:00
co-authored by Claude Opus 5
parent 3d859cbed5
commit 2270f0de91
+99
View File
@@ -945,6 +945,105 @@ console.log("");
ok(danach.markiert >= 1, ok(danach.markiert >= 1,
"der Katalog markiert sie als uebernommen (" + danach.markiert + ")"); "der Katalog markiert sie als uebernommen (" + danach.markiert + ")");
/* ==== ANPASSEN AM KATALOG -- DORT, WO VANVAN ARBEITET =========
==============================================================
VanVan im Support, Meldung #6: „Es waere gut, wenn man auch
dort die Moeglichkeit haette die Frist anzupassen, sie als
dauerhafte Aufgabe einstellen zu koennen oder eventuell noch
eine Anmerkung hinzufuegen."
WARUM DIESE ZEILEN HIER STEHEN UND NICHT NUR IN
pruef-aufgaben-vorlagen: Dort wird der CREATOR-Zweig gemessen
-- das Vorlagenbrett auf „Aufgaben", angemeldet als Creator.
VanVan benutzt den KATALOG auf „Eure Aufgaben". Das sind zwei
verschiedene Karten in derselben Datei, und der Knopf haengt
an beiden einzeln.
Nach dem Einbau war nur der eine Zweig im Browser geprueft.
Beide liefern denselben Haken NICHT: Ein Creator darf
„dauerhaft" nicht setzen, die Leitung schon -- und genau
dieser Unterschied ist hier die Gegenprobe zu dort.
Dass man sich bei diesen beiden Brettern vertun kann, ist in
diesem Haus schon vorgekommen: In pruef-bewerbung-aufgaben
steht es als Messfehler notiert, „der wie ein Befund
aussieht". */
const anpassbar = await seite.evaluate(() => ({
karten: document.querySelectorAll(".vorlagenbrett__karte").length,
knoepfe: document.querySelectorAll(".vorlagenbrett__anpassen").length,
}));
ok(anpassbar.karten > 0 && anpassbar.knoepfe === anpassbar.karten,
`jede Katalogkarte hat einen „Anpassen …"-Knopf `
+ `(${anpassbar.knoepfe} von ${anpassbar.karten})`);
await seite.click(".vorlagenbrett__karte .vorlagenbrett__anpassen");
await seite.waitForSelector("dialog.nachfrage[open]", { timeout: 8000 });
const felder = await seite.evaluate(() => {
const dlg = document.querySelector("dialog.nachfrage");
const sicht = (teil) => {
const z = dlg.querySelector(`[data-teil="${teil}"]`);
return !!z && !z.hidden;
};
return {
datum: sicht("datumzeile"),
haken: sicht("hakenzeile"),
grund: sicht("grundzeile"),
wert: dlg.querySelector("#nachfrage-datum")?.value || "",
min: dlg.querySelector("#nachfrage-datum")?.min || "",
};
});
ok(felder.datum && felder.grund,
`das Fenster hat Frist und Anmerkung (${felder.datum}, ${felder.grund})`);
/* DIE GEGENPROBE ZU pruef-aufgaben-vorlagen: Dort bekommt ein
Creator den Haken NICHT. Hier, bei der Leitung, MUSS er da
sein -- sonst waere „dauerhaft" eine Einstellung, die es nur
im Quelltext gibt. */
ok(felder.haken === true,
`und die Leitung bekommt den „dauerhaft"-Haken (${felder.haken})`);
ok(/^\d{4}-\d{2}-\d{2}$/.test(felder.wert) && felder.wert >= felder.min,
`die Frist der Vorlage steht als Vorgabe drin (${felder.wert}, `
+ `fruehestens ${felder.min})`);
/* DER HAKEN SPERRT DAS DATUM -- eine dauerhafte Aufgabe hat
keine Frist. Ein Datum, das dasteht und nicht gilt, ist
schlimmer als keins. */
await seite.check("dialog.nachfrage #nachfrage-haken");
await seite.waitForTimeout(200);
ok((await seite.evaluate(() =>
document.querySelector("dialog.nachfrage #nachfrage-datum").disabled)) === true,
"mit Haken wird die Frist gesperrt");
const vorDauer = await seite.evaluate(zaehleListe);
await seite.fill("dialog.nachfrage #nachfrage-grund",
"Laeuft dauerhaft mit, bitte woechentlich kurz durchgehen.");
await seite.click('dialog.nachfrage [data-teil="ja"]');
await seite.waitForTimeout(2600);
ok(await seite.evaluate(zaehleListe) === vorDauer + 1,
`die angepasste Aufgabe liegt in ihrer Liste `
+ `(${vorDauer} -> ${await seite.evaluate(zaehleListe)})`);
/* UND JETZT DIE TATSACHEN, nicht die Anzeige. Was auf dem Brett
steht, ist eine Darstellung; was in der Aufgabe steht, gilt. */
{
const { DatabaseSync: DB5 } = await import("node:sqlite");
const d5 = new DB5(process.env.WORKSPACE_DB);
const neueste = d5.prepare(`SELECT a.id, a.dauerhaft, a.frist,
(SELECT COUNT(*) FROM aufgaben_notizen n WHERE n.aufgabe_id = a.id) AS notizen,
(SELECT text FROM aufgaben_notizen n WHERE n.aufgabe_id = a.id LIMIT 1) AS wort
FROM aufgaben a ORDER BY a.id DESC LIMIT 1`).get();
d5.close();
ok(neueste?.dauerhaft === 1,
`sie ist wirklich dauerhaft (${neueste?.dauerhaft})`);
/* KEINE FRIST -- sonst waere sie ab morgen fuer immer
ueberfaellig, und eine Warnung, die immer kommt, ist keine
mehr. Dieselbe Regel wie im Aenderungsweg. */
ok(!neueste?.frist,
`und hat keine Frist (${neueste?.frist ?? "keine"})`);
ok(neueste?.notizen === 1 && /woechentlich/.test(neueste?.wort || ""),
`die Anmerkung steht als Notiz dabei („${neueste?.wort}")`);
}
/* ==== DIE BEWERBUNG AM BILDSCHIRM ENTSCHEIDEN (23.09.2026) ====== /* ==== DIE BEWERBUNG AM BILDSCHIRM ENTSCHEIDEN (23.09.2026) ======
Filipe: „nur dogfather und die rechte hand sollen annehmen oder Filipe: „nur dogfather und die rechte hand sollen annehmen oder