Trichter und Entwicklungskarte kennen einander

An der Stufe "Im Team" steht seit jeher zweimal: "ab hier zaehlt die
Entwicklungskarte, nicht mehr diese". Gemessen: Es gab keinen Weg
dorthin. Wer den Satz las, musste die Seite selbst finden und die
Person dort aus einer Liste heraussuchen.

Das ist heute das DRITTE Mal dasselbe Muster -- ein Text verspricht
einen Weg, den es nicht gibt:
  "uebernehmen oder sauber beenden"  -> der Ausgang fehlte
  Kalender zeigt Brettzettel         -> zurueck fuehrte nichts
  "ab hier die Entwicklungskarte"    -> kein Link

HIN: Von der Talentkarte fuehrt ein Weg auf die Entwicklungskarte
GENAU DIESER Person -- ueber `?zeigen=person-<id>`, den Weg, den das
Haus dafuer schon hat (kopf.js), nicht ueber eine zweite Mechanik. Die
Karte ist beim Ankommen offen; ein Link, der auf einer Liste endet, auf
der man die Person wieder sucht, hat nichts erspart.

Der Sprung passiert ERST, wenn alle Kacheln stehen. Waehrend der
Schleife haengt die gesuchte noch nicht im Dokument und hat keine
Position -- ein Sprung dorthin waere einer an den Seitenanfang,
lautlos, und man haelt den Link fuer kaputt.

ZURUECK: Die Entwicklungskarte sagt jetzt, wie dieser Mensch gekommen
ist -- mit dem Namen der Talentkarte und wer ihn eingearbeitet hat.
Beim ersten Beurteilen ist genau das die Frage ("woher kommt der
eigentlich?"), und wer sie nicht beantwortet bekommt, faengt bei null
an, obwohl vier Wochen Beobachtung vorliegen.

NUR DER WEG, NICHT DIE DATEN. Die Merkmale aus dem Trichter hierher zu
kopieren waere bequem und falsch: zwei Kataloge, zwei Fragen (taugt er?
/ wie entwickelt er sich?). Eine Zahl aus dem einen sieht im anderen
aus wie eine Beurteilung und ist keine.

Moeglich wurde beides erst durch `talent_stufe.person_id` von vorhin --
ohne die Verknuepfung gibt es keine Richtung, in die man zeigen
koennte.

pruef-nachwuchs 236 -> 244. Geprueft wird nicht, ob ein Link DASTEHT,
sondern ob man am Ziel ankommt: Karte offen, richtige Person, Kachel
hervorgehoben, Herkunft da, Rueckweg da. Mit Gegenprobe an einer
zweiten Karte, die NICHT aus dem Trichter kam (sonst hiesse "kam ueber
den Trichter" nur, dass ueberall etwas steht).

Gegenproben:
  Sprung ausgebaut    -> 5 rot
  Herkunft ausgebaut  -> 2 rot, genau die beiden richtigen

Und wieder eine Schriftgroesse unter der Hausgrenze (.7rem = 11,2 px),
gefunden von pruef-css-klassen. Zurueckhaltend wird ueber FARBE
gedaempft, nicht ueber Groesse -- das ist der Unterschied zwischen
"leise" und "zusammengekniffen".

Gruen: nachwuchs, entwicklung, sprung, modi-wortleck, namen,
css-klassen.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-09-18 01:01:12 +02:00
co-authored by Claude Opus 5
parent a435e734c9
commit 1a2dfa07f3
38 changed files with 622 additions and 401 deletions
+61
View File
@@ -1519,6 +1519,67 @@ melde("=== 17. Der Anschluss im Browser ===");
await seite.screenshot({ path: "server/pruef-nachwuchs-anschluss.png", fullPage: true });
melde(" -- Bildschirmfoto: server/pruef-nachwuchs-anschluss.png");
/* ---- BEIDE RICHTUNGEN (17.09.2026) -------------------------------
Die Stufe „Im Team" sagt zweimal „ab hier zaehlt die
Entwicklungskarte" -- und bis heute gab es keinen Weg dorthin.
Dasselbe Muster wie der fehlende Ausgang aus dem Trichter: ein
Text, der einen Weg verspricht, den es nicht gibt.
Geprueft wird nicht, ob ein Link DASTEHT, sondern ob man am
Ziel ankommt -- und ob der Rueckweg ebenfalls steht. Ein Link,
der auf einer Liste endet, auf der man die Person wieder suchen
muss, hat nichts erspart. */
melde("");
melde("=== 18. Hin und zurueck ===");
{
const weiter = await seite.evaluate(() =>
document.querySelector(".t-person__weiter")?.getAttribute("href") || "");
ok(/^entwicklung\.html\?zeigen=person-\d+$/.test(weiter),
`von der Talentkarte fuehrt ein Weg zur Entwicklungskarte (${weiter})`);
await seite.goto(`http://127.0.0.1:${PORT}/workspace/${weiter}`,
{ waitUntil: "domcontentloaded" });
await seite.waitForTimeout(2000);
const dort = await seite.evaluate(() => ({
/* Die Karte ist WIRKLICH offen -- nicht nur die Kachel
markiert. Wer dem Link folgt, will die Karte sehen. */
karteOffen: !document.getElementById("karte")?.hidden,
name: document.querySelector(".e-karte__kopf")?.textContent?.trim().slice(0, 40) || "",
markiert: document.querySelectorAll('.e-person[data-treffer="ja"]').length,
herkunft: document.querySelector(".e-herkunft")?.textContent?.trim() || "",
zurueck: document.querySelector(".e-herkunft__weg")?.getAttribute("href") || "",
}));
ok(dort.karteOffen, "die Karte ist beim Ankommen offen");
ok(/Marek/.test(dort.name), `und es ist die richtige (${dort.name})`);
ok(dort.markiert === 1,
`die Kachel dazu ist hervorgehoben (${dort.markiert})`);
ok(/Trichter/.test(dort.herkunft),
`und die Karte sagt, woher er kommt ("${dort.herkunft}")`);
ok(dort.zurueck === "talente.html", `mit dem Weg zurueck (${dort.zurueck})`);
/* GEGENPROBE: Wer NICHT aus dem Trichter kam, bekommt diese
Zeile nicht -- sonst hiesse „kam ueber den Trichter" nur,
dass ueberall etwas steht. Kessi ist vor der Verknuepfung ins
Team gekommen und hat deshalb keine. */
const ohne = await seite.evaluate(async () => {
const kacheln = [...document.querySelectorAll(".e-person")];
const andere = kacheln.find((k) => !/Marek/.test(k.textContent || ""));
if (!andere) return { da: false };
andere.click();
await new Promise((r) => setTimeout(r, 1200));
return {
da: true,
name: document.querySelector(".e-karte__kopf")?.textContent?.trim().slice(0, 30) || "",
herkunft: document.querySelectorAll(".e-herkunft").length,
};
});
ok(ohne.da, `es gibt eine zweite Karte zum Gegenpruefen (${ohne.name})`);
ok(ohne.da && ohne.herkunft === 0,
`und die traegt keine Herkunft (${ohne.herkunft})`);
}
} finally {
await browser.close();
}