- Seitenleiste mit Verbindungskarte und frei anklickbaren Bereichen
Start, Einrichten, Uebersicht, Geraete, Backup & Wartung, Experte;
Hilfe & Begriffe und Einstellungen als Bereiche unten (vorher Fenster)
- Ohne Verbindung: Verbinden-Seite, Geraetebereiche gesperrt
- Einrichten: Assistent mit anklickbaren Schritten und eigener
Zurueck/Weiter-Leiste (SetupWizardViewModel)
- Start: Schnellzugriffe, Geraetedaten, RouterOS-Update
- Bereichswahl-Schritt und SelectedArea entfallen; Plan wird bei jedem
neuen Verbinden zurueckgesetzt (WizardSession.ResetPlan)
- Fix: Entfernen eines bekannten Routers in der Seitenleiste band an
ein nicht vorhandenes Kommando
Closes#72
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Beide Luecken betreffen den ScpClient, den wir nicht nutzen (nur SftpClient) - trotzdem
keine verwundbare Version ausliefern.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- L.T/L.F (Core) und {l:T '...'} (XAML): der deutsche Text ist der Schluessel, wie in der
Mac-Version; fehlendes Portugiesisch faellt auf Englisch zurueck
- 1007 Texte uebersetzt: Menuekatalog und Ueberschneidungen aus Kays L10n uebernommen,
der Rest neu; Test prueft Platzhalter aller Uebersetzungen
- Umbau per Skript; RouterOS-Daten bleiben unuebersetzt (Isolations-Kommentare,
Statusvergleiche, Ordnernamen, HTTP-Basic, Protokollnamen)
- Sprache in Einstellungen und Einfuehrung, gilt nach Neustart (wird angeboten);
Standard nach Windows-Sprache; Datums-/Zahlenformate folgen der Sprache
- Menuekatalog, Begriffe und Handbuch folgen der Sprache (docs/Handbook.en.md fuer EN/PT,
als Ressource ohne Kultur eingebettet)
- Fehlermeldungs-Vergleich im Experte-Bereich sprachunabhaengig
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Je Anschluss ein eigener, in Hell und Dunkel lesbarer Farbakzent, Geraete-Zeilen
gestreift (Mac v1.7.0). Per Render-Test gefunden: 'Gespeichert unter' lief ueber den
Rand und schnitt 'Ordner oeffnen' ab.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Bisher wurde bei 'Verschluesselte Verbindung' jedes TLS-Zertifikat akzeptiert. Jetzt:
von Windows anerkannte Zertifikate direkt, selbstsignierte mit Fingerabdruck-Rueckfrage
beim ersten Mal (gemerkt in known-hosts.json, Praefix tls:), ein geaendertes Zertifikat
nie still (Mac bugs.md #9). Gilt fuer REST und binaere API. Plan um P42 ergaenzt.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 49 Begriffe aus dem Glossar der Mac-Version (DE/EN/PT) per Skript uebernommen und an
die Windows-Version angepasst (binaere API statt SSH, Sicherung auf Router + PC)
- docs/Handbuch.md neu fuer die Windows-Version, inkl. 'Router nicht erreichbar'
(WinBox per MAC, zuerst /log print); in die App eingebettet
- Hilfe-Fenster (nicht modal) aus der Seitenleiste: Handbuch und Begriffe mit Suche
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- ExpertEditorViewModel/ExpertEditorView aus dem Experte-Bereich ausgelagert (Feldhilfen,
weitere Parameter, Befehlsvorschau, Sicherung vor der ersten Aenderung)
- In der Uebersicht 'Bearbeiten' fuer Interfaces, IP-Adressen, DHCP-Server und
Firewall-/NAT-Regeln (nur mit 'Professioneller Netzwerker'); Knoten tragen Menuepfad und
Erkennungsmerkmale, nach dem Speichern wird die Uebersicht neu geladen
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Dritter Bereich 'Experte' in 'Was moechtest du tun?', nur mit 'Professioneller Netzwerker'
- 50 kuratierte RouterOS-Menues mit 219 Feldhilfen, per Skript aus dem Katalog der
Mac-Version uebersetzt (Expert/menu-catalog.json, eingebettet), plus eigener Menuepfad
- Auflisten/Bearbeiten/Anlegen/Loeschen mit Befehlsvorschau vor jeder Aenderung,
Sicherung vor der ersten Aenderung; dynamische/Standard-Eintraege und feste Listen ohne
Loeschen, deaktivierte ausgegraut, Zebra-Liste; Einstellungs-Menues per 'set' ohne ID
- Werkzeuge: Netzwerke isolieren (sperrt sich nicht selbst aus), Neues LAN anlegen
(nimmt den Port aus der Bridge, Port-Konflikte, Lease-Zeit, Isolation), Port in Bridge
einfuegen (auch WLAN; raeumt Adresse/DHCP/Pool/Netzwerk/Isolationsregeln), jeweils mit
Plan vorab, Fortschritt und Abschluss-Uebersicht
- Pakete: Liste vom MikroTik-Server, Vormerken mit Ruecknahme bei Fehler, apply-changes,
Speicher- und WLAN-Treiber-Warnung, automatisches Wiederverbinden
- Hotspot ohne Paket: verstaendlicher Hinweis statt roher Fehlermeldung
- Demo: Pakete, IDs fuer alle Listeneintraege (wie ein echter Router)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- SSH.NET 2024.2.0 nur fuer SFTP (REST/API haben keinen Datei-Download fuer binaere Dateien)
- KnownHostsStore (TOFU, %AppData%\MikroTik-Installer\known-hosts.json): unbekannter
Schluessel wird bestaetigt, ein geaenderter nie still akzeptiert (Mac v1.6.0)
- 'Auf PC speichern' im Backup-Bereich, Ziel = Backup-Ordner aus den Einstellungen,
'Ordner oeffnen'; verstaendliche Meldungen bei deaktiviertem SSH-Dienst/Anmeldefehler
- Testumgebung schreibt eine Platzhalter-Datei
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Balken + 'Schritt n von m', Hinweis auf laengere Dauer bei schwacher Hardware,
Liste der ausgefuehrten Schritte (auch nach einem Fehler sichtbar), Herzschlag pausiert
waehrend des Anwendens (Mac v1.4.0/v1.3.0)
- VLAN-Zusammenfassung nennt auch bei getaggten Netzen, worueber sie erreichbar sind
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
PortConflicts findet eigene IP-Adresse, DHCP-Client und DHCP-Server auf Anschluessen,
die in die Heimnetz-Bridge sollen. Ohne Zustimmung bleibt 'Weiter' gesperrt; mit
Zustimmung werden die Eintraege vor dem Einhaengen entfernt. Deutliche Warnung, wenn
die eigene Verbindung ueber die betroffene Adresse laeuft (Mac v1.0-v1.2, Mac #39).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- LeaseTime: RouterOS-Dauern ohne Kuerzung einlesen (Mac-Bug: >1 Woche wurde 7 Tage),
Eingabe als Jahre/Tage/Stunden in LAN und VLAN (Mac v1.11.0)
- ExistingLanReader: Bridge mit Adresse, Ports, DHCP-Server/Pool, Domain, DNS vom Router;
der LAN-Schritt startet damit statt mit Standardwerten (Mac v1.3.0)
- LanConfigurator per RouterOsUpsert: vorhandene Bridge/Ports/Adresse/Pool/DHCP-Server/
Netzwerk werden aktualisiert statt doppelt angelegt (sonst 'already have such name');
Ports aus anderer Bridge werden umgehaengt, vorhandener DHCP-Server behaelt seinen Namen
- Fix: Domainname ging als 'domain-name' raus, RouterOS erwartet 'domain'
- Demo: /interface/bridge und /ip/dns ergaenzt (portbasierte VLANs brauchen die Bridge)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Wie Mac found.md #36: fuenf schnelle Klicks (Pause > 1,5 s setzt zurueck) zeigen
'The Cake is a Lie!'.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Ping, Traceroute und DNS-Aufloesung vom Router aus ueber die bestehende API-Verbindung
(IRouterOsClient.RunAsync, kein SSH), Eingaben per Allow-List abgesichert
- Port-Scan von diesem PC (19 gaengige TCP-Ports, offen/geschlossen/keine Antwort);
Zeitlimit 3 s, weil Windows ein abgelehntes SYN ~2 s lang wiederholt
- DNS-Aufloesung bevorzugt den Eintrag 'name.domain' in /ip/dns/static (Mac found.md #39.4)
- Geraete ohne Lease-Hostnamen bekommen den Namen aus dem Router-DNS (Mac v1.6.0)
- Demo: Ping/Traceroute/Resolve simuliert
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MndpDiscovery (UDP 5678, Broadcast-Anfrage + Antworten 4 s sammeln, TLV-Parser wie
Mac v1.6.0) findet Router ueber die MAC-Adresse, auch ohne passende IP. Treffer
zeigen Name/Modell/IP/MAC; 'IP uebernehmen' fuellt die Adresse, 'MAC kopieren' mit
Hinweis auf WinBox bei Routern ohne IP.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- IntroWindow: Darstellung, Professioneller Netzwerker, Update-Pruefung, Testumgebung;
erscheint bis 'Fertig' oder 'Ueberspringen' (Mac v1.4.0), erneut ueber die Einstellungen
- Fix: SystemThemeWatcher.UnWatch warf im MainWindow-Konstruktor ('not yet loaded'),
die App zeigte nur 'Unerwarteter Fehler' ohne Hauptfenster (seit 2a32034)
- Einfuehrung erst nach ContentRendered, sonst blieb das Hauptfenster unsichtbar
- Startbildschirm laedt die Grafik ausdruecklich aus der App-Assembly
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Demo-Geraete nicht mehr nur in Debug-Builds: Abschnitt 'Testumgebung' im
Verbindungs-Schritt, abschaltbar in den Einstellungen (Mac v1.8.0)
- Ein simuliertes Geraet je Host fuer die App-Laufzeit, Aenderungen ueberstehen
Wiederverbinden (z. B. simulierter Neustart)
- Hauptfenster startet maximiert, Startbildschirm ca. 2,5 s (Mac v1.7.0/v1.8.0)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Mit Backup-Passwort: /system/backup/save mit password + encryption=aes-sha256,
Dateiname mit '-enc', Schloss in der Liste, Passwort beim Zurueckspielen
- Hinweis bei unverschluesselten Backups (Mac v1.6.0)
- WizardSession.CreateSafetyBackupAsync: eine Handsicherung ersetzt 10 Minuten lang die
automatische vor Anwenden/Restore/Werksreset (Mac v1.4.0)
- Backup-Liste nach Tag gruppiert (Mac v1.7.0)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- AppSettings/AppSettingsStore (JSON unter %AppData%), Backup-Passwort im
Anmeldeinformationsspeicher; Speicherfehler wird angezeigt statt still ignoriert
- Hell/Dunkel/Wie System, System-Watcher nur bei 'Wie System'
- Experten-Modus im Assistenten nur mit 'Professioneller Netzwerker' (Mac v1.3.0)
- Update-Pruefung beim Verbinden abschaltbar
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- RouterMaintenanceService: Neustart, RouterBOARD-Firmware (upgrade + Neustart),
Werksreset (no-defaults=no, skip-backup=no) nach eigener Sicherung
- RouterOsReconnector + WizardSession.ReconnectAsync: Retry alle 5 s mit Zaehler in der
Sidebar, erst erfolgreich wenn das Geraet auch antwortet (Mac v1.11.1)
- Herzschlag alle 30 s bei aktivem Fenster, pausiert waehrend laengerer Aktionen
- Nach Restore und RouterOS-Update wird automatisch wieder verbunden
- RouterOsException.IsConnectionLost unterscheidet Abbruch von Ablehnung
- Demo: RouterBOARD-Profile mit aelterer Firmware
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 'Passwort merken' (aus = gespeichertes Passwort wird geloescht), Fehler beim Speichern
in der Anmeldeinformationsverwaltung wird angezeigt (Mac v1.11.4)
- Benutzername/Passwort nebeneinander, damit 'Verbindung testen' ohne Scrollen sichtbar ist
- Schnittstellenliste mit Punkt gruen/grau fuer den Link-Status (Mac v1.3.0)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- RouterOsTimeouts: Lesen 15 s, Schreiben 30 s, Befehle (Backup/Restore/Update) 120 s,
Verbindungstest 8 s; vorher global 8 s (Fehlalarme auf schwacher Hardware, Mac v1.3/v1.6)
- BinaryRouterOsClient: Zugriffe per SemaphoreSlim serialisiert, nach !trap wird das
folgende !done mitgelesen (sonst las der naechste Befehl eine fremde Antwort)
- REST-Fehler nennen RouterOS' 'detail'
- IRouterOsClient.RunAsync liefert die Ausgabe eines Befehls (Basis fuer Ping/Traceroute)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Isolierte VLANs erreichten WebFig/SSH/API des Routers (Mac #41). Neuer Baustein
NetworkIsolation: Forward-Drop in beide Richtungen mit Kommentar, Input nur DNS/DHCP,
Connection-Tracking des isolierten Netzes leeren. DuplicateRuleGuard ignoriert den
Kommentar, damit aeltere Regeln nicht doppelt entstehen.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Arbeitspakete P1-P41 mit Gitea-Issues (#37-#69, Milestone M-Mac-Abgleich-v1.11),
ohne App-Store-/Verkaufsthemen.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Nutzer-Feedback: Seit dem Sidebar-Umbau gab es "Bekannte Router" doppelt —
als vollständige Bearbeitungsliste im Verbindungs-Schritt (Hauptfenster) und
als Kurzauswahl in der Sidebar. Der Verbindungs-Schritt zeigt jetzt nur noch
das Formular für ein neues, unbekanntes Gerät.
Rückfrage zur Konsequenz: Bearbeiten (Name/Standort) und Entfernen gab es
bisher nur in der jetzt entfernten Liste. Auf Nutzerwunsch zieht "Entfernen"
kompakt in die Sidebar (kleines Papierkorb-Symbol neben jedem Eintrag);
Umbenennen entfällt bewusst — der Name kommt weiterhin automatisch vom
Gerätemodell.
Aufgeräumt: UseSavedRouterCommand (kein eigenes Kommando mehr nötig, nur noch
intern von ConnectToSavedRouterAsync genutzt) und SavedRouterEntry.ToSavedRouter
(war ausschließlich für die jetzt entfernte Bearbeiten-Persistenz da) entfernt.
Core-Suite unverändert grün (138 Tests). Nicht-destruktiver Smoke-Test
bestätigt, dass die Sidebar weiterhin alle bekannten Router korrekt lädt.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Bisher gab es nur ein einzelnes simuliertes Testgerät (127.127.127.127,
"CHR (Simulator)"). Um Funktionen wie "Bekannte Router" oder den Sidebar-
Umbau mit mehreren, klar unterscheidbaren Einträgen ausprobieren zu können,
ohne echte zweite/dritte Hardware zu brauchen, unterstützt DemoRouterOsClient
jetzt mehrere Profile (DemoDeviceProfile): zusätzlich 127.127.127.128
("Büro-Router", hAP ac2, RouterBOARD) und 127.127.127.129 ("Keller-Switch",
CRS326-24G-2S+, RouterBOARD) — alle mit denselben Zugangsdaten (admin/admin).
Jedes Profil bekommt dynamisch eine zu sich selbst passende Demo-Backup-Datei
in "Backup verwalten" (statt nur das ursprüngliche CHR-Profil). Die simulierte
"/system/routerboard"-Antwort unterscheidet jetzt zwischen "kein RouterBOARD"
(wie beim ursprünglichen CHR-Profil, unverändertes Verhalten) und "echtes
RouterBOARD" (neue Profile, meldet Modell zusätzlich über routerboard.model).
8 neue Unit-Tests, bestehende 132 unverändert grün. Die beiden neuen Router
wurden testweise bereits verbunden und erscheinen jetzt unter "Bekannte
Router" (lokale Datei, unabhängig vom Git-Repository).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Nutzer-Wunsch "Optik-Renew": Sidebar zeigt jetzt unabhängig vom aktuellen
Schritt eine Verbindungs-Karte statt nur Logo + Schritt-Liste.
- Nicht verbunden: kompakte Liste bekannter Router (Name + Host/Benutzername),
ein Klick verbindet direkt und springt bei Erfolg automatisch weiter
(ConnectionStepViewModel.ConnectToSavedRouterCommand kombiniert
UseSavedRouter+TestConnectionAsync; MainViewModel.QuickConnectCommand ruft
das auf und geht bei Erfolg per GoNextCommand weiter).
- Verbunden: grüner Punkt + Gerätename/-modell (MainViewModel.
ConnectedDeviceLabel — fällt auf den Host zurück, bis die Geräte-Erkennung
gelaufen ist) + "Wechseln"-Button (trennt Verbindung, setzt session.Device
zurück, springt zum Verbindungs-Schritt).
Manuelle Formular-Eingabe für neue Geräte bleibt bewusst auf der
Verbindungs-Schritt-Seite — passt nicht kompakt in die schmale Sidebar.
Als eigener Entwurf umgesetzt (kein Referenz-Screenshot vorgegeben), im
bestehenden WPF-UI/Fluent-Stil. WPF-Smoke-Test für ConnectedDeviceLabel-
Übergänge und den Wechseln-Ablauf; QuickConnect selbst per Code-Review
verifiziert (dünner Wrapper um bereits getestete Pfade, im Scratch-Harness
nicht end-to-end testbar wegen internem WindowsCredentialStore-Zugriffs).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Nutzer-Feedback: Der letzte Schritt "RouterOS-Update" war in der Sidebar nicht
sichtbar. Ursache: die Schritt-Liste steckte in einem einfachen StackPanel
ohne ScrollViewer — mit inzwischen 13 Schritten (nach Ergänzung von "Was
möchtest du tun?" und "Backup verwalten") überschritten die unteren Einträge
bei kleineren Fensterhöhen den sichtbaren Bereich, ohne dass sich dorthin
scrollen ließ.
Logo-Kopfzeile bleibt fix (Grid-Row Auto), darunter ScrollViewer mit
VerticalScrollBarVisibility=Auto um die Schritt-Liste (Grid-Row *).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
#33 — Architektur als dritte Prüfstufe: RouterBackupService bettet zusätzlich
RouterDevice.Architecture in den Backup-Dateinamen ein (Modell_Architektur_
Seriennummer). BackupRestoreService.CheckCompatibility liefert jetzt vier
Stufen statt zwei: Match, SameModelDifferentDevice (gleiches Modell+Architektur,
bekannt andere Seriennummer — gelb markiert, nur mit ausdrücklicher "auf eigene
Gefahr"-Bestätigung wiederherstellbar), Mismatch (anderes Modell/andere
Architektur — weiterhin hart blockiert) und Unknown. Ältere Backups ohne
eingebettete Architektur/Seriennummer fallen weiterhin auf den Modell-Abgleich
zurück.
#34 — Backup-Bereich aus dem Interview gelöst: neuer Schritt "Was möchtest du
tun?" (AreaSelectionStepViewModel) direkt nach der Verbindung, setzt
WizardSession.SelectedArea (AppArea-Enum). Bei "Backup verwalten" überspringen
alle Konfigurations-/Analyse-Schritte per ShouldSkip, direkt zum neuen
BackupManagementStepViewModel — liest das Gerät eigenständig aus (unabhängig
von DeviceOverviewStepViewModel) und bündelt Auflisten/Erstellen/
Wiederherstellen. Die alte "Backup wiederherstellen"-Option in der Moduswahl
sowie WizardSession.IsRestoreBackupMode wurden entfernt (kein Parallel-
Mechanismus zur neuen Navigation) — SummaryStepViewModel ist wieder rein für
die geplanten Assistent-Änderungen zuständig. Der ShouldSkip-basierte Ansatz
deckt sich bewusst mit dem für M-Experte (#21) vorgesehenen Bedarf an
Navigation außerhalb der linearen Schritt-Kette.
17 neue/angepasste Unit-Tests (Core: 132 gesamt), WPF-Smoke-Test über die
komplette MainViewModel-Navigation (Connect → Bereich wählen → Backup
verwalten direkt erreicht, alle vier Kompatibilitäts-Stufen, Rückwärts-
Navigation) sowie Regressionscheck des normalen Assistenten-Pfads.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Nutzer-Feedback: bisher gab es nur automatische Backups direkt vor dem Anwenden
bzw. vor einem Restore, aber keine Möglichkeit, unabhängig davon auf Knopfdruck
eine Sicherung anzulegen (z. B. vor eigenen Änderungen direkt in WinBox).
Neuer Button im "Backup wiederherstellen"-Bildschirm ruft denselben
RouterBackupService wie die automatischen Backups auf (inkl. Modell-/
Seriennummer-Einbettung) und lädt die Backup-Liste danach neu, damit die neue
Datei sofort erscheint. DemoRouterOsClient simuliert "/system/backup/save"
jetzt auch tatsächlich als neuen Dateieintrag, damit sich das im Demo-Zugang
end-to-end durchklicken lässt.
Neuer Unit-Test für den Demo-Client, WPF-Smoke-Test für den kompletten
Erstellen-und-sofort-in-der-Liste-sehen-Ablauf.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Nutzer-Feedback: reiner Modell-Abgleich ließe ein baugleiches, aber physisch
anderes Gerät (gleiches Modell, andere Seriennummer) fälschlich als passend
durch. RouterBackupService bettet die Seriennummer jetzt zusätzlich zum Modell
in den Dateinamen ein (getrennt per "_", ein Zeichen, das die Sanitisierung nie
erzeugt und die Trennung beim Zurücklesen eindeutig hält).
BackupRestoreService.CheckCompatibility bündelt die Prüf-Priorität (Seriennummer
vor Modell vor "unbekannt") an einer Stelle, die sowohl RestoreAsync zum
Blockieren als auch die neue BackupSelectionItemViewModel zur Anzeige nutzen —
UI und tatsächliche Durchsetzung können so nicht auseinanderlaufen. Modell bleibt
Fallback für ältere Backups ohne eingebettete Seriennummer oder Geräte, die keine
liefern (z. B. virtuelle Testgeräte).
10 neue Unit-Tests, WPF-Smoke-Test für alle vier Kompatibilitäts-Zustände
(exakter Treffer, gleiches Modell/andere Seriennummer, anderes Modell, unbekannt)
sowie Regressionscheck der gesamten Core-Suite (125 Tests).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Neue Option "Backup wiederherstellen" im Moduswahl-Schritt (WizardMode-Enum ersetzt
das bisherige reine IsExpertMode-bool-Radiobutton-Paar; EnumToBooleanConverter für
mehr als zwei sich ausschließende Optionen). Überspringt WAN/LAN/VLAN/WLAN/Firewall
per ShouldSkip und zeigt in der Zusammenfassung die auf dem Gerät vorhandenen
.backup-Dateien zur Auswahl statt der geplanten Änderungen.
RouterOS prüft beim Zurückspielen selbst nicht, ob ein Backup zum verbundenen Gerät
passt. Da .backup-Dateiinhalte ohne SFTP (v1.3, noch offen) nicht lesbar sind, macht
RouterBackupService das Gerätemodell stattdessen Teil des Dateinamens (eigene
Backups); BackupRestoreService parst es beim Auflisten zurück und blockiert bei
erkanntem Mismatch ohne Override-Möglichkeit. Unbekannte Backups (z. B. aus WinBox)
brauchen eine explizite Bestätigung per Checkbox. Vor dem Zurückspielen wird wie
beim normalen Anwenden zusätzlich eine Sicherung des aktuellen Zustands erstellt.
11 neue Unit-Tests, WPF-Smoke-Test für alle drei Modell-Zustände sowie
Regressionscheck des normalen (Nicht-Restore-)Modus.
Folge-Issue #32 angelegt: exaktes Verhalten von "/system/backup/load" (Dateiname-
Format, Reboot/Verbindungsabbruch, Passwort-Parameter) gegen echtes Gerät verifizieren.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Nutzer-Feedback: Nach "Feste IP zuweisen" → "Rückgängig machen" wirkte die Zeile wie
kaputt (Button einfach ausgegraut, Status nur "Kein DHCP-Lease"). Technischer Hintergrund
bestätigt: RouterOS kennt kein "wieder dynamisch machen", UndoStaticAsync entfernt den
Lease-Eintrag komplett — das Gerät merkt das aber nicht sofort, sondern hält seine IP
client-seitig, bis es sich neu meldet (Renewal-Timer oder Trennen/Neuverbinden). Die Zeile
zeigt das jetzt explizit ("Feste IP entfernt" + erklärender Hinweistext/Tooltip statt
kommentarlosem Ausgrauen). Zusätzlich: immer sichtbarer "Aktualisieren"-Button, um nach
einem Trennen/Neuverbinden ohne Schritt-Wechsel neu zu scannen.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Neuer Wizard-Schritt "Geräte im Netzwerk" nach der IST-Zustand-Analyse: LanScanService
(Core) führt DHCP-Leases, ARP-Tabelle und Bridge-Host-Tabelle per MAC-Adresse zusammen
und gruppiert nach physischem Anschluss (aus der Bridge-Host-Tabelle, nicht aus
ARP/Lease, da deren "interface"-Feld bei gebrückten Setups nur die Bridge zeigt).
Erlaubt, eine DHCP-Lease per Klick fest zuzuweisen (RouterOS "Make Static") oder das
wieder rückgängig zu machen. Rein informativ bis auf diese eine Aktion.
Folge-Issue #30 angelegt: ob RouterOS für "make-static" wirklich ".id" statt "numbers"
erwartet, ist bislang unverifiziert (nur gegen den Demo-Client getestet).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Nach erfolgreicher Verbindung wird Host/Benutzername/Modellname lokal
gemerkt (SavedRoutersStore, JSON unter %AppData%), mit editierbarem
Namen und Standort-Feld. Das Passwort liegt separat im Windows-
Anmeldeinformationsspeicher (WindowsCredentialStore, P/Invoke auf
advapi32.dll) statt im Klartext -- bewusst in App statt Core, da Core
plattformneutral bleibt.
Da viele MikroTik-Geraete werksseitig dieselbe Standardadresse nutzen
(192.168.88.1/admin), waere Host+Benutzername allein nicht eindeutig:
RouterDevice liest jetzt zusaetzlich die Seriennummer aus
(/system/routerboard), SavedRoutersStore legt bei Host+Benutzername-
Treffer mit unterschiedlicher Seriennummer einen eigenen Eintrag an
statt den bestehenden zu ueberschreiben. Ansatz 1:1 von der parallel
entwickelten Mac-Version uebernommen (dort M26/M27), vom Nutzer live
bestaetigt.
README zusaetzlich um den auf dem mac-version-merge-Branch liegen
gebliebenen Ablaufplan/M-*-Milestone-Katalog ergaenzt, der bisher nicht
in main uebernommen war, und auf den aktuellen Stand gebracht (v1.2,
CI/CD, M-Bekannte-Router als abgeschlossen markiert).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Selbstgehosteter Windows-Runner registriert und verbunden, Workflow
erfolgreich scharf getestet (Run #26). Neuer Abschnitt erklaert den
User-Modus-Runner ohne Docker und warum kein setup-dotnet-Schritt noetig
ist (fehlende Schreibrechte nach "C:\Program Files\dotnet").
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Der selbstgehostete Runner laeuft bewusst im User-Modus (kein Admin).
actions/setup-dotnet@v4 versucht aber, eine eigene SDK-Kopie nach
"C:\Program Files\dotnet" zu installieren, wofuer die Schreibrechte
fehlen -- erster Testlauf (#25) ist deshalb dort fehlgeschlagen. Das
.NET 8 SDK ist auf dem Runner-Rechner ohnehin schon installiert, der
Schritt war nur fuer gehostete/leere Runner noetig.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Runner "danielpc-windows" (host-Modus, kein Docker) auf diesem Windows-
Rechner registriert und mit dem Repo verbunden (Issue #10). Label von
ubuntu-latest auf windows-latest umgestellt, damit der Workflow ihn
tatsaechlich trifft (Issue #11) -- passt ausserdem besser zum Windows-
exe-Build-Ziel als ein Linux-Runner.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Echte Formatpruefung (IP/CIDR/Praefix/Adressbereiche/Portbereiche) statt
reiner Nicht-leer-Pruefung in WAN, LAN, VLAN und Firewall, mit sofortiger
roter Fehlermeldung je Feld/Zeile statt stillem Blockieren von "Weiter".
Neuer NetworkValidation-Baustein in Core (24 Tests). Behebt nebenbei einen
echten Absturzpfad: LanConfigurator/VlanConfigurator riefen IPAddress.Parse
bisher ungeprueft bei jedem Tastendruck auf.
Zusaetzlich Issue #19 behoben: Firewall-/NAT-Regeln ohne eindeutiges
Identitaetsfeld duplizierten sich bei wiederholtem Wizard-Lauf gegen
dasselbe Geraet. Neuer DuplicateRuleGuard-Baustein holt den Ist-Zustand
einmal pro Wizard-Lauf (nicht pro Regel, um Selbst-Kollisionen innerhalb
desselben Laufs zu vermeiden) und ueberspringt bereits vorhandene Regeln.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Im Experten-Modus lässt sich jedes VLAN wahlweise fest einem oder
mehreren Anschlüssen zuordnen, statt nur über einen VLAN-fähigen
Switch/Access Point (getaggt) erreichbar zu sein. Aktiviert dafür
Bridge-VLAN-Filterung erst als letzten Schritt (nachdem alle PVID-
und Bridge-VLAN-Tabellen-Einträge stehen), um keine Verbindung
während der Einrichtung zu kappen, und schützt die zugeordneten
Anschlüsse per frame-types/ingress-filtering vor VLAN-Hopping.
Ein Anschluss kann nur einem Netzwerk zugeordnet sein; Konflikte
blockieren "Weiter" mit einer Fehlermeldung statt die Auswahl
stillschweigend zu ändern.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Kernfunktion ist umgesetzt und vom Nutzer beim Live-Test bestaetigt.
Roadmap-Tabelle um Status-Spalte erweitert; offen bleiben optisches
Feintuning und die Route-zu-Interface-Verifizierung gegen ein echtes
Geraet. Zugehoerige Gitea-Issues #12-#16 geschlossen, neues Issue #18 fuer
das offene Feintuning angelegt.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>