Support: Babyblau mit Lila, und der Melder bekommt seine Knoepfe wirklich
Nachtrag zu cebdd88e. Ein Bildschirmfoto der fertigen Seite hat drei
Dinge gezeigt, die keine Pruefung sehen konnte.
1. DIE KACHEL WAR IMMER NOCH ORANGE.
Filipe: "die hauptfarbe der kachel soll auch babyblau sein mit bissl
lila." Die Seite trug zwar `--akzent: #a8d8ff`, aber der Kopf faerbt
sich ueber `--ton` -- und der stand am body auf Ton 44, dem Orange
vom 24.09. Die Variable war gesetzt und wirkungslos.
Ton 44 ist jetzt #a8d8ff. WEIL DIE FARBE DIESMAL AUS EINEM WUNSCH
kam und nicht aus einer Rechnung, wurde sie nachgemessen:
Kontrast gegen den dunklen Grund 12,46:1 (Hausgrenze 4,5)
Abstand zur naechsten Kachelfarbe 0,1125 (Ton 15)
Engstes Paar im Haus ohnehin 0,0154
-> 7,3-fach weiter weg als das schwaechste Glied
Babyblau haelt die Buntheitsgrenze (0,12) NICHT und kann sie nicht
halten -- das liegt am Wort. Nachgemessen mit einer Suche ueber den
ganzen Blaubereich: Es gibt KEINE Farbe, die gleichzeitig babyblau
aussieht, Buntheit >= 0,12 und Abstand >= 0,09 schafft; der beste
Kandidat kommt auf 0,075 Abstand. Der Blaubereich ist von sechs
Toenen besetzt.
DIE GRENZE WURDE DESHALB NICHT GESENKT, sondern BENANNT ausgenommen
(`blassErlaubt` in pruef-kachelfarben). Eine gesenkte Grenze gaelte
fuer alle 45 Toene; eine benannte gilt fuer eine und steht mit
ihrem Grund da. Und sie kostet etwas: Wer blass sein darf, muss
beim Abstand >= 0,10 halten -- gemessen, nicht versprochen, mit
Gegenprobe.
NEBENBEI ZWEI ALTE ROTE BEHOBEN: Die Prüfung war seit dem 24.09.
rot (engstes Paar 0,0862 zwischen Ton 41 und 45, und zwei Farben in
der Regenbogenkachel stimmten nicht mehr). Ton 45 neu gerechnet
(0,0914) und die Kachel nachgezogen. 22 -> 26 Pruefungen, 0 Fehler.
2. DIE LEITUNG SAH DIE KNOEPFE DES MELDERS.
Der Server lehnte sie richtig mit 404 ab -- die Karte bot sie ihr
trotzdem an. `darf_bestaetigen` war eine Aussage ueber die MELDUNG
statt ueber den BETRACHTER. Zwei Knoepfe, die nur eine Fehlermeldung
koennen, sind schlimmer als gar keine.
Jetzt fragen Route UND Anzeige dieselbe Funktion `darfBestaetigen`.
Es ist ausdruecklich "ist der Melder" und nicht "ist nicht Leitung":
Die Leitung darf ihre EIGENE Meldung bestaetigen, nur keine fremde.
Und die Leitung sieht bei "wartet" jetzt, wer dran ist -- "Liegt bei
Miss" mit ruhig atmendem Punkt, dazu "Noch etwas nachschicken ..."
statt "Behoben - nachfragen ...". Sie hat ja schon nachgefragt.
3. NACHLEGEN HAETTE DEN VERLAUF VERDOPPELT.
Antwortet die Leitung ein zweites Mal, waehrend die Meldung beim
Melder liegt, entstand eine ZWEITE Zeile "Runde 1" -- und sein
spaeteres Urteil haette beide gleichzeitig beschriftet. Jetzt
ersetzt ON CONFLICT die Antwort in derselben Runde.
DER EIGENTLICHE FUND STECKTE IM INDEX: `CREATE UNIQUE INDEX IF NOT
EXISTS` unter dem alten Namen tut auf dem Server NICHTS -- dort gibt
es den Namen schon, als gewoehnlichen Index, und IF NOT EXISTS
sieht nur den Namen, nicht die Bauart. Der Index waere nie eindeutig
geworden, ON CONFLICT haette kein Ziel gefunden, und das Nachlegen
waere abgebrochen -- genau dort, wo lokal alles gruen ist, weil jede
Pruefung ihre Datenbank frisch anlegt. Gefunden beim Durchspielen
auf einer KOPIE der echten Datenbank. Der alte Index wird jetzt
ausdruecklich weggenommen, der neue heisst anders.
GEMESSEN:
- pruef-support 59 -> 63 Pruefungen, 0 Fehler (darunter: die Leitung
bekommt die Knoepfe NICHT, und Nachlegen laesst EINE Runde stehen).
- Die Index-Umstellung auf einer Kopie der echten Datenbank
durchgespielt: alter Index weg, neuer eindeutig, ON CONFLICT trifft.
- pruef-kachelfarben 26/0, pruef-css-klassen, pruef-deutsche-texte: gruen.
- server/mess-support-runde.mjs (neu) macht vier Bilder: Leitung,
Melder, Melder auf dem Handy, und den Verlauf nach zwei Runden.
Es misst den "wer ist dran"-Hinweis ausdruecklich mit -- der war
einmal stumm ausgefallen (before() auf einem Element ohne
Elternknoten tut nichts, ohne Fehlermeldung).
Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
@@ -63,6 +63,33 @@ const FESTGELEGT = [
|
||||
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)" },
|
||||
/* BABYBLAU IST PER DEFINITION BLASS (25.09.2026).
|
||||
|
||||
Filipe: „die hauptfarbe der kachel soll auch babyblau sein mit
|
||||
bissl lila."
|
||||
|
||||
Diese Farbe haelt die Buntheitsgrenze von 0,12 NICHT (sie liegt
|
||||
bei 0,074) -- und kann sie nicht halten, das liegt am Wort.
|
||||
Nachgemessen mit `node tools/_babyblau-suchen.mjs`: Unter allen
|
||||
Blautoenen im Umkreis des Wunsches gibt es KEINEN, der gleichzeitig
|
||||
Buntheit >= 0,12 und Abstand >= 0,09 schafft -- der beste kommt
|
||||
auf 0,075 Abstand. Der Blaubereich ist von den Toenen 15, 23, 26,
|
||||
31, 41 und 43 besetzt.
|
||||
|
||||
DIE GRENZE WIRD DESHALB NICHT GESENKT, sondern hier BENANNT
|
||||
ausgenommen. Eine gesenkte Grenze gaelte fuer alle 45 Toene und
|
||||
liesse ab morgen jede blasse Farbe durch; eine benannte Ausnahme
|
||||
gilt fuer genau diese eine und steht mit ihrem Grund da.
|
||||
|
||||
UND SIE IST NICHT GRATIS: Wer blass sein darf, muss dafuer beim
|
||||
ABSTAND ueberdurchschnittlich sein -- das ist der Zweck, den die
|
||||
Buntheitsregel nur stellvertretend misst. Gemessen 0,1125 zur
|
||||
naechsten Farbe (Ton 15), das 7,3-Fache des engsten Paares, das im
|
||||
Haus ohnehin steht. Die Bedingung dazu steht unten bei der
|
||||
Pruefung und ist echt: Faellt der Abstand unter 0,10, wird diese
|
||||
Zeile rot. */
|
||||
{ ton: 44, kachel: "Support", hex: "#a8d8ff", blassErlaubt: 0.10,
|
||||
warum: "Babyblau auf Wunsch -- blass, dafuer mit gemessenem Sicherheitsabstand" },
|
||||
];
|
||||
|
||||
let ok = 0, fehl = 0;
|
||||
@@ -265,16 +292,43 @@ for (const f of FESTGELEGT) {
|
||||
console.log("\n=== Lesbar und kraeftig ===");
|
||||
{
|
||||
const dunkel = [], blass = [];
|
||||
/* Die benannten Ausnahmen -- abgeleitet aus FESTGELEGT und nicht
|
||||
hier noch einmal aufgezaehlt. Eine zweite Liste waere die, die
|
||||
beim naechsten Mal vergessen wird. */
|
||||
const darfBlassSein = new Map(
|
||||
FESTGELEGT.filter((f) => f.blassErlaubt).map((f) => [f.ton, f.blassErlaubt]));
|
||||
for (const n of benutzt.keys()) {
|
||||
const hex = farben.get(n);
|
||||
if (!hex) continue;
|
||||
if (kontrast(hex) < 4.5) dunkel.push(`Ton ${n} ${hex} (${kontrast(hex).toFixed(2)}:1)`);
|
||||
if (buntheit(hex) < MINDEST_BUNTHEIT) blass.push(`Ton ${n} ${hex} (${buntheit(hex).toFixed(3)})`);
|
||||
if (buntheit(hex) < MINDEST_BUNTHEIT && !darfBlassSein.has(n)) {
|
||||
blass.push(`Ton ${n} ${hex} (${buntheit(hex).toFixed(3)})`);
|
||||
}
|
||||
}
|
||||
pruef(`alle ${benutzt.size} benutzten Toene erreichen 4,5:1 gegen den Grund`,
|
||||
dunkel.length === 0, dunkel.join(", "));
|
||||
pruef(`keiner ist blasser als ${MINDEST_BUNTHEIT}`,
|
||||
pruef(`keiner ist blasser als ${MINDEST_BUNTHEIT}`
|
||||
+ (darfBlassSein.size ? ` (ausser ${darfBlassSein.size} benannten)` : ""),
|
||||
blass.length === 0, blass.join(", "));
|
||||
|
||||
/* WAS DIE AUSNAHME KOSTET, WIRD EINGEFORDERT. Ohne diese Zeile waere
|
||||
`blassErlaubt` ein Freibrief: Man setzt eine Farbe fest, und die
|
||||
Pruefung sieht ab da weg. So ist es umgekehrt -- wer blass sein
|
||||
darf, muss beim Abstand BESSER sein als die Hausgrenze, und das
|
||||
wird gemessen, nicht versprochen. */
|
||||
for (const [ton, noetig] of darfBlassSein) {
|
||||
const hex = farben.get(ton);
|
||||
if (!hex) { pruef(`Ton ${ton} ist festgelegt, steht aber nicht in start.css`, false); continue; }
|
||||
let naechste = Infinity, wer = "-";
|
||||
for (const [m, h2] of farben) {
|
||||
if (m === ton || !benutzt.has(m)) continue;
|
||||
const d = abstand(oklab(hex), oklab(h2));
|
||||
if (d < naechste) { naechste = d; wer = `Ton ${m}`; }
|
||||
}
|
||||
pruef(`Ton ${ton} darf blass sein und haelt dafuer ${noetig} Abstand `
|
||||
+ `(${naechste.toFixed(4)} zu ${wer})`, naechste >= noetig,
|
||||
`nur ${naechste.toFixed(4)} -- die Ausnahme ist damit nicht mehr gedeckt`);
|
||||
}
|
||||
}
|
||||
|
||||
/* ---- Gegenprobe: kann diese Pruefung ueberhaupt rot werden? --------- */
|
||||
@@ -291,6 +345,14 @@ console.log("\n=== Gegenprobe ===");
|
||||
abstand(weit, weit2) >= MINDEST_ABSTAND);
|
||||
pruef("ein zu dunkler Ton wuerde auffallen (#101820)", kontrast("#101820") < 4.5);
|
||||
pruef("ein blasser Ton wuerde auffallen (#ffe5ae)", buntheit("#ffe5ae") < MINDEST_BUNTHEIT);
|
||||
/* Und die Ausnahme selbst muss zu eng werden koennen. Sonst waere
|
||||
die Bedingung darueber nur Text. */
|
||||
{
|
||||
const nah = FESTGELEGT.find((f) => f.blassErlaubt);
|
||||
pruef("die Ausnahme-Bedingung schlaegt bei zu wenig Abstand an "
|
||||
+ `(0.05 < ${nah?.blassErlaubt ?? "-"})`,
|
||||
!!nah && 0.05 < nah.blassErlaubt);
|
||||
}
|
||||
}
|
||||
|
||||
/* =====================================================================
|
||||
|
||||
Reference in New Issue
Block a user