đ 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.js395/395 grĂŒn. Kein Code geĂ€ndert â dieses Dokument ist der ganze Auftrag.
Verfahren (ehrlich: was gemessen wurde und was nicht)
| Punkt | Verfahren | Belastbarkeit |
|---|---|---|
| 1, 4, 5 | Quelltext gelesen (src/ui/*.js, src/spiel/*.js, src/stil/*.css), Zeilen zitiert | Beleg aus dem Code |
| 2 | DOM-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 gemessen | gemessen, nicht geschÀtzt |
| 3 | ZeichenzĂ€hlung ĂŒber die geladenen Datenpakete (DATEN.hilfen, Spiel.FEHLERTEXTE, DATEN.lehrtexte, Spiel.mini.hilfe) und ĂŒber die DOM-Attrappe | gemessen |
| 5 (Geometrie) | Rechnung aus den CSS-Zahlen; keine Layout-Messung im Browser | nicht 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.
src/ui/spiel.js:690-694baut die Karte: erstT.BEGRUESSUNG, dann.sp-einstieg-knoepfemit âZeig mir den ersten Auftragâ (knopf primaer, also die auffĂ€lligste FlĂ€che) und âErst umsehenâ.src/ui/start.js:157-161hĂ€ngt die Wahl ans Ende derselben Karte:ziel.append(k)â also unter die beiden Knöpfe.src/ui/spiel.js:683-689(wahl): jeder Klick setztSpiel.einstieg.waehlen(weg), undstwird damitbegruessunggesetzt;src/spiel/erstestunde.js:164macht darausbegruessungNoetig() === falseâ die Karte (mit der Wahl) erscheint nie wieder.- Der Text ĂŒber der Wahl sagt es selbst:
src/spiel/erstestunde.js:127â âWie viel Hilfe darf es sein? Umstellen geht jederzeit in den Einstellungen.â Der Satz stimmt, er steht nur unter dem Knopf, der die Karte schlieĂt.
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â):
| Stufe | Knöpfe im Streifen | davon | Zeichen im Streifen gleichzeitig |
|---|---|---|---|
| azubi | 4 | 3 Ă hl-sprosse-knopf (Link, Route, ACL und Dienst) + 1 Ă hl-knopf | 1 279 |
| azubi-plus | 5 | 3 Ă hl-sprosse-knopf + 2 Ă hl-knopf | 1 404 |
| geselle (nach Fehler) | 4 | wie azubi | 930 |
| geselle (ohne Fehler) / meister | 0 | â | 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.
- 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.
- Im Streifen: höchstens einen Aktionsknopf je Vorschlag zeigen â
hl-lauf(âAusfĂŒhrenâ) nur beim ersten Vorschlag, bei weiteren nurhl-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).
- Streifen, azubi, mit Fehler: 1 279 Zeichen gesamt â
hl-fehler281,hl-geruest210,hl-leiter356,hl-vorschlaege265,hl-bruecke157 (hl-kopf10). - Ohne Fehler: 795 Zeichen (kein Fehlertext, keine BrĂŒcke).
- LĂ€ngste
erklaerunginDATEN.hilfen.VORSCHLAEGE(29 EintrÀge): 115 Zeichen,dienst-ios-run(src/daten/hilfen.js:125); lÀngstesyntax: 71. - LÀngste
ausfuehrlich-ErklÀrung inSpiel.FEHLERTEXTE(82 EintrÀge): 264 Zeichen,ios-unknown-exec(src/spiel/fehlertexte.js:207); danachios-invalid243 (Zeile 177),win-dns-timeout241,win-telnet-port238. - Vergleich Bestand:
DATEN.lehrtexte(34 Codes) â lĂ€ngster E-Text 440 Zeichen (DHCP_ROGUE_OFFER), erscheint aber nur auf Klick im ErklĂ€ren-Panel, ein Text zur Zeit. Mini-Ticket: lĂ€ngste Denkhilfe 125 Zeichen (gemessen ĂŒber alle 92 Minis), Frage †140 (Vertrag), ErklĂ€rung erst nach der Antwort. - Die Stufe schĂŒtzt nur halb:
gesellebekommt mitknapp39 Zeichen statt 243 â azubi-plus bekommt denselben langen Text wie azubi (Vertrag § 3:erklaerung:"ausfuehrlich"fĂŒr beide). Genau die Stufe, die âknapperâ versprochen bekommt, liest am meisten: 1 404 Zeichen.
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:
| Bedeutung | Feld | sichtbar als |
|---|---|---|
| Karriere-Stufe | Spiel.st.stufe | Kopfzeile src/ui/app.js:133 (Stufe 2), Balken-Tooltip src/ui/spiel.js:34, Aufstiegsfeier src/ui/karriere.js:475 |
| Bildungsstand | Spiel.einst.stufe | BegrĂŒĂungskarte, Einstellungen âBildungsstandâ, Trainingskopf src/ui/training.js:35 (Stufe azubi) |
| ErklĂ€rtiefe | Spiel.einst.niveau | Einstellungen âErklĂ€rtiefeâ (src/ui/app.js:317-319) |
| PrĂŒfungsstrenge je Ticket | Spiel.einst.wahl, inst.niveau | Einstellungen âNiveauâ (src/ui/karriere.js:381), Chip am Ticket src/ui/spiel.js:641 (AP1 · Risiko âŠ) |
| (dazu) Hilfeleiter-Sprosse | inst.hilfeStufe | src/ui/spiel.js:264 (Stufe 3/6) |
| (dazu) Fertigkeitsstufe | DATEN.skills[].stufe | Wiki-Kopf src/ui/karriere.js:303 (Stufe 3 · AP1) |
Die Stellen, an denen es sich beiĂt:
src/ui/app.js:133gegensrc/ui/app.js:200â derselbe Wert zeigt sichtbarStufe 2, sein Tooltip sagtKarriere-Stufe. Die sichtbare Beschriftung ist die falsche.- Zwei Einstellungen mit demselben Aussehen, zwei Namen:
src/ui/app.js:317-319heiĂt âErklĂ€rtiefeâ (Einstieg/AP1/AP2),src/ui/karriere.js:381heiĂ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â. src/ui/training.js:35âStufe azubimeint den Bildungsstand, wĂ€hrend im selben Fenster die KopfzeileStufe 2die Karriere meint. Die Datei zeigt zwei Zeilen spĂ€ter (Zeile 52) vorbildlichKarriere-Stufeâ zwei Wörter fĂŒr dieselbe Sache, eines davon falsch.src/ui/spiel.js:264âStufe 3/6meint die Hilfestufe (Sprosse der Hilfeleiter), nicht die Karriere. Die SchaltflĂ€che daneben heiĂt âHilfeâ; das Wort âStufeâ ist dort ĂŒberflĂŒssig.- Gleichzeitig auf einem Bildschirm: Kopfzeile
Stufe 3(Karriere) und Lernstand-HinweisStufe 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).
src/ui/app.js:133âKarriere ${x}(bzw.Karriere-Stufe ${x}): die Kopfzeile sagt dann dasselbe wie ihr Tooltip.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.
- MaĂe:
src/ui/leiste.js:10âconst ZU = [300, 56], AUF = [320, 300];src/stil/leiste.css:10â.leiste-karte.auf{width:320px; height:300px}. - Die Statuszeile belegt 54 der 56 px:
src/stil/leiste.css:18â.lk-zeile{⊠height:54px âŠ}. - Alles Bedienbare auĂer âöffnenâ/âausblendenâ liegt darunter:
src/stil/leiste.css:39-40â.lk-auf{⊠flex:1 1 auto; min-height:0; ⊠opacity:0}, erst.leiste-karte.auf .lk-auf{opacity:1};src/stil/leiste.css:6â die Karte hatoverflow:hidden. - Aufklappen:
src/ui/leiste.js:47-51âpointerenterâ 280 ms âaufklappen(); Zuklappen 5 s nachpointerleave. - Der Hilfe-Knopf entsteht in
src/ui/karriere.js:343(.mk-hilfe-knopf) und der Anker in Zeile 360 (.mk-wiki-knopf), gezeichnet ĂŒberleisteMini()(src/ui/karriere.js:397, gerufen in Zeile 522 und 531). - Platzrechnung aufgeklappt: 300 â 54 (Statuszeile) â 8 (Innenabstand) â ~18 (drei AbstĂ€nde Ă 6) â ~20 (FuĂzeile) â 200 px fĂŒr Ticket und Hilfe-Bereich zusammen. Ein Ticket mit Schnappschuss und vier Antworten braucht allein ~280 px (Kopf 16 + Frage bis 140 Zeichen â 3 Ă 16 + Schnappschuss bis 7 Ă 14 + 4 Ă 28 fĂŒr die Knöpfe). Beide Bereiche haben
overflow:auto(leiste.css:43fĂŒr.lk-mini,leiste.css:52fĂŒr.lk-mini-hilfe) â es wird also in zwei Fenstern gleichzeitig gescrollt.
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.
- 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. - 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.) - 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
| # | Befund | Wirkung | PrioritÀt | Aufwand |
|---|---|---|---|---|
| 1 | Stufenwahl steht unter dem Startknopf und ist danach weg | Wahl wird nie gesehen; Ănderung nur ĂŒber ein Symbol ohne Beschriftung | P1 | 1 Zeile (src/ui/start.js:161) |
| 4 | Vier âStufeâ-Bedeutungen; Kopfzeile widerspricht ihrem Tooltip, âErklĂ€rtiefeâ und âNiveauâ sehen gleich aus | Er verwechselt Bildungsstand und Karriere und dreht die Hilfe ab | P1 | 2 Zeichenketten (app.js:133, training.js:35), +1 optional (karriere.js:381) |
| 3 | Streifen zeigt gleichzeitig 1 279â1 404 Zeichen | FĂŒnf KĂ€sten auf einmal; azubi-plus liest am meisten | P2 | Aufklappen in src/ui/hilfe.js |
| 2 | R12 je Ansicht nicht messbar erfĂŒllbar (â„ 23 Bedienelemente; Streifen selbst 4â5) | Regel greift nicht, wird nicht nachgezogen | P2 | Regel schĂ€rfen (tools/ethos.py) + 1 Knopf sparen |
| 5 | Hilfe-Knopf erst nach 280 ms Hover, zwei Scroll-Bereiche | âLeisteâ nur halb erfĂŒllt; wartendes Mini unsichtbar | P2 | Knopf 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.