đ Review â Wartbarkeit der Bausteine âHilfestellung"
âŹïž Netzwerk-Labor · Auftrag: task-14 · Vertrag: Hilfestellung â Stufen und Schnittstellen · Architektur: Architektur
Auftrag. PrĂŒfe die WARTBARKEIT der neuen Bausteine AâH. Kein Umbau, keine Meinung ohne Beleg. Stand der Messung: Commit
c341c2d, Arbeitsbaum sauber. Gelesen wurde nur; geĂ€ndert wurde allein diese Datei. PrĂŒfpunkte (austask-14): 1 GröĂe/Verantwortung · 2 doppelte Wahrheiten · 3 Kopplung · 4 defensive RĂŒckfĂ€lle · 5 Testbarkeit. PrioritĂ€ten: P1 verhindert Ănderungen · P2 kostet Zeit · P3 Kosmetik.
Kurzfassung
Antwort auf die Leitfrage (âdoppelte Wahrheiten beseitigt oder verschoben?"): Die Definitionstabelle ist beseitigt â § 2 steht genau einmal, in Spiel.STUFE/STUFEN_SCHALTER/STUFEN_WANN (src/spiel/stufensystem.js:44â76), und die Mini-Hilfe baut die Fehlerregel nachweislich nicht mehr nach (src/spiel/mini.js:144â152). Verschoben worden sind zwei Dinge: (a) die Terminal-Hilfe prĂŒft âerst nach Fehler" weiterhin selbst, an drei Stellen (src/spiel/hilfe.js:278, 306, 321), statt Spiel.stufe.wannPasst zu fragen; (b) vier Fallback-Kopien der § 2-Zahlen entstanden in src/ui/konsole.js:25â30, src/cli/parser.js:279,354, src/ui/lernstand-hilfe.js:29â35 und src/spiel/mini.js:11â12. Kein P1 gefunden.
| # | Befund | PrioritÀt |
|---|---|---|
| 2.1 | Zwei Vorschlagsquellen: Spiel.hilfe.passend und CLI.vorschlag (im Bau nur die erste erreichbar, die zweite ungetestet) | P2 |
| 2.2 | âerst nach Fehler" in src/spiel/hilfe.js:278, 306, 321 selbst gebaut â plus 4 Fallback-Kopien der § 2-Zahlen | P2 |
| 2.3 | Der Freigabe-Text existiert zweimal: Spiel.stufe.freigabeText und UI.lernstandHilfe.freigabeText | P2 |
| 1.1 | src/spiel/fehlertexte.js: 1176 Zeilen, davon ~1015 Tabelle â Daten liegen in der Spielschicht | P2 |
| 4 | 17 Ă âBaustein A da?"-PrĂŒfungen: 11 mĂŒssen bleiben, 6 sind entfernbar | P3 |
| 2.4 / 2.5 | GerĂŒst-Texte (GERUEST vs. WERKZEUGE) und ErklĂ€rwege (fehlertext vs. grundText): KEINE Doppelung | â |
1 · GröĂe und Verantwortung
Gemessen am Stand c341c2d (Zeilen = Get-Content | .Count, öffentliche Namen = Zuweisungen ^Spiel.|^UI.|^DATEN.):
| Datei | Zeilen | öffentliche Namen | Was noch drinsteckt |
|---|---|---|---|
src/spiel/stufensystem.js | 235 | 7 (dazu 16 Methoden in Spiel.stufe) | 4 Tabellen + 16 Funktionen â eine Verantwortung (Bildungsstand) |
src/spiel/hilfe.js | 339 | 15 | Daten (LEITER, WERKZEUGE 27, SENIOR_FRAGEN 13) + Stufenmodell + Baustein B (ab :189) |
src/spiel/fehlertexte.js | 1176 | 2 | 82 TabelleneintrÀge + 106 Zeilen Auswertung |
src/spiel/training.js | 252 | 2 | Notvorrat TRAINING_EIGENE_SZENARIEN (9 Szenarien) + Logik |
src/ui/hilfe.js | 172 | 1 (2 Methoden) | reine DOM-Ausgabe |
src/ui/training.js | 138 | 1 | reine DOM-Ausgabe |
src/ui/lernstand-hilfe.js | 282 | 1 | DOM + Lernmotor-Leser + Stufen-RĂŒckfalltabelle (:29â35) |
src/ui/stufensystem.js | 81 | 1 | Einstellungs-Abschnitt |
src/daten/hilfen.js | 259 | 1 | drei Tabellen (VORSCHLAEGE, GERUEST, SYNTAX) â thematisch zusammengehörig |
src/daten/trainings.js | 383 | 1 | 34 Szenarien, reine Daten |
1.1 · fehlertexte.js ist ein Datenpaket in der Spielschicht â P2
- Behauptung: Die Datei ist zu ~86 % Tabelle:
Spiel.FEHLERTEXTE = [beginnt in:55und endet in:1069(82 EintrĂ€ge, gemessen ĂŒber^\s+id: "), die Auswertung umfasst nur:1071â1176(106 Zeilen:ART_ALIAS,ARTE,lageVon,artPasst,modusPasst,stufenText,Spiel.fehlertext). Die vergleichbaren Pakete liegen als Daten:src/daten/hilfen.js,src/daten/trainings.js. - Beleg:
src/spiel/fehlertexte.js:55,:1069,:1082,:1152;src/daten/hilfen.js:22;src/daten/trainings.js:27. - Risiko: Der Vertrag § 7 ordnet Daten nicht der Schicht
spielzu; ein Review muss jedes Mal 1000 Zeilen Daten durchblÀttern, um 100 Zeilen Logik zu finden.bauen.pynimmt beide Ordner automatisch auf, ein Umzug ist also technisch billig. - Vorschlag:
Spiel.FEHLERTEXTEnachsrc/daten/fehlertexte.jsalsDATEN.fehlertExteverschieben, den 106-Zeilen-Auswerter insrc/spiel/fehlertexte.jslassen, Zugriff wie beiDATEN.hilfenĂŒber die Spielschicht. Zwei Zeilen intests/spiel-fehlertexte.test.jsziehen nach. Entscheidung des Lead (fremde Datei, § 7).
1.2 · src/spiel/hilfe.js trĂ€gt jetzt drei Verantwortungen â P3
- Behauptung: Daten (27 Werkzeughinweise, 13 Senior-Fragen), das Stufenmodell der bestehenden Hilfeleiter und seit diesem Bau die vier Funktionen aus Vertrag § 4.1 (
passend:275,geruest:289,leiter:303,syntaxBruecke:316, zusammen ~150 Zeilen). - Beleg:
src/spiel/hilfe.js:37,:68,:275â339. - Risiko: § 7 erlaubt genau dieses AnfĂŒgen (ânur am Dateiende"), also kein Vertragsbruch; die Datei wird aber von zwei Bausteinen zugleich verĂ€ndert.
- Vorschlag: Kein Umbau nötig. Wenn die Datei das nÀchste Mal angefasst wird: die reinen Texttabellen (
WERKZEUGE,SENIOR_FRAGEN) nachsrc/daten/werkzeuge.jsziehen â dann bleibt inhilfe.jsnur Verhalten.
2 · Doppelte Wahrheiten
2.1 · Zwei Vorschlagsquellen: entschĂ€rft, nicht beseitigt â P2
- Behauptung:
Spiel.hilfe.passend(src/spiel/hilfe.js:275) undCLI.vorschlag(src/cli/entspricht.js:186â257, ~70 Zeilen Regelwerk) beantworten dieselbe Frage (âwas tippe ich jetzt?"). Im gebauten Programm ist nur die erste erreichbar; die zweite hĂ€ngt als RĂŒckfall daneben. - Beleg:
src/ui/konsole.js:334â346âausSpielHilfeist wahr, sobaldDATEN.hilfenexistiert; im Bau existiert es (src/daten/hilfen.js:22). Kein Test ruftCLI.vorschlagauf: die Testhilfe intests/spiel-hilfe-vorschlaege.test.js:249liestSpiel.hilfe.leiter(...).vorschlag, die WirkungsprĂŒfungtests/pruefung-wirkung.test.js:112belegtSpiel.hilfe.passendinkonsole.js. - Risiko: Die zweite Maschine ist ungetestet und kann unbemerkt verrotten; wer die Befehle der Konsole Ă€ndert, muss zwei Stellen pflegen. Umgekehrt kennt
CLI.vorschlagModi (config,vlan,line,dhcp), dieDATEN.hilfen.VORSCHLAEGEnicht abdeckt â der RĂŒckfall ist stellenweise fĂ€higer als der Hauptweg. - Vorschlag: Entweder
CLI.vorschlaglöschen und den RĂŒckfall inkonsole.js:344aufnullsetzen, oder ihn als bewussten Zweitweg fĂŒhren: ein Kommentar in beiden Dateien (âRĂŒckfall fĂŒr Testfassungen ohneDATEN.hilfen") und zwei Tests, die seine Ausgabe festhalten. Beides ist eine Entscheidung des Lead.
2.2 · âerst nach Fehler" wird in der Terminal-Hilfe weiterhin selbst gebaut â P2
- Behauptung: Die Bedingung existiert nicht mehr in
src/spiel/mini.js(dort delegiert), aber dreimal insrc/spiel/hilfe.jsâ jedes Mal mit eigener Logik stattSpiel.stufe.wannPasst. - Beleg:
- Definition (eine Quelle):
src/spiel/stufensystem.js:71â76(STUFEN_WANN) und:158â165(wannPasst); die Datei sagt in:142ausdrĂŒcklich: âFĂŒr das WANN istwann()/wannPasst()zustĂ€ndig". - Mini-Hilfe delegiert korrekt:
src/spiel/mini.js:144â152(Kommentar:118). - Terminal-Hilfe baut selbst:
src/spiel/hilfe.js:278(kann("leiter") === "nachfehler" && !hatFehler(...)),:306(dieselbe Zeile fĂŒrleiter()),:321(if (!fehler && r >= 2) return null;â eine Regel, fĂŒr die es inSTUFEN_WANNkeine Zeile gibt).
- Definition (eine Quelle):
- Risiko: Ăndert der Vertrag § 2 eine Zeile (z. B. âGeselle sieht den Streifen sofort"), mĂŒssen drei Stellen nachgezogen werden â und die Tabelle in A behauptet derweil etwas anderes. Genau das war Befund B2.
- Vorschlag: In
hilfe.js:278/306Spiel.stufe.wannPasst("leiter", {fehler})benutzen und:321ĂŒber eine neue FlĂ€che ("syntaxBruecke") inSTUFEN_WANNfĂŒhren. Beides berĂŒhrt den Vertragstext â Lead.
2.2a · Vier Fallback-Kopien der § 2-Zahlen â P3
| Kopie | Datei:Zeile | Was dupliziert wird | erreichbar? |
|---|---|---|---|
STUFE_RUECKFALL | src/ui/konsole.js:25â30 | einstieg, tipps aus Spiel.STUFE (stufensystem.js:45â48) | nur ohne A (:33â43) |
o.tipps \|\| (o.einstieg ? "alle" : "keine") | src/cli/parser.js:279, :354 | dieselbe Zuordnung, dritte Fassung | wenn konsole.js nichts ĂŒbergibt |
RUECKFALL + SCHALTER_AZUBI | src/ui/lernstand-hilfe.js:29â35 | rang, name, vorschlaege, leiter, konto | Testkapsel âohne A" (tests/spiel-lernstand-hilfe.test.js:431) |
SPROSSEN / HILFE_KONTO | src/spiel/mini.js:11â12 | HILFE_KONTO = stufensystem.js:52 | zweiter Eintrag ist toter Zweig, s. 4 |
- Behauptung: Die Zahlen sind gleich, aber sie stehen viermal. Die Tabelle
Spiel.STUFEbehauptet instufensystem.js:40â41, âjede Zeile der Vertragstabelle" zu halten; die Zeile âLeiste/Mini: 2 Hilfen" lebt dagegen allein insrc/spiel/mini.js:11(SPROSSEN) â fĂŒr sie gibt es in A kein Feld. - Risiko: Wer § 2 nachzieht (der Vertrag § 9 kĂŒndigt das an: âDie Zahlen ⊠werden nach dem ersten Durchspielen nachgezogen"), muss fĂŒnf Stellen finden.
SPROSSENwĂŒrde beim Nachziehen ĂŒbersehen. - Vorschlag: Ein gemeinsames RĂŒckfallpaket (z. B.
DATEN.stufen) als Quelle fĂŒr A und die RĂŒckfĂ€lle;SPROSSENals Feld inSpiel.STUFEaufnehmen (z. B.sprossen: {azubi: 2, "azubi-plus": 1, âŠ}) und inmini.js:216ĂŒberkann("sprossen")lesen. VertragsĂ€nderung â Lead.
2.3 · Der Freigabe-Text existiert zweimal â P2
- Behauptung:
Spiel.stufe.freigabeText(src/spiel/stufensystem.js:208â224) undUI.lernstandHilfe.freigabeText+hilfeKurz(src/ui/lernstand-hilfe.js:83â101) schreiben denselben Satz (âStufe X von 4 · ⊠was ist frei") aus derselben Quelle (kann/darf), mit unterschiedlichem Wortlaut. - Beleg: A-Text: `âStufe 3 von 4 · Geselle: 1 Vorschlag im Terminal · Werkzeugleiter nach einem Fehler · Hilfe-Knopf in Leiste und Mini-Ticket (2 Hilfen je Auftrag frei) âŠ"
(stufensystem.js:213â223`); UI-Text: `âStufe 3 von 4 · Geselle / PrĂŒfungsvorbereitung â 1 Vorschlag mit Syntax im Terminal · Werkzeugleiter nach einem Fehler · Hilfe-Knopf im Mini-Ticket (2 frei) âŠ"(lernstand-hilfe.js:86â100`). Beide Texte sind durch Tests festgehalten:tests/spiel-stufensystem.test.js:395, 419undtests/spiel-lernstand-hilfe.test.js:375. - Risiko: Zwei Wahrheiten fĂŒr eine Aussage; der Mensch liest in den Einstellungen und im Lernstand unterschiedliche Formulierungen. Positiv: beide lesen
kann/darf, keine zweite Tabelle. - Vorschlag:
UI.lernstandHilfe.freigabeText()gibtSpiel.stufe.freigabeText()zurĂŒck und hĂ€ngt nur den ZusatzhilfeKurz()an; der Test prĂŒft dann Gleichheit statt Eigentext. Eine Stunde, eine Datei.
2.4 · GerĂŒst-Texte: KEINE Doppelung â entlastet
- Behauptung:
DATEN.hilfen.GERUESTundSpiel.WERKZEUGEbeantworten verschiedene Fragen. - Beleg:
src/daten/hilfen.js:156â181ist nach GerĂ€teart + CLI-Modus geschlĂŒsselt (ios.user,ios.priv,host-windows.host,fw.fwPrivâŠ) und beantwortet âWas geht hier?" â gelesen nur vonSpiel.hilfe.geruest(src/spiel/hilfe.js:290â297).src/spiel/hilfe.js:37â65ist nach Fertigkeit geschlĂŒsselt (27 EintrĂ€ge) und beantwortet âWelches Werkzeug zeigt, wo es hĂ€ngt?" â gelesen von Hilfestufe 2 (src/spiel/hilfe.js:98),src/spiel/mini.js:194undsrc/spiel/training.js:182. Verschiedene SchlĂŒssel, verschiedene Frage, kein gemeinsamer Aufrufer. - Risiko: Nur ein BerĂŒhrungspunkt: beide nennen konkrete Befehle (
show ip interface briefindaten/hilfen.js:159undspiel/hilfe.js:38). Ăndert IOS einen Befehl, sind zwei Textstellen zu pflegen. P3. - Vorschlag: Nichts umbauen. Vermerk genĂŒgt.
2.5 · Zwei ErklĂ€rwege (Spiel.fehlertext / Spiel.grundText): KEINE Doppelung â entlastet
- Behauptung: Die beiden erklÀren nicht dieselbe Ursache, sondern zwei verschiedene Ereignisse.
- Beleg:
Spiel.fehlertext(src/spiel/fehlertexte.js:1152) wird von der Ausgabe der Konsole gesteuert (t.erkennung.test(ausgabe),:1169) und antwortet im Moment des Tippfehlers; die Tiefe kommt aus dem Bildungsstand (Spiel.stufe.text,:1139).Spiel.grundText(src/spiel/lernen.js:101) wird von einem Grundcode gesteuert (DATEN.lehrtexte[code],Sim.GRUENDE) und antwortet bei der Abnahme eines Ziels; die Tiefe kommt aus der ErklĂ€rtiefeniveau. - Risiko: Keine Doppelung, aber zwei Tiefe-Achsen in zwei ErklĂ€rwegen â das ist § 1 (getrennte Achsen) und damit gewollt; beim Lesen ist es die hĂ€ufigste Verwechslung. P3.
- Vorschlag: Im Kopf von
fehlertexte.jseinen Satz ergĂ€nzen, welcher Weg wofĂŒr zustĂ€ndig ist (steht sinngemÀà in:2â10, könnte aber den NamenSpiel.grundTextnennen).
3 · Kopplung und Schichtung
- Behauptung: Die neuen Daten- und Spiel-Dateien greifen nicht auf die OberflÀche zu; die Richtung
kern â modell â sim â cli â daten â spiel â plattform â uiist eingehalten. - Beleg (gemessen):
grep -E "\bUI\.|\bdocument\.|\bwindow\."ĂŒbersrc/daten/*.jsundsrc/spiel/*.jsâ 0 Treffer.grep -E "\bSpiel\.|\bstore\.|\bBus\.|\bL\."ĂŒbersrc/daten/*.jsâ nur Kommentare (daten/hilfen.js:4,:19;daten/trainings.js:18) und der vorbestehendeDATEN.ticketSpec(daten/basis.js:156, 166, 169), der laut eigenem Kommentar:108bewusst erst beim Zugriff ĂŒberSpiel.ticketBauenarbeitet â kein neuer Bruch. - Beleg (Gegenrichtung):
src/ui/hilfe.js:15, 20, 28, 36undsrc/ui/lernstand-hilfe.js:37, 75lesenSpiel.*â erlaubt (ui darf nach unten). - Risiko: Keines gefunden. Offen gemeldet:
src/spiel/mini.js:241liestDATEN.wikidirekt (daten â spiel, erlaubt) undsrc/spiel/training.js:96liestDATEN.trainingsâ beides ist der vorgesehene Weg, kein Zugriff der OberflĂ€che an der Spielschicht vorbei.
4 · Defensive RĂŒckfĂ€lle: wie viele sind noch nötig?
GezĂ€hlt (Stand c341c2d): 11 PrĂŒfungen der Form typeof Spiel.stufe !== "undefined" in src/ (src/spiel/erstestunde.js:148, 179, 197; src/spiel/mini.js:126, 137, 146, 159; src/spiel/fehlertexte.js:1139; src/spiel/training.js:104, 110, 116) und 6 gleichwertige der Form typeof Spiel !== "undefined" && Spiel.stufe in src/ui/ (src/ui/hilfe.js:20, 28, 36; src/ui/konsole.js:33, 40; src/ui/lernstand-hilfe.js:37) â zusammen 17.
| Datei:Zeile | PrĂŒft | Verdikt | Beleg |
|---|---|---|---|
spiel/erstestunde.js:148, 179, 197 | id, alle, setzen | bleibt | tests/spiel-einstieg-stufe.test.js:234 löscht A und prĂŒft den RĂŒckfall |
spiel/mini.js:126 | rang | bleibt | tests/spiel-mini-hilfe.test.js:228 setzt Spiel.stufe = undefined und prĂŒft :229â232 Hilfe und Anker |
spiel/mini.js:137 | darf | bleibt | dito (der Test lÀuft durch hilfe()/anker(), die beide darf fragen) |
spiel/mini.js:146 | wannPasst | bleibt | zweifach gedeckt: :220 lÀsst wannPasst werfen, :228 entfernt A ganz |
spiel/mini.js:159 | kann("konto") | entfernbar (toter Zweig) | :157â158 antwortet vorher ĂŒber Spiel.HILFE_KONTO; kein Test löscht HILFE_KONTO |
spiel/fehlertexte.js:1139 | text | bleibt | tests/spiel-fehlertexte.test.js:289 löscht A, erwartet âausfĂŒhrlich" |
spiel/training.js:104, 110, 116 | id, darf, erklaerung | bleibt | tests/spiel-training.test.js:241 löscht A; tests/ui-training.test.js:131 setzt stufe: null |
ui/lernstand-hilfe.js:37 | Spiel.stufe | bleibt | Testkapsel âohne A" tests/spiel-lernstand-hilfe.test.js:431 |
ui/hilfe.js:20, 28, 36 | def, konto, rang | entfernbar | kein Test baut UI.hilfe ohne A; tests/spiel-hilfe-vorschlaege.test.js:456 ersetzt A nur |
ui/konsole.js:33, 40 | kann, id | entfernbar | dito (die Konsole lÀuft in Tests immer mit A) |
- Behauptung: 11 der 17 PrĂŒfungen sind durch Testkapseln gedeckt und mĂŒssen bleiben â sie sind kein toter Ballast, sondern die Zusicherung âohne A gilt azubi" (Vertrag § 3, Regel 1). 6 sind entfernbar.
- Risiko beim Entfernen: Wer
ui/hilfe.jsoderui/konsole.jsjemals ohne Spielschicht lĂ€dt (Testfassung, Einzeldatei-Bau), verliert den RĂŒckfall und bekĂ€me einenReferenceErrorstatt âAzubi". Deshalb: **entfernbar, aber begrĂŒndete Versicherung** â ich empfehle, nurspiel/mini.js:159zu entfernen (nachweislich unerreichbar) und die fĂŒnf UI-PrĂŒfungen stehen zu lassen. - Zusatz: Zusammen mit
Spiel.MINI.HILFE_KONTO(spiel/mini.js:12) ist auchmini.js:164nur erreichbar, wennHILFE_KONTOfehlt â dieselbe Klasse wie:159. Beide Zeilen sind Kandidaten fĂŒr einen Streichstrich.
5 · Testbarkeit: was ist nicht abgedeckt?
Gemessen: Name in tests/*.test.js gesucht (grep), Stand c341c2d, 44 Testdateien.
Nicht abgedeckt (neu in diesem Bau):
| Datei:Funktion | Warum es auffÀllt | Vorschlag |
|---|---|---|
src/spiel/stufensystem.js:174 Spiel.stufe.hilfenFrei(inst) | Kein Test ruft sie; tests/spiel-stufensystem.test.js:262 prĂŒft nur das Feld a.hilfenFrei | Ein Testfall: Ticket mit hilfenFrei: 3 â hilfenFrei() = 3, ohne Feld = konto().frei |
src/spiel/stufensystem.js:229 Spiel.stufeInstanz() | Kein Test; nur mittelbar ĂŒber konto() ohne Argument | Ein Testfall: ohne offenes Ticket null, mit st.aktiv die Instanz |
src/cli/entspricht.js:188 CLI.vorschlag | Kein Test, im Bau nicht erreichbar (s. 2.1) | Entweder löschen oder zwei Tests |
src/spiel/lernen.js:101 Spiel.grundText | kein Test (vorbestehend, nicht neu) â grundTitel/lernenNachAbnahme ebenso wenig | Ein Testfall ĂŒber einen bekannten Grundcode je Niveau |
src/spiel/fehlertexte.js:55 Spiel.FEHLERTEXTE (Tabelle) | mittelbar abgedeckt: tests/spiel-fehlertexte.test.js prĂŒft jeden Eintrag ĂŒber seine probe | keine Aktion |
Abgedeckt (zur Entlastung, damit die Liste vollstĂ€ndig ist): Spiel.stufe.alle/id/def/rang/setzen/kann/ darf/wann/wannPasst/erklaerung/konto/hilfeZiehen/text/erklaerungText/freigabeText (tests/spiel-stufensystem.test.js, tests/pruefung-hilfestellung.test.js), Spiel.hilfe.passend/geruest/leiter/syntaxBruecke (tests/spiel-hilfe-vorschlaege.test.js:196â330), Spiel.mini.hilfe/anker (tests/spiel-mini-hilfe.test.js), Spiel.fehlertext (tests/spiel-fehlertexte.test.js), Spiel.training.liste/starten/stand/abnehmen (tests/spiel-training.test.js), UI.stufeAbschnitt.zeichnen (tests/spiel-stufensystem.test.js:389), UI.lernstandHilfe.* (tests/spiel-lernstand-hilfe.test.js), UI.training.* (tests/ui-training.test.js), DATEN.trainings (tests/daten-trainings.test.js). UI.hilfe.aktualisieren und UI.hilfe.zeichnen werden indirekt ausgefĂŒhrt (tests/spiel-hilfe-vorschlaege.test.js:471 öffnet UI.konsole, das den Streifen zeichnet), aber nie direkt gerufen.
Anhang · So sind die Zahlen entstanden
Zeilen Get-Content <Datei> | .Count (je Datei oben)
öffentl. Namen Select-String '^(Spiel|UI|DATEN)\.[A-Za-z_.]+ *='
TabelleneintrÀge Select-String '^\s+id: "' in src/spiel/fehlertexte.js -> 82
Kopplung grep '\bUI\.|\bdocument\.|\bwindow\.' in src/daten, src/spiel -> 0 Treffer
RĂŒckfĂ€lle grep 'typeof Spiel\.stufe' bzw. 'typeof Spiel !== "undefined"' in src/
Testabdeckung grep '<Funktionsname>' in tests/*.test.js
Kein Testlauf nötig fĂŒr dieses Review; der Stand des Auftrags ist 395/395 grĂŒn (Commit c341c2d), gemessen vom Lead.