# Changelog

Alle nennenswerten Änderungen an Triglav werden hier dokumentiert.
Format orientiert sich an [Keep a Changelog](https://keepachangelog.com/de/1.1.0/),
Versionierung nach [SemVer](https://semver.org/lang/de/).

## [1.1.5] – 2026-08-12 (Build 26.08.12.08)

### Neue Verbindungsprotokolle: VNC & SFTP
- **VNC (Remote-Desktop)** – neuer, komplett selbst implementierter VNC/RFB-Client
  (RFC 6143), eingebettet genau wie das bestehende RDP: eigene `VNCView` (RFB-
  Handshake, VNC-Authentication per DES-Challenge-Response, Raw- und CopyRect-
  Framebuffer-Dekodierung, Maus-/Tastatur-Weiterleitung inkl. X11-Keysym-Mapping,
  bidirektionale Zwischenablage). Ergänzt RDP um Ziele, die kein Windows-RDP
  sprechen (Linux-Desktops, macOS-Bildschirmfreigabe, klassische VNC-Server).
  Editor-Optionen: Skalierung (An Fenster anpassen / Originalgröße), Farbtiefe,
  „Nur betrachten" (keine Eingaben senden), Sitzung freigeben, Zwischenablage-
  Synchronisierung.
- **SFTP (Dateiübertragung)** – neuer Dateibrowser-Verbindungstyp im Finder-Stil:
  navigieren, hoch-/herunterladen, Ordner anlegen, umbenennen, löschen. Treibt
  das vertraute `/usr/bin/sftp` im Batch-Modus über kurzlebige, pro Aktion neu
  gestartete Prozesse an – robuster als eine dauerhaft offene interaktive Pipe,
  da nie auf möglicherweise gepuffertes Zwischenergebnis gewartet werden muss.
  Nutzt dieselbe Zugangsdaten-/Askpass-/Jump-Host-/ProxyCommand-Infrastruktur
  wie SSH.
- **Durchgängig integriert** – beide Protokolle sind wie SSH/RDP überall
  eingebunden: Editor, Seitenleisten- und Ablage-Menüs (⌥⌘N für VNC,
  ⇧⌥⌘N für SFTP), Dock-Menü, Dienste-Menü, Shortcuts/Spotlight-Intents,
  `triglav://new?type=vnc|sftp`-Deep-Links, CSV-Import, Diagnosebericht und
  Einstellungen (Standard-Port VNC).

### Qualitätssicherung
- Neue Testsuite `VNCTests` (DES-Testvektor nach FIPS 81, VNC-Authentication-
  Schlüsselableitung, `ls -la`-/`pwd`-Parsing des SFTP-Browsers) sowie
  `SFTPCommandBuilder`-Tests in `CommandBuilderTests`. Insgesamt jetzt
  153 Unit-Tests.

## [1.1.4] – 2026-08-11 (Build 26.08.11.12)

### Qualitätssicherung
- **Automatisierte Tests deutlich ausgebaut** – neue Suiten für Modelle, die
  Such-/Filter-/Sortier-Pipeline, Store-Mutationen, die SSH-/RDP-Kommandozeilen-
  Generierung und Backup/Restore (insgesamt 138 Unit-Tests). Die Filter-Logik
  wurde als reine, testbare `ConnectionFilter`-Struktur aus der Seitenleiste
  herausgelöst.
- **UI- und Accessibility-Tests** – neues `TriglavUITests`-Target mit
  deterministischem Testmodus (isolierter Store, kein Onboarding, keine Sperre)
  prüft Kernabläufe und Tastatur-/VoiceOver-Erreichbarkeit. Die manuelle
  Prüfroutine ist in `ACCESSIBILITY.md` dokumentiert.
- **Performance-Baseline** – `measure`-Tests über 5 000 Verbindungen für
  Filterung, Sortierung, Persistenz und Index-Rebuild.
- **Strengere CI** – Version/Changelog-Preflight und Unit-Tests sind jetzt
  verpflichtendes Merge-Gate; der Release-Lauf validiert Artefakt und Signatur
  und veröffentlicht `SHA256SUMS.txt`.

### Dokumentation
- Evaluierungen zu weiteren Protokollen (`PROTOCOLS.md`), eingebettetem RDP
  (`RDP_INAPP.md`), App-Sandbox (`SANDBOX.md`) und Telemetrie (`TELEMETRY.md`)
  ergänzt. Damit sind alle Punkte der `ToDo.md` abgeschlossen.

## [1.1.3] – 2026-08-09 (Build 26.08.09.13)

### KeePass-Anbindung (read-only)
- **Aus KeePass importieren** – unter **Einstellungen › Konten › „KeePass…"**
  lässt sich eine `.kdbx`-Datenbank auswählen, mit dem Master-Passwort entsperren
  und Einträge read-only als zentrale Konten importieren (Passwörter landen im
  Schlüsselbund). Die Entschlüsselung übernimmt die Referenz-Implementierung von
  **KeePassXC** (`keepassxc-cli`) – dadurch werden alle KDBX-Versionen und KDFs
  inklusive Argon2 unterstützt. Das Master-Passwort wird ausschließlich über
  stdin übergeben (nie als Argument) und niemals protokolliert. Fehlt KeePassXC,
  weist der Dialog mit Installationshinweis darauf hin.

### Onboarding
- **Willkommens- und Was-ist-neu-Fluss** – beim ersten Start sowie nach einem
  größeren Update (Wechsel von Major/Minor, z. B. 1.1 → 1.2) erscheint eine kurze
  Einführung (Verbindungen, Sicherheit/Schlüsselbund, Hilfe & Support). Patch-
  Updates (z. B. 1.1.2 → 1.1.3) lösen sie bewusst nicht aus.

### Fehler melden
- **In-App-Bugreport** (Menü **Hilfe › „Fehler melden…"**) – erfasst Titel,
  Beschreibung und optional bereinigte Systeminfos und öffnet entweder ein
  vorbefülltes **GitHub-Issue** oder – ganz ohne GitHub-Account – eine
  vorbefüllte **E-Mail** an das Projekt. Es wird nichts automatisch gesendet.

### Unterstützen
- **Herz-Menü** – rechts neben „Hilfe" gibt es jetzt ein **♥**-Menü, über das
  sich das Projekt per PayPal unterstützen lässt (auch als Eintrag im Hilfe-Menü).

### Support & Diagnose
- **Diagnosebericht** – unter **Einstellungen › Daten › „Support & Diagnose"**
  erstellt „Diagnosebericht erstellen…" eine bereinigte Übersicht aus App-Version,
  System- und Umgebungsinfos (ssh, eingebettetes RDP, iCloud, X11-DISPLAY),
  Einstellungen sowie aggregierter Konfigurationsstatistik. Der Bericht lässt sich
  kopieren oder als Textdatei speichern und dem Support zusenden. Er enthält
  bewusst **keine Passwörter, Schlüssel, Hostnamen oder Protokollinhalte** –
  Session-Logs erscheinen nur als Inventar (Dateiname, Größe, Datum).

### Hilfe & Dokumentation
- **Neues Hilfe-Thema „Fehlerbehebung"** – gebündeltes Troubleshooting für SSH,
  RDP, X11/DISPLAY (XQuartz), Schlüsselbund, Backup/Wiederherstellung und Updates
  sowie ein Verweis auf den neuen Diagnosebericht.

### Technisch
- Neuer, testbarer `DiagnosticsService`; Unit-Tests in `DiagnosticsTests`
  (korrekte Statistik, keine Preisgabe von Host-/Benutzernamen, erwartete
  Abschnitte).

## [1.1.2] – 2026-08-04 (Build 26.08.04.20)

### Erweiterte macOS-Integration
- **URL-Schema `triglav://`** – Verbindungen lassen sich jetzt per Deep-Link
  öffnen oder anlegen. Unterstützt werden `triglav://open?id=<uuid>` bzw.
  `?name=<Name>` (Sitzung öffnen/fokussieren, Name unscharf), `triglav://reveal`
  (in der Seitenleiste auswählen), `triglav://new?type=ssh|rdp[&host=…]` (neue
  Verbindung) und `triglav://set?name=<Set>` (Verbindungsset öffnen).
- **Shortcuts-App & Spotlight** – neue App-Intents „Verbindung öffnen" und
  „Neue Verbindung". Gespeicherte Verbindungen erscheinen als auswählbare
  Parameter; die Aktionen sind ohne Einrichtung als App-Shortcuts verfügbar.
- **Dienste-Menü** – ein in einer beliebigen App markierter Hostname öffnet über
  **Dienste › Neue SSH-/RDP-Verbindung in Triglav** einen vorbefüllten Editor.
- **Dock-Menü** – Rechtsklick auf das Dock-Symbol bietet „Neue SSH-/RDP-Verbindung"
  sowie die zuletzt verwendeten Verbindungen zum direkten Öffnen.

### Release-Prozess weiter automatisiert
- **Preflight-Prüfung** (`scripts/preflight.sh`) – erzwingt Versions-Konsistenz
  zwischen `MARKETING_VERSION`, `CURRENT_PROJECT_VERSION` (alle Xcode-Konfigurationen)
  und dem obersten `CHANGELOG.md`-Abschnitt inklusive Build-Schema `YY.MM.DD.HH`
  und nicht-leerer Release-Notiz. Läuft automatisch als Schritt 0 von
  `scripts/release.sh`.
- **DMG-Erzeugung** (`scripts/make_dmg.sh`) – erstellt zusätzlich zum ZIP
  (Sparkle-Update-Artefakt) ein komprimiertes `Triglav-<Version>.dmg` mit
  „Programme"-Alias als bequemen Direkt-Download.
- **Veröffentlichte Prüfsummen** (`scripts/checksums.sh`) – schreibt
  `build/SHA256SUMS.txt` über alle Artefakte, prüfbar per
  `shasum -a 256 -c SHA256SUMS.txt`.

### Technisch
- Neue, testbare Deep-Link-Zerlegung (`DeepLink`) mit zentralem `AppRouter`, der
  URL-Schema, Dienste, Shortcuts und Dock-Aktionen auf dieselbe UI-Route bündelt.
  Neue Unit-Tests in `DeepLinkTests`. Doku in [MACOS_INTEGRATION.md](MACOS_INTEGRATION.md).

## [1.1.1] – 2026-08-03 (Build 26.08.03.20)

### Behoben
- **Neue Verbindung bei aktiver Sitzung** – bei laufender Sitzung belegte die
  Sitzungsansicht den Detailbereich, sodass sich eine in der Seitenleiste
  ausgewählte Verbindung nicht mehr bearbeiten oder neu einrichten ließ. Der
  Editor öffnet sich jetzt als Blatt (Sheet) über der aktiven Sitzung.

### Verbessert
- **Drag & Drop in der Seitenleiste** – Verbindungen lassen sich per Ziehen in
  eine Gruppe verschieben; die Zielgruppe wird beim Überfahren hervorgehoben. Im
  Editor spiegelt die Gruppen-Auswahl denselben Verschiebe-Pfad wider. Umsetzung
  über die zuverlässige `NSItemProvider`-basierte `.onDrag`/`.onDrop`-API
  (stabil in der macOS-13-Seitenleiste).

## [1.1.0] – 2026-08-02 (Build 26.08.02.21)

### Sitzungen und Protokolle
- **Verbindungssets** – benannte Sets mehrerer Verbindungen lassen sich anlegen und
  gesammelt öffnen. Reihenfolge und ein optionales Parallelitätslimit werden
  berücksichtigt (gestaffeltes Öffnen). Erreichbar über das neue **Sets**-Menü in der
  Symbolleiste inkl. Verwaltungs-Dialog.
- **Session-Profile** – pro Verbindung konfigurierbar: Terminal-Schriftgröße,
  Farbschema-Override, Umgebungsvariablen und Arbeitsverzeichnis (`cd` nach Login).
- **SSH-Verbesserungen** – Agent-Forwarding (`-A`) und benutzerdefiniertes
  `ProxyCommand` im Editor; Umgebungsvariablen/Arbeitsverzeichnis werden über ein
  sicher gequotetes Remote-Kommando (erzwungenes TTY, interaktive Login-Shell) gesetzt.
- **RDP-Komfort** – ausklappbare Hinweisleiste in RDP-Sitzungen mit Sondertasten- und
  Weiterleitungs-Tipps; RDP-Profile über „Als Vorlage speichern“.
- **Session-Logging erweitert** – konfigurierbarer Logdateiname pro Verbindung,
  Aufbewahrungsregel (Löschen nach n Tagen, beim Start erzwungen), Zugriff auf das
  Log-Verzeichnis und eine deutliche Warnung, dass getippte Passwörter im Klartext
  im Protokoll landen.
- **Terminal-Komfort** – Suche im Terminal (Weiter/Zurück), Copy-on-select-Option,
  live veränderbare Schriftgröße und Export der aktuellen Sitzung als Textdatei.

### Oberfläche
- **Changelog in der App** – neuer Menüpunkt **Hilfe › Neuerungen (Changelog)** öffnet
  das gebündelte Changelog in einem eigenen, formatierten Fenster.

### Technisch
- Store-Schema **v3** (additiv, abwärtskompatibel): `SSHConfig` erhielt einen
  toleranten Decoder für die neuen Profil-/SSH-Felder, der Store das Feld `sets`,
  die Einstellungen Terminal-Komfort- und Log-Aufbewahrungsoptionen. Neue Unit-Tests
  in `SessionFeaturesTests`.

## [1.0.8] – 2026-08-02 (Build 26.08.02.17)

### Import, Export und Synchronisation
- **CSV-Import** – neuer Assistent mit automatischer Spaltenzuordnung,
  Live-Vorschau, Zeilenvalidierung, Duplikaterkennung und sicherer Zuordnung zu
  (bestehenden oder neuen) Gruppen. RFC-4180-naher Parser inkl. Anführungszeichen
  und `,`/`;`-Erkennung.
- **Importkonflikte** – JSON-Import und Datei-Restore zeigen jetzt eine Vorschau
  mit Konflikterkennung nach Wert-Identität (Protokoll+Host+Port+Benutzer) und
  einer Auswahl **Hinzufügen / Überschreiben / Überspringen** pro Konflikt
  (inkl. Sammelaktionen).
- **Backup-Verwaltung** – neue Übersicht mit Backup-Historie, Größe/Datum,
  **Integritätsprüfung** (SHA-256 + Decodier-Validierung), konfigurierbaren
  **Aufbewahrungsregeln** (Anzahl/Alter) und **Wiederherstellung einzelner
  Gruppen**.
- **Bidirektionaler Sync (Entwurf)** – dokumentierter Entwurf ([SYNC.md](SYNC.md))
  mit versioniertem, secret-freiem Envelope und einer bereits implementierten,
  getesteten Merge-Engine (`SyncService`): Union-Merge nach Wert-Identität,
  Konfliktermittlung mit abweichenden Feldern, Offline-Verhalten. Standardmäßig
  deaktiviert; Passwörter werden nie synchronisiert.

### Stabilität und Datenintegrität
- **Persistenz- und Migrationssicherheit** – vor jeder Schema-Migration wird die
  Originaldatei als `store.premigration-v<n>.json` gesichert; jeder Speichervorgang
  hält zusätzlich eine rollierende Sicherung (`store.bak.json`). Bei beschädigter
  Konfiguration wird die Datei in Quarantäne verschoben und aus der letzten
  gültigen Sicherung wiederhergestellt, bevor als letzter Ausweg leer gestartet
  wird. Migrationsfehler sind jetzt nachvollziehbar (`StoreMigrator.MigrationError`
  mit Versionsgrenzen); Dateien neuerer, nicht unterstützter Versionen werden
  abgelehnt statt still beschnitten.
- **Actionable Fehlermeldungen** – SSH-Exit-Codes (u. a. 255/127), RDP-Fehler und
  Speicherfehler liefern jetzt verständliche Hinweise mit nächsten Schritten.
- **Automatisierte Tests** – neues `TriglavTests`-Target mit 29 Unit-Tests für
  Laden/Speichern, Migration, Keychain-Fehler, Import/Restore, verschlüsseltes
  Backup, Eingabevalidierung und gleichzeitige Sitzungsänderungen. Ausführen mit
  `xcodebuild test -project Triglav.xcodeproj -scheme Triglav -destination 'platform=macOS'`.

### Verbindungsverwaltung
- **Live-Validierung im Editor** – Host, Port, Benutzername, Jump-Host,
  RD-Gateway und Port-Weiterleitungen werden jetzt inline geprüft. Ungültige
  Eingaben werden rot markiert und mit Begründung versehen; „Verbinden“ und
  „Verbindung testen“ bleiben gesperrt, solange Fehler bestehen.
- **Robuster Sitzungslebenszyklus** – Beim Schließen eines Tabs, beim Neu-
  verbinden und beim Beenden der App werden aktive `ssh`/`script`-Kindprozesse
  und RDP-Verbindungen jetzt zuverlässig beendet. Ein Reconnect verwaist keine
  vorherige Sitzung mehr, und Auto-Reconnect greift nicht mehr für bereits
  geschlossene Sitzungen.

### Sicherheit
- **Verschlüsseltes Backup-Format (`.triglavbackup`)** – optionales,
  passwortgeschütztes Backup (AES-256-GCM, PBKDF2-HMAC-SHA256, 210 000
  Iterationen), das auf Wunsch auch die im Schlüsselbund gespeicherten Passwörter
  mitnimmt. Passwörter/Passphrasen werden nie in JSON, Logs oder Fehlermeldungen
  geschrieben.
- **Keychain-Zugriffe gehärtet** – dokumentiertes Service-/Account-Namensschema,
  `kSecAttrAccessibleWhenUnlocked`, keine iCloud-Synchronisation, verständliche
  Meldung bei gesperrtem Schlüsselbund (`KeychainError.locked`).
- **Sicherheitsprüfung der Launcher** – Abwehr von SSH-Options-/Argument-Injection,
  `.rdp`-Directive-Injection und Pfad-Injection; temporäre `.rdp`-Dateien sind
  `0600` und werden automatisch gelöscht; Askpass-Verzeichnis auf `0700` beschränkt.
- **Reproduzierbarer Release-Prozess** – `scripts/release.sh` bündelt Developer-ID-
  Signierung (Hardened Runtime + Zeitstempel), Notarisierung, Stapling,
  Verifikation und Prüfung der Update-Artefakte. Dokumentiert in
  [SECURITY.md](SECURITY.md).

## [1.0.7] – 2026-07-28 (Build 26.07.28.11)

### Hinzugefügt
- **Automatische Updates via Sparkle** – identischer Download-Mechanismus wie in
  Forseti. Die App prüft den signierten Update-Feed
  `https://download.kundida.de/appcast/triglav.xml` und installiert Developer-ID-
  signierte, notarisierte Updates. Neuer Menüpunkt **„Nach Updates suchen…"**.
  Details siehe [SPARKLE.md](SPARKLE.md).

### Behoben
- **Versionsnummer im Bundle korrigiert.** Bis 1.0.6 wurde `MARKETING_VERSION`/
  `CURRENT_PROJECT_VERSION` im Xcode-Projekt nicht mitgezogen, sodass gebaute
  Bundles fälschlich als 1.0.5 (Build 7) erschienen. Version und Build-Nummer
  folgen jetzt dem Release (Build im Format `YY.MM.DD.HH`, monoton steigend für
  Sparkle).

## [1.0.5] - 2026-06-21

### Geändert
- **Nur noch Apple Silicon (arm64).** Die Intel-Unterstützung (x86_64) wurde
  entfernt: Das Projekt baut jetzt arm64-only (`ARCHS = arm64`), ebenso die
  Bau-/Release-Pipelines (`scripts/make_app.sh`, GitHub-Actions-`release.yml`).
  Dadurch kleinere Binaries und schnellere Builds. macOS-Mindestversion
  unverändert (13 Ventura).
- Versionssprung auf **1.0.5 (Build 7)**.

## [1.0.4] - 2026-06-21

### Geändert
- **Komplett überarbeitete Oberfläche** – modern, funktional und klar strukturiert.
  - Neues, zentrales **Design-System** (`DesignSystem.swift`) mit einheitlichen
    Abständen, Radien, Protokoll-Akzentfarben und wiederverwendbaren Bausteinen
    (Icon-Badge, Protokoll-Pill, Status-Badge, Farb-Tag-Punkt, Karten-Flächen).
  - **Seitenleiste**: scanbare Verbindungszeilen mit farbigem Protokoll-Badge,
    Host-Zeile, Tag-Chips und Protokoll-Pill; Gruppen mit Verbindungszähler.
  - **Startbildschirm (Welcome)**: Hero-Bereich mit App-Identität und Version,
    Schnellaktionen für neue SSH-/RDP-Verbindungen sowie ein Raster der zuletzt
    verwendeten Verbindungen zum direkten Öffnen.
  - **Verbindungs-Editor**: prägnanter Hero-Kopf mit großem Icon, Protokoll-Pill,
    Login-/Host-Zeile und betontem „Verbinden"-Button.
  - **Sitzungen**: aufgewertete Tabs (aktive Hervorhebung, Protokollfarbe) und
    klarere Statusleiste über die gemeinsamen Status-Komponenten.
  - **Fenster-Toolbar** mit globalem „Neu"-Menü und überarbeiteter Sperr-Ansicht.
- Versionssprung auf **1.0.4 (Build 6)**.

## [1.0.3] - 2026-06-10

### Behoben
- **RDP-Speicherüberlauf / Crash bei mehreren bzw. aktiven Verbindungen.** Die
  Framebuffer-Render-Pipeline reihte pro Server-Paint ein vollständiges Bild ein,
  ohne Drosselung — bei bewegten Inhalten wuchsen Render- und Main-Queue
  unbegrenzt (bis >64 GB RAM und Systemabsturz). Jetzt wird pro Zeitpunkt nur der
  neueste Frame gerendert (Coalescing) und der Render-Thread wartet per Backpressure
  auf die Anzeige; der Speicher ist auf wenige Framebuffer pro Sitzung begrenzt.
- **UI-Blockaden** (Menü ließ sich nicht öffnen, langsames Verbinden) als Folge der
  mit Layer-Updates gefluteten Main-Queue – durch obige Drosselung behoben.
- **CI/Release-Build** scheiterte mit „'freerdp/freerdp.h' file not found", wenn ein
  unvollständiger FreeRDP-Cache (Libs ohne Header) den Build-Schritt übersprang. Der
  Build-Schritt läuft nun immer und `build_freerdp.sh` prüft auf einen vollständigen
  Install (Libs + Header + Modulemap) bzw. baut sonst sauber neu.

## [1.0.1] - 2026-06-07

### Hinzugefügt
- **SSH-Passwort-Auto-Login** über einen Keychain-gestützten Askpass-Helfer.
- **Auto-Reconnect**, **Bestätigung vor dem Trennen** und **Sitzungs-Wiederherstellung** beim Start.
- **Touch-ID-Sperre** (biometrisches Entsperren) inkl. Menübefehl „Jetzt sperren".
- **Session-Logging** via `script` nach `~/Library/Logs/Triglav`.
- **SSH-Terminal-Toolbar** (Esc, Tab, Ctrl-Combos, Pfeiltasten) und konfigurierbares **Terminal-Farbschema**.
- **Split-Ansicht** für zwei Sitzungen, **Tab-Reordering**, **⌘W** zum Schließen.
- **Mehrfachbearbeitung** (Farbe, Favorit, Tag, Verschieben, Löschen) und **Vorlagen**.
- **„Zuletzt verwendet"**-Sektion, Host-Anzeige in der Seitenleiste, Accessibility-Labels.
- **Verbindungs-Timeout** und **Host-Key-Policy** konfigurierbar; Default-Ports werden angewendet.
- **iCloud-Backup** (manuell + automatisch) und **In-App-Protokollanzeige** (OSLog).
- **Schema-Migration** mit toleranter Decodierung; **CI/Release-Workflows** (GitHub Actions).
- Lokalisierungs-Infrastruktur (String Catalog) mit englischen Übersetzungen.

## [1.0.0] - 2026-06-06

### Hinzugefügt
- Erste Version: Gruppen-/Server-Baum, SSH-In-App-Terminal, RDP via System-Client,
  Keychain-Speicherung, JSON-Import/-Export & Backup, Einstellungen, Hilfe, App-Icon, About.
