Drei rote Zeilen im Werdegang -- alle drei verlangten Altes
Keine davon war ein Mangel an der Seite. Alle drei verlangten einen Zustand, den Filipe am 19.09.2026 ausdruecklich geaendert hat. 1. "alphabetisch (Rieke, Diene)" Filipe am 19.09.: "die reihenfolge der listen soll immer angepasst sein hatten wir doch schon. die rechte hand rolle immer zuerst und dan die modis." Der Server sortiert seitdem nach ROLLEN_SORTIERUNG, dann nach Namen -- die Pruefung verlangte weiter rein alphabetisch. Sie prueft jetzt dieselbe Ordnung, abgeleitet aus derselben Konstante wie der Server. Wer dort eine Rolle verschiebt, verschiebt sie hier mit. Was bleibt, ist die eigentliche Aussage: sortiert wird nach etwas, das nichts ueber die Person sagt -- eine Liste nach Aktivitaet waere eine Rangliste mit anderem Namen, eine nach Rolle ist es nicht. 2. "jede Zelle traegt ihr Zeichen, nicht nur ihre Farbe" Im Quelltext der Seite steht seit dem 19.09. woertlich: "Leer ist jetzt WIRKLICH leer -- kein Zeichen, dafuer ein gestrichelter Rahmen. Man sieht das Fehlen, statt es zu lesen." Die Pruefung verlangte das Gegenteil. Gemessen werden jetzt beide Haelften, und die zweite ist die wichtigere: Stuende in einer leeren Zelle doch ein Zeichen, waere "noch nichts gesetzt" nicht mehr von "gesetzt" zu unterscheiden -- und das faellt beim Hinsehen nicht auf, weil es nach Inhalt aussieht. 3. "unter dem Diagramm steht eine Legende (7 Eintraege)" Hier stand `=== 2`. Inzwischen sind es sieben: zwei fuer die Bewegungsrichtung, vier Stufen und der leere Zustand. Wieder eine Rechnung von gestern. Gefragt wird jetzt, was die Legende leisten muss: zu JEDER Stufe, die der Server kennt, ein Eintrag -- und einer fuer den leeren Zustand. Kommt eine Stufe dazu, waechst die Erwartung mit. ZWEIMAL HAT MICH DABEI DIE ZAHL IN DER BEDINGUNG GERETTET. Erst fragte ich die Stufen an der Liste ab -- die liefert sie gar nicht, sie stehen an der einzelnen Karte. Ohne `stufenSoll.length > 0` waere der Vergleich gegen eine leere Liste gelaufen und haette "die Legende nennt jede davon" bestaetigt, ohne eine einzige zu kennen. Dieselbe Zeile hatte zuvor schon in pruef-modi-checkliste einen stillen Totalausfall verhindert. pruef-werdegang: 103 Pruefungen, 0 Fehler (war 95, davon 3 rot) Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
+116
-10
@@ -501,12 +501,52 @@ melde("=== 10. Die Liste ===");
|
||||
ok(!l.liste.some((p) => p.name === "Tili"), "ein Creator steht nicht darin");
|
||||
ok(!l.liste.some((p) => p.name === "Filipe"), "DogFather auch nicht");
|
||||
|
||||
/* NACH NAMEN SORTIERT, NICHT NACH AKTIVITÄT. Eine Liste, die die mit
|
||||
der meisten Bewegung nach oben stellt, ist eine Rangliste mit einem
|
||||
anderen Namen. */
|
||||
const namen = l.liste.map((p) => p.name);
|
||||
ok(namen.join(",") === [...namen].sort((a, b) => a.localeCompare(b, "de")).join(","),
|
||||
`alphabetisch (${namen.join(", ")})`);
|
||||
/* NACH ROLLE, DANN NACH NAMEN -- UND NICHT NACH AKTIVITAET
|
||||
(nachgezogen 21.09.2026).
|
||||
|
||||
Hier stand "alphabetisch", und die Zeile war rot: Die Liste kam
|
||||
als "Rieke, Diene" zurueck, also nicht alphabetisch. Nachgesehen
|
||||
war das kein Mangel, sondern eine Entscheidung vom 19.09.2026.
|
||||
|
||||
Filipe damals: "die reihenfolge der listen soll immer angepasst
|
||||
sein hatten wir doch schon. die rechte hand rolle immer zuerst
|
||||
und dan die modis."
|
||||
|
||||
Der Server sortiert seitdem nach `ROLLEN_SORTIERUNG`, dann nach
|
||||
Namen. Die Pruefung ist zwei Tage lang rot gewesen, weil sie die
|
||||
alte Regel weiter verlangt hat -- und eine rote Zeile, die rot
|
||||
bleibt, bringt Menschen dazu, Rot zu ueberlesen.
|
||||
|
||||
WAS BLEIBT, IST DIE EIGENTLICHE AUSSAGE: Sortiert wird nach etwas,
|
||||
das nichts ueber die Person sagt. Eine Liste, die die mit der
|
||||
meisten Bewegung nach oben stellt, waere eine Rangliste mit einem
|
||||
anderen Namen. Eine Sortierung nach ROLLE ist das nicht -- sie
|
||||
sagt nur, welche Aufgabe jemand hat.
|
||||
|
||||
ABGELEITET, NICHT ABGESCHRIEBEN: Die Reihenfolge kommt aus
|
||||
derselben Konstante, die der Server benutzt. Wer dort eine Rolle
|
||||
verschiebt, verschiebt sie hier mit -- und diese Zeile wird nicht
|
||||
wieder rot, ohne dass etwas kaputt ist. */
|
||||
const { ROLLEN_REIHE } = await import("./workspace.js");
|
||||
const platz = (r) => {
|
||||
const i = ROLLEN_REIHE.indexOf(r);
|
||||
return i === -1 ? ROLLEN_REIHE.length : i;
|
||||
};
|
||||
const soll = [...l.liste].sort((a, b) =>
|
||||
platz(a.rolle) - platz(b.rolle) || a.name.localeCompare(b.name, "de"));
|
||||
const ist = l.liste.map((p) => `${p.rolle}:${p.name}`).join(", ");
|
||||
ok(ist === soll.map((p) => `${p.rolle}:${p.name}`).join(", "),
|
||||
`nach Rolle, dann nach Namen (${ist})`);
|
||||
|
||||
/* GEGENPROBE: Dass die Liste ueberhaupt MEHRERE Rollen enthaelt --
|
||||
sonst waere "nach Rolle sortiert" bei einer einzigen Rolle
|
||||
trivial wahr, und die Zeile darueber pruefte nur noch die
|
||||
Namenssortierung. */
|
||||
ok(new Set(l.liste.map((p) => p.rolle)).size >= 2,
|
||||
`und es sind wirklich mehrere Rollen darin `
|
||||
+ `(${[...new Set(l.liste.map((p) => p.rolle))].join(", ")})`);
|
||||
|
||||
|
||||
ok(/kein vergleich/i.test(l.hinweis || ""),
|
||||
"und die Seite sagt selbst, dass sie niemanden vergleicht");
|
||||
|
||||
@@ -596,18 +636,84 @@ melde("=== 11. Im Browser ===");
|
||||
name: document.getElementById('karte-name')?.textContent || '',
|
||||
balken: document.querySelectorAll('.w-bewegung__balken').length,
|
||||
zellen: document.querySelectorAll('.w-streifen__zelle').length,
|
||||
/* GETRENNT NACH GESETZT UND LEER (21.09.2026). Vorher wurde
|
||||
verlangt, dass JEDE Zelle Text traegt -- auch die leeren. Seit
|
||||
dem 19.09. sind die aber absichtlich leer. */
|
||||
zellenMitStufe: [...document.querySelectorAll('.w-streifen__zelle')]
|
||||
.filter((z) => z.dataset.stufe && z.dataset.stufe !== 'leer').length,
|
||||
zeichenInZellen: [...document.querySelectorAll('.w-streifen__zelle')]
|
||||
.filter((z) => z.dataset.stufe && z.dataset.stufe !== 'leer')
|
||||
.every((z) => (z.textContent || '').trim().length > 0),
|
||||
leereMitZeichen: [...document.querySelectorAll('.w-streifen__zelle')]
|
||||
.filter((z) => z.dataset.stufe === 'leer'
|
||||
&& (z.textContent || '').trim().length > 0).length,
|
||||
legende: document.querySelectorAll('.w-legende__punkt').length,
|
||||
legendeStreifen: [...document.querySelectorAll(
|
||||
'.w-legende--streifen .w-legende__zeichen')].map((z) => z.dataset.stufe),
|
||||
texte: document.querySelectorAll('.w-text').length,
|
||||
breiter: document.documentElement.scrollWidth > document.documentElement.clientWidth,
|
||||
}));
|
||||
ok(/Diene|Rieke/.test(karte.name), `eine Karte öffnet sich (${karte.name})`);
|
||||
ok(karte.zellen > 0, `der Streifen ist gezeichnet (${karte.zellen} Zellen)`);
|
||||
/* DIE FARBE IST NIE DIE AUSKUNFT. Jede Zelle trägt ihr Zeichen als
|
||||
Text -- wer Farben schlecht unterscheidet, liest dasselbe. */
|
||||
ok(karte.zeichenInZellen, "jede Zelle trägt ihr Zeichen, nicht nur ihre Farbe");
|
||||
ok(karte.legende === 2, `unter dem Diagramm steht eine Legende (${karte.legende} Einträge)`);
|
||||
/* DIE FARBE IST NIE DIE AUSKUNFT. Jede Zelle MIT EINER STUFE traegt
|
||||
ihr Zeichen als Text -- wer Farben schlecht unterscheidet, liest
|
||||
dasselbe.
|
||||
|
||||
BIS ZUM 21.09.2026 STAND HIER "jede Zelle", ohne Unterschied.
|
||||
Seit dem 19.09. sind leere Zellen aber absichtlich leer; im
|
||||
Quelltext steht woertlich: "Leer ist jetzt WIRKLICH leer -- kein
|
||||
Zeichen, dafuer ein gestrichelter Rahmen. Man sieht das Fehlen,
|
||||
statt es zu lesen." Die Pruefung verlangte also das Gegenteil
|
||||
einer Entscheidung und war deshalb rot.
|
||||
|
||||
Beide Haelften werden jetzt gemessen, und die zweite ist die
|
||||
wichtigere: Stuende in einer leeren Zelle doch ein Zeichen, waere
|
||||
"noch nichts gesetzt" nicht mehr von "gesetzt" zu unterscheiden --
|
||||
und das faellt beim Hinsehen nicht auf, weil es nach Inhalt
|
||||
aussieht. */
|
||||
ok(karte.zellenMitStufe > 0,
|
||||
`${karte.zellenMitStufe} Zellen tragen eine Stufe`);
|
||||
ok(karte.zeichenInZellen,
|
||||
"und jede davon ihr Zeichen, nicht nur ihre Farbe");
|
||||
ok(karte.leereMitZeichen === 0,
|
||||
`die leeren bleiben leer (${karte.leereMitZeichen} mit Zeichen)`);
|
||||
|
||||
/* DIE LEGENDE WIRD ABGELEITET, NICHT GEZAEHLT (21.09.2026).
|
||||
|
||||
Hier stand `karte.legende === 2`. Die Zahl stimmte, solange es
|
||||
zwei Eintraege gab; inzwischen sind es sieben -- zwei fuer die
|
||||
Bewegungsrichtung und fuenf fuer den Streifen (vier Stufen plus
|
||||
"noch nichts gesetzt"). Wieder eine Rechnung von gestern.
|
||||
|
||||
Gefragt wird jetzt, was die Legende leisten muss: Zu JEDER Stufe,
|
||||
die der Server kennt, gehoert ein Eintrag -- und einer fuer den
|
||||
leeren Zustand. Kommt eine Stufe dazu, waechst die Erwartung von
|
||||
selbst mit. Die Stufen kommen aus derselben Auskunft, aus der die
|
||||
Seite sie baut; abgeschrieben waere sie die naechste Zahl von
|
||||
gestern. */
|
||||
/* DIE STUFEN WERDEN HIER NEU GEHOLT und nicht aus Abschnitt 10
|
||||
mitgenommen: Jener Block hat seinen eigenen Geltungsbereich, und
|
||||
eine Variable von dort waere hier schlicht nicht da. Beim ersten
|
||||
Versuch war genau das der Fall -- die Pruefung brach mitten im
|
||||
Browserteil ab, ohne Ergebnis. */
|
||||
/* DIE STUFEN STEHEN AN DER EINZELNEN KARTE, nicht an der Liste --
|
||||
nachgesehen in workspace-werdegang.js, nicht angenommen. Der
|
||||
erste Versuch fragte die Liste und bekam null Stufen; gefangen
|
||||
hat das die Zeile darunter, die die Zahl in der Bedingung hat. */
|
||||
const wenListe = json(await ruf("/workspace/api/werdegang/liste", CREW, "GET", { cookie: kDogi }));
|
||||
const wessen = wenListe.liste?.[0]?.id;
|
||||
const fuerLegende = json(await ruf(
|
||||
`/workspace/api/werdegang/person/${wessen}`, CREW, "GET", { cookie: kDogi }));
|
||||
const stufenSoll = (fuerLegende.stufen || []).map((x) => x.schluessel);
|
||||
ok(stufenSoll.length > 0,
|
||||
`der Server kennt ${stufenSoll.length} Stufen (${stufenSoll.join(", ")})`);
|
||||
const legendeSoll = [...stufenSoll, "leer"].join(",");
|
||||
ok((karte.legendeStreifen || []).join(",") === legendeSoll,
|
||||
`die Legende nennt jede davon und den leeren Zustand `
|
||||
+ `(${(karte.legendeStreifen || []).join(", ") || "KEINE"})`);
|
||||
ok(karte.legende === stufenSoll.length + 1 + 2,
|
||||
`insgesamt ${karte.legende} Eintraege -- ${stufenSoll.length} Stufen, `
|
||||
+ "der leere Zustand und zwei fuer die Bewegungsrichtung");
|
||||
ok(karte.texte > 0, `und die Texte dazu (${karte.texte})`);
|
||||
ok(!karte.breiter, "nichts steht über den rechten Rand hinaus");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user