Commit Graph
87 Commits
Author SHA1 Message Date
adminandClaude Opus 5.5 cfd2ff344b Session-Handoff: UI-Rework Bereichs-Navigation (#72)
Build / build (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 12:04:59 +02:00
adminandClaude Opus 5.5 f2dd7e790e UI-Rework: Bereichs-Navigation statt Interview (Loesung A, #72)
Build / build (push) Canceled after 0s
- 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>
2026-10-17 15:37:52 +02:00
adminandClaude Opus 5.5 c8348640f8 SSH.NET auf 2026.0.0 (GHSA-mggc-4xg6-vcxf, GHSA-q939-rpr3-3284)
Build / build (push) Canceled after 0s
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>
2026-10-17 11:06:27 +02:00
adminandClaude Opus 5.5 d9194a6bb8 Fix: Experte 'Neuer Eintrag' stuerzte bei der Befehlsvorschau ab (Null-Zugriff)
Build / build (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 11:05:29 +02:00
adminandClaude Opus 5.5 fc40714811 Session-Handoff: Mac-Abgleich v1.11.4 komplett (P1-P42)
Build / build (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 07:44:38 +02:00
adminandClaude Opus 5.5 b303f253fb README/Plan: Mac-Abgleich abgeschlossen, Sprachen, Echtgeraet-Checkliste (#71)
Build / build (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 07:43:43 +02:00
adminandClaude Opus 5.5 79b64289df Sprachen Deutsch/Englisch/Portugiesisch mit Umschaltung in Einstellungen und Einfuehrung (#29)
Build / build (push) Canceled after 0s
- 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>
2026-10-16 07:42:45 +02:00
adminandClaude Opus 5.5 a69906bcfb README: Stand nach Mac-Abgleich Phase 6-8 (Assistent, Experte, Hilfe, SFTP, TOFU)
Build / build (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 07:28:45 +02:00
adminandClaude Opus 5.5 fd0f22a1fa Design: Port-Farben und Zebra-Zeilen im LAN-Scanner, Abschnittsbloecke; Download-Pfad bricht um (#52)
Build / build (push) Canceled after 0s
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>
2026-10-16 07:27:55 +02:00
adminandClaude Opus 5.5 95bc7188f2 Verschluesselte Verbindung: Zertifikat per TOFU pruefen statt ungeprueft akzeptieren (#70)
Build / build (push) Canceled after 0s
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>
2026-10-16 07:25:35 +02:00
adminandClaude Opus 5.5 6b59b08dda Hilfe: Handbuch und durchsuchbare Begriffe in der App (#68, #69)
Build / build (push) Canceled after 0s
- 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>
2026-10-16 07:24:27 +02:00
adminandClaude Opus 5.5 bb08bb84a8 Uebersicht: Knoten direkt bearbeiten; Editor als gemeinsamer Baustein (#24)
Build / build (push) Canceled after 0s
- 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>
2026-10-16 07:21:17 +02:00
adminandClaude Opus 5.5 cd0504d9ca Experte-Bereich: kuratierte Menues mit Feldhilfen, Werkzeuge und Pakete (#21, #62-#67)
Build / build (push) Canceled after 0s
- 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>
2026-10-16 07:16:52 +02:00
adminandClaude Opus 5.5 3666cf4ab5 Backups auf den PC laden per SFTP mit Hostkey-Bestaetigung (#8, #9)
Build / build (push) Canceled after 0s
- 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>
2026-10-16 07:07:06 +02:00
adminandClaude Opus 5.5 69d282569c Zusammenfassung: Fortschrittsbalken mit Sicherung als eigenem Schritt und Abschluss-Uebersicht; Ports je Netz (#59, #61)
Build / build (push) Canceled after 0s
- 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>
2026-10-16 07:04:48 +02:00
adminandClaude Opus 5.5 5a4e5b5b1b Assistent: Port-Konflikt-Pruefung 'Port freimachen?' im Heimnetz-Schritt (#60)
Build / build (push) Canceled after 0s
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>
2026-10-16 07:03:47 +02:00
adminandClaude Opus 5.5 073e9a6edf Assistent: Lease-Zeit Jahre/Tage/Stunden, vorhandenes LAN vorladen, LAN anlegen-oder-aktualisieren (#57, #58)
Build / build (push) Canceled after 0s
- 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>
2026-10-16 07:02:27 +02:00
adminandClaude Opus 5.5 241f76a688 README: Stand nach Mac-Abgleich Phase 1-5
Build / build (push) Canceled after 0s
Backup & Wartung, Isolation, Einstellungen/Einfuehrung, Testumgebung im Release,
MNDP-Router-Suche, Netzwerk-Werkzeuge, Verbindungs-Robustheit; Roadmap aktualisiert.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 06:58:25 +02:00
adminandClaude Opus 5.5 f71977a411 Geraete-Erkennung: Seriennummer anzeigen, Easter Egg nach 5 Klicks (#56)
Build / build (push) Canceled after 0s
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>
2026-10-16 06:57:22 +02:00
adminandClaude Opus 5.5 488a2f0a5d LAN-Scanner: Netzwerk-Werkzeuge je Geraet, Name aus Router-DNS (#23, #55)
Build / build (push) Canceled after 0s
- 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>
2026-10-16 06:56:41 +02:00
adminandClaude Opus 5.5 c40f2bdaf9 Verbinden: Router im Netzwerk finden per MNDP (#53)
Build / build (push) Canceled after 0s
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>
2026-10-16 06:53:33 +02:00
adminandClaude Opus 5.5 36ad3629cf Einfuehrung beim ersten Start; Fix: App startete seit dem Einstellungen-Commit ohne Hauptfenster (#51)
Build / build (push) Canceled after 0s
- 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>
2026-10-16 06:51:44 +02:00
adminandClaude Opus 5.5 0a4221ee6e Testumgebung im Release, Start maximiert mit Startbildschirm (#49, #50)
Build / build (push) Canceled after 0s
- 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>
2026-10-16 06:46:48 +02:00
adminandClaude Opus 5.5 28ad48e519 Backups: Passwort-Verschluesselung, manuelle Sicherung ersetzt 10 Min. die automatische, Gruppierung nach Tag (#45, #46, #47)
Build / build (push) Canceled after 0s
- 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>
2026-10-16 06:45:02 +02:00
adminandClaude Opus 5.5 2a32034b63 Einstellungen-Fenster: Erscheinungsbild, Update-Pruefung, Professioneller Netzwerker, Testumgebung, Backup-Ordner/-Passwort (#48)
Build / build (push) Canceled after 0s
- 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>
2026-10-16 06:43:05 +02:00
adminandClaude Opus 5.5 3346129652 Backup & Wartung: Neustart, Firmware-Update, Werksreset, automatisches Wiederverbinden (#43, #44, #28)
Build / build (push) Canceled after 0s
- 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>
2026-10-16 06:40:49 +02:00
adminandClaude Opus 5.5 de86a29fab Verbinden: Passwort merken, Felder nebeneinander, Link-Status-Punkt (#42, #31, #54)
Build / build (push) Canceled after 0s
- '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>
2026-10-16 06:22:28 +02:00
adminandClaude Opus 5.5 bd65ffbc3c Verbindung: Zeitlimit je Zugriffsart, binaere API strikt nacheinander, Trap/Done-Fix (#40, #41)
Build / build (push) Canceled after 0s
- 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>
2026-10-16 06:21:40 +02:00
adminandClaude Opus 5.5 49a73ceb2b Isolation: Router-Verwaltung sperren, bestehende Verbindungen kappen, Regeln kommentieren (#37, #38, #39)
Build / build (push) Canceled after 0s
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>
2026-10-16 06:19:16 +02:00
adminandClaude Opus 5.5 cf53841d0e Plan: Windows-Version auf Stand der Mac-Version v1.11.4 bringen
Build / build (push) Canceled after 0s
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>
2026-10-16 06:17:48 +02:00
adminandClaude Sonnet 5 09cd5c31fc Session-Handoff: LAN-Scanner, Backup-Verwaltung, Sidebar-Umbau
Build / build (push) Canceled after 0s
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-17 21:48:00 +02:00
adminandClaude Sonnet 5 12ce7bea84 Bekannte Router nicht mehr im Hauptfenster doppeln, nur noch in der Sidebar
Build / build (push) Canceled after 0s
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>
2026-09-17 21:37:53 +02:00
adminandClaude Sonnet 5 e3e3c71452 Demo-Zugang: zwei weitere virtuelle Testgeräte für die manuelle UI-Prüfung
Build / build (push) Canceled after 0s
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>
2026-09-17 21:31:50 +02:00
adminandClaude Sonnet 5 3010688b12 Sidebar: dauerhafte Verbindungs-Karte mit Kurzauswahl bekannter Router (#36)
Build / build (push) Canceled after 0s
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>
2026-09-17 21:15:53 +02:00
adminandClaude Sonnet 5 cc949b54df Sidebar: Schritt-Übersicht scrollbar machen (#35)
Build / build (push) Canceled after 0s
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>
2026-09-17 21:06:19 +02:00
adminandClaude Sonnet 5 0728817fbc Backup: vierstufiger Kompatibilitäts-Abgleich + eigenständiger Bereich (#33, #34)
Build / build (push) Canceled after 0s
#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>
2026-09-17 20:59:16 +02:00
adminandClaude Sonnet 5 036c02c78f Backup-Wiederherstellen: eigenständigen "Neues Backup erstellen"-Button ergänzen (#27)
Build / build (push) Canceled after 0s
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>
2026-09-17 20:08:31 +02:00
adminandClaude Sonnet 5 915c2fb91a Backup-Restore: Seriennummer als vorrangige Geräte-Prüfung vor Modell (#27)
Build / build (push) Canceled after 0s
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>
2026-09-17 20:02:57 +02:00
adminandClaude Sonnet 5 96fe0acd69 Backup-Wiederherstellung mit Modell-Abgleich (M-Backup-Wartung, #27)
Build / build (push) Canceled after 0s
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>
2026-09-17 19:55:03 +02:00
adminandClaude Sonnet 5 2c2fae73eb LAN-Scanner: Rückgängig-Zustand nach Entfernen der festen Lease erklären
Build / build (push) Canceled after 0s
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>
2026-09-17 19:15:15 +02:00
adminandClaude Sonnet 5 84f5ab21db LAN-Scanner: Geräte-Übersicht je Anschluss mit fester IP-Zuweisung (M-Geräte, #22)
Build / build (push) Canceled after 0s
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>
2026-09-17 19:03:05 +02:00
adminandClaude Sonnet 5 b7af5175dd Bekannte Router: gespeicherte Verbindungen im Verbindungs-Schritt
Build / build (push) Successful in 37s
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>
2026-09-16 21:08:01 +02:00
adminandClaude Sonnet 5 6514eaef86 README: CI/CD-Milestone als abgeschlossen dokumentieren
Build / build (push) Successful in 34s
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>
2026-09-16 20:48:35 +02:00
adminandClaude Sonnet 5 e0136f6ef2 CI: setup-dotnet-Schritt entfernen (fehlende Schreibrechte im User-Modus)
Build / build (push) Successful in 36s
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>
2026-09-16 20:47:05 +02:00
adminandClaude Sonnet 5 9860e16bb0 CI: runs-on auf selbstgehosteten Windows-Runner umgestellt
Build / build (push) Failing after 15s
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>
2026-09-16 20:45:30 +02:00
adminandClaude Sonnet 5 8cc8f1cbb3 Live-Eingabevalidierung (v1.2) + Firewall/NAT-Idempotenz-Fix (#19)
Build / build (push) Canceled after 0s
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>
2026-09-16 20:38:54 +02:00
adminandClaude Sonnet 5 5761f2737d VLAN: Anschlüsse portbasiert (untagged) zuordnen
Build / build (push) Canceled after 0s
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>
2026-09-16 06:35:05 +02:00
adminandClaude Sonnet 5 549f4a90cb Session-Handoff: Experten-Modus & IST-Zustand-Analyse
Build / build (push) Canceled after 0s
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-15 19:44:50 +02:00
adminandClaude Sonnet 5 3c68f06a78 README: Milestone "IST-Zustand-Analyse" als abgeschlossen markieren
Build / build (push) Canceled after 0s
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>
2026-09-15 19:41:36 +02:00
adminandClaude Sonnet 5 78d26061c6 README: Spalten-Layout (links nach rechts) statt Bänder dokumentieren
Build / build (push) Canceled after 0s
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-15 19:39:06 +02:00