Übersicht: Interface-Klick hebt transitiv alle zusammenhängenden Linien hervor

OverviewGraph.highlightedNodeIDs(startingAt:) macht für Interface-Knoten
eine BFS über alle Kanten statt nur 1-Hop-Matching, damit z.B. "DHCP-Server
-> Pool" oder "IP-Adresse -> DHCP-Netzwerk" mit sichtbar werden. Andere
Knotentypen bleiben unverändert bei 1-Hop. Logik isoliert unit-getestet
(GUI selbst nicht automatisiert klickbar). 61 Tests grün.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YDmUd93KxsYGr2kLTotWnG
This commit is contained in:
Kay
2026-09-15 19:58:05 +02:00
co-authored by Claude Sonnet 5
parent ba6603ba64
commit 9b26677dc2
5 changed files with 123 additions and 6 deletions
+29
View File
@@ -1160,6 +1160,35 @@ Unit-Tests grün (inkl. neuer `ExpertViewModelTests` und
Knoten zusammen, kein 1:1-Bezug zu einem Router-Item, bräuchte eine
andere UI (Liste statt Formular).
12. **Übersicht-Tab: Interface-Klick hebt jetzt transitiv alle
zusammenhängenden Linien hervor, nicht nur die direkt anliegenden**
— Nutzeridee: "wenn ich einen Interface-Button klicke, möchte ich
ALLE Linien sehen, die mit dem Interface irgendwie zusammenhängen".
Bisher galt für jeden Knotentyp dieselbe 1-Hop-Regel (nur Kanten, die
den geklickten Knoten selbst berühren) — bei einem Interface reißt
das z.B. die Kette "DHCP-Server → sein Pool" oder "IP-Adresse →
DHCP-Netzwerk-Optionen" ab, da diese Kanten nicht am Interface selbst
hängen. Fix: `OverviewGraph.highlightedNodeIDs(startingAt:)` — für
jeden Knotentyp außer Interface unverändert nur der eine Knoten
selbst, für ein Interface eine Breitensuche (BFS) über alle Kanten in
beide Richtungen, die den kompletten zusammenhängenden Ast einsammelt
(Interface → Adresse/DHCP-Server/Route/Firewall-Regel, und von dort
weiter → Pool bzw. DHCP-Netzwerk). Ausdrücklich nur für Interfaces so
gewollt — alle anderen Knotentypen bleiben bei der bisherigen 1-Hop-
Regel. Da ich die laufende App-GUI nicht selbst anklicken kann, die
BFS-Logik stattdessen isoliert in `OverviewGraphTests.swift` getestet
(`testHighlightedNodeIDsExpandsTransitivelyOnlyForInterfaces`):
baut einen Graphen mit Interface→Adresse→DHCP-Netzwerk und
Interface→DHCP-Server→Pool auf, bestätigt zunächst per Sanity-Check,
dass Pool und DHCP-Netzwerk tatsächlich zwei Hops entfernt sind (kein
direkter Edge zum Interface), und prüft dann, dass
`highlightedNodeIDs(startingAt:)` vom Interface aus alle fünf Knoten
liefert, aber vom Pool oder von der Adresse aus nur sich selbst. 61
Tests grün (60 + 1 neu). **Visuelle Live-Prüfung im laufenden
Diagramm steht noch aus** — vom Nutzer noch nicht bestätigt, nur die
Logik selbst ist getestet; auf Nutzerwunsch trotzdem bereits
committed+gepusht ("alles speichern bitte").
Gitea-Remote `origin` ist eingerichtet und wird laufend gepusht (siehe
oben) — dieser Hinweis war veraltet, korrigiert am 2026-09-15.