Niemand erfaehrt, was er nicht hat -- und die Kacheln tragen ihre Farbe

ZWEI WUENSCHE, DIE ZUSAMMENGEHOEREN: die Willkommensseite.

1. "KEINER SOLL WISSEN WAS ER NICHT SIEHT"

Filipe: "das geht keinen was an. sie sehen die sachen ja nicht weil es
sie nichts angeht und das muss auch nicht erwaehnt werden.
kontrollier das ueberall bitte."

Durchgesehen: Das Haus macht es ueberall sonst schon richtig -- der
Server antwortet mit 404 statt 403, damit ein "das darfst du nicht"
gar nicht erst verraet, dass es etwas gibt. GENAU ZWEI Stellen taten
das Gegenteil, beide auf der Willkommensseite:

  der Hinweis "Was du nicht siehst" (linke Hand),
  und in ihrer Einleitung "Was du NICHT hast: Personen anlegen,
  Rollen aendern und den vertraulichen Meldeweg".

Beide entfernt, der Hinweis mit einem Kommentar an seiner Stelle --
damit ihn niemand spaeter "nachtraegt", weil er ihn fuer vergessen
haelt. Im Kopf derselben Datei stand die Ueberlegung uebrigens schon:
"Eine Liste von Dingen, die man nicht darf, ist keine Orientierung,
sondern eine Kraenkung."

