# Changelog Credentials Vault

Format: [Keep a Changelog](https://keepachangelog.com/de/1.1.0/) · Versionierung
nach [SemVer](https://semver.org/lang/de/). Erstes Tool-Release ist immer
`0.1.0` (live, aber noch nicht vollständig battle-tested); Patches erhöhen die
dritte Stelle (`0.1.1`, `0.1.2`, …), neue Funktionsbündel die zweite (`0.2.0`).

Jede Zeile hier beschreibt, was sich für dich ändert. Wie es gebaut ist, steht
in den Commits und in der Architektur-Doku, nie hier.

## 0.6.0 (2026-09-02)

### Changed

- **Die 2FA-Pflicht deines Teams gilt jetzt wirklich.** Bisher hat der Tresor bei eingeschalteter Pflicht nur ein Banner gezeigt. Jetzt verlangt er beim Öffnen sensibler und hyper-sensibler Einträge, beim Abrufen eines Einmalcodes dazu, beim Erstellen eines Links nach außen und beim Import den Code aus deiner Authenticator-App, einmal je Tresor-Sitzung. Standard-Einträge bleiben ohne Code lesbar. Ohne eingerichtete Tresor-2FA sind genau diese Schritte gesperrt, und der Dialog führt zur Einrichtung.
- **Mindestlänge und Mindeststärke des Master-Passworts wirken beim Einrichten.** Bisher galt fest „mindestens 8 Zeichen", egal was das Team eingestellt hatte.
- **Die Sichtbarkeit neuer Einträge aus der Richtlinie belegt das Formular vor.** Steht sie auf „Privat", beginnt ein neuer Eintrag persönlich.

### Removed

- **„Export nur mit Grund"** ist aus den Richtlinien verschwunden. Es gibt keinen Export, den die Einstellung regeln könnte; sie kommt zurück, sobald es einen gibt.

## 0.5.5 (2026-08-08)

### Added

- **Beim Offboarden fragt die Plattform jetzt von selbst nach dem Tresor.**
  Setzt du in der Mitglieder-Verwaltung einen Sitz zurück oder löschst ihn,
  steht in der Rückfrage, wie viele Zugänge diese Person zuletzt geöffnet hat
  und wie viele davon noch nicht gewechselt wurden, mit einem Link direkt auf
  die Liste. Bisher musste dir das jemand einfallen.
- **Die Liste bleibt erhalten, auch wenn der Sitz gelöscht wird.** Vorher war
  sie in dem Moment weg, in dem der Account verschwand, und damit ausgerechnet
  dann, wenn du sie am dringendsten brauchst. Jetzt wird sie vor dem Löschen im
  Protokoll festgehalten und ist dort weiterhin nachlesbar.
- **Umschalter 30 oder 90 Tage** über der Liste. 90 Tage bleibt die Vorgabe und
  fängt auch die Portale, die jemand vor Monaten einmal geöffnet hat. 30 Tage
  zeigt, was die Person zuletzt aktiv benutzt hat, wenn du nur das Dringendste
  wechseln kannst.
- **"Als gewechselt markieren"** an jedem offenen Eintrag, und für alle offenen
  auf einmal. Damit verschwindet der Eintrag aus dem Offenen und trägt den
  grünen Vermerk. Wichtig: Das ändert kein Passwort, es hält nur fest, dass du
  es beim Anbieter neu gesetzt hast. Das steht auch so an der Fläche.
- **Liste exportieren.** Abgearbeitet wird die Liste bei den Anbietern und
  nicht im Tresor, deshalb kannst du sie jetzt als Tabelle mitnehmen. Passwörter
  stehen darin nicht, nur was zu tun ist.

## 0.5.4 (2026-08-08)

### Fixed

- **Der Tresor sperrt sich jetzt wirklich bei Inaktivität.** Die Einstellung
  "Automatische Sperre bei Inaktivität" liess sich zwar setzen, hat aber nichts
  bewirkt: Der Schlüssel für die höchste Stufe blieb bis zum Neuladen der Seite
  offen. Jetzt gilt die eingestellte Zeit. Passiert so lange nichts, verlangt
  der nächste Blick auf einen hyper-sensiblen Eintrag wieder dein
  Master-Passwort oder deinen Fingerabdruck. Steht die Einstellung auf "Aus",
  ändert sich nichts.
- Das gilt auch, wenn der Tresor in einem Tab im Hintergrund liegt. Kommst du
  nach der eingestellten Zeit zurück, ist er zu.
- **Auch "Tresor-Sitzung läuft ab nach" gilt jetzt.** Diese Zeit ist die
  Obergrenze ab dem Entsperren, und sie läuft unabhängig davon, ob du gerade
  arbeitest. Nach Ablauf fragt der Tresor wieder nach deinem Master-Passwort
  oder deinem Fingerabdruck, auch mitten am Tag. Steht die Einstellung auf "Bis
  Browser schließt", bleibt der Tresor wie bisher offen, bis du den Tab
  schließt.
- **Die Liste beim Ausscheiden einer Person zeigt jetzt die letzten 90 Tage.**
  Vorher zählte sie jeden Zugriff seit dem ersten Arbeitstag mit und empfahl
  bei langjährigen Kolleginnen den Wechsel von praktisch allem. Eine Liste, auf
  der alles steht, hilft beim Aufräumen nicht.

## 0.5.3 (2026-08-05)

### Changed

- Die Einstellungen sehen jetzt aus wie überall sonst in der Plattform und
  werden auch so gespeichert. Statt eines Speichern-Knopfs, der je nach
  Bereich woanders stand, erscheint unten eine Leiste, sobald du etwas
  geändert hast. Dort steht immer, ob noch etwas offen ist. Auf dem Handy
  schwebt sie über der unteren Leiste, verdeckt also nichts.
- Wechselst du den Bereich, während noch etwas ungespeichert ist, wirst du
  gefragt, statt die Eingabe stillschweigend zu verlieren.
- Was du in einer Liste tust, gilt sofort: einen Ordner anlegen, eine
  Freigabe entziehen, einen Eintrag in den Papierkorb legen. Darauf wartet
  kein Speichern-Knopf mehr.

### Fixed

- Die Einstellungen standen in einer schmalen Spalte in der Bildschirmmitte,
  während alle anderen Werkzeuge die volle Breite nutzen. Jetzt sind sie
  überall gleich breit.

## 0.5.2 (2026-08-05)

### Changed

- **Einen Zugang anzulegen ist jetzt kurz.** Statt dreizehn Feldern in einer
  langen Spalte fragt der Tresor zuerst, worum es geht: Du suchst den Dienst
  (ImmoScout24, DATEV, Sparkasse und zwei Dutzend weitere) oder wählst die Art
  als Karte. Danach kommen nur noch die Angaben, die diese Art wirklich hat.
  Ein Schlüsselsafe fragt nach Code und Objekt, nicht nach E-Mail und
  Anmeldeadresse.
- Nach dem zweiten Schritt kannst du speichern. Ordner, Etiketten, Ablaufdatum,
  Anhänge und die Vertraulichkeitsstufe liegen dahinter und sind freiwillig.
- Fehlt noch etwas Notwendiges, steht daneben, was genau. Ein ausgegrauter
  Knopf ohne Begründung ist eine Sackgasse.
- Beim Bearbeiten gibt es keine Schritte. Wer etwas ändert, will an ein
  bestimmtes Feld, und findet weiterhin alles auf einer Fläche.

### Added

- **Erinnerung vor dem Ablauf.** Hat ein geteilter Zugang ein Ablaufdatum,
  legt der Tresor zwei Wochen vorher eine Aufgabe an. Sie steht dort, wo ihr
  ohnehin nachseht, und nicht in einer Liste, die man von sich aus öffnen
  müsste. Persönliche Zugänge bekommen keine Aufgabe: Ihr Name hat in einer
  Liste, die das ganze Büro sieht, nichts verloren.

## 0.5.1 (2026-08-04)

### Added

- **Entsperren per Fingerabdruck oder Gesichtserkennung.** Für die höchste
  Stufe brauchst du auf einem eingerichteten Gerät kein Master-Passwort mehr.
  Nach dem ersten Entsperren fragt der Tresor, ob er sich das Gerät merken
  soll; danach steht der Weg oben im Entsperr-Dialog.
- Das Master-Passwort wird dabei nicht gespeichert. Der Schlüssel wird in einen
  Wert eingewickelt, den nur dieses Gerät und nur nach deiner Bestätigung
  herausgibt. Ohne das Gerät ist der eingewickelte Wert wertlos, auch für uns.
- Du kannst mehrere Geräte einrichten (Telefon und Rechner) und einzelne wieder
  entfernen. Die Liste steht im Entsperr-Dialog, also dort, wo du sie suchst,
  wenn ein Gerät abhandengekommen ist.
- Ist im Arbeitsbereich der zweite Faktor Pflicht, verlangt dieser Weg keinen
  zusätzlichen Code: Ein geprüftes Gerät ist bereits Besitz plus Merkmal.
  Ältere Browser können das nicht und bleiben beim Master-Passwort.

## 0.5.0 (2026-08-02)

### Added

- **Teilen nach aussen wird sichtbar.** Alle Links, mit denen jemand ohne
  Konto einen einzelnen Zugang sehen kann, stehen jetzt an einer Stelle, mit
  Ablauf, Abruf-Zähler und Knopf zum sofortigen Zurückziehen. Vorher waren sie
  nur im Dialog eines einzelnen Eintrags zu sehen, also praktisch unsichtbar.
- **Befristete Freigaben**: eine Freigabe im Team kann mit Ablaufdatum vergeben
  werden und endet dann von selbst.
- **Notfallzugriff**: du benennst eine Vertrauensperson, die deine persönlichen
  Zugänge übernehmen kann, wenn du ausfällst. Sie muss anfordern und warten, du
  wirst benachrichtigt und kannst bis zum Ablauf der Frist widersprechen.
- **Vier-Augen-Prinzip für die höchste Stufe**: auf Wunsch braucht das Öffnen
  eines hyper-sensiblen Eintrags die Zustimmung einer zweiten Person. Die
  eigene Anfrage kann niemand selbst freigeben.

### Fixed

- Persönliche Zugänge waren im Ernstfall für niemanden erreichbar. Dafür gibt
  es jetzt den Notfallzugriff.

## 0.4.3 (2026-07-31)

### Added

- **Zugänge am Objekt**: Schlüsselsafe-Code, WLAN und Alarmanlage lassen sich
  an ein Objekt hängen und erscheinen dann auch auf der Objektseite, wo die
  Kollegin vor der Besichtigung ohnehin hinschaut.
- **Neue Arten** neben Passwort, API-Schlüssel, PIN und sicherer Notiz:
  Schlüsselsafe, WLAN, Alarmanlage, Bankzugang und Zertifikat.
- **Zweiter Faktor der Portale**: hinterlegst du den zweiten Faktor eines
  Dienstes, steht der Bestätigungscode direkt neben dem Passwort. Kein Griff
  mehr zum Telefon.
- **Ordner** zum Sortieren und **Anhänge** am Zugang: Zertifikat, Lizenzdatei
  oder das Foto vom Schlüsselkasten wählst du aus deinem Dateispeicher aus. Die
  Datei bleibt dort liegen; am Zugang steht nur ein Verweis darauf.

## 0.4.2 (2026-07-29)

### Added

- **Der Assistent kann im Tresor suchen und zusammenfassen.** Er beantwortet
  Fragen wie „welche Zugänge laufen bald ab" oder „was sollte ich diese Woche
  wechseln", ohne dass du die Liste durchgehst.
- Ein Geheimnis öffnet er nie, auf keine Bitte und in keiner Form. Die Auskunft
  aus dem Zugriffs-Protokoll ist an dein Recht gebunden, und eine Freigabe darf
  er erst vergeben, wenn du sie ausdrücklich freischaltest.

## 0.4.1 (2026-07-28)

### Added

- **Prüfung gegen bekannte Datenlecks**: auf Wunsch gleicht der Tresor die
  hinterlegten Passwörter mit veröffentlichten Sammlungen ab. Das Passwort
  verlässt die Plattform dabei nie.
- Ab Werk ausgeschaltet. Einzuschalten in den Tresor-Einstellungen unter
  Prüfungen, und zusätzlich braucht es die Zustimmung zur Verarbeitung
  ausserhalb der EU.
- Ist der Dienst nicht erreichbar, gilt ein Zugang als **nicht geprüft** statt
  als sauber. Der Unterschied ist der zwischen einer Zusicherung und einer
  Vermutung.

## 0.4.0 (2026-07-26)

### Added

- **Tresor-Check**: findet schwache und mehrfach verwendete Passwörter,
  abgelaufene und bald ablaufende Zugänge, Einträge von ausgeschiedenen
  Personen und solche, an die nur eine einzige Person herankommt. Jeder Befund
  führt direkt in die passend gefilterte Liste.
- Oben steht ein Urteil in drei Stufen statt einer Punktzahl. Eine Zahl von 0
  bis 100 täuscht eine Genauigkeit vor, die es nicht gibt, und verführt dazu,
  sie zu optimieren statt die Befunde zu beheben.
- **Beim Ausscheiden einer Person**: du wählst die Person und siehst, welche
  Zugänge sie je geöffnet hat und welche davon seitdem gewechselt wurden. Was
  offen bleibt, kennt sie weiterhin.

## 0.3.2 (2026-07-24)

### Changed

- Ein angezeigtes Passwort verdeckt sich nach einer einstellbaren Zeit wieder,
  und ein sichtbarer Ring zeigt, wie lange noch. Ab Werk nach 45 Sekunden.
- Ein kopiertes Passwort wird nach kurzer Zeit von selbst aus der
  Zwischenablage entfernt, sofern es dort noch unverändert liegt.
- Der Passwort-Generator lässt verwechselbare Zeichen weg, damit ein am Telefon
  durchgegebenes Passwort auch ankommt.

### Fixed

- Beim Anlegen eines Eintrags war nicht erkennbar, wie gut das Passwort ist.
  Jetzt steht die Bewertung samt Grund direkt am Feld, und verkleidete Wörter
  wie „Imm0sc0ut2024!" werden als das erkannt, was sie sind.

## 0.3.1 (2026-07-23)

### Added

- **Papierkorb** als eigener Bereich: gelöschte Zugänge holst du mit einem
  Klick zurück. Wie lange sie dort bleiben, stellst du in den
  Tresor-Einstellungen ein; danach werden sie automatisch entfernt.

### Fixed

- Nach dem Löschen war unklar, ob der Eintrag weg ist oder nur im Papierkorb
  liegt. Der Papierkorb ist jetzt sichtbar, und endgültig löschen geht nur von
  dort aus.
- Die zugesagte Aufbewahrungsfrist lief vorher nirgends ab. Gelöschte Zugänge
  blieben damit unbegrenzt liegen.

## 0.3.0 (2026-07-21)

### Added

- **Zugriffs-Protokoll** als eigener Bereich und direkt im Eintrag: wer wann
  welchen Zugang angesehen, kopiert, über einen Link geöffnet oder exportiert
  hat, mit angegebenem Grund.
- Angesehen und kopiert werden getrennt gezählt. Ein kopiertes Passwort liegt
  in der Zwischenablage, ein angesehenes nur auf dem Bildschirm, und genau
  danach wird gefragt, wenn etwas nachzuvollziehen ist.
- Wer einen Zugang sehen darf, sieht auch, wer ihn geöffnet hat. Ein geteiltes
  Passwort, bei dem nur die Chefin die Zugriffe sieht, macht die Kolleginnen zu
  Beobachteten.

### Fixed

- Der Seitenkopf versprach „jeder Zugriff protokolliert". Protokolliert wurde
  auch, einsehbar war es nirgends.

## 0.2.2 (2026-07-18)

### Added

- **Erst-Lauf-Lotse** mit einem Katalog der gängigen Dienste für Maklerbüros:
  beim ersten Öffnen legst du die wichtigsten Zugänge in wenigen Klicks an.
- **Import** erkennt jetzt selbst, aus welchem Passwortmanager eine Datei kommt
  (1Password, LastPass, Bitwarden, Chrome, KeePass, Dashlane) und meldet
  übersprungene Zeilen mit Zeilennummer.

## 0.2.1 (2026-07-16)

### Fixed

- Beim Wechsel zwischen den Bereichen lud die ganze Seite neu: Kurz war wieder
  die Kopfzeile der Plattform zu sehen, danach baute sich der Tresor von vorn
  auf. Ein Bereichswechsel ist jetzt ein Wechsel und kein Neustart.

### Changed

- Bereiche, die du schon einmal offen hattest, erscheinen sofort und
  aktualisieren sich im Hintergrund. Fährst du in der Seitenleiste über einen
  Bereich, lädt er im Voraus, sodass er beim Klick meistens schon steht.
- Der Tresor merkt sich je Bereich, wie weit du gescrollt hast, und bringt dich
  beim Zurückkommen an dieselbe Stelle.
- Suchen und Filtern kommt schneller an, weil dabei nur noch die Liste neu
  geholt wird und nicht die ganze Seite.
- Der Titel des Browser-Tabs nennt jetzt den geöffneten Bereich. Wer mehrere
  Tabs offen hat, findet den richtigen wieder.

## 0.2.0 (2026-07-14)

Der Tresor hat eine eigene Oberfläche bekommen. Er nutzt den ganzen Bildschirm,
hat eine Seitenleiste mit allen Bereichen und lässt sich am Telefon genauso
bedienen wie am Schreibtisch.

### Changed

- Eigene Vollbild-Fläche mit Seitenleiste statt einer eingerahmten Seite in der
  Mitte der Plattform.
- Jeder Zustand hat jetzt eine eigene Adresse. Damit ist eine gefilterte Liste
  teilbar, der Zurück-Knopf schliesst den geöffneten Eintrag, statt das
  Werkzeug zu verlassen, und ein Lesezeichen führt wieder dorthin, wo du warst.
- Der Eintrag geht als Schublade über der Liste auf. Beim Durchsehen springst
  du zwischen Einträgen, und die Liste bleibt dabei stehen.
- Ansichten als Liste, Tabelle oder Raster; Sortierung, Filter und Suche stehen
  oben in einer Leiste.
- Die Zeile zeigt ohne Klick, wer Zugriff hat. Wer erst einen Dialog öffnen
  muss, um das zu sehen, klickt nie, und dann ist die Berechtigungsverwaltung
  eine Behauptung.

### Fixed

- Die Aktionen an einer Zeile erschienen nur beim Überfahren mit der Maus. Auf
  einem Telefon gibt es das nicht, dort waren sie unerreichbar.

## 0.1.0 (2026-07-10)

Erstes Release des Zugangsdaten-Tresors (Phase-1-Reference-Tool) — **live
geschaltet** (`status: "available"`, Standard-Tool in allen Plänen). Erste
öffentliche Version: funktional vollständig, aber noch nicht vollständig
battle-tested — Feedback fließt in Patches.

### Plattform-Wiring

- Manifest: Business-Tool (`credentials`-Slug, Category `sicherheit`,
  `creditsPerUse: 0`, `aiRiskClass: "none"`, `standard`), `status: "available"`.
- Bestehende Tenants per Migration `0053_credentials_standard_backfill` mit dem
  Standard-Tool versorgt; neue Tenants erhalten es beim Onboarding
  (`STANDARD_TOOL_IDS`).
- Permission-Registry: `tools.use.credentials`, `tools.configure.credentials`,
  `credentials.read.all/read.assigned_only/create/update/delete/share/
  manage_groups/rotate/export/admin`.

### Datenmodell (modul-eigen, RLS via `current_tenant_id()`)

- `credentials`, `credential_groups`, `credential_group_members`,
  `credential_grants` (Migration `0049_credentials`).
- `vault_policy`, `vault_user_master` (user-scoped RLS), `credential_templates`,
  `credential_shares` + `credentials.template_id` (Migration
  `0050_credentials_vault_features`).
- `credentials.admin_visible` — Per-Member-Escrow (Migration
  `0051_credentials_admin_visible`).

### Kern-Funktionen

- Einträge: Passwort / API-Key / PIN / sichere Notiz, E-Mail und/oder Username,
  Kundennummer, „Zum Login öffnen"-Link, Notizen, Tags.
- Verschlüsselung at-rest über `@/lib/secret-box` (AES-256-GCM) für
  Standard/Sensibel; jeder Reveal ist audit-on-read (Wer/Wann/Warum), Sensibel
  verlangt einen Grund.
- Granulare Freigaben pro Eintrag: einzelne Mitglieder, ganze Rollen,
  Permission-Gruppen (read/manage). Persönliche vs. geteilte Einträge.
- Gruppen-Verwaltung, Suche/Filter (nie im Geheimnis selbst), Papierkorb.

### Erweiterte Funktionen

- **Hyper-Sensitive Zero-Knowledge**: client-seitige Verschlüsselung
  (Argon2id-Master-Passwort → AES-256-GCM, `lib/zk.ts`); der Server speichert
  nur Chiffretext, Salt, Argon2-Parameter und einen Verifier — nie Passwort
  oder Key.
- **Vault-2FA (TOTP)**: per-User zweiter Faktor (RFC 6238), Enroll/Verify/
  Disable, Unlock-Challenge, tenant-weite Erzwingung per Policy.
- **Per-Member-Templates**: Owner definiert einen Dienst, jedes Mitglied
  befüllt seinen eigenen Zugang (optional mit Admin-Escrow).
- **CSV-Import**: Client-Parse, Spalten-Mapping, Batch-Commit.
- **Externes Magic-Link-Sharing**: signierter Token, öffentliche Ablauf-/
  Widerrufs-geschützte Route, View-Zähler (nur Standard/Sensibel).
- **Tresor-Policy** unter `/settings/tools/credentials`: Sitzungsdauer,
  Inaktivitäts-Sperre, Master-Passwort-Regeln, 2FA-Pflicht, Papierkorb-
  Aufbewahrung, Export-Grundpflicht.
