diff --git a/src/static/js/studio.js b/src/static/js/studio.js
index 191bc6e..8df4a21 100644
--- a/src/static/js/studio.js
+++ b/src/static/js/studio.js
@@ -1841,6 +1841,9 @@ const Studio = {
// Die Oberflaeche nutzt das nicht mehr, zeigt einen so gestarteten Lauf
// aber korrekt an, denn er kann aus der klassischen Ansicht kommen.
_CANCELLABLE: ['collect', 'full'],
+ // 'network' hat keine Karte mehr, das Label bleibt trotzdem stehen. Kaeme
+ // der Baustein im Server, meldete ein laufender Schritt sonst nur seinen
+ // technischen Schluessel.
_STAGE_LABELS: {
collect: 'Artikel holen', analyze: 'Lagebild schreiben',
factcheck: 'Fakten prüfen', geoparse: 'Orte erkennen',
diff --git a/tests/test_studio_struktur.py b/tests/test_studio_struktur.py
index 6e1d785..154635b 100644
--- a/tests/test_studio_struktur.py
+++ b/tests/test_studio_struktur.py
@@ -76,6 +76,35 @@ pruefe("B4 Panel vorhanden", '
' in st
pruefe("B5 activateTab kennt den Reiter",
"if (key === 'settings') this.loadSettings();" in studio_js)
+# Bekannte tote Verweise aus der Domain-Sperrliste im Quellen-Modal. Alle
+# Zugriffe liegen hinter einer Existenzpruefung (showBlockDomainDialog kehrt
+# bei fehlendem Formular sofort zurueck), es droht also kein Absturz. Sie
+# werden gemeldet, zaehlen aber nicht als Fehler, damit die Pruefung nicht
+# dauerhaft rot steht und niemand mehr hinsieht.
+ALTLASTEN = {
+ "block-domain-input", "block-domain-notes", "source-overview-chevron",
+ "sources-block-form", "sources-hint",
+}
+
+print("\nB2) Kein Zugriff auf Elemente, die es nicht gibt")
+# Ein getElementById auf ein entferntes Element scheitert still. Beim Umbau
+# der Bausteinspalte waere genau das leicht passiert.
+for name, js_quelle, html_quelle in [("studio", studio_js, studio_html),
+ ("dashboard", app_js, dash_html)]:
+ vorhanden = set(re.findall(r'\bid="([^"]+)"', html_quelle))
+ # Was das Skript selbst erzeugt, steht nicht im Dokument
+ vorhanden |= set(re.findall(r"\.id = '([^']+)'", js_quelle))
+ vorhanden |= set(re.findall(r'id="([^"]+)"', js_quelle))
+ vorhanden |= set(re.findall(r'\bid="([^"]+)"', comp_js))
+ gesucht = set(re.findall(r"getElementById\('([^']+)'\)", js_quelle))
+ fehlend = sorted(g for g in gesucht if g not in vorhanden)
+ neue = [g for g in fehlend if g not in ALTLASTEN]
+ pruefe(f"B2 {name}.js greift nur auf vorhandene Elemente zu "
+ f"({len(gesucht)} geprueft)", not neue, neue)
+ bekannt = [g for g in fehlend if g in ALTLASTEN]
+ if bekannt:
+ print(f" bekannte Altlast, abgesichert: {', '.join(bekannt)}")
+
print("\nC) Jedes onclick zeigt auf eine vorhandene Methode")
for name, html, js, praefix in [
("studio", studio_html, studio_js, "Studio"),