M12: Geräte-Tab — LAN-Scanner mit Static-IP-Zuweisung

Neuer Tab: eine Tabelle pro physischem Ethernet/WLAN-Port mit den dort
gefundenen Geräten (Name, IP, MAC, Fest/Dynamisch/Kein-DHCP), gebaut aus
DHCP-Leases + ARP + Bridge-Host-Tabelle. Rechtsklick auf ein dynamisches
Gerät -> "Feste IP zuweisen" (RouterOS' "Make Static", per
/ip dhcp-server lease make-static), mit Bestätigungsdialog und
Session-Backup vor dem ersten Schreibvorgang (geteilter Mechanismus mit
dem Experte-Tab).

Vier reale Bugs live gefunden und gefixt (siehe HANDOFF.md Bug 14-17):

- "print terse" gibt das "dynamic"-Feld von /ip dhcp-server lease nie
  aus, in keinem Zustand -> Status kommt jetzt über RouterOS' find/get
  gegen die interne Eigenschaft, nicht aus gelesenen Feldern.
- fetchMenuItems' .id-Positionsüberlagerung ordnete für dieses Menü die
  falsche .id der falschen Zeile zu -> Erkennung und make-static-Ziel
  laufen jetzt über die MAC-Adresse statt .id.
- Ein SwiftUI-.confirmationDialog löschte sein eigenes Ziel-Objekt vor
  der Ausführung der bestätigten Aktion (Setter feuert bei jedem
  Knopfdruck, nicht nur Abbrechen) -> Dialog-Sichtbarkeit und
  Nutzlast entkoppelt, wie in BackupListView.
- Die eigene Verifikations-Abfrage (get [find ...] feld als ein
  kombinierter Befehl) war selbst eine nie verifizierte Annahme und
  lieferte falsche Negative -> ersetzt durch :foreach aus zwei einzeln
  bestätigten Bausteinen (find, get <id> feld).

