Das Protokoll spricht deutsch -- und zwei Pruefungen messen wieder

Filipe: "ich will dass das alles viel anders und krasser und geiler
gestaltet ist bitte ... viel profissioneller und moderner."

--- DIE PERSONENSEITE ---

Auf seinem Bildschirmfoto stand woertlich, was in der Datenbank steht:
"treff_freigegeben", "video_eingelesen", "einstellung_geaendert". Das
sind Spaltenwerte, keine Saetze fuer Menschen. Daneben die rohe
IP-Adresse, quer ueber ein Viertel der Zeile.

KEINE TABELLE MIT 77 EINTRAEGEN. So viele Aktionen gibt es; eine
Liste davon waere am Tag der naechsten unvollstaendig, und niemand
merkte es -- dann stuende einfach wieder der Rohname da. Dieselbe
Falle wie jede abgeschriebene Liste in diesem Haus.

Stattdessen eine REGEL: Unterstriche werden Leerzeichen, der erste
Buchstabe gross. Das ergibt fuer jede Aktion einen lesbaren Ausdruck,
auch fuer die, die es noch nicht gibt. Nachgeprueft an allen echten
Namen:

  treff_freigegeben      -> Treff freigegeben
  einstellung_geaendert  -> Einstellung geändert
  chat_zurueckgenommen   -> Chat zurückgenommen
  vorlage_uebernommen    -> Vorlage übernommen

Die Umlaute sind der zweite Teil: In der Datenbank stehen sie als
ae/oe/ue. Blind zurueckzusetzen waere falsch ("neue" wuerde "neü"),
deshalb nur in Wortteilen, die sicher sind -- gemessen an den 77
echten Namen, nicht geraten.

Der Rohname bleibt als Titel an der Zeile: Wer im Server danach sucht,
braucht ihn genau so, wie er in der Spalte steht.

DIE IP TRITT ZURUECK, verschwindet aber nicht: feste schmale Spalte,
leiser Ton. Sie beantwortet eine Frage, die man selten stellt.

UND DIE BESCHREIBUNGEN BRECHEN UM. Die der linken Hand lief ueber 150
Zeichen in einer Zeile; der Augensprung ans naechste Zeilenende ist
dann so weit, dass man die Zeile verliert. Setzer rechnen seit
Jahrhunderten mit 60 bis 80. Gekuerzt wird nichts -- "78ch" misst in
ZEICHEN und stimmt darum auch, wenn die Schrift groesser gestellt wird.

--- UND DIE ZWEI ALTLASTEN, BEIDE GESTERN GEMELDET ---

pruef-chatkachel suchte dreizehn Toene als dreizehn Knoepfe. Das
stimmte, bis die Kachelfarbe ein FARBKREIS wurde (7a674963): Seither
liegen die meisten auf einem Schieberegler und werden durch Drehen
gewaehlt. Sie meldete seither "mit allen 13 Toenen (2)" -- nichts war
kaputt, sie stellte eine Frage, die es nicht mehr gibt. Jetzt fragt
sie, was zaehlt: Ist der Kreis da, ist er bedienbar, sagt er welche
Farbe eingestellt ist, und stehen die uebrigen daneben. 36 Pruefungen,
alles in Ordnung.

pruef-galerie mass "#liste". Das war richtig, bis die Highlights am
20.09. in Kanalspalten umzogen -- seither nimmt bereich.js dem
Listenkasten sein data-galerie ausdruecklich wieder weg und setzt es
an die einzelne Spalte. Die Pruefung mass also eine leere Huelle.
Dazu erwartete sie "mindestens zwei Spalten", und das ist in einer
schmalen Kanalspalte schlicht falsch: Dort gehoert EINE Kachel je
Reihe. Jetzt sucht sie das Raster ueber das BILD (nicht ueber einen
Kastennamen -- der naechste Umbau darf umbenennen) und fragt nach der
KACHELBREITE: "1 Spalte à 219 px in einem 243 px breiten Kasten".
Eine Galerie, die sich in vier Spalten à 90 px quetscht, waere der
Fehler -- nicht eine Spalte in einem schmalen Kasten.

