Aufgabenbrett: eine Karte ist ein Stueck Arbeit, keine Tabellenzeile

Filipe: "so wie alles gerade ist ist es zu wenig und zu viel zu
gleich". Die Zahl dahinter, an der echten Datenbank gemessen: 115
offene Aufgaben -- aber nur 17 verschiedene. Jede stand acht Mal da.

URSACHE, nicht Symptom: Am 22.09.2026 wurde dieselbe Vorlage zweimal
verteilt, nachgemessen zwischen 16:05:24 und 16:05:53. Zweimal
gedrueckt, weil beim ersten Mal scheinbar nichts passierte. 56 der
115 Karten sind exakte Doppelte.

WAS SICH AENDERT

Aufgaben mit gleichem Titel, gleicher Frist und gleicher Kategorie
stehen jetzt als EINE Karte da: "0 von 8", ein Balken, und die Leute
als Pillen in ihrer Statusfarbe. Wer sie doppelt hat, traegt x2.

Der Hinweis auf die Doppelten steht EINMAL ueber dem Brett, mit Zahl
-- nicht siebzehnmal an den Karten. Eine Warnung, die auf jeder Karte
steht, ist Tapete (Lehre vom 03.09.2026).

Die Spalten wachsen nach dem, was sie tragen: "Offen" mit 17 Karten
bekam vorher genauso viel Platz wie "Erledigt" mit einer -- beide
369 px, gemessen. Innerhalb der Spalte legen sich die Karten
nebeneinander, sobald Platz da ist (auto-fill, keine feste Spaltenzahl).

