Netzwerk-Labor · Doku AGENTS.md – Betriebsregeln für das Netzwerk-Labor Zum Spiel Online

AGENTS.md – Betriebsregeln für das Netzwerk-Labor

Gilt für jedes Modell und jeden Menschen, der in diesem Projekt arbeitet. Kurz, verbindlich, ohne Ausnahmen. Vorbild für diese Datei: docs/entwicklung/Design – Spielspaß 2.0.md § 24 (Auftrag „R“, Punkt 1).

Absolute Verbote

  1. Beende NIE Prozesse nach Namen oder Muster. Nicht msedgewebview2, nicht msedge, nicht explorer, nicht python, nicht node. Du darfst höchstens eine PID beenden, die du in dieser Sitzung selbst gestartet hast — und nur diese. Starte nichts neu, starte Windows nicht neu. Grund (belegt): Am 05.10.2026 wurden 13 msedgewebview2.exe zwangsweise beendet, darunter die Hosts der Windows-Shell. Nachtrag 05.10.2026, 19:30: Dieser Zusammenhang war eine Fehldeutung – die .exe startet wieder (Ursache war das Integritätslabel „Niedrig“ des Vaults, siehe Befund unten). Die Regel gilt unverändert.
  2. **Kein git push, kein --force, kein reset --hard, kein Zweigwechsel, kein Commit auf master, keine Zweige löschen.** Gearbeitet wird auf ausbau-1.2.
  3. Keine Dateien außerhalb des Projektordners ändern. Die Ordner Nachweise/ und Programm/ werden nicht gelöscht (dort liegen Bildschirmfoto-Nachweise und die gebauten Programme).
  4. Keine Software installieren oder deinstallieren.
  5. Behaupte nichts, was du nicht in dieser Sitzung gemessen hast. „Wahrscheinlich“, „vermutlich“ und „nicht geprüft“ müssen genau so dastehen.

Befehle

Am Ende jeder Sitzung: docs/SITZUNGSABSCHLUSS.md — die acht Schritte von „aufräumen" bis „nachmessen, was online steht", samt der Regeln, die aus Fehlern stammen (Fassung ziehen, Zeilenenden prüfen, erzeugen und gegenprüfen, Stand nachziehen, veröffentlichen nur mit Freigabe). Erst diese Reihenfolge, dann die Tabelle unten.

