Die Kachelfarben kommen jetzt WIRKLICH auf dem Bildschirm an

Filipe: "ich raste aus im ernst, was verstehst du nicht darunter wenn
ich sage das alle kacheln eine andere farbe haben sollen ich seh
immer wieder sehr viele die einfach komplett die gleiche farbe haben."

ER HATTE RECHT, UND MEINE PRUEFUNG WAR TROTZDEM GRUEN.
Der Grund war ein Messfehler, und zwar meiner: pruef-kachelfarben las
`--ton` aus start.css -- die ROHFARBE. Die lag zwischen allen 31
Kacheln weit auseinander (0,0978 in OKLab). Nur steht sie so nie auf
dem Bildschirm.

GEMESSEN an echten Bildpunkten (neu: tools/kachel-echtfarbe.mjs):
  Rohfarben:              0,0978 auseinander
  Auf dem Bildschirm:     0,0141
  Es kamen an:            14,4 Prozent
  Fuer ein Auge gleich:   ACHT Paare

Drei Stellen haben die Farbe geschluckt, alle in .kachel:
  1. Eine Wolke mit 16 Prozent -- in immer DEMSELBEN Blau, auf jeder
     Kachel. Der staerkste Gleichmacher der ganzen Wand. Sie traegt
     jetzt den Ton der Kachel.
  2. Die Vignette legte bis zu 55 Prozent Dunkelblau darueber.
  3. Der Grund trug den Ton zu 24 Prozent und ging ab 58 Prozent in
     fast reines Schwarz. Zwei Drittel jeder Kachel waren damit
     dieselbe Farbe, egal welcher Ton darueber stand.

Danach: 51,1 Prozent kamen an, NULL ununterscheidbare Paare.

UND DANN HAETTE ICH EINEN FEHLER GEGEN EINEN ANDEREN GETAUSCHT.
Gemessen an jedem einzelnen Kacheltext: VORHER war 1 von 31 unter
4,5:1, DANACH 27 von 31. Also genau das, was Filipe schon zweimal
gemeldet hat ("man bekommt fast nichts gelesen"). Kein Messwert hat
es angezeigt -- pruef-buehne nimmt Stichproben und traf die
Kacheltexte nicht.

Behoben mit einem Lesesaum: ein dunkler Verlauf VON UNTEN, der genau
den Streifen abdunkelt, auf dem gelesen wird, und die oberen zwei
Drittel in Ruhe laesst. Dasselbe Mittel, mit dem jede Bildunterschrift
auf einem Foto lesbar gemacht wird.

  Texte unter 4,5:1:   1 -> 27 -> 0
  Farbe kommt an:      14,4 % -> 51,1 % -> 36,5 %

