Skip to content

Netzwerk-Labor 3.0.0

Choose a tag to compare

@github-actions github-actions released this 01 Nov 06:43
· 2 commits to ausbau-1.2 since this release

3.0.0 — Klassenbetrieb, Qualitätsgates und die letzte Meile zur Freigabe (31.10.2026)

Was diese Fassung ist. 3.0.0 macht aus dem Labor ein Unterrichts-Werkzeug für eine ganze Klasse
und schließt die Qualitätslücke: Jede der drei Wellen (W1–W3) wurde von einem eigenen Prüf-Gate
abgenommen, die Oberfläche gegen R12-Bedienelemente, 44-px-Ziele, Fokus und Kontrast gemessen, und die
Sicht wurde mit Screenshot-Matrizen (7 Themes × 3 Breiten) belegt. Die Fassung ist lokal fertig;
Push, Tag v3.0.0 und Release brauchen die ausdrückliche Freigabe des Nutzers.

Klassenraum 3.0 (src/spiel/klassenraum.js, src/ui/klassenraum.js, Vertrag Architektur § 12).
Mehrere Sitzungen mit Schema fassung:2 (Migration aus 2.9.0 verlustfrei, Spielstand v:3 bleibt),
Sitzungsverwaltung mit Löschen nur auf Quittung (Verwaltung im bestehenden „Datei…“-Dialog, damit die
R12-Zahl der Ansicht bei 6 bleibt), Ergebnis-Korrektur mit dem Dialog [Abbrechen][Ersetzen][Entfernen]
statt stillem Verwerfen, anonymes Diagnose-Histogramm je Schritt (nur Zähler, kein Platz/Name,
kein Personenbezug; Nenner sind Hilferufe, nicht Köpfe), 20-Plätze-Übersicht mit Restzeit und
offenen Sitzplätzen, eine Definition für „abgegeben/offen“ in Ampel und Übersicht (ungültige Plätze
separat ausgewiesen). Wortwahl: die Bestands-Tafel behält „Platz N · Sterne“, alle neuen Flächen sagen
„Sitzplatz N“ und „Abgabe“. Tafel und Übersicht sind rangfrei (keine Bestenliste, kein Vergleich).

Spiel und Lernen (src/spiel/{zustand,hilfe,pruefung,training,generator}.js). Sicherung
wiederherstellen
mit Knopf und Datum (SPL-02/02b), Spielstand-Migration 2.9→3.0 (SPL-10),
Prüfungs-Hilfe zentral gesperrt (LRN-01: Hilfeleiter, Gerüst, Vorführen, Senior-Fälligkeit liefern
in der Prüfung leer/Fehler; Flag pruefung:true sperrt auch ohne laufenden Prüfungstag), IHK-Note
exakt ohne Rundung
(LRN-03: note(91.99)=2, note(92)=1; bestanden exakt gegen 50 %), fehlende
Prüfungsaufgabe zählt 0
(LRN-04: Nenner bleibt fest 3; 2 von 3 gelöst = 66,67 Punkte, nicht 100).
Trainingskarten pinnen ihren Injektor (52/52; Generator respektiert opts.injektoren, Fallback bis
64 Versuche, Texte ohne falsche Beispieladressen — WIS-02), Textfehler und Dopplungen bereinigt (WIS-03),
drei nicht injizierbare Grundcodes als namentlich begründete Ausnahmen im Matrix-Gate (WIS-05).

