Die Zentrale bekommt die echten Marken -- und drei rote Pruefungen waren keine

Die drei Befunde in pruef-start-ansicht kamen NICHT vom Licht. Sie hingen
alle an einem boundingBox(), das einmal am Anfang ohne Vorrollen gemessen
wurde. Der Umbau zur Zentrale hatte die Begruessungskachel von 244 auf
404 px wachsen lassen, die zweite Kachel rutschte von y=971 auf y=1131,
ihre Mitte lag bei 1207 -- ausserhalb eines 1200 px hohen Fensters. Dorthin
faehrt kein Zeiger, also entstand kein Licht.

Verraten hat es die Mischung aus gruen und rot: "links" (30 % der Hoehe)
bestand, "rechts" (60 %) nicht. Eine Kachel, die nur zur Haelfte getroffen
wird, ist nicht kaputt -- sie haengt halb aus dem Bild.

Beides ist jetzt behoben, nicht nur eines:

  * Die Pruefung holt die Kachel ueber scrollIntoView({block:"center"})
    ins Bild und misst DANACH, vor jeder Benutzung. Passt sie trotzdem
    nicht ins Fenster, ist das ein harter Fehler statt einer stillen
    Fehlmessung.
  * Die Kachel selbst faellt von 404 auf 344 px. Groesster Posten war die
    Anrede-Pille mit 88 px: In ihr steckt <h1 class="titel">, und
    .willkommen .titel ist die grosse Seitenueberschrift -- es standen
    also zwei Ueberschriften in Titelgroesse uebereinander. Der Rang von
    #gruss aendert sich nicht, nur die Groesse.

Nebenbefund, den die Reparatur mit aufgedeckt hat: Die Randmessung stand
auf "nah 51 gegen fern 0". Diese 0 war kein Messwert, sondern der
Bildpunkt ausserhalb des Fensters. Jetzt "nah 43 gegen fern 7" -- dieselbe
Pruefung misst zum ersten Mal wirklich.

DIE MARKEN. marke-husky.webp war nie freigestellt (0,3 % durchsichtig,
alle vier Ecken Alpha 255) -- als Maske ergab das einen Kasten mit einem
Husky darin. Ersetzt durch das echte Original, damit repariert sich die
Kopfleiste ohne eine einzige geaenderte CSS-Zeile mit.

In der Mitte des Rings steht jetzt Spicy Media, nicht der Husky: Der Ring
zeigt DAS TEAM, ein Segment je Person. Der DogFather-Kopf in seiner Mitte
haette Filipe bildlich ins Zentrum seines eigenen Teams gesetzt.

Und davon nur die Chili: Das volle Siegel war bei 44 px unlesbarer Matsch.
Beim ersten Ausschneiden meldete das Werkzeug "60,8 % deckend, Ecken
0/0/0/0" -- klang tadellos und war ein schwarzes RECHTECK mit Chili darin.
Die Flutfuellung laeuft von aussen und kommt nie hinter den weissen Ring.
Gefunden hat das kein Kennwert, sondern das Hinsehen.

