Netzwerk-Labor · Doku Entwurf – Runde 8 „Abteilung Subnetting" (31.10.2026) Zum Spiel Online

Entwurf – Runde 8 „Abteilung Subnetting" (31.10.2026)

Auftrag des Nutzers (sinngemäß, wörtlich zitiert): „NetLab braucht ein Subnetting abteil wo das intensiv beigebracht, gelehrt mit visuellen Hilfselementen und Übungsaufgaben und tools / spielchen sind nur zum lernen von subnetting und vLAN. Analysiere mit einem Experten Team zum coden und designen wie das am besten in die bestehenden themes integriert wird und auch wo, ich denke ein eigenes abteil wird dem gerecht. Generell sollen alle Aufgaben Inhaltlich und vom Lernschwierigkeitsgrad optimiert werden. Mache das vollständig fertig und melde dich wenn der build und deploy fertig ist."

Daraus verbindlich:

  1. Eine eigene Abteilung „Subnetting" (Ansicht subnetz) — kein Anbau an eine bestehende Ansicht.
  2. Intensiv lehren: geführter Lehrpfad mit kurzen Erklärungen, Rechenweg, Merksätzen.
  3. Visuelle Hilfen: interaktive Bit-/Block-/Masken-/VLAN-Darstellungen (keine Standbilder).
  4. Übungen: generierte Aufgaben mit sofortiger Rückmeldung, Rechenweg und Lernstandsverbuchung.
  5. Werkzeuge und Lernspiele ausschließlich zum Lernen von Subnetting und VLAN — kein Ablenkungsspiel.
  6. Integration in die bestehenden Themes: alle 5 Zusatz-Themes + hell/dunkel, nur Tokens.
  7. Alle Aufgaben inhaltlich und im Lernschwierigkeitsgrad optimiert — im neuen Bereich und an den vorhandenen Subnetting-/VLAN-Aufgaben, die dafür nachweislich schief liegen (§ 10).
  8. Vollständig fertig: Code, Tests, Doku, Stand, Fassung, Build, Commit, Push, Tag, Release, Deploy.