Das Vorlagenbrett steht oben, solange das Brett leer ist, und wandert
darunter, sobald etwas daliegt. Die urspruengliche Begruendung ("wer
ein leeres Brett hat, soll nicht daran vorbeiscrollen") gilt nur fuer
den leeren Fall.

Am Handy wird aus "Wer hat gerade was" eine wischbare Reihe statt
gestapelter Pillen, mit Randschattierung als Hinweis, dass es
weitergeht.

GEMESSEN (echte Datenlage: 17 Vorlagen, vier Leute, doppelt verteilt)

  Computer  46 077 px -> 2 445 px   (18,8-fach kuerzer)
  Handy     44 216 px -> 5 763 px   ( 7,7-fach kuerzer)
  Brett beginnt am Handy bei 798 statt 901 px -- die erste Aufgabe
  ist damit ohne Scrollen sichtbar.

DREI BEFUNDE NEBENBEI, ALLE VON MIR

1. team.css: Der Schreiben-Knopf auf der Team-Lage stand bei 42 px.
   Am 22.09. habe ich beim Kartenumbau das Polster von 10 auf 9 px
   gesenkt und ihn damit unter die Hausregel gedrueckt. Jetzt
   min-height statt Polsterrechnung -- die Hoehe haengt nicht mehr
   daran, ob jemand spaeter an der Schriftgroesse dreht.

2. chat.css: Die Knoepfe der Aufnahmeleiste standen bei 40 px, der
   Weg-Knopf der GIF-Kiste bei 28. Beide in der Nacht zum 23.09.
   gebaut. Die Leiste bekommt volle 44 px; der GIF-Knopf bleibt klein
   sichtbar und waechst nur in der TREFFERFLAECHE (28 + 2x8 = 44),
   und das nur am Finger -- mit der Maus zielt man genau, eine
   unsichtbar vergroesserte Flaeche waere dort eine Falle.

3. pruef-chat-anhaenge meldete "aus der Kiste genommen (1 uebrig)".
   Kein Codefehler: Die Pruefung setzte `window.confirm = () => true`,
   und heute frueh ist dort der Hausdialog an die Stelle getreten. Sie
   klickte, die Seite fragte, niemand antwortete. Genau der Fall, vor
   dem der Kopf von helfer-nachfrage.mjs seit dem 19.09. warnt -- zum
   zweiten Mal, an einer neuen Stelle. Jetzt ueber `bestaetige`, und
   damit prueft die Zeile ab sofort mit, DASS gefragt wird.

PRUEFUNGEN

pruef-modi-katalog zaehlte Karten und erwartete +1. Seit der
Gruppierung ist das die alte Anordnung, nicht die Sache: Sie zaehlt
jetzt AUFGABEN ueber data-id/data-ids und meldet "2 -> 3 Aufgaben in
2 Karten" -- damit ist beides belegt, das Anlegen und das
Zusammenfassen.

Alles gruen: aufgabenbrett 49, zuteilung 75, bewerbung-aufgaben 101,
modi-katalog 125, chat-anhaenge 109, chat-optik 56, tippziele 11,
teamlage-karten 39, sprung 43, textform 50, formulare 23,
css-klassen 33, zeichen 7, ueberlappung (20 Paare).
Handy-Rundgang: 220 Seitenaufrufe, 112 776 Elemente, 0 Befunde.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-09-23 16:25:06 +02:00
co-authored by Claude Opus 5
parent 1851d447c3
commit b1319e3124
46 changed files with 1363 additions and 624 deletions
+15 -2
View File
@@ -935,10 +935,23 @@ const GIF_B64 = "R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7";
" sie liegt bei den Anhängen");
/* ---- Aus der Kiste nehmen: das Verschickte bleibt ---------------- */
await dogi.seite.evaluate(() => { window.confirm = () => true; });
/* DIE RUECKFRAGE WIRD BEANTWORTET, NICHT UMGANGEN.
Hier stand `window.confirm = () => true` -- und das war richtig,
solange die Kiste einen nativen confirm() benutzte. Am 23.09.2026
ist er durch den Hausdialog ersetzt worden; seither klickte die
Pruefung den Knopf, die Seite fragte, und niemand antwortete.
Ergebnis: zwei rote Zeilen an einer Stelle, an der nichts kaputt
war -- genau der Fall, vor dem der Kopf von helfer-nachfrage.mjs
seit dem 19.09.2026 warnt. Zum zweiten Mal, an einer neuen Stelle.
`bestaetige` kennt beide Wege und beantwortet den, der wirklich
kommt. Damit prueft diese Zeile ab jetzt auch mit, DASS ueberhaupt
gefragt wird: Verschwindet die Rueckfrage eines Tages, laeuft der
Helfer in seine Frist und die Zeile wird rot. */
await dogi.seite.click("#gif-auf");
await dogi.seite.waitForTimeout(600);
await dogi.seite.click(".gif-kachel__weg");
await bestaetige(dogi.seite, () => dogi.seite.click(".gif-kachel__weg"));
await dogi.seite.waitForTimeout(1500);
const restKacheln = await dogi.seite.locator(".gif-kachel").count();
ok(restKacheln === 0, `aus der Kiste genommen (${restKacheln} übrig)`);
+19 -3
View File
@@ -761,19 +761,35 @@ console.log("");
.map((z) => z.textContent.trim()).find((t) => t.includes("gehen an")) || "");
ok(nachWahl.includes("Marina"), "nach dem Klick steht es da: " + nachWahl);
const vorher = await seite.evaluate(() => document.querySelectorAll(".karte").length);
/* GEZAEHLT WERDEN AUFGABEN, NICHT KARTEN.
Seit dem 23.09.2026 fasst das Brett gleiche Aufgaben zu EINER
Karte zusammen ("0 von 8"). Eine neue Aufgabe erhoeht die
Kartenzahl also nur dann, wenn es noch keine gleichnamige gibt --
sonst wandert sie in eine bestehende Karte hinein. Genau das
war die Absicht des Umbaus; eine Pruefung, die trotzdem Karten
zaehlt, misst ab da die alte Anordnung und nicht die Sache.
Jede Karte weist ihre Aufgaben aus: data-id (eine) oder
data-ids (mehrere). */
const zaehleAufgaben = () => [...document.querySelectorAll(".karte")]
.reduce((n, k) => n + (k.dataset.ids || k.dataset.id || "")
.split(",").filter(Boolean).length, 0);
const vorher = await seite.evaluate(zaehleAufgaben);
await seite.evaluate(() => {
[...document.querySelectorAll(".vorlagenbrett__karte")][0]
?.querySelector("button")?.click();
});
await seite.waitForTimeout(1800);
const danach = await seite.evaluate(() => ({
aufgaben: [...document.querySelectorAll(".karte")]
.reduce((n, k) => n + (k.dataset.ids || k.dataset.id || "")
.split(",").filter(Boolean).length, 0),
karten: document.querySelectorAll(".karte").length,
fuerMarina: [...document.querySelectorAll(".karte")]
.filter((k) => k.textContent.includes("Marina")).length,
}));
ok(danach.karten === vorher + 1,
"die Aufgabe liegt auf dem Brett (" + vorher + " -> " + danach.karten + ")");
ok(danach.aufgaben === vorher + 1,
"die Aufgabe liegt auf dem Brett (" + vorher + " -> " + danach.aufgaben
+ " Aufgaben in " + danach.karten + " Karten)");
ok(danach.fuerMarina > 0, "und zwar bei Marina (" + danach.fuerMarina + ")");
/* ==== DIE BEWERBUNG AM BILDSCHIRM ENTSCHEIDEN (23.09.2026) ======