Skip to content

Tag Explosion 0.23.15

Choose a tag to compare

@DanielMuellerIR DanielMuellerIR released this 30 Aug 11:51
· 188 commits to main since this release

[0.23.15] — 2026-08-30

Geprüft

  • Die CodeQA-Folgekampagne hat die acht durch den Review-Fix veränderten
    Bereiche erneut geprüft: atomare Dateisicherheit, Archivimport,
    TagLib-Roundtripgrenze, Installer-Distribution, E-Book-Schreiben,
    Bildmetadaten sowie CLI- und Prozessausgabe. Alle 14 Bereiche und vier
    Querschnittsthemen stehen damit wieder auf aktuellem Stand.
  • Das Schichtenmodell mit gemeinsamem portablem Core, CLI-Adaptern,
    SwiftUI-Beobachtungsmodell und Fensterkoordinator bleibt passend, aber
    gespannt. Die große AppModel-Zustandsschicht bleibt die begründete spätere
    Teilungsgrenze; ein Paradigmenwechsel lohnt den Migrations- und Testaufwand
    nicht.
  • Der Abschlusslauf bestand mit 176 Root-Tests in 14 Suites, 65 App-Tests in
    8 Suites und der vollständigen Installer-Rollback-Suite. Ein sichtbarer
    GUI-Lauf war für die nichtvisuellen Änderungen nicht erforderlich.

[0.23.14] — 2026-08-30

