Bug 27: unveränderter distance=0 einer dynamischen Route beim Set abgelehnt

Gleiche Ursache wie Bug 26, aber bei einem kuratierten statt einem
unkuratierten Feld: eine dynamische/verbundene Route hat distance=0,
RouterOS akzeptiert das nur system-intern, nicht als expliziten Eingabe-
wert für "set" — auch wenn der Wert unverändert zurückgesendet wird
("value of distance out of range (1...255)").

Fix generalisiert das "nur bei Änderung senden"-Prinzip aus Bug 26 von
unkuratierten auf ALLE Felder beim Bearbeiten eines bestehenden Items:
pendingCommand diffed jetzt gegen das ursprünglich geladene Item, statt
kuratierte Felder immer komplett neu zu senden. Deckt implizit auch das
Leeren eines Feldes ab (Bug 25), dessen Sonderfall dadurch überflüssig
wurde und entfernt ist.

Nebenbei: ExpertViewModelTests.swift lief bisher gar nicht mit, weil
nach dem Anlegen der Datei kein "xcodegen generate" lief (Xcodegen
erzeugt die Sources-Dateiliste einmalig beim Generieren). Nach erneutem
Generate 58 Unit-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 13:42:45 +02:00
co-authored by Claude Sonnet 5
parent 58c9ed5481
commit f25d02af17
4 changed files with 81 additions and 30 deletions
+36 -13
View File
@@ -547,7 +547,26 @@ Feld wie der Kommentar geändert wurde. Fix: ein unkuratiertes Feld wird
nur noch mitgeschickt, wenn sein Wert sich gegenüber dem ursprünglich
geladenen Item tatsächlich geändert hat (oder neu hinzugefügt wurde) —
betrifft nicht nur Routen, sondern jedes Menü mit berechneten/nur
lesbaren Feldern im generischen Lese-Pfad.
lesbaren Feldern im generischen Lese-Pfad. **Direkt beim Nachtesten
derselbe Effekt nochmal, diesmal bei einem kuratierten Feld** (Bug 27) —
eine dynamische/verbundene Route (automatisch angelegt durch eine
IP-Adresse auf dem Interface) hat `distance=0`; das *unveränderte*
Zurücksenden dieses ganz normal kuratierten Feldes beim Ändern des
Kommentars scheiterte mit "value of distance out of range (1...255)" —
RouterOS akzeptiert `distance=0` nur für System-verwaltete Routen, nicht
als Eingabewert für `set`. Zeigt: das "nur bei Änderung senden"-Prinzip
aus Bug 26 galt bisher nur für unkuratierte Felder, kuratierte Felder
wurden weiterhin immer komplett neu gesendet. Fix generalisiert:
`pendingCommand` sendet jetzt für **jedes** Feld (kuratiert wie
unkuratiert) beim Bearbeiten eines bestehenden Items nur noch den
Diff gegen das ursprünglich geladene Item — deckt implizit auch Bug 25
(Leeren eines Feldes) mit ab, der Spezialfall dafür wurde entfernt.
Nebenbei: die neue `ExpertViewModelTests.swift` lief anfangs gar nicht
mit, weil `xcodegen generate` nach dem Anlegen der Datei nicht erneut
lief — Xcodegen erzeugt die `sources`-Dateiliste einmalig beim
Generieren, eine neu angelegte Datei taucht im generierten `.xcodeproj`
nicht automatisch auf. **Merksatz: nach jeder neu angelegten Datei
`xcodegen generate` erneut laufen lassen, nicht nur nach Datei-Edits.**
## `xcodebuild test` hängt — Gatekeeper, kein Code-Bug
@@ -831,13 +850,15 @@ Bezug zu einem Router-Item).
**Live gegen Hardware verifiziert** — Nutzer bestätigte Kommentar-
Änderung an einer Firewall-Regel über den neuen Bearbeiten-Weg
("funktioniert"). Direkt danach beim Weitertesten zwei echte Bugs in der
gemeinsamen Bearbeiten-Logik gefunden (Bug 25, 26 — siehe Bug-Liste
oben): geleertes Textfeld blieb bestehen, Route-Bearbeiten scheiterte an
einem nur-lesbaren Feld (`immediate-gw`). Beide betreffen `ExpertViewModel.
("funktioniert"). Direkt danach beim Weitertesten drei echte Bugs in der
gemeinsamen Bearbeiten-Logik gefunden (Bug 25, 26, 27 — siehe Bug-Liste
oben): geleertes Textfeld blieb bestehen, Route-Bearbeiten scheiterte
erst an einem nur-lesbaren Feld (`immediate-gw`), dann am unveränderten
`distance=0` einer dynamischen Route. Alle drei betreffen `ExpertViewModel.
pendingCommand` und damit **auch den Experte-Tab direkt**, nicht nur den
neuen Übersicht-Weg — gefixt, alle 54 Unit-Tests grün (inkl. neuer
`ExpertViewModelTests` und `OverviewGraphTests.
neuen Übersicht-Weg — gefixt (vereinheitlicht: nur geänderte Felder
werden beim Bearbeiten gesendet, kuratiert wie unkuratiert), alle 58
Unit-Tests grün (inkl. neuer `ExpertViewModelTests` und `OverviewGraphTests.
testEditableNodesCarryTheirRouterOSMenuAndItemID`).
## Stand der Milestones
@@ -939,12 +960,14 @@ testEditableNodesCarryTheirRouterOSMenuAndItemID`).
verdrängt) plus neue Fähigkeit: Knoten (IP-Adresse, Pool, DHCP-Server/
-Netzwerk/-Client, Route, Firewall-Filter-/NAT-Regel, WireGuard-Peer)
direkt über dieselbe Sheet wie im Experte-Tab bearbeiten und
zurückschreiben. Dabei zwei Bugs in der gemeinsamen Bearbeiten-Logik
gefunden+gefixt (Bug 25, 26 — betreffen auch den Experte-Tab direkt):
geleertes Feld blieb bestehen statt geleert zu werden, Route-Bearbeiten
scheiterte an einem nur-lesbaren Feld (`immediate-gw`). **Live gegen
Hardware verifiziert** — Nutzer bestätigte Kommentar-Änderung an einer
Firewall-Regel über den neuen Weg ("funktioniert").
zurückschreiben. Dabei drei Bugs in der gemeinsamen Bearbeiten-Logik
gefunden+gefixt (Bug 25, 26, 27 — betreffen auch den Experte-Tab
direkt): geleertes Feld blieb bestehen statt geleert zu werden,
Route-Bearbeiten scheiterte erst an einem nur-lesbaren Feld
(`immediate-gw`), dann am unveränderten `distance=0` einer dynamischen
Route. **Live gegen Hardware verifiziert** — Nutzer bestätigte
Kommentar-Änderung an einer Firewall-Regel über den neuen Weg
("funktioniert").
## Nächste Schritte