Die Pruefung verlangte bis heute das GEGENTEIL ("ihr wird gesagt, was
sie nicht hat"). Sie misst jetzt alle fuenf Rollen gegen acht Muster,
mit Gegenprobe -- das "ueberall" aus dem Auftrag.

2. DIE FARBEN DER STARTSEITE

Der Server reicht `ton` durch, die Kachel traegt `data-ton="N"`, und
start.css macht daraus `--ton`. Keine eigene Farbtabelle: Die waere
die, die beim naechsten Farbwechsel stehen bleibt -- genau das ist am
19.09. elf Seiten passiert.

Drei Stellen tragen die Farbe, keine davon eine Flaeche: das Zeichen,
eine schmale Kante links und ein leiser Schimmer in der oberen Ecke.
Eine eingefaerbte Kachelflaeche waere bunt und schlecht lesbar.

UND EIN FEHLER, DEN NUR DAS MESSEN GEZEIGT HAT: Mein erster Anlauf
setzte `--ton: var(--akzent)` als Vorgabe auf `.w-kachel`. Gleiche
Spezifitaet wie `[data-ton="N"]` in start.css -- und willkommen.css
laedt SPAETER. Ergebnis: 0 von 14 Kacheln trugen die richtige Farbe,
alle waren blau. Der Rueckfall gehoert an die Verwendung
(`var(--ton, …)`), nicht an die Deklaration. Danach: 14 von 14.

Geprueft: pruef-willkommen 67/0, pruef-css-klassen 30/0.
This commit is contained in:
2026-09-22 01:43:31 +02:00
parent 82335c783d
commit 4b87f27451
42 changed files with 689 additions and 550 deletions
+42 -4
View File
@@ -238,11 +238,49 @@ for (const p of LEUTE) {
/* ---------------------------------------------------------------------
4. DIE LINKE HAND BEKOMMT IHRE GRENZEN GESAGT
--------------------------------------------------------------------- */
melde("\n=== Die linke Hand ===");
melde("\n=== Niemand erfaehrt, was er NICHT hat ===");
{
const h = gesehen.linke?.daten?.hinweise || [];
ok(h.some((x) => /nicht/i.test(x.titel + x.text)),
"ihr wird gesagt, was sie nicht hat -- einmal, klar, ohne Liste");
/* UMGEDREHT AM 22.09.2026. Hier stand: "ihr wird gesagt, was sie
nicht hat -- einmal, klar, ohne Liste."
Filipe: "keiner soll wissen was er nicht sieht das geht keinen was
an. sie sehen die sachen ja nicht weil es sie nichts angeht und das
muss auch nicht erwaehnt werden. kontrollier das ueberall bitte."
Das "ueberall" ist der Grund, warum hier nicht eine Zeile
umgedreht, sondern JEDE ROLLE gemessen wird. Ein Satz, der
aufzaehlt, was fehlt, hebt ausserdem die Sorgfalt wieder auf, mit
der der Server ueberall 404 statt 403 antwortet -- damit ein "das
darfst du nicht" gar nicht erst verraet, dass es etwas gibt. */
const VERRAETERISCH = [
/nicht f(u|ue|\u00fc)r dich freigeschaltet/i,
/was du nicht siehst/i,
/was du nicht hast/i,
/hast du nicht/i,
/siehst du nicht/i,
/darfst du nicht/i,
/bleiben seine/i,
/kein zugriff/i,
];
const gefunden = [];
for (const pp of LEUTE) {
const d = gesehen[pp.rolle]?.daten;
const text = [
d?.einleitung?.was, d?.einleitung?.dazu,
...(d?.hinweise || []).flatMap((h) => [h.titel, h.text]),
].filter(Boolean).join(" ");
for (const m of VERRAETERISCH) {
if (m.test(text)) gefunden.push(pp.rolle + ": " + m.source);
}
}
ok(gefunden.length === 0, gefunden.length === 0
? `keine der ${LEUTE.length} Rollen bekommt gesagt, was ihr fehlt`
: `ZAEHLT AUF, WAS FEHLT: ${gefunden.join(" | ")}`);
/* GEGENPROBE: Wuerde dieses Muster so einen Satz ueberhaupt finden?
Ohne sie waere die Zeile oben gruen, sobald die Liste kaputt ist. */
ok(VERRAETERISCH.some((m) => m.test("Das ist nicht fuer dich freigeschaltet.")),
"und ein solcher Satz wuerde hier wirklich auffallen");
const ziele = (gesehen.linke?.daten?.gruppen || [])
.flatMap((g) => g.kacheln || []).map((k) => String(k.ziel).split("?")[0]);
ok(!ziele.includes("personen.html") && !ziele.includes("hilfe.html"),
+44 -15
View File
@@ -67,17 +67,29 @@ const EINLEITUNG = {
},
hand: {
was: "Du vertrittst DogFather im Alltag und hältst das Team zusammen.",
dazu: "Du siehst dieselben Aufgaben, Ideen und Auswertungen wie er und "
+ "kannst Aufgaben an die Modis verteilen. Private Bereiche von "
+ "DogFather bleiben seine.",
dazu: "Du siehst dieselben Aufgaben, Ideen und Auswertungen wie er, "
+ "verteilst Aufgaben an die Modis und legst neue Leute an — samt "
+ "ihrem Zugangscode.",
},
linke: {
was: "Du führst das Team durch den Tag — mit denselben Werkzeugen wie "
+ "die rechte Hand.",
dazu: "Aufgaben verteilen, Stände verfolgen, Rückmeldung geben: alles "
+ "wie sie. Was du NICHT hast: Personen anlegen, Rollen ändern und "
+ "den vertraulichen Meldeweg. Das ist kein Versehen, sondern so "
+ "eingerichtet.",
/* NUR, WAS DA IST (22.09.2026).
----------------------------------------------------------------
Hier stand: "Was du NICHT hast: Personen anlegen, Rollen ändern
und den vertraulichen Meldeweg."
Filipe: "keiner soll wissen was er nicht sieht das geht keinen
was an. sie sehen die sachen ja nicht weil es sie nichts angeht
und das muss auch nicht erwaehnt werden."
Er hat recht, und es passt zur Hausregel, die ueberall sonst
schon gilt: Der Server antwortet mit 404 statt 403, damit ein
"das darfst du nicht" nicht verraet, dass es etwas gibt. Ein
Satz, der dasselbe aufzaehlt, hebt diese Sorgfalt wieder auf. */
dazu: "Aufgaben verteilen, Stände verfolgen, Rückmeldung geben — und "
+ "dabei sehen, wie es bei jedem gerade läuft. Alles dafür findest "
+ "du unten.",
},
modi: {
was: "Schön, dass du da bist. Hier findest du alles für deinen Tag.",
@@ -179,6 +191,18 @@ willkommenRouter.get("/workspace/api/willkommen", (req, res) => {
unter: k.unter || "",
ziel: k.ziel,
zeichen: k.zeichen || null,
/* DERSELBE FARBTON WIE AUF DER STARTSEITE (22.09.2026).
Filipe: "die kacheln in der willkommens seite sollen die
selben farben haben wie in der startseite."
Durchgereicht, nicht neu vergeben: `[data-ton="N"]` in
start.css setzt `--ton`, und start.css laedt diese Seite
ohnehin. Eine eigene Farbtabelle waere die, die beim
naechsten Farbwechsel auseinanderlaeuft -- und genau das ist
am 19.09. schon einmal passiert, als elf Seiten die neue
Kachelfarbe nie bekamen. */
ton: Number.isFinite(k.ton) ? k.ton : null,
gross: !!k.gross,
/* Der lange Satz nur, wenn es einen gibt -- `null` heißt
ausdrücklich "hier reicht die Zeile". */
lang: Object.prototype.hasOwnProperty.call(LANG, datei) ? LANG[datei] : null,
@@ -230,14 +254,19 @@ function hinweiseFuer(person) {
+ "unangenehm.",
});
}
if (person.rolle === "linke") {
aus.push({
titel: "Was du nicht siehst",
text: "Personen anlegen, Rollen ändern, Bewerbungen und der "
+ "vertrauliche Meldeweg sind nicht für dich freigeschaltet. "
+ "Alles, was mit Aufgaben und dem Team zu tun hat, schon.",
});
}
/* HIER STAND "Was du nicht siehst" (entfernt 22.09.2026).
------------------------------------------------------------------
Der Hinweis zaehlte auf, was der linken Hand fehlt. Filipe: "das
geht keinen was an. sie sehen die sachen ja nicht weil es sie
nichts angeht und das muss auch nicht erwaehnt werden."
Die Zeile bleibt als Kommentar stehen, damit niemand den Hinweis
spaeter "nachtraegt", weil er ihn fuer vergessen haelt. Er ist
entfernt worden, nicht uebersehen.
Dieselbe Ueberlegung steht im Kopf dieser Datei schon: "Eine Liste
von Dingen, die man nicht darf, ist keine Orientierung, sondern
eine Kraenkung." Genau das galt fuer diesen Hinweis. */
if (istDogFather(person)) {
aus.push({
titel: "Du entscheidest am Ende",