VERTRAULICH MELDEN IST JETZT KNALLROT.
Filipe: "nicht die kachel draussen soll rot sein sondern die kachel
vertraulich melden nur die soll knall rot sein!!!" Ich hatte screen5
und screen6 vertauscht. Ringtausch ohne neue Farbe:
  Vertraulich melden  28 -> 38  (#ff1a1a, knallrot)
  Draussen            38 -> 39  (die Farbe, die Regeln & Hilfe hatte)
  Regeln & Hilfe      39 -> 28  (das frei gewordene Gruen)

NEU, UND DER EIGENTLICHE LERNEFFEKT:
server/helfer-kachel-echtfarbe.mjs misst beides in EINER Messung --
Farbunterschied UND Lesbarkeit. Wer sie trennt, verbessert das eine
und verliert das andere; genau das ist heute passiert. Benutzt von
der Pruefung und vom Werkzeug, damit es nur eine Fassung gibt.

pruef-kachelfarben 18/0 (war 13), davon fuenf am echten Bildschirm:
  - kein Paar sieht auf dem Bildschirm gleich aus (0,0357)
  - mindestens ein Drittel der Rohfarbe kommt an (36,5 %)
  - jeder Kacheltext erreicht 4,5:1 (schlechtester: 4,80:1)
Mit drittem Ausgang: kein Browser heisst "konnte nicht nachsehen",
nicht "in Ordnung".

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-09-22 10:26:49 +02:00
co-authored by Claude Opus 5
parent 65d278a18e
commit e12392a289
44 changed files with 1205 additions and 559 deletions
+83 -4
View File
@@ -57,10 +57,14 @@ const MINDEST_BUNTHEIT = 0.12;
/* Was festgelegt ist — mit dem Grund, aus dem es festgelegt wurde. */
const FESTGELEGT = [
{ ton: 28, kachel: "Vertraulich melden",
warum: "dieselbe Farbe wie fuer Regeln & Hilfe -- wer Hilfe sucht, landet bei einem von beiden" },
{ ton: 38, kachel: "Draußen", hex: "#ff1a1a",
warum: "knalliges Rot, traegt ab 20 Uhr den LIVE-Punkt" },
/* BERICHTIGT AM 22.09.2026. Ich hatte screen5 und screen6 vertauscht
und das Rot auf "Draussen" gelegt. Filipe: "nicht die kachel
draussen soll rot sein sondern die kachel vertraulich melden nur
die soll knall rot sein!!!" */
{ ton: 38, kachel: "Vertraulich melden", hex: "#ff1a1a",
warum: "knalliges Rot -- wer den vertraulichen Weg sucht, soll ihn finden, ohne zu lesen" },
{ ton: 39, kachel: "Draußen",
warum: "die Farbe, die Regeln & Hilfe hatte -- ausdruecklicher Wunsch (screen5)" },
];
let ok = 0, fehl = 0;
@@ -225,5 +229,80 @@ console.log("\n=== Gegenprobe ===");
pruef("ein blasser Ton wuerde auffallen (#ffe5ae)", buntheit("#ffe5ae") < MINDEST_BUNTHEIT);
}
/* =====================================================================
5. WAS AUF DEM BILDSCHIRM ANKOMMT -- der Teil, der gefehlt hat
=====================================================================
Alles bisher misst `--ton`: die ROHFARBE aus start.css. Und genau
damit war diese Pruefung gruen, waehrend Filipe am 22.09.2026 sagte:
"ich seh immer wieder sehr viele die einfach komplett die gleiche
farbe haben."
Er hatte recht. Die Kachel zeichnet ihren Ton nicht als Flaeche,
sondern als Verlauf unter einem Sternenfeld, einer Vignette und
(bis heute) einer fest blauen Wolke. Gemessen an echten
Bildpunkten: Von 0,0978 Abstand kamen 0,0141 an -- 14,4 Prozent.
ACHT Paare waren fuer ein Auge nicht mehr zu unterscheiden.
Eine Pruefung, die die Rohfarbe misst, beantwortet die Frage
"sehen die Kacheln verschieden aus" NICHT. Sie beantwortet
"stehen verschiedene Zahlen in der Datei". Das ist derselbe Fehler
wie am 01.09.2026 beim `every()` auf einem leeren Feld: Sie lief,
sie war gruen, und sie war wertlos.
Deshalb hier der Browser. Er kostet zwei Minuten -- und er ist der
einzige, der die Frage beantworten kann.
===================================================================== */
if (process.env.OHNE_BROWSER !== "ja") {
console.log("\n=== Und was davon auf dem Bildschirm ankommt ===");
const { pruefeEchteFarben } = await import("./helfer-kachel-echtfarbe.mjs");
const e = await pruefeEchteFarben();
if (!e.moeglich) {
/* DER DRITTE AUSGANG. Kein Browser, kein openssl, kein Port --
das ist "konnte nicht nachsehen", nicht "in Ordnung". */
console.log(` KONNTE NICHT NACHSEHEN: ${e.grund}`);
console.log(" (mit OHNE_BROWSER=ja laeuft die Pruefung bewusst ohne diesen Teil)");
fehl++;
} else {
pruef(`${e.anzahl} Kacheln am echten Bildschirm gemessen`, e.anzahl >= 20,
`nur ${e.anzahl} gefunden`);
/* DIE ZAHL GEHOERT IN DIE BEDINGUNG -- sonst waere dieser ganze
Abschnitt bei null Kacheln trivial gruen. */
pruef("kein Paar sieht auf dem Bildschirm gleich aus "
+ `(engstes: ${e.engstes.d.toFixed(4)}, ${e.engstes.a} <-> ${e.engstes.b})`,
e.anzahl >= 20 && e.ununterscheidbar === 0,
`${e.ununterscheidbar} von ${e.paare} Paaren unter 0,02`);
/* WIE VIEL VON DER ROHFARBE UEBERHAUPT ANKOMMT. Faellt das wieder
unter ein Drittel, ist die Gestaltung der Kachel der Grund --
und dann nuetzt die schoenste Rohfarbe nichts. */
pruef(`mindestens ein Drittel der Rohfarbe kommt an (${e.anteil.toFixed(1)} %)`,
e.anteil >= 33,
`nur ${e.anteil.toFixed(1)} % -- die Kachelgestaltung schluckt die Farbe`);
/* UND DER TEXT MUSS DARAUF LESBAR BLEIBEN.
================================================================
Diese zwei Zeilen sind die wichtigsten des ganzen Abschnitts.
Am 22.09.2026 wurde die Farbe kraeftiger gemacht -- richtig, und
gemessen. Dabei fielen 27 von 31 Kacheltexten unter 4,5:1;
vorher war es EINER. Kein Messwert hat das gemeldet, weil keine
Pruefung danach gefragt hat: `pruef-buehne` nimmt Stichproben
und traf die Kacheltexte nicht.
Farbe und Lesbarkeit gehoeren in DIESELBE Messung. Wer sie
trennt, verbessert das eine und verliert das andere -- und
merkt es erst, wenn jemand sagt, er koenne nichts mehr lesen. */
pruef(`${e.textGemessen} Kacheltexte auf Lesbarkeit gemessen`,
e.textGemessen >= 20, `nur ${e.textGemessen}`);
pruef("jeder Kacheltext erreicht 4,5:1 auf seiner Kachel"
+ (e.textSchlechteste
? ` (schlechtester: ${e.textSchlechteste.name} ${e.textSchlechteste.kontrast.toFixed(2)}:1)`
: ""),
e.textGemessen >= 20 && e.textZuWenig === 0,
`${e.textZuWenig} zu dunkel: ${e.textNamen.join(", ")}`);
}
}
console.log(`\n ${ok} bestanden, ${fehl} fehlgeschlagen\n`);
process.exit(fehl ? 1 : 0);