Netzwerk-Labor · Doku Fahrplan 1.3 / 2.0 — was zu entscheiden ist Zum Spiel Online

Fahrplan 1.3 / 2.0 — was zu entscheiden ist

Was diese Datei ist. Am 09.10.2026 haben fünf unabhängige Prüfer je einen Entwurf geschrieben (zusammen 1 454 Zeilen, alle unter docs/entwicklung/Entwurf – *.md). Diese Datei führt sie zusammen: was gemessen ist, wo sie sich widersprechen, was nichts von ihnen abdeckt, und was ich als Nächstes bauen würde. Gebaut ist nichts davon — Stand bleibt Fassung 1.2.4, 461 Tests grün.

Die Einzelentwürfe (jeder mit eigenen Belegen, Messungen und „nicht geprüft"-Abschnitten): · Klassenraum-Umsetzung · Tutor auf Sprachmodell · Mitnehmbarer Lernstand · Inhaltslücken · Gegenprüfung und Lehrersicht

1 · Das Kurzurteil

Die richtige nächste Fassung ist nicht der Klassenraum-Server und nicht der Tutor. Es ist die Übergabe: ein Rechner, viele Azubis. Ein Übergabeknopf („Neuer Azubi an diesem Rechner") und ein „Ergebnis kopieren" im Abschluss-Fenster. Ein halber Tag Arbeit, kein Server, kein Netz, keine Datenschutzfrage — und die Voraussetzung für jeden größeren Schritt.

Der Grund ist unbequem einfach: ohne Übergabe ist das Spiel in der zweiten Unterrichtsstunde unbrauchbar. src/ui/spiel.js:857 lädt beim Start den offenen Auftrag des Vorgängers; Spiel.neu() existiert (zustand.js:174), ruft aber keine Oberfläche auf. Der zweite Azubi am selben Rechner steckt im Auftrag des ersten — und niemand kann das im Spiel beheben.

2 · Was die fünf Prüfer gefunden haben (jeder Fund mit Beleg)

Zwei Fehler, die heute im Code stehen

2.1 Ein Lernstand wird still weggeworfen — auch bei der eigenen Fassung. fremd/lernmotor.js:39 liest:

let st = (() => { const s = store.get("lern", null); return s && s.v === 1 ? s : leer(); })();

s.v === 1 ist streng und ohne Migration. Der Spielstand macht es richtig (zustand.js:46 hebt an, :126-134 lehnt mit Satz ab); der Lernmotor wirft weg. Wer je eine Fassung 2.0 baut, die den Lernstand anfasst, löscht den Fortschritt jedes Azubis — lautlos.

2.2 Und er hält ihn im Verschluss. :40 const save = () => store.set("lern", st). Wer einen importierten Lernstand nach dem Start in den Speicher legt, verliert ihn beim nächsten save() — der Motor schreibt sein altes Objekt zurück. Diese Abhängigkeit stand in keinem der vier Entwürfe; die Gegenprüfung hat sie gefunden.

Ein Fehler, der erst im Klassenzimmer auftritt

2.3 Ein Klassenraum-Auftrag verfälscht die Karriere. Für quelle:"pruefung" und "raetsel" gibt es elf Filterstellen (woche.js:10,12,16 · abzeichen.js:13 · formen.js:43 · erstestunde.js:26 · tag.js:45 · hub.js:54 · verdacht.js:20 · karriere.js:103 · postfach.js:79 · ui/spiel.js:69,475). abnahme.js:118 leitet nur training um. Für einen Klassenraum-Auftrag filtert nichts — kundenakte.js:54 zählt sogar ganz ohne Quellfilter.

Gemessen an einem Lauf (salon-01, Seed 7, ohne Hilfe, Bildungsstand E): +33 € · +1 Ruf · erledigt-Eintrag · Wochenziel „ohne Hilfe" erfüllt · Kundensterne [] → [5] · Kundenampel „grün". Zwanzig Azubis mit demselben Code = eine Woche Karriere gratis. Die Lösung ist symmetrisch zum Trainingsweg — eine Zeile neben abnahme.js:118; der Klassenraum-Zweig muss Spiel.lernenNachAbnahme dann selbst rufen, wie Spiel.training.abnehmen es tut (training.js:230), damit der Lernwert bleibt. Ohne diese Zeile darf der Klassenraum nicht in eine Klasse.

Ein Fehler, den die Spezifikation selbst nicht kennt

2.4 Derselbe Code ergibt je Gerät einen anderen Auftrag. postfach.js:79 baut den Flow nur ohne ohneFlow. Gemessen: derselbe Code (lab.vlan, Seed 5) ergibt je lokalem Flow-Stand gen-lab.vlan-5 (2 Ziele) / -geruest (1 Ziel) / -verwicklung. Der Azubi bekäme einen anderen Auftrag als seine Nachbarin. Und schärfer als zunächst gedacht: Geräte und Kabelliste bleiben in allen drei Fällen gleich — der Netzkennwert (§ 2.7, der „Klassenraum-Abdruck") würde die Abweichung nicht bemerken. Es braucht darum einen def.id-Vergleich im Testplan (neuer Fall Nr. 41).

Eine stille Falle bei der Hilfe

2.5 Der Hilfevorrat ist für ein Klassenraum-Ticket still immer „azubi-6". Gemessen: Spiel.stufe.konto(inst) = {frei:6, gesamt:6} — auch wenn der Mensch auf „meister" steht (stufensystem.js:95, alsTicketId fällt auf EINST_STANDARD zurück). Sechs Sprossen landen alle auf def.skills[0], Spiel.hilfeAbzuege bleibt leer. Die Ticket-Stufe muss ausdrücklich gesetzt werden — sonst ist derselbe Code je Gerät verschieden teuer.

Was im Stoff fehlt (gemessen, nicht geschätzt)

LückeZahlWirkung
Denkhilfen67 von 92 Minis ohne eigenen Anstoß, verteilt auf 26 Fertigkeiten; nur lab.ping ist vollständig (6/6), lab.gateway hat 0 bei 5 Minisgreift in jeder Sitzung; ~3 Sitzungen
Hilfe-Vorschläge10 von 27 Fertigkeiten haben keinen; Ebene 2 existiert 0× (die Leiter springt von „ansehen" direkt zu „ändern"); Firewall hat 1greift bei jedem Fehler; 2–3 Sitzungen
Lehrtexte9 von 27 Fertigkeiten ohneNachschlagen erklärt den Fehler nicht
Drei gesperrte Trainingskartenlab.portsec, lab.stp, lab.storage haben keinen Injektorsichtbarer Defekt: anklickbar, geht nie auf
IPv60 Treffer im ganzen Quelltextganzes Prüfungsgebiet fehlt
WLAN/Access Pointnur Erzähltext (30 Treffer, alle Geschichte/Beratung)ganzes Prüfungsgebiet fehlt
Virtualisierungein HalbsatzPrüfungsthema fehlt
Dünnste Fertigkeitlab.storage — 2 Wiki-Abschnitte, 0 Lehrtexte, 1 Mini, 0 Denkhilfen, 0 Vorschläge, Training gesperrtund die vier dünnsten sind alle AP2

Und die Kosten, ehrlich nach oben korrigiert

Die Spezifikation veranschlagte den Klassenraum mit 4,5–5,5 Sitzungen. Nach der Prüfung sind es 8–11,5 — Stufe A allein „≈ 1" veranschlagt, gebraucht 2–3; dazu zwei Sitzungen, die in keiner Liste der Spezifikation stehen (Nachziehen E, Übergabe/Fassung F). Und der Encoder ist mit „0,5 Sitzung" um Faktor 2–3 zu klein geschätzt (die Proben im Repo: 1 318 und 1 977 Zeilen).

3 · Wo die Entwürfe sich widersprechen

4 · Was in keinem Entwurf stand (und jetzt drin ist)

  1. Die Lernmotor-Falle (§ 2.2) — gefunden von der Gegenprüfung.
  2. Die Übergabe an den nächsten Azubi (§ 1) — der Kernbefund der Lehrersicht, gegen alle vier geprüft.
  3. Die Differenzierung fehlt. Das Konzept – Lernplattform nennt sie (§ 108, 261), die Spezifikation kennt nur eine Sitzung für alle: 20 Azubis, alle derselbe Auftrag. Für starke und schwache Azubis im selben Raum ist das zu wenig.
  4. Drei Entwürfe nannten drei Testzahlen (434 / 395 / keine) — heute sind es 461. Eine Messung vor dem Bau; im Projekt ist schon mehrfach gegen veraltete Zahlen gebaut worden.

5 · Was ich als Nächstes bauen würde — in dieser Reihenfolge

SchrittAufwandWarum zuerst
0Übergabe + Ergebnis zurückgeben („Neuer Azubi", „Ergebnis kopieren")0,5–1 SitzungOhne das ist das Spiel ab der zweiten Stunde unbenutzbar; kein Server, kein Netz, keine Datenschutzfrage. Die Voraussetzung für alles Weitere.
1Karriere-Filter für Klassenraum (§ 2.3) — eine Zeile + Test0,5 SitzungEine Zeile verhindert, dass 20 Azubis sich eine Woche Fortschritt schenken. Muss vor dem ersten echten Unterrichtseinsatz stehen.
2Die 67 Denkhilfen + Hilfe-Vorschläge (Ebene 2, Firewall, Symptom-Einstieg)~7 SitzungenGreift in jeder Sitzung, kein Vertragsrisiko, kein Sim-Risiko. Der größte Nutzen je Sitzung.
3Die drei gesperrten Trainingskarten (Injektoren für portsec, stp, storage)1–2 SitzungenEin sichtbarer Defekt: die Karten sind anklickbar und gehen nie auf.
4Lernmotor-Falle entschärfen (§ 2.1/2.2) — Migration statt Wegwerfen, Import vor dem ersten Lesen0,5 SitzungKlein, aber es ist die Stelle, an der eine 2.0 den Fortschritt aller löschen würde.
5Klassenraum — Stufen A/B/E/F, ohne QR und ohne Server-in-der-.exe6–9 SitzungenErst jetzt: es braucht die Entscheidungen E1–E8 und die Karriere-Regel aus Schritt 1.
6Inhaltliche Breite: IPv6 → WLAN/AP → Virtualisierungje 3–6 SitzungenDeckt ganze Prüfungsgebiete ab, braucht aber vorher Vertragsarbeit in Architektur.md.
7Tutor auf Sprachmodell — nur als Zugabe, nur nach B1–B4offenSein Hauptbeleg („67 Fälle") ist nach Schritt 2 weg. Vertagen.

6 · Was nicht gebaut werden sollte

7 · Was nur der Nutzer entscheiden kann

Die acht Entscheidungen aus § 8 des Klassenraum-Entwurfs, die wichtigsten vier:

FrageEmpfehlung der Prüfer
E1Zählt ein Klassenraum-Ticket im Postfach und im Offen-Zähler mit?Filtern wie training — sonst blockiert es seine eigene ticketId (postfach.js:156, gemessen)
E2Verfälscht der Klassenraum die Karriere?Umleiten — eine Zeile neben abnahme.js:118, Lernwert über lernenNachAbnahme erhalten
E3Überstimmt die Lehreransage den Bildungsstand?Nein. Der Bildungsstand ist die Voreinstellung des Menschen (Vertrag § 1); höchstens anzeigen
E4Wessen Hilfevorrat gilt?Der des Schülers auf seinem Gerät — aber die Ticket-Stufe muss ausdrücklich gesetzt werden, sonst ist derselbe Code je Gerät verschieden teuer

Und eine Frage, die keine Technik ist: Ob ein Klassenraum-Auftrag bewertet werden soll. Wenn ja, braucht es eine eigene Auswertung statt eines Filters — und dann stellt sich die Frage nach Noten, die dieses Spiel bisher bewusst nicht stellt.

8 · Prüfstand

PrüfungErgebnis
node tests/run.js461/461 grün (53 Testdateien, 83 Module, exit 0, 0 übersprungen)
python tools/ethos.pyGRÜN · python tools/klassen.py 0
node tools/sim-stand.jsSimulation unverändert
python tools/seite.py --pruefenGRÜN — 34 Dokumente, kein toter Verweis
python bauen.py118 Module → web/index.html (Version 1.2.4)
cargo test --release in tools/klassenraum10/10 · C-qr-rust 5/5 · klassenraum.exe 322 560 B

Nicht geprüft — ehrlich. Kein Browser, keine Bildschirmfotos, keine echte Unterrichtsstunde. Die Codec-Zahlen der Spezifikation wurden nicht nachgerechnet. Die HTTP-Probe des Rust-Servers lief in dieser Umgebung nicht durch — der erste neue Ergebnis-POST antwortet 507 statt 201, weil der Server seine Ablagedatei nicht schreiben kann (Sandbox-Schreibrecht vermutet, kein Serverfehler nachgewiesen; nach dem Lauf waren keine klassenraum-Prozesse und die Ports frei). Der Sollwert 20/20 ist erst außerhalb dieser Sandbox belegbar. Der Unterrichtserfolg ist nicht messbar — nur die Lücken sind belegt.