Files
MindSift/CHANGELOG.md
T
sandrodachandClaude Opus 5.5 4c26eb2960
MindSift CI & Docker Release / Build, Test in Container & Push (push) Successful in 1m52s
feat(workspace): link previews above bullets with a web address (M5)
- GET /link-preview?url= fetches the page on the server (https only,
  SSRF-guarded like webhooks), reads Open Graph/Twitter tags, title,
  description and icon from the head, loads picture and icon (no SVG) and
  keeps them in link_previews (migration 6) for 7 days; readers' browsers
  never contact the page. Off in the demo; 300 fetches per address in
  15 minutes.
- Compact card above the bullet (icon, site, title, one line, small
  picture); the duplicate link badge is left out.
- ✕ turns the address into [title](url), so hiding syncs with the note;
  "Link-Vorschauen anzeigen" under appearance switches all off per device.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 00:06:05 +01:00

23 KiB
Raw Blame History

Changelog

Alle nennenswerten Änderungen an MindSift stehen in dieser Datei.

Das Format folgt Keep a Changelog, die Versionsnummern folgen ab v0.6.0 Semantic Versioning. Solange die Hauptversion 0 ist, können sich API und Datenformate mit jeder Minor-Version ändern; solche Änderungen stehen unter „Changed“ bzw. „Removed“ und sind mit Achtung markiert.

Unreleased