Gemessen: pruef-start-ansicht EXIT=0 (137 -> 140 Pruefungen, die drei
roten sind gruen, keine ist verschwunden), pruef-css-klassen EXIT=0
(472 Groessen), pruef-handy EXIT=0.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-09-08 02:39:32 +02:00
co-authored by Claude Opus 5
parent ec55b6c8d3
commit b2a0fb3a97
7 changed files with 545 additions and 32 deletions
+62 -6
View File
@@ -434,7 +434,49 @@ console.log("\n=== Das Licht folgt dem Zeiger");
const kontext = await browser.newContext({ viewport: { width: 1440, height: 1200 } });
const seite = await anmelden(kontext, "admin", "CODE-DOGI-0001");
const kachel = seite.locator(".kachel").nth(1);
const kasten = await kachel.boundingBox();
/* ERST INS BILD ROLLEN, DANN MESSEN -- und zwar VOR JEDER Benutzung.
Hier stand `const kasten = await kachel.boundingBox()` ein einziges
Mal, ganz am Anfang, ohne vorher zu rollen. Am 08.09.2026 hat das
drei Pruefungen dieses Blocks umgeworfen, ohne dass am Licht
irgendetwas kaputt war: Die Begruessungskachel wuchs beim Umbau zur
Zentrale von 244 auf 404 px, die zweite Kachel rutschte damit von
y=971 auf y=1131, und ihre Mitte lag bei 1207 -- ausserhalb eines
1200 px hohen Fensters. Dorthin kann kein Zeiger fahren, also
entstand kein Licht.
Verraten hat es die MISCHUNG aus gruen und rot: "links" (30 % der
Hoehe) bestand, "rechts" (60 %) nicht. Eine Kachel, die nur zur
Haelfte getroffen wird, ist nicht kaputt -- sie haengt halb aus dem
Bild. Genau dieser Fehler steht zwanzig Zeilen weiter unten schon
einmal beschrieben, fuer den 07.09.2026. Dort wurde er an der
einzelnen Stelle geflickt, hier nicht.
Deshalb jetzt nicht noch einmal eine feste Annahme, sondern eine
Funktion: Sie holt die Kachel MITTIG ins Bild und misst danach.
`block: "center"` statt `scrollIntoViewIfNeeded()` mit Absicht --
letzteres rollt nur so weit, dass die Kante gerade eben anliegt,
und dann liegt der 60-%-Punkt wieder am Rand. Wer die Kachel spaeter
noch hoeher macht, merkt davon nichts mehr. */
const kachelHolen = async () => {
await kachel.evaluate((k) => k.scrollIntoView({ block: "center", behavior: "instant" }));
await seite.waitForTimeout(150);
const k = await kachel.boundingBox();
/* Die Anzahl gehoert in die Bedingung, nicht in den Meldetext: Eine
Kachel, die trotz Rollen nicht ganz ins Fenster passt, wuerde die
naechsten Messungen still verfaelschen. Dann lieber hier lautstark
scheitern als drei Zeilen weiter unten raetselhaft. */
const fenster = await seite.evaluate(() => window.innerHeight);
if (k.y < 0 || k.y + k.height > fenster) {
throw new Error(`Die Kachel passt auch nach dem Rollen nicht ins Fenster `
+ `(y=${Math.round(k.y)}, Hoehe=${Math.round(k.height)}, Fenster=${fenster}). `
+ `Ist sie groesser geworden?`);
}
return k;
};
const kasten = await kachelHolen();
const ruhe = await kachel.evaluate((k) => k.style.getPropertyValue("--mx") || "(Ruhelage)");
@@ -491,8 +533,14 @@ console.log("\n=== Das Licht folgt dem Zeiger");
const anzahlAn = () => seite.evaluate(() =>
document.querySelectorAll('[data-licht="an"]').length);
/* 1. Ueber die Luecke zwischen zwei Kacheln hinaus. */
const k1 = await seite.locator(".kachel").nth(1).boundingBox();
/* 1. Ueber die Luecke zwischen zwei Kacheln hinaus.
Auch hier ueber `kachelHolen()` statt ueber ein blankes
`boundingBox()`: Die Mitte dieser Kachel lag am 08.09.2026
ausserhalb des Fensters, der Zeiger kam nie an, und die Pruefung
meldete "leuchtet genau eine Kachel (0)" -- als waere das Licht
kaputt. Es war nur niemand da, der es haette ausloesen koennen. */
const k1 = await kachelHolen();
await seite.mouse.move(k1.x + k1.width / 2, k1.y + k1.height / 2);
await seite.waitForTimeout(300);
ok(await anzahlAn() === 1, `beim Ueberfahren leuchtet genau eine Kachel (${await anzahlAn()})`);
@@ -719,11 +767,19 @@ console.log("\n=== Das Licht folgt dem Zeiger");
}
ok(ruhe === "(Ruhelage)", `ruhend keine eigene Position gesetzt (${ruhe})`);
await seite.mouse.move(kasten.x + kasten.width * 0.2, kasten.y + kasten.height * 0.3);
/* NEU GEMESSEN, nicht der Kasten von oben. Der Block darueber endet
mit `window.scrollTo({ top: 0 })` -- ab dieser Zeile steht die Seite
also wieder ganz oben, und jede Koordinate von vorhin zeigt um die
gerollte Strecke daneben. Genau daran ist "rechts" gescheitert. */
const kastenJetzt = await kachelHolen();
await seite.mouse.move(kastenJetzt.x + kastenJetzt.width * 0.2,
kastenJetzt.y + kastenJetzt.height * 0.3);
await seite.waitForTimeout(250);
const links = await kachel.evaluate((k) => k.style.getPropertyValue("--mx"));
await seite.mouse.move(kasten.x + kasten.width * 0.85, kasten.y + kasten.height * 0.6);
await seite.mouse.move(kastenJetzt.x + kastenJetzt.width * 0.85,
kastenJetzt.y + kastenJetzt.height * 0.6);
await seite.waitForTimeout(250);
const rechts = await kachel.evaluate((k) => k.style.getPropertyValue("--mx"));
@@ -734,7 +790,7 @@ console.log("\n=== Das Licht folgt dem Zeiger");
/* Beim Verlassen zurück in die Ruhelage. Ohne das blieben die Kacheln
nach einer Weile alle unterschiedlich beleuchtet stehen, ohne dass
jemand wüsste, warum. */
await seite.mouse.move(kasten.x - 250, kasten.y - 250);
await seite.mouse.move(kastenJetzt.x - 250, kastenJetzt.y - 250);
await seite.waitForTimeout(250);
const danach = await kachel.evaluate((k) => k.style.getPropertyValue("--mx") || "(Ruhelage)");
ok(danach === "(Ruhelage)", `nach dem Verlassen wieder in Ruhe (${danach})`);