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:
2026-09-21 13:15:35 +02:00
co-authored by Claude Opus 5
parent 9d4a40ff58
commit 2c2c42d4aa
+116 -10
View File
@@ -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");