Added

  • Eigene Spracherkennung (optional): Mit STT_URL schickt MindSift Aufnahmen an einen selbst betriebenen Whisper-Server (OpenAI-kompatibel, z. B. speaches) statt an Google oder Microsoft. Einstellung nur per Umgebungsvariablen (STT_*) inklusive Grenzwerten; docker-compose.yml enthält den Dienst whisper als auskommentierten Block zum Einschalten, das Modell lädt MindSift beim ersten Start selbst. Administration → Server & Isolation zeigt den aktiven Modus und bietet eine Testaufnahme. In der Demo bleibt es bei der Browser-Erkennung.
  • API: POST /voice/transcribe, GET /admin/voice; /auth/status meldet voice.mode.
  • Bilder in Notizen: /image (auch /bild) in einem leeren Punkt öffnet direkt im Punkt eine Auswahl – Datei, Kamera (Handy), Hineinziehen, Einfügen mit Strg+V oder Bild-Link (der Server übernimmt eine Kopie). Fotos werden vor dem Hochladen auf höchstens 2048 px verkleinert und als WebP gespeichert, Standortdaten entfallen dabei. Klick vergrößert, darunter eine optionale Beschriftung. Esc oder ✕ macht den Punkt wieder zum leeren Punkt.
  • Sprachnotizen in Notizen: /audio in einem leeren Punkt zeigt eine Aufnahme-Blase – grüner Knopf startet, er wird rot und links laufen Live-Wellen mit der Zeit, ein Tipp speichert die Aufnahme als Audio-Player im Punkt. Alternativ eine Audiodatei hochladen. Mit eigener Spracherkennung macht „Transkribieren“ aus der Aufnahme die (durchsuchbare) Beschriftung.
  • Diktat in Notizen: /diktat in einem leeren Punkt hört sofort zu; der Punkt wird zu einer Fläche mit Live-Wellen und „Stopp“, ein Tipp setzt den erkannten Text in den Punkt. Nutzt die eingestellte Spracherkennung (eigener Server oder Browser) und wird ohne Spracherkennung nicht angeboten.
  • Backup und Export mit Medien: Das Backup-ZIP (auch die automatischen Server-Backups pro Konto) enthält die Bilder und Sprachnotizen der eigenen Notizen, das Markdown-Archiv legt sie unter attachments/ ab und bettet sie Obsidian-kompatibel ein. Beim Zurückspielen kommen sie wieder als Bild- und Audioblöcke. Der Obsidian-Import übernimmt jetzt auch eingebettete Bilder und Audiodateien (![[bild.png]], ![](bild.png)).
  • Link-Vorschau in Notizen: Über einem Punkt mit einer Web-Adresse (https) erscheint eine kompakte Karte mit Icon, Seitenname, Titel, einer Zeile Beschreibung und kleinem Bild. Der MindSift-Server ruft die Seite ab (wie bei Bildern nur öffentliche https-Adressen) und speichert die Vorschau 7 Tage; Browser der Leser kontaktieren die Seite nicht. ✕ blendet die Vorschau für diesen Link aus (er wird zu [Titel](Adresse)), Darstellung → „Link-Vorschauen anzeigen“ schaltet alle ab. In der Demo aus. API: GET /link-preview?url=.
  • Medienablage für Notizen (Grundlage für Bilder und Audio): Hochladen, Kopieren externer Bilder, Abruf nur mit Leserecht; Grenzen per MEDIA_*; nicht mehr verwendete Dateien werden automatisch entfernt. API: POST /documents/{id}/media, POST /documents/{id}/media/fetch, GET /media/{id}.
  • Code-Blöcke in Notizen: Sprachauswahl (rund 50 Sprachen, bei Bedarf nachgeladen), Farben beim Tippen im Stil von VS Code Dark+/Light+ für alle Themes, „Kopieren“, Tab/Shift+Tab rückt ein und aus. /code yaml oder ```yaml legt die Sprache direkt fest.

Changed

  • Notizen auf dem Handy: fast kein Seitenrand mehr, Einrückung 14 statt 22 px pro Ebene, Zoom- und Löschknopf belegen nur noch in der aktiven Zeile Platz. Sehr tief verschachtelte Punkte behalten eine lesbare Breite, die Notiz lässt sich dann seitlich verschieben statt den Text zu quetschen.
  • E-Mails zeigen einen Absendernamen: SMTP_FROM_NAME bzw. das neue Feld „Absender-Name“ in Administration → E-Mail (Standard „MindSift“), wenn die Absenderadresse keinen eigenen Namen enthält.
  • Slash-Befehle einheitlich englisch: /image statt /bild (/bild findet ihn weiterhin), kürzere Beschreibungen, breiteres Menü ohne Umbrüche.
  • docker-compose.yml enthält nur noch die Zuordnungen; alle Erklärungen zu den Variablen stehen in .env.example. Neu durchgereicht werden TZ, TRUSTED_PROXIES, LOGIN_PROTECTION, DEMO_RESET_MINUTES und LEGAL_*_CONTENT, die vorher in .env gesetzt wirkungslos blieben.
  • Workspace-Seitenleiste wie ein Datei-Explorer: angeheftete Notizen oben, darunter Ordner und Notizen ohne Zwischenüberschriften.
  • Spracheingabe in Quick Dump, im mobilen Erfassen-Sheet und beim Halten des +-Knopfs folgt der Server-Einstellung: mit eigenem Whisper-Server funktioniert sie in allen Browsern (auch Firefox), mit Live-Wellen während der Aufnahme und „Wird erkannt…“ danach. Ohne Unterstützung im Browser oder mit STT_DISABLED=true ist das Mikrofon ausgeblendet statt einer Fehlermeldung.

0.6.1 - 2026-10-29

Fixed

  • Notizen: Wer im Rhythmus tippte (kurze Pausen zwischen den Wörtern), bekam Konfliktkopien gegen sich selbst, auch in nicht geteilten Notizen. Mehrere ungesendete Änderungen an einem Punkt zählten lokal als mehrere Versionen, beim Server aber als eine.

0.6.0 - 2026-10-29

Added

  • Profil → „Aktive Sitzungen“: Liste der angemeldeten Geräte mit letzter Nutzung und „Abmelden“ je Gerät.
  • API: GET /auth/sessions, DELETE /auth/sessions/{id}.
  • Triage: Gibt es genau eine beschreibbare Liste, setzt „Auf ‹Listenname›“ den Gedanken direkt darauf, ohne Auswahl. Nur lesbar geteilte Listen werden beim Erfassen und in der Triage nicht mehr angeboten.

Changed

  • Achtung: Nach dem Update sind alle Benutzer einmal abgemeldet (neue Sitzungsverwaltung, die alte Sperrliste revoked_tokens entfällt).
  • Achtung: ?token= in der URL von /webhooks/ingest nimmt nur noch API-Keys (mindsift_sec_…) an.
  • Achtung: GET /admin/settings liefert smtpPass nicht mehr; neu ist smtpPassSet.
  • Achtung: PATCH /auth/settings verlangt für password und email das Feld currentPassword, sonst 403.
  • Versionsnummern folgen jetzt Semantic Versioning mit dreiteiligen Tags (v0.6.0); die Kopfzeile zeigt die volle Version (v0.6.0-dev für Entwicklungsstände). Vorabversionen wie v1.0.0-rc.1 verschieben das Image :stable nicht.
  • Das Mengenfeld in Listen öffnet auf dem Handy die Zahlentastatur.

Fixed

  • Große Downloads (Backups, Exporte) brachen nach 30 Sekunden ab, große Importe nach 15 Sekunden Upload (FLAW-38).
  • Der Offline-Start der App funktioniert zuverlässig: Ein altes Script in der Startseite hat bei jedem Aufruf alle Caches des Service Workers gelöscht.

Security

  • Links in Notizen, Aufgaben-Notizen und Impressum öffnen nur noch http, https und mailto; javascript: und ähnliche Links erscheinen als Text. Vorher konnte ein Bearbeiter einer geteilten Aufgabenliste über einen präparierten Link Code im Browser anderer ausführen (FLAW-28).
  • Sicherheits-Header für alle Antworten: Content-Security-Policy (Scripts nur von MindSift selbst, keine Einbettung in fremde Seiten), X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy (FLAW-29).
  • Passwort und Login-E-Mail lassen sich nur noch mit dem aktuellen Passwort ändern; die bisherige Adresse bekommt eine Hinweismail, wenn SMTP eingerichtet ist (FLAW-30).
  • Anmeldungen sind serverseitige Sitzungen: Jedes Gerät lässt sich einzeln abmelden, unbenutzte Sitzungen enden nach 30 Tagen, aktive werden täglich erneuert. Ein neues Passwort meldet alle anderen Geräte ab (FLAW-31).
  • IDs neuer Datensätze haben 96 statt 40 Zufallsbits, Einladungscodes eigene 100 Bit (INV-ABCDE-FGHIJ-KLMNO-PQRST); vorhandene IDs und Codes bleiben gültig (FLAW-32).
  • Registrierung und „Passwort vergessen“ sind pro Adresse begrenzt (20 bzw. 10 Anfragen in 15 Minuten), Einladungscodes lassen sich so nicht durchprobieren (FLAW-39).
  • Ein Einladungscode lässt sich auch bei gleichzeitigen Registrierungen nur einmal einlösen (FLAW-40).
  • Öffentliche Demo: verschickt nichts mehr (Alarme, Testalarme, SMTP-Test, Hinweismails), Server-Einstellungen sind schreibgeschützt, Passwort, E-Mail, Sitzungen und Konten der gemeinsamen Demo-Konten lassen sich nicht ändern; die Sitzungsliste zeigt nur das eigene Gerät (FLAW-33).
  • Das SMTP-Passwort wird nie mehr an den Browser geschickt; leer lassen behält das gespeicherte (FLAW-34).
  • ?token= beim Webhook-Ingest nimmt nur noch API-Keys an, keine Sitzungs-Tokens (FLAW-35).
  • Anfragekörper sind auf 2 MB begrenzt, Notiz-Sync auf 8 MB, Importe auf 101 MB (FLAW-36).
  • Konto löschen entfernt auch die Server-Backups des Kontos (FLAW-37).

0.5.2 - 2026-10-29

Fixed

  • Einkaufsliste auf dem Smartphone (iOS): Der +-Knopf und der Menüeintrag setzen den Fokus für neue Einträge direkt in der Tipp-Geste statt verzögert nach 60 ms, sodass sich die Bildschirmtastatur auf iOS zuverlässig öffnet; Eingabefelder nutzen mobil 16 px Schriftgröße gegen automatisches Heranzoomen.

0.5.1 - 2026-10-29

Fixed

  • Mobiler +-Knopf in Triage und Aufgaben: Ein kurzes Antippen öffnet das Erfassen-Sheet wieder über das click-Event statt bei pointerup, damit der direkt folgende Browser-Klick nicht auf dem Hintergrund-Overlay landet und das Sheet sofort wieder schließt (nach langem Halten für die Sprachaufnahme wird der nachfolgende Klick ignoriert).

0.5 - 2026-10-29

Added

  • Automatische tägliche Server- und Benutzer-Backups ($DATA_DIR/backups): konsistenter SQLite-Gesamtabzug (VACUUM INTO, .db.gz) sowie ein MindSift-Backup-ZIP pro aktivem Konto; einstellbare Uhrzeit und Aufbewahrungsdauer (Standard 03:00 Uhr, 3 Tage) unter Administration → Datensicherung inkl. „Jetzt sichern“.
  • Kontoeinstellungen → Server-Backups: Eigene Sicherungen herunterladen oder gezielt nach Bereichen (notes, tasks, lists, inbox, themes) wiederherstellen (ersetzen oder hinzufügen); auch der manuelle MindSift-Import unterstützt die Bereichsauswahl und nimmt eigene Themes mit.
  • Mobil: Gedrückthalten des +-Knopfs startet eine Sprachaufnahme und legt das Transkript beim Loslassen direkt im Quick Dump ab (nach oben ziehen bricht ab); kurzes Tippen bzw. Tastatur/Screenreader öffnen weiterhin das Erfassen-Sheet.
  • API-Key-Scopes (webhook:triage, webhook:task, webhook:list): Auswahl beim Anlegen, Anzeige als Badges und Webhook-Simulator für alle drei Ziele in den Kontoeinstellungen (FLAW-07).
  • Demo-Modus: Automatischer Reset alle 20 Minuten (DEMO_RESET_MINUTES, 0 = aus) mit Live-Countdown (✨ Demo · Reset in MM:SS) in der Kopfzeile; Sitzungen bleiben über feste Demo-Konto-IDs erhalten. Tief verschachtelte Beispielnotiz „Hausrenovierung 2027“ (7 Ebenen) zum Ausprobieren des Zoom-Fokus.
  • Zähler für offene Listeneinträge am Reiter „Listen“; die Suche in der Notiz-Seitenleiste öffnet die globale Volltextsuche (⌘K).

Changed

  • Achtung: WebSocket (/ws) und SSE (/events) akzeptieren kein ?token= mehr in der URL, sondern kurzlebige Einmal-Tickets (POST /auth/stream-ticket, 60 s gültig) oder den Authorization-Header (FLAW-22).
  • Achtung: Neue Passwörter müssen mindestens 8 Zeichen lang sein (Setup, Registrierung, Profil, Admin, Passwort-Reset) (FLAW-09).
  • Nummerierte Datenbank-Migrationen über schema_migrations, die genau einmal laufen und bei Fehlern den Start abbrechen statt Fehler zu verschlucken (FLAW-13).
  • Echtes ESLint (eslint.config.js) im Frontend- und Image-Build sowie erweiterte Frontend-Tests (FLAW-19); vereinheitlichte Zugriffsabfrage für Aufgabenlisten (FLAW-20).

Fixed

  • SQLite-Transaktionen starten mit BEGIN IMMEDIATE (_txlock=immediate), sodass parallele Schreiber auf das Lock warten statt mit SQLITE_BUSY zu scheitern (FLAW-23).
  • Mehrstufige Datenbankänderungen (Ordner/Aufgabenlisten/Konten löschen, Freigaben, Passwort-Reset) laufen atomar in Transaktionen und melden Schreibfehler sauber zurück (FLAW-14).
  • Fälligkeits-Alarme brechen nach 3 fehlgeschlagenen Zustellversuchen mit einer Warnung ab, statt jede Minute endlos weiterzusenden (FLAW-12).
  • Bessere Lesbarkeit (dunkler Text) auf dem Türkis-Akzent des Themes Polarized sowie korrekte rounded-full-Darstellung runder Icon-Buttons in eckigen Themes.

Security

  • Einmal-Stream-Tickets statt langlebiger Sitzungs-Tokens in WebSocket-/SSE-URLs; BASE_URL schränkt CORS- und WebSocket-Origins ein; Abmelden, Passwortwechsel und Kontosperre trennen offene Live-Streams sofort (FLAW-22).
  • Berechtigungsprüfung für alle Listeneintrags-Endpunkte und beim Umwandeln von Gedanken in Listeneinträge (Eigentümer oder Bearbeiter erforderlich, verhindert IDOR und Schreibzugriffe durch Leser) (FLAW-27).
  • API-Keys sind strikt auf ihre Scopes (webhook:triage, webhook:task, webhook:list) beschränkt und können keine Live-Streams öffnen (FLAW-07).
  • Schutz gegen Brute-Force beim Login (Sperre nach Fehlversuchen pro Konto+IP, Konto und IP mit 429 und Retry-After) sowie explizite Konfiguration vertrauenswürdiger Reverse-Proxys über TRUSTED_PROXIES (FLAW-09).
  • DeleteTaskList prüft die Eigentümerschaft vor dem Entkoppeln von Aufgaben; Leser können Verknüpfungen zwischen Notiz-Blöcken und Aufgaben nicht mehr aufheben (FLAW-14).

0.4.1 - 2026-10-29

Added

  • Fälligkeitsdatum mit optionaler Uhrzeit (YYYY-MM-DDTHH:MM); Alarme berücksichtigen Uhrzeit (bzw. 09:00 Uhr bei ganztägigen Aufgaben), Vorlaufzeit (notify_before_minutes) und Zeitzone (TZ, Standard Europe/Berlin) (FLAW-12).
  • Papierkorb für Notizen (GET/POST/DELETE /documents/trash…): Gelöschte Notizen und Ordner landen im Papierkorb, verschwinden aus Baum, Suche und Export und lassen sich vom Eigentümer wiederherstellen oder endgültig löschen.
  • Backlinks am Ende einer Notiz (GET /documents/{id}/backlinks): Zeigt alle zugänglichen Notizen und Punkte, die per [[Titel]] auf die aktuelle Notiz verweisen, mit direktem Sprung zum Punkt.
  • „Passwort vergessen?“ auf dem Anmeldebildschirm (wenn SMTP und BASE_URL eingerichtet sind): Einmal-Link per E-Mail (SHA-256-Hash gespeichert, 1 Stunde gültig), setzt das Passwort zurück und beendet alle bestehenden Sitzungen.
  • Offline-fähige PWA: Service Worker hält die App-Shell vor, gelesene Daten werden pro Benutzer in IndexedDB zwischengespeichert und offline erfasste Gedanken sowie abgehakte Aufgaben/Listeneinträge über eine Outbox bei Rückkehr der Verbindung synchronisiert.
  • Zwei neue dunkle Themes: Polarized (Obsidian & Türkis/Smaragd) und Suri (Mitternachts-Pflaume & Orchidee).

Changed

  • Aufteilung von internal/storage/sqlite.go und internal/api/server.go in domänenspezifische Dateien ohne Verhaltensänderung (FLAW-20).

Security

  • Ohne gesetztes JWT_SECRET (oder bei bekannten Platzhaltern) erzeugt der Server einmalig ein zufälliges 32-Byte-Geheimnis in data/jwt.secret (0600), statt ein öffentlich bekanntes Standard-Secret zu verwenden (FLAW-04).
  • SSRF-Schutz für Discord- und benutzerdefinierte Alarm-Webhooks: Nur https, Host-Prüfung für Discord, Blockieren von Loopback/Link-Local/Cloud-Metadata bei der DNS-Auflösung; private Netze und http nur über expliziten Admin-Schalter (allowPrivateWebhooks) (FLAW-05).
  • Einheitliche Authentifizierungsprüfung für Middleware und Webhook-Ingest inkl. Sperrliste, token_version und aktivem Konto; API-Keys dürfen keine Lese- oder Verwaltungs-Endpunkte mehr aufrufen (FLAW-07, FLAW-08).

0.4 - 2026-10-29

Added

  • Daten-Import mit Vorschau (?preview=1) und Größen-/Pfad-Limits: Wiederherstellen oder Hinzufügen von MindSift-Backups (JSON, ZIP oder Markdown-Archiv via POST /import/mindsift) sowie Import ganzer Obsidian-Vaults als ZIP (POST /import/obsidian).
  • Vollständiger Datenexport auch als komprimiertes ZIP-Archiv (GET /export?format=zip).
  • Wiederkehrende Aufgaben (daily, weekly, monthly, yearly): Beim Abschließen einer Aufgabe wird automatisch die nächste Instanz zum Folgetermin angelegt.
  • Gefahrenzone in den Kontoeinstellungen: Eigene Daten (DELETE /user/data) oder das gesamte eigene Konto (DELETE /user/account) nach Passwortbestätigung löschen (der letzte Server-Admin ist vor Selbstlöschung geschützt).
  • PWA-Startbildschirm (Splash Screen) und automatische Anpassung der Statusleisten-Farbe (theme-color) an das aktive Theme.

Fixed

  • SMTP-Versand fällt auf AUTH LOGIN zurück, wenn der Server AUTH PLAIN ablehnt (z. B. Postfix/Dovecot oder Exchange); das Port-Feld in den Admin-Einstellungen lässt sich leeren und ohne Typfehler speichern.
  • Mobil: Formular-Sheets (FormSheet) und Emoji-Picker positionieren sich über der Bildschirmtastatur (visualViewport).
  • Ältere Datenbanken werden beim Start nicht mehr durch den früheren Schema-Reset geleert.

0.3 - 2026-10-29

Added

  • Organisationen und Sichtbarkeits-Modi (private, organizations, open), verwaltet durch Server-Admins; bestimmt zentral, wer wen in der Benutzersuche sieht und mit wem Inhalte geteilt werden können (FLAW-10, FLAW-24).
  • Aufgaben-Zuweisung (assignees) in geteilten Aufgabenlisten, einheitliche Benutzersuche (UserAutocomplete), Avatar-Stapel (AvatarStack) und runde Zähler-Badges (CountBadge).
  • Eigene CSS-Themes pro Benutzer (GET/POST /themes, DELETE /themes/{id}): .css-Datei hochladen oder einfügen, Vorlage herunterladen und live umschalten.
  • Globale Volltextsuche über Gedanken, Aufgaben, Notizen und Listeneinträge auf Basis von SQLite FTS5 mit BM25-Ranking, Berechtigungsprüfung und ⌘K/Ctrl+K-Befehlspalette (FLAW-18).
  • Obsidian-kompatibler Markdown-Export (GET /export/markdown) als gestreamtes ZIP-Archiv über alle Notizen, Ordner, Aufgabenlisten und Listen.
  • Vollständige Emoji-Auswahl für Notiz-Icons (Lazy-Loading, auf dem Smartphone als Bottom-Sheet).
  • Optionale Links/Texte für Impressum und Datenschutz (LEGAL_IMPRINT_*, LEGAL_PRIVACY_*, GET /legal/{imprint|privacy}) sowie „Über MindSift“-Dialog.
  • Veröffentlichung unter The Unlicense (gemeinfrei, FLAW-21).

Changed

  • Achtung: Nur noch Eigentümer können Ressourcen (Aufgabenlisten, Listen, Notizen, Ordner) teilen; das alte Feld task_lists.team_id und die ungeschützten /organizations-Routen entfallen. Entfällt die Sichtbarkeit (z. B. durch Organisationswechsel), werden Freigaben, Gruppenmitgliedschaften und Zuweisungen automatisch bereinigt (FLAW-06, FLAW-10, FLAW-24).
  • Demo-Modus setzt die Datenbank bei jedem Serverstart sauber zurück und befüllt sie neu.

Fixed

  • SMTP-Client mit explizitem Protokollablauf (EHLO mit Absender-Domain, STARTTLS, AUTH, RFC-2047-Header, SMTP_SKIP_VERIFY für selbstsignierte Zertifikate).
  • Tailwind-Deckkraft-Modifikatoren (bg-accent/15 usw.) funktionieren über color-mix() mit allen Theme-Variablen.
  • Mobil- und Desktop-Verbesserungen: Stilles Nachladen von Aufgabenlisten ohne Verschlucken von Klicks, #-Anker in URLs werden nicht mehr als Hashtags erkannt, mehrzeilige Aufgaben-Notizen im Dialog voll scrollbar.

0.2.1 - 2026-10-28

Added

  • Notizen: Nach dem Umwandeln eines /todo-Punkts in eine erweiterte Aufgabe öffnet sich diese direkt; ein Klick auf das Badge „Erweitert“ öffnet den Aufgabendialog.

Changed

  • Container-Build taggt Release-Images (v*) zusätzlich als :stable und :latest, den dev-Branch als :dev.

0.2 - 2026-10-28

Added

  • Echtzeit-Zusammenarbeit in Notizen (internal/collab, frontend/src/lib/docSync): Server-autoritativer Operations-Log (doc_ops) mit Baumstruktur, Fractional-Indexing-Sortierschlüsseln, 20-Sekunden-Blocksperren (Leases), Offline-Warteschlange in IndexedDB und automatischem Transport-Fallback (WebSocket → SSE → Long-Polling → Intervall-Polling).
  • Notizen und Ordner lassen sich jetzt auch mit Schreibrecht („Bearbeiten“) teilen (FLAW-17).
  • Sichtbare Blocksperren mit Namen des Bearbeitenden, Anwesenheitsanzeige im Notizkopf, Konfliktkopien („Übernehmen“ / „Verwerfen“) statt Datenverlust bei gleichzeitigen Änderungen sowie benutzerbezogenes Undo/Redo (Ctrl/Cmd+Z, Ctrl+Y) über die gesamte Notiz (FLAW-25, FLAW-26).
  • Automatische Hintergrund-Verdichtung des Operations-Logs und Bereinigung gelöschter Blöcke (Tombstones) nach 30 Tagen.
  • Outliner: Backspace am Zeilenanfang verschmilzt den Punkt mit dem vorherigen; #Hashtags werden direkt im Fließtext als anklickbare Chips gerendert; Klick in einen Punkt setzt den Cursor exakt an die geklickte Textstelle.
  • Vitest + Testing Library im Frontend-Build sowie Playwright-End-to-End-Tests (e2e/) für Live-Kollaboration, Sperren und Proxy-Fallbacks.

Removed

  • Achtung: Altes ganzheitliches Überschreiben von Notizen (PATCH /documents/{id}/blocks, DOC_BLOCKS_PATCHED) entfernt; alle Blockänderungen laufen über /docs/{id}/sync.

Security

  • Echtzeit-Ereignisse (BroadcastToAll entfernt) und WebSocket-/SSE-Räume sind strikt auf berechtigte, angemeldete Benutzer beschränkt; ReorderTasks prüft Schreibrechte (IDOR behoben); SSE-Streams werden nicht mehr nach 30 s durch WriteTimeout getrennt; Block-Upserts prüfen die Dokumentzugehörigkeit (FLAW-01, FLAW-02, FLAW-03, FLAW-11, FLAW-15).

0.1 - 2026-10-27

Added

  • Erste veröffentlichte Version von MindSift als einzelner selbst gehosteter Container (Go-Backend, eingebettetes React/TypeScript/Tailwind-Frontend, SQLite im WAL-Modus).
  • Schnellerfassung (Quick Dump per C//, Spracheingabe, mehrzeilig mit Shift+Enter, direkte Zielwahl) und Triage-Deck (Tastaturkürzel & Smartphone-Wischgesten).
  • Aufgabenverwaltung mit mehreren Listen, frei konfigurierbarem Kanban-Board, Prioritäten, Fälligkeitsdaten, Unteraufgaben mit Fortschrittsbalken, Markdown-Notizen, Filtern/Gruppierungen sowie Fälligkeits-Alarmen per E-Mail (SMTP), Discord und eigenem Webhook.
  • Hierarchischer Outliner-Workspace mit Ordnerbaum, Drag & Drop ganzer Äste, Zoom-Fokus mit Breadcrumbs, Slash-Befehlen (/todo, /link, /h1–/h3, /code, /callout, /divider), Wiki-Links [[Notiz]], #Hashtag-Übersicht, globalem To-Do-Rollup und .md-Export.
  • Geteilte Listen (Einkaufs-, Pack- und Checklisten) mit #Kategorie-Gruppierung, Mengenangaben und Echtzeit-Abhaken.
  • Benutzer-, Gruppen- und Admin-Verwaltung (Ersteinrichtungs-Assistent, Einladungscodes, Profilbilder, persönliche API-Keys & Webhook-Ingest /api/v1/webhooks/ingest, JSON-Datenexport) sowie CSS-Theme-Engine mit 4 Themes (Dark, Light, High Contrast, Soft) und PWA-Unterstützung.