Inhalte (src/daten/*, docs/wiki). Dichte-Gate 30×8 (WIS-07): 30 Matrixzeilen, Wiki ≥ 4 Abschnitte
je Zelle, mindestens ein Injektor je Fertigkeit mit benannten Ausnahmen, AP1+AP2 über Mini/Training/
Handticket; 15 neue Wiki-Abschnitte (u. a. Portbereiche RFC 6335, TCP-Fenster RFC 9293, Cisco-Reset)
und mini-sto-6 (RAID 5, AP1 lab.storage). /31 und /32 in Wiki, Lehrtext und Subnetz-Lehrplan nach
RFC 3021 nachgerechnet; STP-Injektoren ehrlich (nur stp-doppelkabel + stp-rootfalsch als
BPDU-Guard-Endzustand mit ausdrücklichem „BPDU Guard ist hier nicht nachgebaut“); Klassenraum-Server/QR
ausdrücklich als 3.1 benannt statt als wirkungsloser Schalter (VIS-04).

Oberfläche und Barrierefreiheit (src/ui/*, src/stil/*). Nur die 58 codec-adressierbaren Aufträge
werden angeboten (KLR-03), Antwortfeld und „Prüfen“ kommen nach „Werte zeigen“ selbst ins Bild — auch
bei 960/720 px (Container-Scroll, rAF, Z-01), Konflikt-Dialog mit Esc-Rückweg, Meldungen stehen unter
dem Feld statt hinter der Knopfzeile
(UIL-05), Fokus bleibt nach dem Neuzeichnen am semantisch
gleichen Ziel
(UIL-06: Präfix-Blitz „Weiter“, VLAN-Portwahl, letzter Beispielschritt deaktiviert den
Knopf und fokussiert das Ergebnis), Presets für Adressplaner/VLAN (UIL-02), Seed-Determinismus der
Lernspiele (UIL-03, zwei Starts = verschiedene Seeds, fester Seed = gleiche Frage), fairer VLAN-Patcher
ohne Vorab-Soll-Liste (UIL-04), Einsatzakte-UI-Test (UIL-07). Sichturteile VIS-09: Leiste 340 px zeigt
die Lage vollständig (kein Ellipsen-Cap), Kundenakte-Atlas ehrlich (kein Zähler-/Leerzustands-Widerspruch),
Leerräume strukturell reduziert (Raster, Breakpoints, keine gestreckten Kacheln; Rest-Leerraum als
W4-Thema dokumentiert, Postfach bewusst offen). 44-px-Ziele (CSS-04) systemisch, drei belegte Ausnahmen;
Theme-Parität/Kontrast (CSS-08) und Altlast-Regeln (CSS-09) mit Inventar für 3.1; Fokusring und
Ersatz-Kontrast (CSS-03) getestet.

Simulation, Konsole, Kern, Plattform. SVI empfängt den eigenen Broadcast nicht mehr; jedes Verwerfen
trägt grund oder harmlos (231 in der Referenz: 42 mit Grund, 189 harmlos — SIM-05/06), Referenzstand
bewusst neu erzeugt (43 Szenarien, 28/34 Codes, 6.408 Ereignisse). Konsole: DHCP-Snooping (CLI-03),
Rezepte mit echten Rückfragen (CLI-05), Fehlpfade (CLI-06), Anzeigen aus der Simulation als eine Wahrheit
(CLI-07), Aufräum-/Vertragsprüfung (CLI-08). Kern: Plattform-Fähigkeitsmatrix statt stiller Ja/Nein-Antworten
(KRN-02), Browser-Persistenz sichert kaputte/zu neue Stände vor dem ersten Schreiben (KRN-03), Datei-API
löst immer auf und meldet Export nur bei belegtem Weg (KRN-04), Modell-Invarianten (MAC/IP/Maske/Routen/
VLAN/Kabel) und Determinismus-Wache (KRN-06/07).

Tests, Gates, Werkzeuge. Jede Welle mit eigenem Gate: W1 aa08057, Hotfix d0785d6 (Z-07),
W2 ff06834, W3 1a177b4. Neu: tools/pruefe-namen-flicken.js als ein Node-Prozess (164 Testdateien,
0 Fehlalarme, ~0,4 s statt 30 s; QUA-05), tools/abnahme-3.0.py mit 7 DoD-Achsen und --gegenprobe
(VIS-01), tools/quellen-gate.js/zaehl-gate.js/syntax.js, Doku-Werte-Gate doku-claims.py (DOK-03),
R12-Messweg rauch.py --r12 → ethos.py --dom --r12 → versionierte tests/r12-stand.json → STAND
mit Ratsche je Ansicht×Breite (Zuwachs = ROT; Baseline 32 eingefrorene Werte über der Grenze, 0
Zuwachs; Messwegwechsel W1→W2 dokumentiert), 44-px-Gate mit Ausnahmen-Register, Theme-Kontrast.

Dokumentation (docs/*). Neu: Lehrkraft – Erste Stunde und
Schueler – Erste fünf Minuten samt Doku-Index-Gruppe „Unterricht“,
erweiterte FAQ (5 neue Fragen), ehrliche Bauen-Doku (Release/APK), README auf 2.9.0/3.0.0-Stand,
INHALT vollständig (53/53 Entwicklungsnotizen), Design-Notiz § 44 (W1/W2) und § 45 (W3), Architektur-
Verträge § 6.1 Snooping, § 7.4 Sicherung/Migration, § 7.5 Postfach, § 8 Fähigkeitsmatrix, § 12 Klassenraum-
API (22 öffentliche Namen, 16 Sitzungsfelder, Wortwahl/Konsistenz), § 16.1 R12-Messweg, § 17.2 hilfefreie
Prüfung/Note/fehlende Aufgabe.

Bauen und CI (.github/*). browser.yml: Edge-Rauchprüfung mit Gegenprobe, R12-Zahl/Ratsche,
Menüprobe; pruefen.yml mit DOK-03 und VIS-01 als eigene Schritte; release.yml mit Pflicht-Keystore
(ohne Secrets rot), exakten Anhangsnamen und SHA256SUMS-Prüfung; tools/ablaeufe.py-Latentfehler behoben
(CI wäre beim ersten Push rot geworden). Die CI selbst ist nicht gemessen (kein GitHub-Lauf in dieser
Sitzung).

Zahlen. Die maßgeblichen Zahlen (Tests, Testdateien, src-Zeilen, Doku-Seiten, relative Verweise,
R12-Messungen) stehen in STAND.md — sie werden bei jedem Lauf gemessen und nicht in diesem
Verlauf gepflegt (Eine-Quellen-Regel).
0 übersprungen; src 142 Dateien/42.723 Zeilen; Mini-Tickets 151; Doku 67 Quellen/68 HTML; 346 relative
Verweise, 0 tot; R12-Ratsche grün (44 Messungen, max 59, 32 über Grenze eingefroren erlaubt, 0 Zuwachs).

Migration und Verträglichkeit. Spielstand v:3 unverändert; Klassenraum 2.9.0 (fassung:1) wird beim
Laden einmalig auf fassung:2 gehoben (Sicherung vorher, verlustfrei); 2.9.0-Exportdateien werden
übernommen (Sicherung bleibt Sicherung, Euro unverändert); zu neue Stände werden ehrlich abgewiesen;
R12-Baseline/tests/r12-stand.json ist ab 3.0.0 versioniert und darf nur per --festhalten mit Freigabe
fortgeschrieben werden.

Bewusst nicht in 3.0.0 (geplant 3.1). R12-Reduktion der Ansichten über der 6er-Grenze (Bestand
eingefroren, kein Zuwachs), 44-px-DOM-Messung als Gate, Lernreise/Stationen (kein Entwurf vorhanden),
Klassenraum-Server/QR samt KLR-06/07 (braucht gemessene 2-Rechner-Umgebung), Feinschliff der Leerräume
(W4-Kriterium), Rest-WIS-Punkte (Trainingsduplikate-Bindung an Injektoren ist umgesetzt; Textpolitur offen),
Release/CI-Lauf auf GitHub (Push/Tag/Release erst mit Freigabe).

Ehrliche Grenzen. Kein Push, kein Tag, kein Release in dieser Sitzung; CI-Workflows sind geschrieben,
aber nicht gelaufen; Android-APK/EXE wurden lokal gebaut und geprüft, nicht auf Gerät/anderen Rechnern;
die 7 R12-Ansichten über der Grenze sind Bestand und als solcher eingefroren (kein „grün“ im Sinne der
starren 6er-Norm); Screenshot-Matrix W4 belegt die Sicht, ersetzt aber keinen Geräte-/Browser-Test auf
fremder Hardware (im Bericht benannt).

---## 2.9.0 — Runde 8: Abteilung „Subnetting" mit visuellen Werkzeugen, Übungen und Lernspielen (31.10.2026)

Was diese Fassung ist. Die in der Vorrunde begonnene Linie „Lernen braucht einen eigenen Ort"
führt zu einer neuen Abteilung: Subnetting und VLAN intensiv lernen — mit visuellen Hilfen,
generierten Übungen, sechs Werkzeugen und drei Lernspielen. Sie ist eine eigene Ansicht im Dock
(nach „Labor"), kein Anbau an Training oder Wiki. Die Fassung 2.8.0 (Kurzübung mit Kontext,
Flugschreiber) bleibt als eigener Commit davor.

Die Abteilung (neu: src/ui/subnetz.js, src/stil/subnetz.css). Vier Register: Lehrpfad
(8 Module in 3 Stufen mit Lektion, geführtem Beispiel, Übungs- und Prüfrunde), Werkzeuge,
Üben & Spielen, Formelsammlung. Kopf mit Stufenwahl (Voreinstellung aus den Einstellungen),
Fortschrittsring „sicher/8" und „Nächster Schritt". Der Zustand bleibt beim Wiederbetreten
erhalten; Esc führt eine Ebene zurück; fehlende Bausteine zeigen eine ruhige Hinweiskarte statt
eines Absturzes. Dock-Kurzform „Subnetz" (gegen den Wortumbruch in 76 px), voller Titel
„Subnetting".

Rechenkern und Aufgabenmotor (neu: src/spiel/subnetz.js). Spiel.subnetz rechnet
oktettweise (keine 32-Bit-Dezimalzahlen im Rechenweg), prüft formatttolerant und erzeugt
deterministisch Aufgaben: 11 Typen (Netz-ID, Broadcast, nutzbare Hosts, Maske↔Präfix, Blockgröße,
Netze schneiden, VLSM, Zusammenfassen, VLAN am Port, Gleiches VLAN?, Trunk/Tagging) in 23
art×Stufe-Kombinationen, je Stufe mindestens drei Varianten. Eigener Speicher store "subnetz"
v:1 (Module neu < gelesen < geuebt < sicher; Fehler senkt nie unter „gelesen"); Lernverbuchung
ausschließlich über L.ueben/L.fehler, Werkzeug-Lösungen mit {hilfe:true}. Der Spielstand
(v:3) bleibt unverändert.

Lehrplan und Inhalte (neu: src/daten/subnetz-lehrplan.js). Acht Module mit Kern,
genau einem Merksatz, geführtem Beispiel und Quellenangaben; Formelsammlung mit
Präfix-/Masken-/Host-Tabelle, Fünf-Schritte-Rechenweg, Blockgrößen, VLAN/Trunk/802.1Q und
Fehlerfallen. Dazu die Doku Subnetting – Lernstufen-Matrix
mit der Stufenmatrix (E/AP1/AP2) und den sieben optimierten Bestandsaufgaben.

Werkzeuge und Spiele (neu: src/ui/subnetz-werkzeuge.js, src/stil/subnetz-werkzeuge.css).
Sechs Werkzeuge: 32-Bit-Labor (Bits klickbar, Maske überlagert), Masken-Schieber, Blocklineal
(mit Einrasten), Rechenweg-Assistent (schrittweise, Selbstrechnen), Adressplaner (VLSM mit
Reserve), VLAN-Werkzeug (8 Ports, Access/Trunk, Frames mit Tag, Erreichbarkeitsmatrix). Drei
Lernspiele: Präfix-Blitz (60 s), Netz-Sortierer, VLAN-Patcher. Alle Werte kommen aus
Spiel.subnetz.*; Spiele buchen genau eine Runde über {spiel:{id,punkte}}.

Optimierte Bestandsaufgaben (jede mit Testbeleg). vlan-netzgroesse lehrt jetzt
Hosts je VLAN → Präfix statt „/24 auf n VLANs"; mini-sub-1/mini-sub-3 Stufen getauscht
(Netzadresse /26 = AP2, Hosts /28 = E, Stufen-Multiset unverändert); mini-trunk-5 mit
ausdrücklichem Native-Kontext; fehlende Denkhilfen für mini-vlan-6, mini-trunk-5,
mini-rostick-4 ergänzt; doppelte Trainings unterscheidbar (tr-trunk-erlauben/
tr-trunk-allowed, tr-netz-maske/tr-netz-nachbar); tr-subnetz-plan auf E-Niveau gestützt.

Integration und Messwerkzeug. src/ui/app.js: Dock-Reihenfolge und optionales kurz-Label;
src/ui/geraetebilder.js: Glyph subnetz; src/ui/training.js/training.css: Querverweis
„Zur Abteilung Subnetting"; tools/rauch.py: ein Fall „Subnetting" (48 Fälle) und eine
Messhygiene (Auftragsbogen/transiente Toasts vor der Hauptaktions-Prüfung schließen — die sieben
720-px-Fälle waren auf HEAD 2.7.0 mit 38/45 identisch rot, also vorbestehend, keine Regression
dieser Runde).

Abnahme.

  • node tests/run.js: 1049/1049 grün, 0 übersprungen (118 Testdateien, 98 headless Module, Exit 0).
  • Rauchtest (tools/rauch.py): 48/48 (15 Fälle + Erstabnahme, je drei Breiten).
  • klassen.py 0 · ethos.py GRÜN (R1 23, R2 17, R3 4, R4 134, R5 0, R6 7, R7 0, R8 0, R9 58, R10 41, R11 0; R12 nicht gemessen) · umlaute.py GRÜN · sim-stand.js unverändert.
  • Bau 143 Module (98 headless); Einzeldatei 4.080.274 B, SHA256 49FC2FA5746A23334DE6F41FC954D687AB4607D555ACF4B61EE96A9E9E56D89E, docs/index.html und
    Netzwerk-Labor.html byte-gleich, 0 Außenverweise.
  • Doku: 65 Dokumente erzeugt, 0 tote Verweise, --pruefen GRÜN; stand.py --pruefen: 0 Abweichung.
  • Sichtprüfung im Browser: 39 Zustandsmessungen in 1440/960/720: 0 seitlich scrollende Seiten, 0 JS-Fehler, 3 abgeschnittene Textknoten nur in der VLSM-Balkenbeschriftung kleiner Blöcke (die Legende nennt den vollen Namen); Kontrast 14 Textpaare × 7 Theme-Zustände = 0 Verstöße; „Bewegung aus“ = 0 Animationen; 56 Rohziele unter 44 px sind ausschließlich die Bit-Zellen (begründete Ausnahme für ein 32-Bit-Direktmanipulationsraster). Belege: Nachweise/runde7/abnahme/.
  • Die ausgelieferte .exe baut der Release-Ablauf aus dem Tag; lokal: die ausgelieferte .exe baut der Release-Ablauf aus dem Tag (Windows-Läufer); ein lokaler Bau mit ProductVersion 2.9.0 wurde geprüft, konnte aber nicht auf Programm/Netzwerk-Labor.exe gelegt werden, weil dort eine fremde, laufende 2.7.0-Instanz lag (Prozess nicht angefasst).
  • Veröffentlicht am 31.10.2026: Commit 3eba99f, Tag v2.9.0, Release mit drei Anhängen
    (Netzwerk-Labor.html 4.080.274 B SHA256 49FC2FA5…, Netzwerk-Labor-2.9.0-Browser.zip
    2.245.513 B, Netzwerk-Labor.exe 9.095.680 B ProductVersion 2.9.0); Live-Seite
    https://vexx-oss.github.io/NetLab/index.html byte-gleich mit der Einzeldatei; Abläufe
    „Prüfen", „Spiel veröffentlichen" und „Release anlegen" success.
  • Nicht gemessen: R12 (--dom), Android-APK (kein SDK), Screenreader.

Nicht gemessen: R12 (--dom), Android-APK (kein SDK), Screenreader, echte Maus im
ausgelieferten Tauri-Fenster (nur Prüfbau).