You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Das Verlaufsfenster liest und leert den Verlauf jetzt außerhalb des
Main-Threads. Ein paralleler CLI-Zugriff oder das Löschen vieler Aufnahmen
blockiert dadurch weder Fenster noch Menüleiste.
Ein fertig transkribiertes Diktat wird auch dann ausgeliefert, wenn nur das
abschließende Entfernen eines bereits überflüssigen WAV-Verweises im Verlauf
nicht gespeichert werden kann; der Fehler bleibt sichtbar.
[0.9.15] — unveröffentlicht
Behoben
Netzwerk-Brücke: Vollständig eingelesene Anfragen belegen das gemeinsame
Speicherbudget jetzt bis zum Ende ihrer Verarbeitung. Wartende Diktate können
dadurch nicht mehr neben weiteren Teilanfragen ein zweites Body-Budget belegen.
Modell-Installation: App und CLI folgen beim Schreiben einer Download-
Teildatei keinem Symlink mehr. Typ, Größe, Wiederaufnahme und Schreiben werden
über denselben geprüften Dateideskriptor ausgeführt.
stillepost-cli set-cleanup-key bricht jetzt vor dem Lesen ab, wenn ein
Terminal seine Eingabeanzeige nicht sicher abschalten kann. Der API-Schlüssel
kann in diesem Fehlerfall nicht mehr sichtbar im Scrollback landen.
Diktat und Verlauf speichern den WAV-Verweis jetzt vor jedem Löschversuch und
entfernen ihn erst nach bestätigtem Löschen. Ein zweiter Schreibfehler,
paralleles Leeren des Verlaufs oder das Beenden in einem Fehlerzustand kann
dadurch keine vorhandene Diagnoseaufnahme mehr unauffindbar machen.
Das Ende eines Diktats wartet nicht mehr auf Verlaufssperren und Dateioperationen
auf dem Main-Thread; Menüleiste, Overlay und Einstellungen bleiben dabei bedienbar.
Der Datenschutzbefehl „Alle löschen“ schreibt vor dem ersten Dateilöschen
textfreie Verweise auf alle eigenen Aufnahmen. Auch ein Prozessabbruch oder
zweiter Schreibfehler lässt damit keinen unbekannten WAV-Rest zurück.
Das Release-Skript gibt seine Laufsperre jetzt vor dem Entfernen der
Signal-Handler frei. Ein Signal im Abschlussfenster kann Folge-Releases nicht
mehr mit einer veralteten Sperre blockieren.
[0.9.14] — unveröffentlicht
Geändert
stillepost-cli prüft die vollständige Befehlsform jetzt vor dem Laden der
Konfiguration. Unbekannte oder zusätzliche Optionen werden mit Exit-Code 2
abgewiesen, bevor der Befehl Verlauf, Schlüsselbund, Netz oder Server berührt.
stillepost-cli doctor zählt bei ausgeschaltetem Whisper-Selbststart nur den
nicht erreichbaren Server als Problem. Fehlendes Binary und Modell werden in
dieser Konfiguration nicht benutzt und deshalb nicht als weitere Fehler
ausgegeben.
Behoben
Bereinigung: Cloud- und Ollama-Endpunkte akzeptieren nur noch vollständige
HTTP- oder HTTPS-Adressen ohne Zugangsdaten, Query oder Fragment. Ein
abschließender Schrägstrich erzeugt außerdem keinen doppelten Pfadtrenner mehr.
Diktat: Enthält eine Aufnahme nur Stille und lässt sich ihre WAV-Datei nicht
löschen, bleibt ihr Name jetzt in einem textfreien Fehler-Eintrag im Verlauf
erreichbar. Bisher lag der einzige Verweis im Arbeitsspeicher und ging beim
nächsten Diktat oder Neustart verloren.
Whisper: Verzeichnisse und Spezialdateien am Modellpfad gelten nicht mehr als
installiertes Modell. App und CLI bieten dadurch wieder die Installation an,
die den ungeeigneten Zieltyp mit einer konkreten Fehlermeldung abweist.
Whisper: Die lokale Serveradresse lehnt Port 0 sowie Werte über 65535 ab,
bevor sie an URLSession oder den Selbststart weitergereicht werden.
scripts/install-model.sh prüft Ziel und Teildatei vor dem Download und erneut
vor dem Verschieben. Das Skript folgt keinem Symlink auf ein Verzeichnis mehr
und kann über einen Teildatei-Symlink keine fremde Datei überschreiben.
stillepost-cli set-cleanup-key installiert seine Abbruchbehandlung jetzt vor
dem Abschalten der Terminal-Anzeige und nimmt sie zurück, falls das Terminal
die Umschaltung ablehnt. Ein Abbruchfenster mit dauerhaft stummer Eingabe ist
damit geschlossen.
[0.9.13] — unveröffentlicht
Geändert
stillepost-cli doctor prüft die Bereinigungs-Endpunkte jetzt über dieselbe
Stelle im Kern, die auch die Bereinigung selbst benutzt — inklusive des Baus
der Cloud-Adresse. Die Diagnose kann dadurch nicht mehr nach anderen Regeln
urteilen als der Betrieb.
stillepost-cli doctor prüft whisper-server jetzt in derselben Reihenfolge wie
der Betrieb: Erst zählt, ob der Server antwortet. Läuft er, sind fehlendes
Binary oder Modell kein Problem mehr, sondern ein Hinweis für den nächsten
Kaltstart; läuft er nicht und ist whisper.autostart aus, ist das jetzt ein
gemeldetes Problem statt einer Entwarnung.
Ein Ollama-Modell gilt nur noch dann als vorhanden, wenn der Name exakt
stimmt — plus dem einen Alias, den Ollama selbst definiert: Ein eingestellter
Name ohne Tag meint :latest. Vorher passte zu gemma4 jeder beliebige
installierte Tag, und die Diagnose meldete „bereit“ für ein Modell, das der
spätere Bereinigungs-Request gar nicht kennt.
Behoben
Sicherheit: Der über stillepost-cli set-cleanup-key eingetippte API-Schlüssel
wird im Terminal nicht mehr angezeigt. Die Aufforderung verspricht das seit
jeher, die Eingabe lief aber mit normaler Anzeige — der Schlüssel stand danach
im Scrollback. Die Anzeige wird auch nach Abbruch mit Ctrl-C wieder
eingeschaltet; eine Eingabe aus einer Pipe funktioniert unverändert.
Modell-Installation: Zeigt whisper.modelPath versehentlich auf ein
Verzeichnis, bricht die Installation jetzt ab, statt dessen Inhalt zu löschen
und das Verzeichnis durch die Modelldatei zu ersetzen. Geprüft wird vor dem
Download, und ein gescheitertes Aufräumen am Zielpfad wird gemeldet statt
verschluckt.
Release-Skript: Zwei gleichzeitige ./release.sh-Läufe im selben
Arbeitsverzeichnis schließen sich jetzt über eine Sperre aus. Beide benutzten
dieselben Pfade unter build/; ein zweiter Lauf konnte dem ersten das DMG
nach der Prüfung austauschen, sodass ein ungeprüftes Artefakt samt frisch
berechneter Prüfsumme veröffentlicht wurde.
Diktat: Ein Abbruch während der Verarbeitung löscht jetzt auch die fertige
Aufnahme. Bisher kannte sie nach dem Stoppen niemand mehr — der Verlauf
bekommt bei einem Abbruch keinen Eintrag —, und eine vollständige Aufnahme
blieb unauffindbar auf der Platte liegen.
Diktat: Lässt sich die Aufnahme nach einem erfolgreichen Diktat nicht löschen,
wird ihr Name jetzt im Verlaufseintrag nachgetragen. Ohne diesen Verweis fand
„Alle löschen“ sie später nicht mehr. Dasselbe gilt für „Erneut
transkribieren“, wenn dort das Löschen scheitert.
Diktat: Die Nachverarbeitung läuft jetzt vollständig auf dem Hauptthread. Sie
las und schrieb dieselben Felder (Zustand, Sitzungsnummer), die Start, Stopp
und Abbruch dort anfassen; ein alter Lauf konnte deshalb den Zustand eines
neuen überschreiben oder trotz Abbruch noch ausliefern. Die eigentliche
Bereinigung läuft weiterhin außerhalb des Hauptthreads.
Diktat: Ein verspätet fertig gewordenes Segment kann nicht mehr in der
Sammlung einer bereits neu begonnenen Aufnahme landen.
Verlauf: Lässt sich beim „Alle löschen“ eine Aufnahme nicht löschen (Rechte,
gesperrte Datei), bleibt jetzt ein Platzhalter mit ihrem Dateinamen stehen —
ohne den gelöschten Text. Bisher war der Verweis weg, und ein zweiter Klick
fand die Datei nicht mehr.
Netzwerk-Brücke: Alle Verbindungen zusammen dürfen nur noch so viele
Anfrage-Bytes puffern, wie die Warteschlange überhaupt annimmt. Acht offene
Verbindungen konnten vorher acht vollständige Bodys gleichzeitig im Speicher
halten, obwohl fünf davon anschließend nur ein 503 bekommen hätten. Ein
vollständig gelesener Inhalt wird außerdem nicht mehr doppelt gehalten.
Netzwerk-Brücke: Ein Kopf an der Größengrenze wird nicht mehr abgelehnt, nur
weil die vier Trennbytes zwischen Kopf und Inhalt in zwei Paketen ankamen.
Modell-Download: Eine fortgesetzte Übertragung wird nur noch angenommen, wenn
der Server genau den angeforderten Bereich derselben Datei liefert
(Content-Range mit passendem Startversatz und passender Gesamtgröße).
scripts/install-model.sh: Eine angefangene Datei, die größer ist als das
Modell heute, wird verworfen statt fortgesetzt. Sonst forderte curl einen
Versatz hinter dem Dateiende an und scheiterte bei jedem weiteren Versuch —
derselbe Dauerblocker, der in App und CLI schon behoben war.
Verlauf: „Alle löschen“ räumt jetzt jede zurückbehaltene Aufnahme weg, auch
wenn eine davon nicht zu löschen ist. Bisher brach der Vorgang beim ersten
Problem ab; der Verlauf war zu diesem Zeitpunkt schon leer, und alle weiteren
Aufnahmen blieben ohne zugehörigen Eintrag auf der Platte liegen. Ein
aufgetretener Fehler wird weiterhin gemeldet.
Diktat: Lässt sich die temporäre Aufnahme nach einem erfolgreichen Diktat
nicht löschen, wird der fertige Text jetzt trotzdem eingefügt und erst danach
der Fehler gemeldet. Bisher hielt das gescheiterte Aufräumen das gesamte
Diktat zurück, obwohl es längst bereinigt und im Verlauf gespeichert war.
Modell-Download: Eine Teildatei, die größer ist als die erwartete Datei, wird
nicht mehr als angefangener Download weiterverwendet, sondern neu geladen.
Wurde das Modell am Server durch eine kleinere Fassung ersetzt, blieb die
Installation sonst dauerhaft mit der Meldung über eine unvollständige Datei
stehen, bis jemand die Teildatei von Hand löschte.
Netzwerk-Brücke: Die Herkunftsprüfung entscheidet jetzt anhand der 16 Bytes
einer Adresse statt anhand ihrer Schreibweise. Eine IPv6-Adresse darf ihre
letzten vier Bytes mit Punkten schreiben („2a00:1234::192.168.1.1“ ist eine
gültige globale Adresse); bisher galt so eine Adresse aus dem Internet wegen
der Punkte als privates IPv4-Netz und kam an der ersten Hürde vorbei — das
Token schützte weiterhin. Umgekehrt zählt eine eingebettete private
IPv4-Adresse nun in beiden Schreibweisen als Heimnetz.
Bereinigung: Das erste Diktat nach einem Kaltstart verliert die Bereinigung
nicht mehr. Lädt der Ollama-Server das Modell gerade erst, schweigt er länger
als die 10 s Geduld des Streaming-Pfads (gemessen: 11,5 s für das 6-GB-Modell);
bisher lief auch der zweite Versuch als Stream in dasselbe Timeout, und das
Diktat fiel auf einen Ausweich-Endpunkt oder den Rohtext zurück. Jetzt klärt
eine schnelle Probe, ob der Server lebt: dann wartet der zweite Versuch geduldig
auf die vollständige Antwort. Ist der Server wirklich weg, zieht die Kette
sofort weiter, statt weitere 10 s zu verschenken.