Stand — gemessen, nicht getippt
Die einzige Zahlenquelle des Projekts — bei jedem Lauf neu gemessen, nicht getippt.
Erzeugt von tools/stand.py. Handarbeit wird beim naechsten Lauf ueberschrieben.
Diese Seite ist die einzige Zahlenquelle des Projekts (Vertrag: Architektur.md Abschnitt 16.1). README.md, Liesmich.md, AGENTS.md, Bauen.md, SITZUNGSABSCHLUSS.md und der CHANGELOG nennen Zahlen nur noch ueber diese Seite. Historische CHANGELOG-Abschnitte bleiben, wie sie geschrieben wurden — sie werden nicht rueckdatiert und nicht korrigiert.
Der Stand
| Groesse | Wert | Gemessen mit |
|---|---|---|
| Fassung (Quelle) | 3.1.0 | bauen.py, Zeile VERSION = ... (Regex) |
| Android-Bauzaehlung | VERSION_CODE = 30101 | android/bauen.py (Regex) |
| Baukennung | df418002 (gebaut aus Fassung 3.1.0) | docs/index.html, LABOR_BAU (Regex) |
| Tests | 1.384/1.384 grün | echter Lauf node tests/run.js, Bilanzzeile |
| davon uebersprungen | 0 | Zeile „davon N uebersprungen“ (tests/harness.js: Test mit 0 Zusicherungen) |
| Exit-Code des Testlaufs | 0 | Rueckgabewert desselben Laufs |
| Testdateien | 174 | dieselbe Bilanzzeile |
| headless Module (Testlauf) | 100 | dieselbe Bilanzzeile |
| Bau-Module | 149 (davon 100 headless) | python bauen.py --liste (JSON, gezaehlt) |
| src/ | 148 JS-Dateien, 43.278 Zeilen | alle src/**/*.js, Zeilen = Summe str.splitlines() je Datei (inkl. Leerzeilen, CRLF = ein Umbruch) |
Einzeldatei Netzwerk-Labor.html | 4.219.830 B · SHA256 D50ED3A1A8D5A0EAECCBFB939D6BB7F0955C3B4FD3CE47D41ED9642A9461F713 | Bytes zaehlen, hashlib.sha256 ueber die Bytes |
Einzeldatei docs/index.html | 4.219.830 B · SHA256 D50ED3A1A8D5A0EAECCBFB939D6BB7F0955C3B4FD3CE47D41ED9642A9461F713 | Bytes zaehlen, hashlib.sha256 ueber die Bytes |
| Einzeldateien byte-gleich | ja | gleicher SHA256 |
| Tickets | 76 | DATEN.tickets (headless Module geladen wie tests/run.js) |
| Kunden | 7 | Object.keys(DATEN.kunden) (headless Module geladen wie tests/run.js) |
| Karrierestufen | 6 | Spiel.KARRIERE_STUFEN (headless Module geladen wie tests/run.js) |
| Projekte (Tickets mit art = projekt) | 4 | gezaehlt in DATEN.tickets (headless Module geladen wie tests/run.js) |
| Mini-Tickets | 151 | DATEN.mini (headless Module geladen wie tests/run.js) |
| Netzvorlagen | 5 | Object.keys(Spiel.vorlagen) (headless Module geladen wie tests/run.js) |
| Fehlerinjektoren | 55 | Object.keys(Spiel.INJEKTOREN) (headless Module geladen wie tests/run.js) |
| Trainings | 52 | DATEN.trainings (headless Module geladen wie tests/run.js) |
| Wiki-Seiten | 37 | Object.keys(DATEN.wiki) (headless Module geladen wie tests/run.js) |
| Fertigkeiten | 30 | DATEN.skills (headless Module geladen wie tests/run.js) |
| Abzeichen | 17 | Spiel.ABZEICHEN (headless Module geladen wie tests/run.js) |
| Fehlertexte | 82 | Object.keys(DATEN.fehlertexte) (headless Module geladen wie tests/run.js) |
| Doku-Seiten docs/doku | 71 HTML-Dateien (inkl. Uebersicht) | HTML-Dateien zaehlen |
| Doku-Quellen | 70 Markdown-Dokumente | was tools/seite.py veroeffentlicht: README.md + AGENTS.md + docs/**/*.md |
| Markdown-Dateien | 107 | git ls-files auf *.md + unversionierte *.md |
| Relative Verweise | 383 geprueft, 0 tot | wie tools/repo-verweise-flicken.py |
| R12 Bedienelemente | Letztmessung: max 59 sichtbare Bedienelemente, 44 Messungen (Ansicht x Breite), 32 ueber der Grenze eingefroren (tests/r12-stand.json, Stand 2026-11-01); Gate: Zuwachs je Ansicht×Breite = ROT | tools/ethos.py --dom --r12 <roh> --festhalten -> tests/r12-stand.json |
Bekannte, begruendete Ausnahmen
Abweichungen, die keine Messung wegzaubert. Sie stehen im Vertrag, gelten bis zur dort genannten Fassung — und der Pruefmodus prueft, dass ihre Bedingungen noch stimmen: eine Ausnahme, die nicht mehr gilt, macht ihn rot.
| Bereich | Ausnahme | Begruendung |
|---|---|---|
| Trainings | lab.ipv6, lab.wlan | Kein Training fuer diese beiden Fertigkeiten: die Simulation fuehrt WLAN und IPv6 nicht paketweise aus (Architektur § 17.1, Abschnitt „Uebungsformen ohne Simulation“; der 2.1-Plan D4 erlaubt namentliche Ausnahmen). Geuebt wird inhaltlich ueber Handticket mit Arbeitsziel, Minis, Wiki, Lehrtext und Hilfe — nicht ueber ein Training. |
| Klassenraum-Codec | 58 von 76 Handtickets | Der Auftrags-Codec hat 6 Bit (0..63). TABELLE_AUFTRAEGE bleibt deshalb bei 58 eingefrorenen IDs; die neuen 2.1-Handtickets sind nicht klassenraum-adressierbar (Architektur § 17.9). Alte Codes bleiben gueltig, weil die Tabelle ein Literal ist; der Formatwechsel kommt erst 3.1. |
| Quellen | WLAN-Inhalte | Die Belege der Wiki-Seite lab.wlan nennen IEEE 802.11/802.11i/802.11w und die WPA3-Spezifikation der Wi-Fi Alliance. Das sind inhaltliche Quellen; eine Paket-Simulation oder eine Geraetezertifizierung ist damit nicht behauptet. |
Gegenprobe (gemessen in diesem Lauf):
- Trainings fuer
lab.ipv6undlab.wlan:lab.ipv6: 0,lab.wlan: 0 — die Ausnahme gilt also. - Klassenraum-Codec: 58 eingefrorene Auftrags-IDs (Literal, § 17.9), derzeit 76 Handtickets — 18 davon sind per Code nicht aufrufbar (2.1-Ziel: 76 Handtickets, Formatwechsel erst 3.1).
- WLAN-Quellen:
Wi-Fi Allianceist insrc/daten/wiki.jsbelegt (WPA3-Spezifikation; inhaltliche Quelle, keine Geraetezertifizierung).
So wird gemessen
python tools/stand.py --zahlen # die Messung als JSON, schreibt nichts
python tools/stand.py # docs/STAND.md + Stand-Block in README.md schreiben
python tools/stand.py --pruefen # Exit 0 oder 1 mit der betroffenen Zeile
Ein Lauf misst: Fassung, Android-Bauzaehlung, Baukennung, den echten Testlauf (kein gespeicherter Wert), die Modulliste des Baus, Dateien und Zeilen unter src/, beide Einzeldateien samt SHA256, den geladenen Datenbestand (Tickets, Minis, Injektoren, Trainings, Wiki, Fertigkeiten), die Doku-Seiten, alle relativen Verweise und (falls vorhanden) die verbindliche R12-Zahl aus Nachweise/3.0/r12.json. Bewusst ohne Datum und Uhrzeit: ein Zeitstempel waere bei jedem Lauf anders, dann koennte der Pruefmodus nie gruen werden. Wann gemessen wurde, steht im Git-Log dieser Datei.
Nach einer Aenderung an den Dokumenten ist die Reihenfolge: python tools/stand.py, dann python tools/seite.py, dann noch einmal python tools/stand.py (die neue Seite zaehlt mit), dann python tools/seite.py.
Abweichungen und ehrliche Grenzen
- Browser, Android und die Windows-Datei werden hier nicht gemessen. Ob die Live-Seite, ein Browser oder die .exe laufen, kann dieses Werkzeug ohne Browser und ohne die nicht im Git liegenden Nachweise nicht pruefen; solche Aussagen stehen in den Dokumenten ausdruecklich als nicht geprueft.
- Der Testlauf misst den Arbeitsbaum im Moment des Laufs. Aendert ein anderer Bearbeiter gleichzeitig src/ oder tests/, beschreibt der Stand genau diesen Moment — deshalb wird er nach jeder Aenderung neu erzeugt und in der CI geprueft.
- Kein Datum, keine Uhr: siehe oben; der Pruefmodus vergleicht Text gegen Messung, nicht Zeitstempel.