M7-Status in README aktualisiert (REST-Schreibpfad + Hostkey-Trust
jetzt live verifiziert). Manual.md korrigiert: seit Bug 37 kann bei
REST-Verbindungen zusätzlich zum Zertifikat auch der SSH-Host-Schlüssel
zur Bestätigung erscheinen, nicht mehr nur eines von beiden.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
M26: SavedRouter bekommt ein optionales serialNumber-Feld. Zwei
physisch verschiedene Router mit identischem Host+Benutzername
(Werks-Adresse) blieben bisher ein gemeinsamer "Bekannte Router"-
Eintrag; recordSuccessfulConnection matcht jetzt zusätzlich nach
Seriennummer, mit sauberer Migration bestehender Einträge ohne
Seriennummer. Drei neue Tests.
M27, beim Live-Test von M26 gefunden:
- Passwort-Anzeige-Button (Augen-Symbol) im Verbinden-Tab
- Bug 35: KeychainService speicherte Passwörter nur nach
"username@host" — beide Router teilten sich denselben
Schlüsselbund-Eintrag trotz getrennter SavedRouter-Einträge. Fix:
optionaler serialNumber-Parameter qualifiziert den Account-Key,
mit Fallback auf den alten Key für bereits gespeicherte Passwörter.
- Bug 36: neuer Router zeigte keine Routerboard-Infos/Seriennummer —
derselbe Root Cause wie der zuvor gemeldete "Jetzt prüfen"-Fehler:
/system routerboard und /system package update scheitern auf diesem
Router mit "expected end of command" statt dem bisher einzig
abgefangenen "bad parameter terse". SSHTransport.fetchMenuItems
erkennt jetzt beide Formulierungen.
Alles live bestätigt.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- WAN-Schritt: fehlenden "Zurück"-Button ergänzt (beide Modi)
- "Abbrechen"/"Jetzt sichern" prominent gemacht (wie "Neu scannen")
- LAN-/VLAN-Schritt: Adressfelder starten leer, nur Format-Beispiel im
Feld sichtbar statt vorbelegter Werte. VlanStepView bekam dafür eine
Validierungssperre auf "Weiter" (fehlte bisher, war ok solange
Defaults immer gültig waren). Zwei Tests entsprechend angepasst.
- SSH-Host-Key-Trust aus M24 hatte sich entgegen der Live-Bestätigung
nie tatsächlich persistiert (defaults read zeigte leeren Schlüssel,
Ursache ungeklärt) — betraf BackupServices dedizierte SSH-Verbindung
beim ersten Experte-Tab-Schreibversuch pro Sitzung. Erneut über den
bestehenden Trust-Dialog bestätigt, diesmal per defaults read
verifiziert statt nur der UI-Bestätigung vertraut.
Alles live bestätigt.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Vollständiger Review (DE+EN) auf Nutzerwunsch. Gefunden und ergänzt:
REST-Zertifikat-Dialog (bisher nur SSH-Host-Schlüssel dokumentiert,
obwohl REST seit M22 der bevorzugte Pfad ist), "Abbrechen"-Button im
Einrichten-Wizard, einklappbare Kategorien im Experte-Tab (M23). Dazu
Icon-Farbbedeutung beim LAN-Scanner-Traffic-Monitor ergänzt.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Der Aktionen-Button (M24) ersetzte den Rechtsklick im Code, aber ein
App-eigener Warnhinweis (Feste-IP-Bestätigung) und README.md/Manual.md
(DE+EN) verwiesen weiterhin auf Rechtsklick. Gefunden durch Nutzer-
Hinweis nach Prüfung auf Gitea.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Einrichten-Wizard (alle sieben Schritte), Übersicht, LAN-Scanner,
Sicherungen laufen jetzt über L10n.t statt fester deutscher
String-Literale — Experte- und Verbinden-Tab waren bereits vorher
umgestellt (M16/M17). Model-Layer-Strings werden am Verwendungsort
gewrappt, ViewModel-generierte Laufzeitstrings (Fehlermeldungen,
CLI-Zeilen, Log) bleiben bewusst unübersetzt.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Tab "Geräte" -> "LAN-Scanner", Refresh-Button "Neu scannen" + prominenter
Stil. Neues Netzwerk-Tools-Menü: Ping/Traceroute/DNS-Auflösung über
NetworkToolsService (eigene SSH-Verbindung, wie Backup/InterfaceTraffic-
Monitor), mit Zeichen-Validierung gegen Command-Injection ueber einen
boeswilligen DHCP-Hostnamen. Port-Scan laeuft direkt von diesem Mac ueber
Network.framework (RouterOS hat kein eingebautes Portscan-Tool) - dabei
einen echten NWConnection-Bug gefunden (verweigerte Verbindung meldet sich
ueber .waiting, nicht .failed) und per Unit-Test gegen einen Loopback-Port
aufgedeckt und gefixt.
Zusaetzlich: Warnhinweis bei "Feste IP zuweisen" erklaert jetzt den
Rueckweg. DE/EN-Umschalter zeigt Landesflaggen statt Text.
92 Tests gruen. HANDOFF.md/README.md (inkl. Mermaid-Diagramm)/Manual.md/
CHATLOG.md aktualisiert.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YDmUd93KxsYGr2kLTotWnG
M17: "Bekannte Router" im Verbinden-Tab (SavedRouter/SavedRoutersStore),
Standort-Freitextfeld, Scroll-Cap ab 4 Einträgen. Bugfix: Umbenennen-
TextField steckte in einem sich selbst deaktivierenden Button.
M18: Live-Traffic-Punkt an Interfaces (InterfaceTrafficMonitor, eigene
SSH-Verbindung, monitor-traffic-Polling). Dabei zwei reale CLI-Parser-Bugs
gefunden und gefixt: running/disabled-Flags werden als Buchstaben vor dem
ersten Feld codiert, nicht als key=value; monitor-traffic liefert
"50.7kbps" statt einer reinen Zahl.
M19: Übersicht-Tab — animierte Flussrichtung auf allen Verbindungslinien
(TimelineView+dashPhase), frei verschiebbare Knoten mit Live-folgenden
Linien, Zurücksetzen-Button.
Zusätzlich (noch nicht live getestet, nur Build+Unit-Tests grün):
LAN-Port-Konflikt-Prüfung im Einrichten-Assistenten mit doppelter
Sicherheitsbestätigung, "Fertig"-Button nach erfolgreichem Anwenden.
82 Tests grün. HANDOFF.md/README.md/Manual.md/CHATLOG.md aktualisiert.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YDmUd93KxsYGr2kLTotWnG
.environment(\.locale) + Localizable.xcstrings schaltete Text(LocalizedStringKey)
live nachweislich nicht um. Ersetzt durch Core/Localization/L10n.swift
(Dictionary-Lookup je AppStorage("appLanguage")), Umschalt-Button in der Toolbar.
Vollständig übersetzt: alle Tab-Namen, alle Menü-Kategorien, kompletter
Experte-Tab inkl. Firewall-Formulare. 60 Tests grün, live bestätigt.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YDmUd93KxsYGr2kLTotWnG
Jedes Interface bekommt jetzt ein editTarget — VLAN-Interfaces über das
kuratierte /interface vlan-Schema (mit der eigenen .id aus /interface
vlan, nicht der generischen /interface-Liste), alle anderen Typen
(Ethernet, Bridge, WLAN, WireGuard) generisch über /interface.
Dabei live einen echten Stolperstein gefunden: für /interface gab es
bisher kein kuratiertes Schema, alle Felder landeten unbeschriftet in
"Weitere Parameter" — beim Versuch, ether5 zu ether51 umzubenennen,
wurde versehentlich default-name (RouterOS' Werksname, nie änderbar)
statt name geändert ("bad parameter default-name"). Fix: /interface
jetzt mit kuratiertem Schema (Name/Kommentar/Deaktiviert), Tooltip auf
"Name" warnt explizit vor der Verwechslung mit default-name.
Adress-Listen-Knoten bleiben bewusst weiter nicht editierbar (fassen
mehrere Einträge zusammen, bräuchten eine andere UI-Form).
Live bestätigt ("funktioniert"). 60 Unit-Tests grün. Manual.md/
HANDOFF.md aktualisiert.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YDmUd93KxsYGr2kLTotWnG
Nutzerfrage: was bedeutet "Optionen" bei einer IP-Adresse verknüpften
DHCP-Netzwerk-Zeile? Umbenannt zu "DHCP-Optionen". Zusätzlich: die
"Verbindungen"-Zeilen im Detailpanel eines Knotens sind jetzt anklickbar
(springt zum verbundenen Element, wie bei Linien-Klicks) und zeigen
beim Hovern eine Klartext-Erklärung als Tooltip (OverviewStyle.
explanation(for:), bereits für EdgeDetailView gebaut).
59 Unit-Tests grün. Manual.md/HANDOFF.md aktualisiert.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YDmUd93KxsYGr2kLTotWnG
Deckt nur Funktionen ab, die live gegen echte Hardware bestätigt sind
(✅-Meilensteine): Verbinden, Einrichten-Wizard, Übersicht, Geräte,
Experte, Sicherungen — jeweils mit eigenem Inhaltsverzeichnis auf
Deutsch und Englisch. Absichtlich nicht enthalten: WLAN-Einrichtung,
Rest der Härtung (M5/M7, nur teilweise getestet) — siehe HANDOFF.md.
Wird künftig selbstständig bei jedem erfolgreich live getesteten
Meilenstein aktualisiert.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YDmUd93KxsYGr2kLTotWnG