ZweckBefehlErwartung
Testssh tools/test.shmeldet N/N grün + davon N übersprungen (Zahl, Testdateien und Module: docs/STAND.md, bei jedem Lauf gemessen — nicht hier von Hand gepflegt). Ein Test mit 0 Zusicherungen gilt als übersprungen und wird gezählt, nicht als grün verschwiegen. Filter: node tests/run.js <name> filtert nur die Ausgabe; seit 09.10.2026 schneidet er führende Striche ab (--klassenraum → 104/104 grün, selbst gemessen), und ein Filter ohne Treffer endet mit Exit 1 samt „KEIN Test passt zum Filter … Das ist kein grüner Lauf." — die Bilanzzeile zeigt dabei weiterhin „0/0 grün", es entscheidet der Exit-Code
+ Rauchtest der Oberflächesh tools/test.sh --rauchzusätzlich 48/48 (15 Ansichten/Fälle plus die Erstabnahme mit echter Maus, je 3 Breiten = 48 Prüfungen; Runde 8 ergänzt den Fall „Subnetting"; die sieben 720-px-Laborfälle sind seit 2.7.0 vorbestehend rot, die Messhygiene in tools/rauch.py schließt Auftragsbogen/Toasts vor der Hauptaktions-Prüfung wie ein Nutzer — auf HEAD 2.7.0 gemessen 38/45, mit Runde 8 48/48; Zahl von der Leitung gemessen)
Gegen die Falle in Testnamennode tools/pruefe-namen-flicken.js [--setzen]findet pruefe("…„…"…"), das den Lauf mit LADEFEHLER (Exit 2) anhält — trockener Lauf zuerst
Tiefe Menüebenen (Android und Web)python tools/menueprobe.py --datei android/bau/assets/index.html --lauf5 Profile, 49 Kriterien erfüllt, 0 verletzt (selbst nachgemessen am 09.10.2026 gegen die Android-Fassung 2.0.2; beim Stand 2.0.1 waren es 47 — die Zahl hängt am gebauten Stand, nicht am Quellstand). Für den Web-Bau: --datei web/index.html (am 09.10.2026 45 Kriterien erfüllt, 0 verletzt, 5 von 5 Profilen, auch gegen den 2.0.2-Bau — selbst gemessen; vorher rot 36 von 43 erfüllt, 44-px-Trefferflächen in den Editor-Menüs, gemessen identisch zu HEAD~1, also vorbestehend)
Simulation gegen Referenzstandnode tools/sim-stand.js„Simulation unverändert gegenüber dem Referenzstand“
Klassen ↔ CSSpython tools/klassen.py0 Klassen ohne CSS-Regel
Regelwerk (Minimalismus)python tools/ethos.pyGRUEN: keine Regel schlechter als tests/stil-stand.json — am 09.10.2026 BESSER als der Stand: R1 23→22 · R2 122→113 · R3 206→195 · R4 539→514 · R5 70→0 · R6 11→0 · R8 5→0 · R10 87→0 (selbst gemessen; die Stand-Datei ist auf genau diesen Stand eingefroren: R1 22 · R2 113 · R3 195 · R4 514 · R5–R12 = 0). Achtung: R12 misst nur mit --dom; ohne es meldet der Lauf ausdrücklich „NICHT GEMESSEN"
Bauen (Browser-Fassung)python bauen.pyimmer vor cargo tauri build
Doku-Seite erzeugen und prüfenpython tools/seite.py · --pruefenPflicht ist docs/doku/ (versioniert, 66 HTML-Dateien inkl. Übersicht; Quellen: 65 Markdown-Dokumente). _site/ ist nur Auslieferung und gitignoriert; existiert es nicht, meldet --pruefen einen Hinweis und bleibt grün. Frische beweist die CI: python tools/seite.py + git diff --exit-code docs/doku
Einzeldatei (auch die Wurzel-Datei)python tools/einfach.py · --ziel Netzwerk-Labor.htmlbeide byte-gleich (beweist python tools/stand.py über den SHA256), 0 Außenverweise
R12-Messung (Rauch)python tools/rauch.py --r12 [datei]schreibt Nachweise/rauch/r12.json (je Ansicht × Breite); ohne Browser ausdrücklich gemessen:false + Grund, nie 0
R12 verbindlichpython tools/ethos.py --dom --r12 <rohdatei> · --festhalten--festhalten schreibt die versionierte Letztmessung tests/r12-stand.json; stand.py liest nur diese. Ratsche: je Ansicht × Breite größer als Baseline = ROT, fehlende Evidenz = „nicht gemessen“; die eingefrorenen Werte über der Grenze werden benannt
DoD-Gate 3.0python tools/abnahme-3.0.py --schnell · --gegenprobe7 Achsen B1–B7, abnahme.json; nicht gemessen zählt im End-Gate wie ROT; CI-Einbau erst W5
Android-APKpython android/bauen.py7 Schritte, ~5 s, endet mit GRUEN
PC-Hülle für die Entwicklungsrundepwsh -File shell/entwickeln.ps1 -NurBauenDebug-Profil, ~4 s je Runde (Auslieferung bleibt cargo tauri build)
Fassung ziehen (2.0.3 → 2.0.4)python tools/fassung-ziehen.py --neu 2.0.4 · --setzenTrockenlauf zuerst; im Cargo.lock bleibt nur der eigene Block; VERSION_CODE in android/bauen.py von Hand nachziehen (muss über dem aus versionName abgeleiteten Wert liegen)
Tote Verweise findenpython tools/stand.py --pruefenprüft alle relativen Verweise in allen *.md (0 tot) — das alte tools/repo-verweise-flicken.py übersieht Dateien mit Umlauten im Pfad (git quotet sie) und schreibt; trockener Lauf zuerst
Zahlen prüfen (eine Quelle)python tools/stand.py --pruefen0 Abweichung: docs/STAND.md und der Stand-Block in README.md stimmen mit der Messung; Exit 1 mit betroffener Zeile
Die drei Randbefunde nachmessenpython tools/nachprobe-menuefix.pyGRÜN: alle drei Befunde behoben
Echtes Programmpython tools/q-echt.pystartet die .exe; siehe Befund unten
Klassenraum-Codec messen& "<node>" tools\klassenraum-probe\A-codec-probe.jserschöpfender Code-Round-Trip über 2²⁰ Nutzlasten (~250 s), schreibt Nachweise/Klassenraum/A-codec.json
Klassenraum-Server bauencargo build --release in tools/klassenraumeine .exe ohne jede Kiste (322.560 B), cargo test 10/10
Klassenraum-Server prüfenpwsh -File tools\klassenraum-probe\C-http-probe.ps120 echte HTTP-Messungen, endet mit 20/20, Port danach frei

Node liegt auf diesem Rechner unter C:\Program Files\nodejs\node.exe (v24.20.0, gemessen 26.10.2026); das portable Node unter %LOCALAPPDATA%\node-portable\node-v24.21.0-win-x64\node.exe ist hier nicht vorhanden. tools/test.sh sucht beide Wege, tools/stand.py ebenso.

In eingeschränkten Umgebungen (z. B. einer Werkzeug-Sandbox) startet sh tools/test.sh nicht, wenn sh.exe direkt aufgerufen wird: dann fehlt dirname, weil Git-/usr/bin nicht im PATH liegt, und das Skript sucht tests/run.js im falschen Ordner. Verlässlich ist:

& "C:\Program Files\Git\bin\bash.exe" -c 'export PATH=/usr/bin:/bin:$PATH; sh tools/test.sh'

Die .exe startet wieder (Stand 05.10.2026, 19:30 – Befund und Beweise in Nachweise/1.2-Start/BEFUND.md). Der frühere Befund „startet nicht“ war falsch gedeutet: Nicht die zwangsweise beendeten msedgewebview2.exe waren die Ursache, sondern das Integritätslabel „Niedrig“ auf dem Vault (Überrest der Werkzeug-Sandbox). Davon erbt Programm/Netzwerk-Labor.exe, läuft dadurch als Low-Prozess und darf %LOCALAPPDATA% nicht beschreiben; die WebView2-Laufzeit kann ihr Profil nicht anlegen und bricht ab (failed to create webview, 0x800700AA/0x8000FFFF, Exception 0x80000003). Reparatur (ohne Administratorrechte, wiederholbar): Doppelklick auf Programm/Integritaet-reparieren.cmd oder icacls Programm /setintegritylevel (OI)(CI)Medium /T + icacls Programm/Netzwerk-Labor.exe /setintegritylevel Medium. Der alte Befund in Design – Spielspaß 2.0.md § 25 und in docs/Architektur.md ist damit überholt.

Zeilenenden bewahren

Mehrere Dateien haben CRLF, andere LF, einzelne gemischt (die Design-Notiz: 1156 × CRLF, 43 × LF). Vor dem Bearbeiten und nach jeder Bearbeitung prüfen:

git ls-files --eol <Datei>                              # wie liegt die Datei im Index / im Arbeitsbaum?
git diff --stat <Datei>                                 # mit Zeilenenden
git diff --stat --ignore-cr-at-eol <Datei>              # ohne Zeilenenden

Weichen die Zahlen stark voneinander ab (Beispiel aus § 24: engine.js mit 265 Zeilen gegen 6 echte), hast du die Zeilenenden der ganzen Datei umgestellt: Datei aus Git wiederherstellen (nur wenn sie vorher sauber war) und so bearbeiten, dass die vorhandenen Enden erhalten bleiben — mit einem Skript, das die Zeilen einzeln ersetzt bzw. beim Anhängen das überwiegende Ende der Datei übernimmt. Ein Editor, der beim Speichern normalisiert, ist dafür ungeeignet.

Arbeitsweise

python tools/stand.py misst (echter Testlauf, Modulliste, Dateisystem) und schreibt docs/STAND.md + den markierten Block in README.md; python tools/stand.py --pruefen hält beides gegen die Messung. Historische CHANGELOG-Abschnitte bleiben unangetastet.

Ablage

Ausnahmen 3.0.0 (31.10.2026, ausdrückliche Nutzerfreigabe)

Diese drei Ausnahmen gelten nur für die Sitzung, die Fassung 3.0.0 baut (31.10.2026), und nur solange der Nutzer sie nicht zurückzieht. Sie stehen mit Datum hier, weil sie die Verbotsliste oben berühren; alles nicht Genannte bleibt unverändert verbindlich.

Unverändert: Regel 1 (keine fremden Prozesse beenden), Regel 2 (kein git push) und Regel 4 (keine Installationen). Push, Tag und Release legt die Sitzung dem Nutzer einzeln vor; ohne Zustimmung bleibt alles lokal.