Behoben

  • Der Archiv-Dry-run schreibt Bildwerte nun auf eine Geschwisterkopie und liest
    sie exakt zurück. Normalisiert exiftool einen Wert, lehnen Dry-run und Import
    ihn vor der Papierkorb-Sicherung ab; der Import setzt andernfalls genau die
    geprüfte Kopie atomar ein.
  • Klartext und Fehlermeldungen behalten wörtliche Surrogate-Schreibweisen auch
    dann, wenn sie mit [ oder { beginnen. JSON- und Klartext-Aufrufer wählen
    ihren Dekodierweg jetzt ausdrücklich.
  • Der Installer-Regressionstest trägt Hintergrundprozesse nach jedem wait
    unabhängig vom Exit-Code aus und vergleicht vor dem Aufräumen zusätzlich
    Eltern-PID und Startzeit. Eine wiederverwendete Prozessnummer kann dadurch
    keinen fremden Prozess treffen.
  • Der echte Bild-CLI-Test hängt nur noch von der getrackten Bild-Fixture und
    exiftool ab; fehlendes ffmpeg überspringt ihn nicht mehr.

Geprüft

  • 66 gezielte Archiv-, Bild-, Dekodier- und CLI-Tests sowie die vollständige
    Installer-Rollback-Suite bestanden.

[0.23.13] — 2026-08-29

Geprüft

  • Die CodeQA-Kampagne ist mit allen 14 Bereichen auf aktuellem Stand und
    allen vier Querschnittsthemen abgeschlossen. In diesem Lauf wurden sechs
    Bereiche verbessert und fünf erneut ohne weiteren Befund geprüft; die drei
    unveränderten Bereiche blieben durch ihren aktuellen Abdeckungsstand belegt.
  • Der Abschlusslauf bestand mit 175 Root-Tests in 14 Suites, 65 App-Tests in
    8 Suites, einem vollständigen Release-Build und allen sechs CI-Shelltests
    für Tempordner, Bundle, Installer, Mindestversion, TagLib und Icons. Die
    sichtbaren GUI-Selbsttests wurden nicht gestartet.
  • Die Schichten aus portablem Core, CLI-Adaptern, SwiftUI-App und
    Fensterkoordinator bleiben passend. AppModel.swift ist mit 1.357 Zeilen
    weiterhin die belegte spätere Teilungsgrenze für Laden, Speichern,
    Konflikte, Archivimport und Fensterlebenszyklus.

[0.23.12] — 2026-08-29

Behoben

  • Der ältere CLI-Mutationsschutztest behandelt Bewertung −1 nicht mehr als
    ungültig. −1 ist der unterstützte XMP-Wert „abgelehnt“; der Test prüft jetzt
    nur noch wirklich ungültige Eingaben gegen den aktuellen Wertebereich und
    passt damit wieder zum separaten −1-Read-back-Test.

Geprüft

  • Die gezielten Export-/Exif-Tests bestanden mit 4 Tests in 2 Suites. Die
    vollständige Root-Suite bestand mit 175 Tests in 14 Suites.

[0.23.11] — 2026-08-29

Behoben

  • Die GUI-Selbsttests finden Speichern und Neues Fenster jetzt in der
    deutschen wie in der englischen Menüleiste. Der Fenstertest belegt außerdem
    den vorgesehenen Shortcut ⌘N; bisher prüfte er nur den deutschen Titel
    und konnte einen fehlenden oder falschen Shortcut nicht erkennen.

Geprüft

  • CodeQA: Prozessbesitz, Start-/Abbruchfristen, Screenshot-Nachweis,
    Accessibility-Grenzen, Icon-Generatoren und die unveränderten Asset- und
    Fixture-Werkzeuge wurden erneut geprüft. Alle zusammengesetzten
    Swift-GUI-Programme, Shellskripte und Generatoren bestanden die Syntax-
    beziehungsweise Typprüfung; der parallele Icon-Regressionstest bestand.
    Ein sichtbarer GUI-Lauf wurde nicht gestartet.

[0.23.10] — 2026-08-29

Behoben

  • Der Bewertungs-Picker übersetzt seine dynamisch erzeugten Einträge nun
    auch in der englischen Oberfläche. „keine“ und „— verschieden —“ blieben
    bisher deutsch; für „abgelehnt“ und sichtbare Fremdwerte fehlten zudem die
    englischen Katalogeinträge.

Geprüft

  • CodeQA: Einzel- und Batch-Bewertung samt fehlendem Tag, −1, 0…5,
    tolerierten Bestandswerten und Bild-Speichergrenzen wurden erneut geprüft.
    34 Editor-, Cover-, Speicher- und Lesepfadtests sowie die Kompilierung des
    deutschen und englischen String-Katalogs bestanden.

[0.23.9] — 2026-08-29

Geprüft

  • CodeQA: Fenster-Registry, Dateiöffnung ohne sichtbares Fenster,
    begrenztes Nachfassen, fensterweise Beenden-Rückfragen, Delegate-Brücke,
    Dokument-URL, Fensterkopf, Seitenleistenregel und Homebrew-Angebot wurden
    erneut geprüft. 28 gezielte App-Tests und der App-Release-Build bestanden.

[0.23.8] — 2026-08-29

Geprüft

  • CodeQA: E-Rechnungs-Erkennung, BT-24-Profilzuordnung, CII-/UBL-Feldmapping,
    PDF-Anhangs- und Dekompressionsgrenzen, XMP-Auswahl, reine CLI-/App-Anzeige
    sowie die neue adaptive BT-/BG-Spalte wurden erneut geprüft. 31 Core-/CLI-
    und 3 App-Layouttests bestanden; der bestehende Parservertrag lädt keine
    externen Entitäten.

[0.23.7] — 2026-08-29

Behoben

  • Wörtlicher Text wie \udcfc bleibt in Klartextausgaben von MediaInfo,
    Calibre und externen Fehlermeldungen unverändert. Die Reparatur solcher
    Byte-Escapes gehört nur zu MediaInfo-JSON; bisher deutete der gemeinsame
    Decoder dieselbe Zeichenfolge in jedem Text fälschlich als „ü“.

Geprüft

  • CodeQA: Der Prozessrahmen wurde samt vollständigem parallelem Leeren von
    stdout/stderr, Timeout-Grenze, JSON-Struktur, UTF-8-Erhalt sowie
    feldbezogener MacRoman-/Windows-1252-Reparatur erneut geprüft. 20 gezielte
    Decoder-, Prozess- und reale MediaInfo-Tests bestanden.

[0.23.6] — 2026-08-29

Behoben

  • tagx exif set --rating=-1 setzt jetzt den gültigen XMP-Wert „abgelehnt“.
    Bisher wies die CLI ihn zurück, obwohl Core, Archiv und App −1 bereits als
    echten Wert behandeln; nur ein explizit leerer Optionswert löscht das Tag.
  • Der Bild-Restore prüft die exakte exiftool-Rückgabe jetzt auf der Temp-Datei
    vor dem atomaren Austausch. Normalisiert oder verwirft exiftool einen
    Archivwert, bleibt das Original bytegleich, statt trotz Fehlermeldung bereits
    durch die abweichende Fassung ersetzt zu sein.

Geprüft

  • CodeQA: Bildfelder, Wertebereichs- und Archivgrenzen, exiftool-Argumente,
    Pfadbehandlung und atomarer Austausch wurden erneut geprüft. 12 gezielte
    Core-/CLI-Tests und 35 Archivtests bestanden.

[0.23.5] — 2026-08-29

Behoben

  • tagx ebook set nennt bei einem abgelehnten Cover jetzt die Formate, die
    das konkrete Ziel tatsächlich schreiben kann. Für EPUB 2 versprach die
    Meldung bisher fälschlich WebP, obwohl dieses Format erst in der aktuellen
    EPUB-3-Spezifikation ohne Fallback zulässig ist.

Geprüft

  • CodeQA: Der transaktionale E-Book-Schreibweg wurde samt EPUB-OPF-Struktur,
    formatabhängigen Serien- und Covergrenzen, Calibre-/exiftool-Adaptern und
    exaktem Read-back erneut geprüft. 33 EbookTool-Tests bestanden.

[0.23.4] — 2026-08-29

Geprüft

  • CodeQA: Build, Signatur-/Notarisierungsgrenzen und der atomare Installer
    wurden seit dem letzten Abdeckungsstand erneut auf Bundle-Prüfung,
    Sperrübernahme, Rollback und sichere Temp-Ziele geprüft. Installer-,
    Property-List-, Mindestversions-, Tempordner- und Ladepfadtests bestanden.

[0.23.3] — 2026-08-29

Geprüft

  • CodeQA: Der TagLib-Shim, seine Swift-Fassade und der ausschließlich atomare
    Schreibzugang wurden nach dem geänderten MediaInfo-Testdelta erneut an ihren
    Speicher-, Cover- und Ladepfadgrenzen geprüft. 13 Roundtrip-/MediaInfo-Tests
    und der TagLib-Ladepfadtest bestanden.

[0.23.2] — 2026-08-29

Geprüft

  • CodeQA: Archivexport und -import wurden seit dem letzten Abdeckungsstand
    erneut gegen Schema-1/2-Kompatibilität, Zielidentität, externe Freigaben,
    zielbezogene Schreibbarkeit und Read-back geprüft. 38 Archiv- und
    Exportkollisionstests bestätigen den unveränderten Vertrag.

[0.23.1] — 2026-08-29

Geprüft

  • CodeQA: Die Save- und Konfliktkoordination in AppModel wurde seit dem
    letzten Abdeckungsstand samt Cover-No-op, konsistentem Datei-Schnappschuss,
    Dialogentscheidungen und aktuellen Fenstergrenzen erneut geprüft. Die 23
    gezielten AppModel-/Lesepfad-Tests bestätigen den unveränderten Vertrag.

[0.23.0] — 2026-08-22

Inkompatibel (Library-Produkte TagExplosionCore, EInvoiceCore)

Zwei Änderungen aus 0.22.2 waren quellinkompatibel und hätten dort keinen
Patch-Sprung verdient; sie werden hier als Minor-Sprung nachgetragen:

  • ImageCoreFields.rating ist seit 0.22.2 Int? statt Int: nil heißt
    „die Datei trägt kein Rating-Tag“, −1 ist der echte Wert „abgelehnt“.
    Aufrufer, die rating als Int lesen oder -1 als Leerwert benutzen,
    müssen auf das Optional umstellen. Die Abwesenheitssemantik bleibt, sie
    ist fachlich richtig (siehe 0.22.2).
  • EInvoiceReader.containsInvoice(url:) war in 0.22.2 entfernt worden und
    ist wieder da — als veralteter Wrapper (@available(*, deprecated)) mit
    dem bisherigen Verhalten. Neuer Code nutzt sniffXML(url:) für XML und
    read(url:) für PDF.

Behoben

  • Der Bewertungs-Picker kennt jetzt „abgelehnt“ (−1). Vorher passte ein
    abgelehntes Bild zu keinem Eintrag im Einzel- und im Batch-Editor, und die
    Auswahl blieb leer, obwohl die Datei einen Wert trug. Andere tolerierte
    Bestandswerte (etwa 7 aus einer fremden Datei) erscheinen als eigener,
    sichtbarer Eintrag statt still zu verschwinden.
  • Der Installer-Regressionstest vergisst jede Hintergrund-PID, sobald er sie
    eingesammelt hat, und beendet beim Abbruch nur noch Kinder, die wirklich
    noch laufen. Vorher konnte das Aufräumen eine inzwischen neu vergebene
    Prozessnummer — also einen fremden Prozess — treffen.