Befund (gemessen in dieser Sitzung, read-only): Subnetting/VLAN sind breit, aber flach verankert: lab.subnetz hat 2 Trainings (beide nur „falsche Maske reparieren"), 6 Mini-Tickets, 1 Fragen-Vorlage auf E-Niveau und 2 Wiki-Rezepte, die nur im letzten Oktett funktionieren; VLSM, Bit-Sicht, Blockgröße und Adressplan-Übungen fehlen. VLAN/Trunk sind solide, aber ohne Planungs- und Tagging-Übungen und ohne Native-VLAN-Sicht. Detailbelege: Nachweise/runde7/befund.md und § 10.


1 · Zielbild und Ort

Ansicht subnetz, Titel „Subnetting", Dock-Reihenfolge direkt nach „labor" (Lernweg: Labor = anwenden, Subnetting = verstehen und üben, Training = ganze Fälle). Der Eintrag bekommt ein eigenes Symbol subnetz (Bit-Raster) und erscheint automatisch in Befehlspalette und Statusfuß.

Vier Register (eine sichtbare Registerleiste, je 44 px hoch):

RegisterInhalt
Lehrpfad8 Module in 3 Stufen; Karte → Lektion (Text · visuelle Hilfe · geführtes Beispiel · Übungsrunde · Prüfrunde)
Werkzeuge6 interaktive Werkzeuge (§ 7), je mit „Aufgabe dazu"-Weg
Üben & SpielenÜbungsgenerator (Thema × Stufe × Anzahl) + 3 Lernspiele (§ 8)
FormelsammlungPräfix-/Masken-/Host-Tabelle, Rechenweg in 5 Schritten, VLAN-/Trunk-Merkblatt, Fehlerfallen

Zusätzlich im Kopf der Abteilung: Stufenwahl (E · AP1 · AP2, Voreinstellung aus Spiel.einst.niveau), Fortschrittsring (8 Module) und eine Zeile „Nächster Schritt" (aus dem eigenen Fortschritt). Kein Geld, kein Ruf, keine Karrierebelohnung — Lernen ist freiwillig und kostet nichts (Abgrenzung zu Training/Aufträgen).

Abgrenzung (bewusst nicht): keine neuen Fertigkeiten (DATEN.skills bleibt 30 — Codec- und Dichte-Tests sind eingefroren), keine Änderung an src/sim/, src/modell/, src/kern/, src/cli/, keine neuen Tickets, keine Änderung an src/ui/leiste.js, src/ui/karriere.js, src/stil/leiste.css, src/stil/karriere.css, src/spiel/kurzfrage.js (Parallel-Sitzung Runde 6).


2 · Schnittstellen (verbindlich, additiv, headless)

2.1 Rechenkern und Aufgabenmotor — src/spiel/subnetz.js (Owner W1)

Spiel.subnetz.VERSION = 1;
Spiel.subnetz.STUFEN = ["E", "AP1", "AP2"];
Spiel.subnetz.ARTEN = [ {id, titel, skills:[…], stufen:[…]}, … ]   // § 6, genau diese Reihenfolge

Spiel.subnetz.rechnen(ip, praefix) → {
  ip, praefix, maske,                                    // "192.168.10.70", 26, "255.255.255.192"
  netz, broadcast, ersterHost, letzterHost, hosts,       // IP-Strings bzw. Anzahl
  blockGroesse, oktett, hostBits, netzBits,              // Zahlen
  schritte: [{n, titel, text, ergebnis}, …]              // 4–6 Schritte, immer vollständig
}
Spiel.subnetz.maskeZuPraefix("255.255.255.192") → 26 | null
Spiel.subnetz.praefixZuMaske(26) → "255.255.255.192"
Spiel.subnetz.gleichesNetz(ipA, ipB, praefix) → bool
Spiel.subnetz.plan(basis, [{name, hosts}]) → {ok, fehler?, zeilen:[{name, hosts, praefix, netz,
  maske, broadcast, ersterHost, letzterHost}], karte:[{name, von, bis, praefix}]}
Spiel.subnetz.zusammenfassen(netze) → {ok, praefix, netz, grund}

Spiel.subnetz.aufgabe({art, niveau, seed}) → aufgabe | null       // deterministisch aus seed
Spiel.subnetz.satz({arten?, niveau, anzahl, seed}) → [aufgabe]    // gemischt, ohne Doppelte
Spiel.subnetz.pruefen(aufgabe, antwort) → {richtig, soll, angenommen, rechenweg, erklaerung, hinweis}
Spiel.subnetz.antwort(aufgabe, richtig, {hilfe=false}) → {lern:{vorher,nachher}|null, fortschritt,
  neuereModule:[…]}                                              // einziger Schreibweg in L.* und Store
Spiel.subnetz.fortschritt() → {module:{[id]:{status,richtig,falsch,serie}}, spiele:{[id]:{bestwert,runden}}, gesamt:{richtig,falsch,serie}}
Spiel.subnetz.modulSetzen(id, status) → {…}                       // status: "neu"|"gelesen"|"geuebt"|"sicher"
Spiel.subnetz.zuruecksetzen() → {ok:true}                         // nur eigener Store-Schlüssel

Aufgabe (Form, von W3/W4 verarbeitet):

{
  id: "netzid-AP1-0007", art: "netzid", niveau: "AP1", skill: "lab.subnetz",
  titel: "Netz-ID bestimmen", frage: "In welchem Netz liegt 192.168.10.70/26?",
  lage: [{label:"Adresse", wert:"192.168.10.70/26"}, …],          // 1–4 Zeilen, alle Angaben der Aufgabe
  eingabe: {art:"ip"|"zahl"|"auswahl"|"maske", optionen?:[{text}], platzhalter?:"…"},
  loesung: {wert, text},                                          // wert: kanonisch, text: Anzeige
  rechenweg: [{n, titel, text, ergebnis}, …],                     // 3–6 Schritte
  erklaerung: "…",  hinweis: "…",                                 // hinweis = Hilfe vor dem Antworten
  visual: {art:"bitlabor"|"blocklineal"|"vlan"|"maske", preset:{…}} | null,
  quelle: "RFC 4632 · Network – Lernfassung (§ 8)"
}

Regeln für den Motor (prüfbar):

2.2 Lehrplan und Texte — src/daten/subnetz-lehrplan.js (Owner W2)

DATEN.subnetzLehrplan = {
  version: 1,
  formelsammlung: [{titel, saetze:[…], tabelle?:{spalten, zeilen}, merksatz?, visual?}],
  module: [{
    id:"bits", nr:1, stufe:"E", titel:"Bits und Oktette", kicker:"…", lead:"…",
    kern:[…], merksatz:"…",
    visuell:{art:"bitlabor", preset:{ip:"192.168.10.0", praefix:26}},
    beispiel:[{titel, aufgabe, schritte:[{text, ergebnis}], ergebnis}],
    uebung:{arten:["maske","hosts"], niveau:"E", anzahl:4},
    pruefung:{arten:["…"], niveau:"E", anzahl:4, bestehen:3},
    verweise:{wiki:"lab.subnetz", werkzeug:"rechner", training:"tr-subnetz-plan"},
    dauerMin:8
  }, …]
}

8 Module, feste Reihenfolge (Inhalte dürfen geschärft, die Reihenfolge nicht gebrochen werden):

NridStufeTitelKernVisuellÜbung
1bitsEBits und Oktette8 Bit = 255; Stellenwerte 128…1bitlabormaske, hosts
2maskeENetzanteil und HostanteilMaske als Schablone; /p = p Einsenmaskemaske, netzid(E)
3blockEBlockgröße2^(32−p), 256−Maskenoktettblocklinealhosts, block
4netzidENetz-ID, Broadcast, Hostserste/letzte Adresse, nutzbare Hostsblocklinealnetzid, broadcast
5schneidenAP1Netze schneidenein /24 → 4/8/16 Netze; Netz-ID zu beliebiger Adresseblocklinealnetzid, broadcast, subnetze
6vlsmAP1Adressplan (VLSM)vom größten zum kleinsten; Reserverechnervlsm, hosts
7vlanAP1VLAN und SubnetzVLAN = Broadcast-Domäne = eigenes Netz; Accessvlanvlan-port, vlan-erreichbar
8pruefungAP2Prüfungsfälle/30, /31, Zusammenfassen, Trunk/Native, typische Fehlervlan + blocklinealgemischt (§ 6)

Regeln: Jede Lektion hat kern (3–6 Sätze), genau einen merksatz, mindestens ein geführtes beispiel mit Schritten, uebung und pruefung; jede Textlänge bleibt in der Bildschirmfläche (kein Scroll-Roman); Quellen werden als quelle in den Lektionen genannt (RFC 4632 CIDR, RFC 1918, RFC 3021 /31, IEEE 802.1Q, Network – Lernfassung, 04-AP1-Netzwerk, Fragen – Subnetting, 07-Uebungen-Subnetting-Szenarien). Sprache: Deutsch, Du-Form, gleiche Stimme wie der Trainingsbereich; keine Emoji; keine erfundenen Zahlen.

2.3 Abteilungs-Oberfläche — src/ui/subnetz.js + src/stil/subnetz.css (Owner W3)

UI.subnetz = { zeichnen(container), wieder(container), verlassen(), register() }

2.4 Werkzeuge und Spiele — src/ui/subnetz-werkzeuge.js + src/stil/subnetz-werkzeuge.css (Owner W4)

UI.subnetzwerkzeuge = {
  liste() → [{id, titel, kicker, lead, skill, stufe}],        // § 7, genau 6 Einträge
  zeichnen(container, id, opts = {}) → {zerstoeren()},
    // opts: {ip?, praefix?, niveau?, kompakt?, onErgebnis?(ereignis)}
    // ereignis: {art:"werkzeug", id, skill, geloest:bool, hilfe:bool}
  spiele: {
    liste() → [{id, titel, kicker, lead, skill, stufe, dauerText}],     // § 8, genau 3 Einträge
    starten(container, id, opts = {}) → {zerstoeren()},
    // opts: {niveau?, onEnde?(ergebnis), onErgebnis?(ereignis)}
    // ergebnis: {id, punkte, richtig, falsch, serie, dauerSek, aufgaben:[{frage, richtig, soll}]}
  }
}

2.5 Integration (Owner Leitung)

OrtÄnderung
src/ui/app.jsREIHE = ["heute","postfach","labor","subnetz","training",…]
src/ui/geraetebilder.jsein Glyph subnetz (Bit-Raster) in der Symboltabelle (W3 liefert)
tools/rauch.pyein Fall „Subnetting" (Register sichtbar, Werkzeug öffnet, Übungsrunde startet) → 48/48
src/ui/hub.jseine Zeile/Kachel im Lernbereich „Weiterlernen: Subnetting" mit Fortschritt (nur wenn Platz messbar frei ist, sonst Befehlspalette + Dock)
Befehlspaletteautomatisch über UI.app.liste(); zusätzlich Befehl „Subnetting: Werkzeug <name>" (W3 registriert über UI.palette.befehl)
Abteilung internVerweise zu Wiki (UI.wiki.oeffnen), Labor, Training (Knöpfe, die die Ansicht wechseln)

3 · Gestaltung — Einfügung in die bestehenden Themes

Verbindlich ist der Gestaltungsvertrag § 22 (Bento 2.5) und der Themes-Vertrag:


4 · Speicher und Fortschritt (ein Ort)


5 · Lernstufen-Matrix (Inhalt und Schwierigkeit — verbindlich)

Drei Stufen, an die vorhandene Achse niveau (E/AP1/AP2) angeschlossen. Jede generierte Aufgabe trägt genau eine Stufe; die Stufe bestimmt Zahlenraum, Schrittzahl und Hilfen:

MerkmalEAP1AP2
Präfixe/24–/28/20–/30/16–/31 (inkl. /30, /31)
Schritte bis zur Lösung12–33–5
Oktett-Lageletztes Oktett, Blockgröße ≤ 128letztes oder vorletztes Oktettbeliebiges Oktett
Hilfen in der Aufgabehinweis immer gesetzt, Rechenweg anforderbarhinweis optionalkein hinweis
VLSM–2–3 Netze, ein Schritt4–5 Netze, Reihenfolge + Reserve
VLANein Access-Portzwei Ports/VLAN, ErreichbarkeitTrunk, Tagging, Native, allowed-Liste
Zeitdruckkeinerkeineroptional (Spiel „Präfix-Blitz" nur AP1/AP2)
Formulierung„Wie lautet …" ohne Zusatzbedingungeine BedingungBedingung + Gegenprobe/Falle benannt

Wortregeln (testbar): Frage ≤ 140 Zeichen wie bei Minis? Nein — Abteilungsaufgaben dürfen länger sein (bis 220), aber lage trägt alle Angaben; keine unbestimmten Wörter („irgendwie", „vielleicht"), keine Abkürzung ohne Auflösung beim ersten Vorkommen, keine negativen Fangfragen auf E, genau eine richtige Option, Distraktoren sind typische Denkfehler (nicht offensichtlich falsch), jede Erklärung nennt den Rechenweg in Worten.

Optimierung der vorhandenen Aufgaben (§ 10) — jede Änderung wird belegt und getestet.


6 · Aufgabentypen (genau diese 11)

idTitelskillStufenEingabeKern
netzidNetz-ID bestimmenlab.subnetzE/AP1/AP2ipNetz-ID zu Adresse/Präfix
broadcastBroadcast bestimmenlab.subnetzE/AP1/AP2ipletzte Adresse des Blocks
hostsNutzbare Hostslab.subnetzE/AP1zahl2^Hostbits − 2 (bei /31 Hinweis)
maskeMaske ↔ Präfixlab.subnetzE/AP1maskebeide Richtungen
blockBlockgröße und Rasterlab.subnetzE/AP1/AP2zahl2^(32−p), Raster im Oktett
subnetzeNetze schneiden/zählenlab.subnetzAP1/AP2zahlAnzahl Netze einer Teilung
vlsmAdressplan-Schritt (VLSM)lab.subnetzAP1/AP2auswahlnächster Block/Maske im Plan
zusammenfassenZusammenfassen (Route)lab.subnetzAP2auswahlSupernetz zu n Netzen
vlan-portVLAN am Portlab.vlanE/AP1auswahlAccess-Port → VLAN
vlan-erreichbarGleiches VLAN?lab.vlanAP1/AP2auswahlBroadcast-Domäne/Erreichbarkeit
trunkTrunk und Tagginglab.trunkAP2auswahlTag/Native/allowed

Jeder Typ hat Vorlagen für alle genannten Stufen, mindestens 3 Varianten je Stufe, und liefert rechenweg, erklaerung, hinweis gemäß § 5.


7 · Werkzeuge (genau diese 6)

idWerkzeugLernenBedienung
bitlabor32-Bit-LaborBit-Sicht, Oktette, MaskenschabloneBits klickbar/umschaltbar, Oktett-Dezimalwert live, Maske überlagert (Netz-/Hostbits), Ergebnis Netz-ID/Broadcast/Hosts
maskenleisteMasken-SchieberPräfix ↔ Maske ↔ Block ↔ HostsRegler 0–32, Anzeige Dotted + Binär + Tabelle
blocklinealBlocklinealBlockgrenzen, Netz-ID im RasterPräfixwahl, Adressleiste 0–255 (bzw. Oktettwahl), Marker, „einrasten"
rechnerRechenweg-AssistentRechenweg sicher anwendenIP + Präfix eingeben; „Schritt zeigen"; optional Selbstrechnen mit Schrittprüfung
vlsmAdressplanerVLSM planenBasisnetz + Bedarfszeilen; Plan erzeugen; Balken zeigt Auslastung/Reserve
vlanVLAN-WerkzeugAccess/Trunk, Broadcast-Domäne, Tagging8-Port-Switch, Ports klickbar (Access/Trunk, VLAN), Frames mit Tag, Erreichbarkeitsmatrix

Jedes Werkzeug: Titel, Mikrolabel, 1 Satz Lernziel, Bedienung, Ergebnisanzeige, Knopf „Aufgabe dazu" (führt in eine passende Übungsrunde) und „Zurück" — alles über UI.subnetzwerkzeuge.

8 · Lernspiele (genau diese 3)

idSpielLernenAblauf
praefix-blitzPräfix-BlitzFluency Präfix↔Maske↔Hosts60 s, Karten mit 4 Antworten, Serie + Bestwert, am Ende Fehlerauswertung (AP1/AP2)
netz-sortiererNetz-SortiererAdressen sicher einem Netz zuordnen8 Adressen auf 3 Netze ziehen/klicken, Auflösung mit Rechenweg (E/AP1)
vlan-patcherVLAN-PatcherPorts, Access/Trunk, ErreichbarkeitSzenario mit Anforderung, Ports konfigurieren, „Prüfen" zeigt Differenz (AP1/AP2)

Alle Spiele: deterministischer Aufgaben-Seed, Ergebnisverbuchung über Spiel.subnetz.antwort, Bestwert in store "subnetz", klare Lernziele, kein Spiel ohne Subnetting/VLAN-Bezug, kein Punktesystem, das Fehler belohnt.


9 · Schreibrechte (ein Schreiber je Datei; Leitung integriert)

OwnerDateien (neu → fett)
W1 Rechenkernsrc/spiel/subnetz.js, tests/subnetz-kern.test.js, tests/subnetz-aufgaben.test.js
W2 Lehrplan/Inhaltesrc/daten/subnetz-lehrplan.js, tests/subnetz-lehrplan.test.js, tests/subnetz-inhalte.test.js, docs/entwicklung/Subnetting – Lernstufen-Matrix.md; Änderungen: src/daten/trainings.js, src/daten/mini.js, src/daten/fragen-vorlagen.js, src/daten/mini-denkhilfen*.js (nur § 10); tests/fragen-generator.test.js nur für den GEGEN-Eintrag der geänderten Vorlage. Zwingt eine Änderung einen weiteren bestehenden Test, wird nur die betroffene Erwartung fachlich begründet nachgezogen (nie abgeschwächt), im Bericht genannt.
W3 Oberflächesrc/ui/subnetz.js, src/stil/subnetz.css, tests/ui-subnetz.test.js; Änderung: src/ui/geraetebilder.js (ein Symbol subnetz, ans Ende der Tabelle)
W4 Werkzeuge/Spielesrc/ui/subnetz-werkzeuge.js, src/stil/subnetz-werkzeuge.css, tests/ui-subnetz-werkzeuge.test.js, tests/subnetz-spiele.test.js
Leitungsrc/ui/app.js, src/ui/hub.js, tools/rauch.py, docs/**, README.md, AGENTS.md, bauen.py-Fassung, android/bauen.py, android/bauen.py VERSION_CODE, src/seite.html nur falls nötig, Build, Commit, Push, Tag, Release

Regeln: kein git add/Push für Owner; keine fremden Dateien; Zeilenenden bewahren (git ls-files --eol), neue Dateien LF; keine Tests abschwächen (nur fachlich begründet nachziehen); keine neue Fertigkeit; keine Änderung an Parallel-Sitzungs-Dateien; keine Software installieren; Antworten auf Deutsch.

Abnahme-Gates (Leitung, am Ende): node tests/run.js grün, 0 übersprungen · sh tools/test.sh --rauch 48/48 · python tools/klassen.py 0 · python tools/ethos.py GRÜN (R4/R9/R10 nicht schlechter) · python tools/umlaute.py GRÜN · node tools/sim-stand.js unverändert · python tools/seite.py --pruefen GRÜN · python tools/stand.py --pruefen 0 · python tools/einfach.py beide byte-gleich · Sichtprüfung 1440/960/720 × 7 Theme-Zustände × Bewegung aus, Belege unter Nachweise/runde7/.


10 · Optimierung der vorhandenen Subnetting-/VLAN-Aufgaben (belegt)

Diese Befunde stammen aus der read-only-Analyse; W2 setzt die fachlich sicheren um, jede Änderung mit Testbeleg. Was nicht umgesetzt wird, steht begründet im Bericht.

  1. vlan-netzgroesse (AP2, fragen-vorlagen.js) — fragt „/24 auf n VLANs ⇒ welche Maske" und lehrt damit das falsche Planungsmodell. Ersetzen durch Hosts je VLAN ⇒ Präfix (VLSM-Denken) und GEGEN-Rechnung im Test nachziehen.
  2. mini-sub-1 (E) / mini-sub-3 (AP2) — Schwierigkeit invertiert: Netzadresse /26 ist AP1-Stoff, „Hosts in /28" ist E. Stufen tauschen (Multiset bleibt gleich, Testbilanz unverändert).
  3. mini-trunk-5 (AP2) — „Im Native VLAN" gegen „Immer in VLAN 1" ist ohne Native-Angabe doppeldeutig. Kontext ins Ticket/Schnappschuss (Native VLAN ausdrücklich nennen), genau eine richtige Antwort.
  4. Fehlende Denkhilfen für mini-vlan-6, mini-trunk-5, mini-rostick-4 ergänzen (Fallback auf Fertigkeitssatz ist für Transferaufgaben zu schwach).
  5. Doppelte Trainings tr-trunk-erlauben/tr-trunk-allowed und gleicher Titel tr-netz-maske/tr-netz-nachbar — Titel/Beschreibung unterscheidbar machen (keine Progression vortäuschen).
  6. tr-subnetz-plan (E-Format, AP1-Inhalt) — Beschreibung/Schritte auf E-Niveau stützen (Teiltabelle vorgeben, ein Schritt), ohne das Trainingsformat (art) zu ändern (Testregel niveau = f(art) bleibt).
  7. VLSM/Blockgröße im Wiki — der Rechenweg gilt nur im letzten Oktett; im Lehrplan (§ 2.2) wird die Bit-/Block-Brücke für alle Präfixe gelehrt (Wiki bleibt unangetastet: wiki.js gehört der Leitung, Änderung dort nur bei Bedarf in dieser Runde).

Nicht Teil dieser Runde (begründet): neue DATEN.skills (Codec-/Dichte-Tests eingefroren), neue Tickets, Änderungen an spiel/injektoren.js, spiel/mini.js-Mechanik, Lernmotor.


11 · Abnahme und Fassung

12 · Risiken und Gegenmaßnahmen