Skip to content

Stille Post 0.9.16

Choose a tag to compare

@DanielMuellerIR DanielMuellerIR released this 30 Aug 11:48
· 64 commits to main since this release

[0.9.16] — unveröffentlicht

Behoben

  • 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.