Netzwerk-Labor · Doku 🔎 Review – Auffindbarkeit und SpielerfĂŒhrung (Aufgabe R5) Zum Spiel Online

🔎 Review – Auffindbarkeit und SpielerfĂŒhrung (Aufgabe R5)

âŹ†ïž Netzwerk-Labor · Vertrag: Hilfestellung – Stufen und Schnittstellen · Rolle: PrĂŒfer fĂŒr Auffindbarkeit

Frage dieses Reviews: Findet ein Azubi im 1. Lehrjahr die Hilfestellung ĂŒberhaupt, und versteht er sie? GeprĂŒft wurde die erste Stunde — vom ersten Blick auf die BegrĂŒĂŸungskarte bis zum ersten Fehler im Terminal. Stand: Commit c341c2d, node tests/run.js 395/395 grĂŒn. Kein Code geĂ€ndert — dieses Dokument ist der ganze Auftrag.

Verfahren (ehrlich: was gemessen wurde und was nicht)

PunktVerfahrenBelastbarkeit
1, 4, 5Quelltext gelesen (src/ui/*.js, src/spiel/*.js, src/stil/*.css), Zeilen zitiertBeleg aus dem Code
2DOM-Attrappe: src/ui/hilfe.js in einem eigenen vm-Bereich geladen, UI.hilfe.zeichnen(...) mit echtem Netz (Generator, Seed 7) aufgerufen, danach button gezÀhlt und textContent in Zeichen gemessengemessen, nicht geschÀtzt
3ZeichenzĂ€hlung ĂŒber die geladenen Datenpakete (DATEN.hilfen, Spiel.FEHLERTEXTE, DATEN.lehrtexte, Spiel.mini.hilfe) und ĂŒber die DOM-Attrappegemessen
5 (Geometrie)Rechnung aus den CSS-Zahlen; keine Layout-Messung im Browsernicht gemessen — in dieser Umgebung gibt es kein CDP/keinen Browser (Briefing). Die Aussage „im zugeklappten Zustand nicht klickbar“ folgt aus overflow:hidden + Höhe 56 px + opacity:0, nicht aus einem Bildschirmfoto.

Reproduktion der Messungen (read-only, kein Testlauf nötig): die beiden Skripte aus diesem Review laden dieselben Schichten wie tests/run.js (kern · lernmotor · modell · sim · cli · daten · spiel), setzen Spiel._trocken = true, bauen eine Instanz mit Spiel.instanzErstellen({gen:{skill:"lab.link", seed:7}}) und rufen UI.hilfe.zeichnen mit einem IOS-GerÀt des Netzes auf.


Befund 1 · P1 — Die Stufenwahl steht unter dem Startknopf und verschwindet mit der Karte

Behauptung. Die Wahl des Bildungsstands sitzt in der BegrĂŒĂŸungskarte, aber nach den beiden Knöpfen „Zeig mir den ersten Auftrag“ und „Erst umsehen“. Wer den PrimĂ€rknopf drĂŒckt, hat die Wahl nie gesehen — und sie kommt nicht wieder.

Beleg.

Wirkung auf einen Azubi im 1. Lehrjahr. Er liest 138 Zeichen BegrĂŒĂŸung (src/spiel/erstestunde.js:115), sieht darunter zwei Knöpfe und klickt den blauen. Damit ist der Bildungsstand auf azubi festgelegt — zufĂ€llig die richtige Voreinstellung, aber die Wahl war unsichtbar. Will er spĂ€ter etwas Ă€ndern, muss er den Zahnrad-Knopf ohne Beschriftung finden (src/ui/app.js:218, nur Symbol + title="Einstellungen") und dort den Abschnitt „Bildungsstand“ (src/ui/stufensystem.js:81). Das Wort „Bildungsstand“ kennt er nicht.

Vorschlag (kleinste Änderung, eine Zeile in src/ui/start.js). ziel.append(k) → ziel.insertBefore(k, ziel.querySelector(".sp-einstieg-knoepfe") || null) (mit append als RĂŒckfall, wenn der Knopfblock fehlt). Damit steht die Frage „Wie viel Hilfe darf es sein?“ vor den beiden Knöpfen: Der Azubi wĂ€hlt zuerst und startet danach — oder drĂŒckt trotzdem sofort los, dann bleibt azubi wie bisher. Optional, zweite Zeile: im Toast beim Klick auf „Erst umsehen“ (nicht auf dem PrimĂ€rweg) einmal „Bildungsstand: Azubi — Ă€nderbar unter ⚙ Einstellungen“ melden. Nicht nötig, wenn der erste Vorschlag umgesetzt ist.

Befund 2 · P2 — Ethos-Regel R12: fĂŒr den Streifen allein eingehalten, in der Ansicht um das Dreifache ĂŒberschritten

Behauptung. Der Vorschlagsstreifen zeigt 4 Knöpfe (azubi) bzw. 5 (azubi-plus) — als FlĂ€che also unter der Grenze von 6. Die Regel R12 („höchstens 6 Bedienelemente je Ansicht“, tools/ethos.py:300-317) wird aber ĂŒber document.querySelectorAll im ganzen Dokument gemessen; die Terminal-Ansicht enthĂ€lt schon ohne den Streifen 19 Bedienelemente. Die Regel ist damit nicht „vom Streifen verletzt“, sondern fĂŒr diese Ansicht falsch geschnitten.

Beleg (gemessen an der DOM-Attrappe, echtes src/ui/hilfe.js, Netz aus Spiel.instanzErstellen, Modus priv, Fehlerfall „Invalid input“):

StufeKnöpfe im StreifendavonZeichen im Streifen gleichzeitig
azubi43 × hl-sprosse-knopf (Link, Route, ACL und Dienst) + 1 × hl-knopf1 279
azubi-plus53 × hl-sprosse-knopf + 2 × hl-knopf1 404
geselle (nach Fehler)4wie azubi930
geselle (ohne Fehler) / meister0—0

Die Knöpfe entstehen an genau drei Stellen in src/ui/hilfe.js: hl-knopf (Zeile 64), hl-lauf (Zeile 67, nur art === "pruefen") und hl-sprosse-knopf (Zeile 78, je Leiter-Sprosse mit passendem Befehl — hier 3 von 6). Alles andere in der Ansicht zĂ€hlt R12 mit: Kopfzeile 9 (src/ui/app.js:197-219: vier klickbare Werte + Strg+K, Leiste, Hell/Dunkel, Einstellungen, TastenkĂŒrzel), Andockleiste 8 (src/ui/app.js:23 REIHE), Terminal aus 2 (<textarea class="ko-eingabe">, src/ui/konsole.js:109, und der Knopf „Leeren“, Zeile 122) → zusammen ≄ 23. Das ist kein Fehler des Streifens: die Ansicht war schon vor der Hilfestellung dreifach ĂŒber der Grenze. tools/ethos.py fĂŒhrt R12 deshalb mit Stand 0 und druckt ohne --dom â€žĂŒbersprungen“ — die Zahl ist nie gemessen worden.

Wirkung auf einen Azubi. Zwei Wirkungen: (a) 4–5 zusĂ€tzliche Knöpfe in einer Zeile sind noch ĂŒberschaubar, aber sie stehen zwischen sechs gleich aussehenden Sprossen und dem Vorschlag — die eine Handlung, die er sucht („welchen Befehl tippe ich?“), ist nicht die auffĂ€lligste. (b) Die Regel, die das begrenzen sollte, greift hier nicht und wird deshalb auch nicht nachgezogen.

Vorschlag.

  1. R12 je FlĂ€che definieren statt je Dokument: Messung mit einem Container („höchstens 6 Bedienelemente je HilfeflĂ€che / je Karte“), oder die Zahl auf den Ist-Stand der Ansicht beziehen. Sonst ist jede neue FlĂ€che automatisch rot oder die Regel bleibt ungelesen.
  2. Im Streifen: höchstens einen Aktionsknopf je Vorschlag zeigen — hl-lauf („AusfĂŒhren“) nur beim ersten Vorschlag, bei weiteren nur hl-knopf („in die Eingabe“). Spart bei azubi-plus einen Knopf und macht die Zeile ruhiger.

Befund 3 · P2 — Die Textwand im Streifen: 1 279 Zeichen auf einmal, davon 243 fĂŒr eine einzige ErklĂ€rung

Behauptung. Im Fehlerfall liest ein Azubi im Streifen gleichzeitig FehlererklĂ€rung (281 Zeichen), „Was geht hier?“ (210), die sechs Sprossen der Werkzeugleiter (356), den Vorschlag (265) und die Syntax-BrĂŒcke (157) — zusammen 1 279 Zeichen; bei azubi-plus 1 404. Die lĂ€ngste EinzelerklĂ€rung im Streifen misst 115, die lĂ€ngste FehlererklĂ€rung der Stufe „ausfĂŒhrlich“ 264 Zeichen. Gegen die bestehende OberflĂ€che ist das nicht aus dem Rahmen (Lehrtexte bis 440 Zeichen), aber dort erscheint ein Text auf Klick — hier erscheinen fĂŒnf Textblöcke nebeneinander.

Beleg (gemessen).

Wirkung auf einen Azubi im 1. Lehrjahr. Nach dem ersten Tippfehler bekommt er fĂŒnf KĂ€sten auf einmal. Er liest den ersten Satz, sieht darunter 350 Zeichen Leiter und 250 Zeichen Vorschlag und macht zu — die hilfreiche Zeile („Tippe an dieser Stelle ein Leerzeichen und dann ?“) steht im Fehlerkasten, der oberste ist also richtig gewĂ€hlt; die Wiederholung darunter verwĂ€ssert sie.

Vorschlag (kleinste Wirkung). Im Streifen eine Sache je Zustand fĂŒhren: Ist ein Fehler da, zeigt der Streifen Fehlertext + den ersten Vorschlag; GerĂŒst und Leiter klappen erst auf Klick auf („Werkzeugleiter (6)“). Ohne Fehler bleibt es wie heute. Das ist eine Änderung an src/ui/hilfe.js (zeichnen) und optional ein aufklappen-Zustand — kein Datenumbau.

Befund 4 · P1 — Vier Dinge heißen „Stufe“: die Kopfzeile widerspricht sogar ihrem eigenen Tooltip

Behauptung. „Stufe“ bedeutet im Programm vier verschiedene Dinge, und an mindestens einer Stelle stehen zwei Bedeutungen gleichzeitig auf dem Bildschirm. Die kleinste Klarstellung: zwei sichtbare Zeichenketten Ă€ndern, nicht das Vokabular umbauen.

Beleg. Die vier Bedeutungen:

BedeutungFeldsichtbar als
Karriere-StufeSpiel.st.stufeKopfzeile src/ui/app.js:133 (Stufe 2), Balken-Tooltip src/ui/spiel.js:34, Aufstiegsfeier src/ui/karriere.js:475
BildungsstandSpiel.einst.stufeBegrĂŒĂŸungskarte, Einstellungen „Bildungsstand“, Trainingskopf src/ui/training.js:35 (Stufe azubi)
ErklĂ€rtiefeSpiel.einst.niveauEinstellungen „ErklĂ€rtiefe“ (src/ui/app.js:317-319)
PrĂŒfungsstrenge je TicketSpiel.einst.wahl, inst.niveauEinstellungen „Niveau“ (src/ui/karriere.js:381), Chip am Ticket src/ui/spiel.js:641 (AP1 · Risiko 
)
(dazu) Hilfeleiter-Sprosseinst.hilfeStufesrc/ui/spiel.js:264 (Stufe 3/6)
(dazu) FertigkeitsstufeDATEN.skills[].stufeWiki-Kopf src/ui/karriere.js:303 (Stufe 3 · AP1)

Die Stellen, an denen es sich beißt:

  1. src/ui/app.js:133 gegen src/ui/app.js:200 — derselbe Wert zeigt sichtbar Stufe 2, sein Tooltip sagt Karriere-Stufe. Die sichtbare Beschriftung ist die falsche.
  2. Zwei Einstellungen mit demselben Aussehen, zwei Namen: src/ui/app.js:317-319 heißt „ErklĂ€rtiefe“ (Einstieg/AP1/AP2), src/ui/karriere.js:381 heißt „Niveau“ (Automatisch/Einstieg/AP1/AP2) und meint die PrĂŒfungsstrenge je Ticket. Der Vertrag nennt die zweite ausdrĂŒcklich „PrĂŒfungsstrenge je Ticket“ (§ 1) — nur die OberflĂ€che sagt „Niveau“.
  3. src/ui/training.js:35 — Stufe azubi meint den Bildungsstand, wĂ€hrend im selben Fenster die Kopfzeile Stufe 2 die Karriere meint. Die Datei zeigt zwei Zeilen spĂ€ter (Zeile 52) vorbildlich Karriere-Stufe — zwei Wörter fĂŒr dieselbe Sache, eines davon falsch.
  4. src/ui/spiel.js:264 — Stufe 3/6 meint die Hilfestufe (Sprosse der Hilfeleiter), nicht die Karriere. Die SchaltflĂ€che daneben heißt „Hilfe“; das Wort „Stufe“ ist dort ĂŒberflĂŒssig.
  5. Gleichzeitig auf einem Bildschirm: Kopfzeile Stufe 3 (Karriere) und Lernstand-Hinweis Stufe 1 von 4 · Azubi (1. Lehrjahr) (src/ui/lernstand-hilfe.js:100) — beide sagen „Stufe“, beide meinen etwas anderes.

Wirkung auf einen Azubi im 1. Lehrjahr. Er liest „Stufe 3“ in der Kopfzeile, klickt auf den Lernstand und liest dort „Stufe 1 von 4“. Er kann nicht wissen, dass das zwei Achsen sind; im schlechtesten Fall hĂ€lt er den Bildungsstand fĂŒr seinen Spielfortschritt und dreht ihn hoch („ich bin doch schon Stufe 3“) — und verliert genau die Hilfe, die ihm fehlt.

Vorschlag — die kleinste Klarstellung (zwei Zeichenketten, kein Umbau).

  1. src/ui/app.js:133 → Karriere ${x} (bzw. Karriere-Stufe ${x}): die Kopfzeile sagt dann dasselbe wie ihr Tooltip.
  2. src/ui/training.js:35 → Bildungsstand ${stufe}.

Wenn eine dritte Zeile erlaubt ist: src/ui/karriere.js:381 „Niveau“ → „PrĂŒfungsstrenge je Ticket“ (das Wort aus dem Vertrag, § 1) — damit sind die beiden Einstellungen mit identischen Optionen (E/AP1/AP2) unterscheidbar. Alles Weitere ist KĂŒr und kann warten: spiel.js:264 → Hilfe ${stufe}/6 (die SchaltflĂ€che darunter heißt schon „Hilfe“); Wiki-Kopf langfristig Lernstufe 3 · AP1. Nicht umbenennen sollte man Spiel.st.stufe (Karriere) oder Spiel.einst.stufe (Bildungsstand) selbst — die Feldnamen sind Vertrag; es geht nur um die sichtbaren Wörter.

Befund 5 · P2 — Der Hilfe-Knopf ist in der Leiste erst nach dem Aufklappen erreichbar

Behauptung. Bei 300 × 56 px ist der Hilfe-Knopf nicht bedienbar: er liegt im Bereich .lk-auf, der zugeklappt nur 2 px Höhe hat, opacity:0 trĂ€gt und vom overflow:hidden der Karte abgeschnitten wird. Erreichbar wird er erst, wenn die Leiste bei MausberĂŒhrung auf 320 × 300 px aufklappt (280 ms Verzögerung). Der Vertragssatz „Der Hilfe-Knopf steht in UI.leiste“ ist damit formal erfĂŒllt, praktisch nur im aufgeklappten Zustand.

Beleg.

Wirkung auf einen Azubi im 1. Lehrjahr. Er sieht in der Leiste €/h, Ruf und die Zahl offener Tickets — kein Zeichen, dass ein Mini-Ticket wartet. Erst wenn er zufĂ€llig mit der Maus ĂŒber die Leiste fĂ€hrt (und 0,3 s wartet), wĂ€chst sie auf 320 × 300 und zeigt Frage, Antworten und den Hilfe-Knopf. Im aufgeklappten Zustand muss er dann im Ticket scrollen, um die Antwortknöpfe zu sehen, und im zweiten Fenster die Denkhilfe — der Knopf, den er dafĂŒr drĂŒcken soll, scrollt mit seinem Bereich weg.

Vorschlag.

  1. Sichtbares Signal im zugeklappten Zustand: ein kleiner Punkt/ZĂ€hler „Mini“ in .lk-zeile (die Zeile hat Platz neben dem Offen-ZĂ€hler; die Karte ist dann 320 breit statt 300) — dann weiß der Azubi, dass dort etwas wartet.
  2. Hilfe-Knopf nach oben ziehen: den Knopf in die Statuszeile holen und den Text im aufklappbaren Bereich zeigen. Damit ist er ohne Hover erreichbar — die Vertragszeile wĂ€re dann wörtlich erfĂŒllt. (Betrifft src/ui/leiste.js + src/stil/leiste.css; eine Zeile Code und ~6 Zeilen CSS.)
  3. Platz: wenn die Hilfe offen ist, .lk-mini-hilfe{flex:1 1 auto} und .lk-mini{flex:0 1 auto} — dann liest der Azubi die Hilfe ganz und scrollt im Ticket, statt in beiden.

Zusammenfassung

#BefundWirkungPrioritÀtAufwand
1Stufenwahl steht unter dem Startknopf und ist danach wegWahl wird nie gesehen; Änderung nur ĂŒber ein Symbol ohne BeschriftungP11 Zeile (src/ui/start.js:161)
4Vier „Stufe“-Bedeutungen; Kopfzeile widerspricht ihrem Tooltip, „ErklĂ€rtiefe“ und „Niveau“ sehen gleich ausEr verwechselt Bildungsstand und Karriere und dreht die Hilfe abP12 Zeichenketten (app.js:133, training.js:35), +1 optional (karriere.js:381)
3Streifen zeigt gleichzeitig 1 279–1 404 ZeichenFĂŒnf KĂ€sten auf einmal; azubi-plus liest am meistenP2Aufklappen in src/ui/hilfe.js
2R12 je Ansicht nicht messbar erfĂŒllbar (≄ 23 Bedienelemente; Streifen selbst 4–5)Regel greift nicht, wird nicht nachgezogenP2Regel schĂ€rfen (tools/ethos.py) + 1 Knopf sparen
5Hilfe-Knopf erst nach 280 ms Hover, zwei Scroll-Bereiche„Leiste“ nur halb erfĂŒllt; wartendes Mini unsichtbarP2Knopf in die Statuszeile (klein)

Was gut ist und bleiben soll. Die Frage ĂŒber der Wahl („Wie viel Hilfe darf es sein? Umstellen geht jederzeit in den Einstellungen.“, src/spiel/erstestunde.js:127) ist genau die richtige Sprache fĂŒr einen Azubi. Der Streifen erklĂ€rt nach einem Fehler zuerst das Fehlgeschlagene, dann den nĂ€chsten Schritt — die Reihenfolge stimmt. Die Stufen tun sichtbar, was sie versprechen: meister bekommt 0 Bedienelemente und 0 Zeichen, geselle ohne Fehler ebenfalls 0 (gemessen). Und die Hilfe verrĂ€t nirgends die Lösung (GegenprĂŒfung V1, tests/pruefung-hilfestellung.test.js).

Nicht geprĂŒft (ehrlich). Ob die FlĂ€chen auf einem 300 × 56 px großen Fenster wirklich so aussehen, ist hier nicht messbar (kein Browser/CDP). Die Geometrie-Aussagen stammen aus CSS-Zahlen und der Clip-Regel, nicht aus einem Bildschirmfoto. Ebenso ungeprĂŒft: Verhalten auf dem Tablet/Android (nicht Teil dieses Auftrags) und die Frage, ob ein echter Azubi die vier Stufennamen („Azubi+“, „Geselle“, „Meister“) auf sich bezieht — dafĂŒr brĂ€uchte es einen Menschen vor dem Programm, nicht einen PrĂŒfer am Quelltext.