RouterOSCommand bekommt einen neuen .action-Operationstyp für
RouterOS-"Menü-spezifische Befehle" jenseits von add/set/remove (aktuell
nur make-static). HANDOFF.md/CHATLOG.md mit allen vier Bugs, neuen
Milestones M11/M12 und offenen Punkten aktualisiert.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CTgRxJTzaQwaRkngbaE1GJ
This commit is contained in:
Kay
2026-09-14 13:55:46 +02:00
co-authored by Claude Sonnet 5
parent 10f30a8a7f
commit e2b303963a
14 changed files with 1155 additions and 27 deletions
+74
View File
@@ -432,6 +432,60 @@ nicht gegen Hardware.
echte Nutzer-Konfiguration, kein Test-Überbleibsel) und Memory
aktualisiert. Sitzung beendet.
## Session: Übersicht-Tab (M11) + Geräte-Tab (M12)
- "jetzt brauche ich eine Übersicht, welche Geräte (Name, IP-Adresse,
MAC-Adresse) an welchem Port hängen. so eine art LAN-scanner. ...
Rechtsklick->static-IP zuweisen." — nach dem Übersicht-Tab (siehe
unten) neuer "Geräte"-Tab gewünscht.
- Zuerst aber: "ich hätte gerne eine Übersicht über alle Einstellungen
des Router, quasi einen IST-Zustand. ... erstelle baue mir noch
zusätzlich einen Punkt ein, gerne in der Leiste oben, wo ich die
komplette derzeitige Konfiguration einfach und verständlich sehen kann.
grafisch mit Linien, wo was abhängig ist" → neuer "Übersicht"-Tab
(M11): Diagramm mit Spalten (Interfaces→IP→DHCP/Pools→Routen→
Firewall/NAT), Kanten aus RouterOS' eigenen Referenzfeldern, rein
lesend. "das gefällt mir schon sehr gut, kannst du die entsprechenden
Verbindung logisch farblich trennen? ein Hover-effekt beim anklicken
oder darüberfahren mit der mouse ware ein super feature." → 8
Verbindungsarten farblich getrennt, Hover/Klick hebt Kanten hervor und
blendet den Rest ab. "ok, das lassen wir so." → "ok committen" →
Commit `10f30a8`.
- Geräte-Tab (M12) gebaut: DHCP-Leases + ARP + Bridge-Host-Tabelle
verschmolzen, Rechtsklick "Feste IP zuweisen" (`make-static`). Vorher
RouterOS-Doku per Recherche-Agent geprüft (Lease-Felder, `make-static`-
Syntax, ARP/Bridge-Host-Felder) statt zu raten.
- "der anstaz ist gut, ich hätte gerne pro ehternet-port eine
tabellarische Aufstellung. weiterhin bekommen die Geräte per DHCP eine
IP-Adresse. in der Übersicht steht aber 'bereits fest zugewiesen'.
prüfe das bitte." — zwei Themen: Layout auf eine Tabelle pro Port
umgebaut (inkl. leerer Ports), und der Fest/Dynamisch-Bug wurde zur
langen Fehlersuche:
- Erster Fund: ARP-only-Geräte (kein Lease-Treffer) waren hart auf
"Fest" gesetzt — gefixt (drittes Zustandsbild "Kein DHCP").
- Zweiter Fund (Bug 14): das `dynamic`-Feld erscheint über
`print terse` nie, egal in welchem Zustand — Nutzer schickte
mehrfach Rohdaten zur Bestätigung. Erkennung auf RouterOS' `find`
umgestellt.
- Dritter Fund (Bug 15): `.id`-Positionsüberlagerung ordnete die feste
`.id` der falschen (noch dynamischen) Zeile zu — "die iMac-Zeile
zeigt 'fest', obwohl sie laut deinem letzten print noch ein D
hatte". Auf MAC-Adress-Matching umgestellt.
- Vierter Fund (Bug 16): Bestätigungsdialog löschte sein eigenes Ziel
vor der Ausführung (SwiftUI-`.confirmationDialog`-Race) — "keine
Fehlermeldung, auch nicht rot" trotz de-facto wirkungslosem Befehl.
Dialog-Sichtbarkeit und Ziel-Objekt entkoppelt.
- Fünfter Fund (Bug 17): eigene Verifikations-Abfrage (`get [find ...]
feld`) war selbst eine nie verifizierte Annahme und lieferte falsche
Negative — per Winbox bestätigt, dass die Zuweisung tatsächlich
funktionierte, während die App-Prüfung "weiterhin dynamisch" meldete.
Ersetzt durch `:foreach`+`find`+`get <id> feld` aus zwei einzeln
bestätigten Bausteinen.
- "das funktioniert jetzt super." — Feature bestätigt.
- "ja, committen und HANDOFF.md/CHATLOG.md aktualisieren" → dieser
Eintrag, HANDOFF.md (Bug 1417, M11/M12, aktualisierte Bekannte
Einschränkungen/Nächste Schritte) aktualisiert, Commit erstellt.
## Stand am Ende dieser Session (2026-09-14)
M9 (Einfach/Experte-Modus) und M10 (Experte-Tab: generischer Motor +
@@ -453,3 +507,23 @@ geprüft, `dhcp5`/`pool5` auf `ether5` als Test-Überbleibsel noch zu
klären, Dauer-Editor könnte auf weitere Zeitfelder ausgeweitet werden,
plus alle bereits vorher offenen Punkte (M7-Rest, M8-Hardware-Test,
Firewall-WAN-Port-Recheck).
## Stand am Ende dieser Session — Übersicht-Tab (M11) + Geräte-Tab (M12)
M11 (Übersicht-Tab: Diagramm des IST-Zustands, farblich getrennte
Verbindungsarten, Hover/Klick-Hervorhebung) und M12 (Geräte-Tab:
LAN-Scanner nach Port gruppiert, "Feste IP zuweisen") gebaut und beide
**live vom Nutzer bestätigt**. M12 brauchte dafür vier gefundene und
gefixte Bugs (Bug 1417, siehe HANDOFF.md): `print terse` gibt das
`dynamic`-Feld bei DHCP-Leases nie aus; `fetchMenuItems`s `.id`-Positions-
Überlagerung ordnete für dieses Menü die falsche Zeile zu; ein SwiftUI-
`.confirmationDialog` löschte sein eigenes Ziel vor der Ausführung; eine
eigene, nie verifizierte kombinierte RouterOS-Skript-Syntax lieferte
falsche Negative. Alle vier zusammen ergaben eine ungewöhnlich lange,
mehrstufige Fehlersuche mit wiederholten Rohdaten-Abgleichen und direkten
Router-Gegenchecks (SSH-CLI + Winbox) durch den Nutzer. Commit für M11
separat (`10f30a8`), M12 + HANDOFF/CHATLOG-Update in diesem Commit.
Offen: "Zurück auf dynamisch"-Aktion fehlt noch im Geräte-Tab; ob dieselbe
`.id`-Überlagerung auch im Experte-Tab bei anderen Menüs falsch zuordnen
kann, ist ungeprüft; alle bereits vorher offenen Punkte unverändert
(siehe HANDOFF.md Nächste Schritte).