Beide waren monatelang rot, ohne dass etwas kaputt war. Eine Warnung,
die immer kommt, liest irgendwann niemand mehr -- und dann faellt die
echte daneben auch nicht mehr auf.

Gemessen: pruef-chatkachel 36, pruef-galerie, pruef-css-klassen,
pruef-deutsche-texte -- alle ohne Befund.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-09-24 00:00:47 +02:00
co-authored by Claude Opus 5
parent 7aef7e4b9a
commit 2bea133feb
43 changed files with 778 additions and 596 deletions
+31 -2
View File
@@ -442,16 +442,45 @@ try {
const wahl = await s.evaluate(() => {
const dlg = document.querySelector("#kachel-wahl[open]");
const toene = [...document.querySelectorAll(".chat-kachelwahl__ton")];
const ring = document.getElementById("kachelrad-ring");
return {
offen: !!dlg,
toene: toene.length,
/* Der Farbkreis ist ein Schieberegler, kein Satz von Knoepfen.
Was auf ihm liegt, waehlt man durch Drehen. */
ring: !!ring,
ringBedienbar: ring ? ring.getAttribute("role") === "slider" : false,
ringSagtFarbe: ring ? (ring.getAttribute("aria-valuetext") || "") : "",
mitNamen: toene.filter((t) => (t.getAttribute("aria-label") || "").length > 2).length,
hoch: toene.length ? Math.round(toene[0].getBoundingClientRect().height) : 0,
};
});
ok(wahl.offen, "die Auswahl geht auf");
ok(wahl.toene === CHAT_KACHELN.length,
`mit allen ${CHAT_KACHELN.length} Tönen (${wahl.toene})`);
/* ==== NICHT MEHR "ALLE ALS KNOEPFE" (berichtigt 23.09.2026) ======
Hier stand `wahl.toene === CHAT_KACHELN.length` -- dreizehn Toene,
dreizehn Knoepfe. Das stimmte, bis die Kachelfarbe ein FARBKREIS
wurde (Commit 7a674963). Seither liegen die meisten Toene auf dem
Ring und werden durch Drehen gewaehlt; nur die, die weit genug
davon entfernt sind, bleiben als Knopf daneben stehen.
Die Pruefung meldete danach dauerhaft "mit allen 13 Toenen (2)".
Nichts war kaputt -- sie stellte eine Frage, die es nicht mehr
gibt. Und eine Warnung, die immer kommt, liest irgendwann niemand
mehr; dann faellt die echte daneben auch nicht mehr auf.
GEFRAGT WIRD JETZT, WAS ZAEHLT: Kommt man an die Farben heran?
Ueber den Kreis (der sagt, welche Farbe gerade eingestellt ist)
oder ueber die Knoepfe daneben. Wie sie sich auf beides verteilen,
ist Gestaltung und darf sich aendern, ohne dass hier etwas rot
wird. */
ok(wahl.ring, "der Farbkreis ist da -- auf ihm liegen die meisten Toene");
ok(wahl.ringBedienbar,
"und er ist als Schieberegler bedienbar (role=slider), nicht nur gemalt");
ok(wahl.ringSagtFarbe.trim().length > 3,
`er sagt auch, welche Farbe eingestellt ist ("${wahl.ringSagtFarbe}")`);
ok(wahl.toene >= 1,
`daneben stehen ${wahl.toene} Toene als Knopf -- die, die nicht auf dem Kreis liegen`);
ok(wahl.mitNamen === wahl.toene,
`jeder trägt seinen Namen (${wahl.mitNamen}) — wer Farben schlecht unterscheidet, wählt sonst blind`);
ok(wahl.hoch >= 44, `und ist am Finger treffbar (${wahl.hoch} px)`);
+59 -4
View File
@@ -264,9 +264,50 @@ try {
const m = await seite.evaluate(() => {
const bilder = [...document.querySelectorAll(".bildstreifen__bild")];
return {
raster: document.getElementById("liste")?.dataset.galerie || "",
spalten: getComputedStyle(document.getElementById("liste"))
.gridTemplateColumns.split(" ").filter(Boolean).length,
/* ==== DAS RASTER LIEGT EINE EBENE TIEFER (berichtigt 23.09.2026)
Gemessen wurde hier "#liste". Das war richtig, bis die
Highlights am 20.09.2026 in Kanalspalten umzogen: Seither
nimmt bereich.js dem Listenkasten sein data-galerie
ausdruecklich wieder weg ("delete ziel.dataset.galerie") und
setzt es an die einzelne Spalte -- sonst wurde der
Spaltenkasten zu EINER Zelle von 376 px und die drei Accounts
standen untereinander.
Die Pruefung ist seither dauerhaft rot gewesen ("mit mehreren
Spalten (1)"), ohne dass etwas kaputt war. Sie hat an einer
Stelle gemessen, an der absichtlich kein Raster mehr steht.
Und eine Warnung, die immer kommt, liest irgendwann niemand
mehr.
Gesucht wird jetzt dort, wo die Bilder wirklich liegen --
und zwar ueber das BILD, nicht ueber einen Kastennamen: Der
naechste Umbau darf die Huelle wieder umbenennen. */
raster: (() => {
const b = document.querySelector(".bildstreifen__bild");
const k = b ? b.closest("[data-galerie]") : null;
return k ? (k.dataset.galerie || "") : "";
})(),
spalten: (() => {
const b = document.querySelector(".bildstreifen__bild");
const k = b ? b.closest("[data-galerie]") : document.getElementById("liste");
return k ? getComputedStyle(k).gridTemplateColumns.split(" ").filter(Boolean).length : 0;
})(),
/* Wie breit ist der Kasten, und wie breit eine Spalte darin?
Ohne diese zwei Zahlen ist "eine Spalte" weder gut noch
schlecht -- es kommt darauf an, wie viel Platz da war. */
kastenBreit: (() => {
const b = document.querySelector(".bildstreifen__bild");
const k = b ? b.closest("[data-galerie]") : document.getElementById("liste");
return k ? Math.round(k.getBoundingClientRect().width) : 0;
})(),
spalteBreit: (() => {
const b = document.querySelector(".bildstreifen__bild");
const k = b ? b.closest("[data-galerie]") : document.getElementById("liste");
if (!k) return 0;
const erste = getComputedStyle(k).gridTemplateColumns.split(" ")[0] || "0";
return Math.round(parseFloat(erste) || 0);
})(),
anzahl: bilder.length,
/* WIRKLICH GELADEN, nicht nur im Quelltext: Ein kaputtes Bild hat
naturalWidth 0 -- und sieht im Foto aus wie ein Rahmen. */
@@ -279,7 +320,21 @@ try {
});
ok(m.raster === "ja", "die Liste ist ein Raster");
ok(m.spalten >= 2, `mit mehreren Spalten (${m.spalten})`);
/* ==== NICHT "MINDESTENS ZWEI" (berichtigt 23.09.2026) ==========
Hier stand `m.spalten >= 2`. Das war eine Erwartung an die
Anordnung, nicht an die Sache -- und seit die Highlights in
Kanalspalten liegen, ist sie schlicht falsch: In einer schmalen
Spalte gehoert EINE Kachel je Reihe, bei viel Platz zwei. So
steht es auch im Quelltext ("gerechnet wird nichts", auto-fit).
Gefragt wird deshalb, was wirklich zaehlt: Sind die Kacheln
breit genug, um etwas zu erkennen? Eine Galerie, die sich in
vier Spalten a 90 px quetscht, waere der Fehler -- nicht eine
Spalte in einem schmalen Kasten. */
ok(m.spalteBreit >= 140,
`die Kacheln sind breit genug (${m.spalten} Spalte(n) à ${m.spalteBreit} px `
+ `in einem ${m.kastenBreit} px breiten Kasten)`);
ok(m.anzahl >= 1, `${m.anzahl} Bilder im Raster`);
ok(m.geladen === m.anzahl, `alle wirklich geladen (${m.geladen} von ${m.anzahl})`);
ok(m.alt.every((t) => t && t.length > 5),