Skip to content

Fastra 1.122.1

Choose a tag to compare

@DanielMuellerIR DanielMuellerIR released this 06 Sep 22:02
· 118 commits to main since this release

[v1.122.1] — 2026-09-06

Abarbeitung des Code-Reviews zu 1.118.6–1.122.0 (16 Funde).

Behoben

  • „Home“/Willkommen bricht laufende Datei-Vergleiche jetzt wirklich ab, wie
    Tab- und Fensterschluss; vorher rechnete der Vergleich bis zum Ende weiter
    und verwarf erst dann das Ergebnis.
  • Externer Dateivergleich: Läuft eine zweite Fastra-Instanz mit derselben
    Bundle-ID, behält die Instanz ohne Port kein totes Server-Objekt mehr,
    sondern protokolliert den Konflikt und übernimmt den Endpunkt beim nächsten
    Aktivieren. Der Helfer fastra-diff startet die App auch dann, wenn der
    Endpunkt erst während der Wartezeit verschwindet, statt zehn Sekunden ins
    Leere zu senden.
  • Ein Datei-Vergleich, dessen Berechnung mit einem anderen Fehler als dem
    Abbruch endet, zeigt diesen Fehler im Tab und lässt den Spinner nicht
    stehen (intern und im externen Fenster).
  • Eine durch Projektwechsel beendete Git-Vorschau trägt den Titel „Vorschau
    beendet“ statt „Diff konnte nicht gelesen werden“.
  • Syntaxfarben im Druck: Das Übertragen der Farbbereiche auf die Druckzeilen
    ist bei einem langen Bereich mit vielen inneren Bereichen (Markdown-
    Codeblock, Doc-Kommentar) nicht mehr quadratisch; die Frist hält nach einer
    rechtzeitigen Antwort die Analyse (Textquelle, Syntaxbaum) nicht mehr zehn
    Sekunden im Speicher.
  • Suchmaske: Der Hinweis „Auch 1–2 Zeichen sind suchbar“ leitet die Zahl aus
    derselben Konstante ab wie der Nachbarhinweis.
  • Suchmessung ohne FASTRA_SEARCH_PERF_INPUT/FASTRA_SEARCH_PERF_OUTPUT
    nennt die fehlenden Variablen statt „Datei existiert nicht“.
  • Hilfe (de/en): Grenze von zwei Millionen Zeichen und der Zehn-Sekunden-
    Rückfall auf einfarbigen Druck sind dokumentiert.

Qualitätssicherung

  • Neue Unit-Tests: Home bricht alle Vergleiche ab; ein fremder Fehler wird
    angezeigt; verschachtelte Farbbereiche im Druck (innen gewinnt, linear);
    Diff-Endpunkt headless (Feldmenge aus dem Protokoll, Idempotenz, Frist
    verstreicht bei belegtem Main-Thread, vergebener Portname); Fehlertext der
    Suchmessung.
  • external-diff-test.py prüft die versprochene Aktivierung (--focus-diff)
    auch im Standardlauf, nicht nur mit Aufnahmen.

Intern

  • DiffWireRequest.wireKeys ersetzt die per Hand gespiegelte Feldliste in der
    App; ExternalDiffService bekommt Endpunkt und Öffnen-Schritt injiziert.
  • DocumentLintMode.forFileExtension fragt den Format-Resolver statt eine
    zweite Endungstabelle zu pflegen. FileDiff.blocks(for:) behandelt den
    unerreichbaren Wurf wie compare mit preconditionFailure statt stiller
    leerer Liste. Kommentare zur Druck-Analyse sagen jetzt ehrlich, dass
    Textaufbau und 4D-Tokenizer synchron auf Main laufen.

[v1.122.0] — 2026-09-06

Geändert

  • Ohne geöffneten Ordner oder Repo zeigt ein Fenster keine linke
    Seitenleiste mehr — weder auf dem Willkommensbildschirm, wo die Marke sonst
    zweimal nebeneinander stand, noch bei weiteren Tabs ohne Projekt. Der
    Umschalter im Fenster-Chrome erscheint erst mit Projekt; „Seitenleiste
    anzeigen“ gilt dann wie bisher.
  • Ein-/Ausblenden der Seitenleiste baut den Dateibaum nicht mehr neu auf:
    Die Leiste bleibt eingehängt und wird nur auf Breite 0 gezogen.

Qualitätssicherung

  • Neuer Selbsttest sidebartoggle: Willkommen und mehrere Tabs ohne Projekt
    ohne Seitenleiste, mit Projekt sichtbar; 300 Umschaltzyklen mit Prüfung,
    dass der Projektkopf derselbe AppKit-Knoten bleibt, Messung von Dauer je
    Umschaltung und Speicherwachstum nach einer Aufwärmphase.

Intern

  • EditorTab bündelt die Felder eines Datei-Vergleichs (Auftrag, Ergebnis,
    Generation) in FileDiffTabState und die eines strukturierten Git-Diffs
    (Auftrag, Dokument) in GitDiffTabState. Ein Ergebnis ohne Auftrag ist
    damit beim Kompilieren ausgeschlossen; Ansichten, Wiederherstellung und
    Vorschauplatz-Wiederverwendung lesen weiter dieselben Nur-Lese-Sichten.
    Kein Verhaltens- und kein Versionssprung.

[v1.121.0] — 2026-09-06

Neu

  • Der Quelltext-Ausdruck trägt Syntaxfarben. Fastra färbt dafür das ganze
    Dokument mit derselben Analyse wie der Editor ein (tree-sitter bzw. der
    4D-Tokenizer), nicht nur den sichtbaren Ausschnitt, und verwendet immer
    den hellen Farbsatz der Sprache mit schwarzem Grundtext — unabhängig vom
    Erscheinungsbild des Bildschirms und ohne Auswahl- oder Suchmarkierung.
    Text, Zeilennummern, Kopf-/Fußzeile und Seitenumbrüche bleiben gegenüber
    dem einfarbigen Ausdruck unverändert.
  • „Syntaxfarben drucken“ lässt sich in den Einstellungen und direkt im
    Druckdialog umschalten; die Checkbox erscheint nur, wenn der Text Farben
    hat. Reiner Text, Hex-Abzüge und Dokumente über 2.000.000 Zeichen drucken
    weiter einfarbig; liefert die Analyse binnen 10 s keine Antwort, startet der
    Ausdruck ohne Farben statt zu warten.

Qualitätssicherung

  • Unit-Tests prüfen Farbsatz, Capture-Zuordnung, die Übertragung der
    Farbbereiche hinter die Zeilennummernspalte (CRLF, Blockkommentar über
    Zeilen, fett/kursiv), die Einfärbung bis zur letzten Zeile eines
    600-Zeilen-Dokuments, 4D-Tokenizer und Dialog-Option. Messung: ein
    1-MB-Swift-Dokument (18.000 Zeilen) ist im Debug-Build in 2,2–2,4 s
    analysiert.
  • Der print-Selbsttest druckt einen 400-zeiligen Swift-Quelltext und prüft
    auf jeder PDF-Seite echte Tokenfarben; derselbe Ausdruck mit
    ausgeschalteter Einstellung ist auf jeder Seite farblos, bei gleichem Text
    und gleicher Seitenzahl.

[v1.120.0] — 2026-09-05

Geändert

  • Ein Datei-, Makro- oder externer Vergleich endet jetzt wirklich, sobald
    sein Ergebnis niemanden mehr erreicht: Tab- oder Fensterschluss, eine neue
    Anfrage für denselben Vergleich und der Abbau eines Fensters brechen die
    laufende Berechnung ab. Vorher wurde nur das Ergebnis verworfen, der
    Vergleich rechnete zu Ende und belegte neben neuen Läufen Rechenzeit und
    Speicher. Das Abbruchsignal reicht durch Dateilesen, Zeilenzerlegung,
    Diff-Kern, Zeilen-Ausrichtung und Blockbildung; ein abgebrochener
    Vergleich liefert nie ein Teilergebnis.
  • Der Diff-Kern ist jetzt eine eigene, abbrechbare Umsetzung desselben
    Linear-Space-Myers-Algorithmus, den Foundations CollectionDifference
    verwendet. Zeilen-Ausrichtung und Differenzen-Liste bleiben deshalb für
    identische Eingaben unverändert; die Grenze von 30.000 Zeilen
    Unterschiedsbereich bleibt bestehen.

Qualitätssicherung

  • Der eigene Kern wird gegen CollectionDifference mit 420 Zufallsfolgen
    und Randfällen auf identische Änderungen geprüft; eine Stichprobe aller
    Prüfpunkte belegt den Abbruch in jeder Phase ohne Teilergebnis.
  • Workspace-, Makro- und Fenstertests belegen Abbruch bei Tab-Schluss,
    Fensterschluss, neuer Anfrage und Workspace-Abbau; die Verwaltung wächst
    über wiederholte Abbrüche nicht.
  • Messung am Budget-Maximum (2 × 15.000 vollständig verschiedene Zeilen,
    Release-Build): vollständiger Vergleich 0,90 s, davon der Kern allein
    0,86 s gegenüber 2,50 s für CollectionDifference auf denselben Folgen;
    Rückkehr 0,8 ms nach dem Abbruch bei 10 %, 50 % und 90 % der Laufzeit;
    Spitzenspeicher des Prozesses stieg dabei um 6 MiB. Im Debug-Build
    braucht derselbe Vergleich 27 s (Kern 26,9 s, Foundation 2,5 s) — die
    Standardbibliothek ist auch dort optimiert übersetzt. Die Messung läuft
    nur mit FASTRA_DIFF_MEASURE=1.

[v1.119.0] — 2026-09-05

Neu

  • Andere Programme können Fastra über Contents/Helpers/fastra-diff als
    Dateivergleich starten. Pro Aufruf entsteht ein eigenes Vergleichsfenster
    mit frei wählbaren Seitennamen und sichtbarem Schreibschutz.
  • Der Helfer bestätigt die lokale Übergabe an eine laufende oder über
    LaunchServices gestartete Instanz. Request-IDs verhindern doppelte Fenster
    bei wiederholter Zustellung; eine feste Frist begrenzt das Warten.
  • --capabilities --json beschreibt Protokollversion und Fähigkeiten ohne
    App-Start. Argumente, Dateifehler, unbekannte Optionen, Startfehler und
    Übergabefehler besitzen getrennte Exit-Codes. Der öffentliche Vertrag steht
    in docs/EXTERNAL-DIFF.md.

Qualitätssicherung

  • Parser- und Transporttests sowie echte Helfer- und Fensterprüfungen decken
    Kaltstart, laufende Instanzen, parallele und wiederholte Aufträge ab.
  • Der reguläre Build verpackt und signiert den ausführbaren Helfer;
    die Portabilitätsprüfung führt seine Fähigkeitserkennung aus.

[v1.118.9] — 2026-09-05

Verbessert

  • Die Textsuche bestimmt Zeilennummern fortlaufend bis zum jeweiligen
    angezeigten Treffer. Ohne Treffer und bei einer kleinen Auswahl am
    Dokumentanfang entfällt der bisherige vollständige Zeilenindex.
  • Mehrere Treffer derselben Zeile verwenden die zuletzt bestimmten
    Zeilengrenzen für ihren Vorschaukontext. Eine Messreihe mit einer
    16,5-MiB-Einzelzeile sinkt dadurch von 39,12 auf 0,884 Sekunden Median.
    Eingaben, Messumfang und Grenzen stehen in docs/SEARCH-PERFORMANCE.md.

Qualitätssicherung

  • Regressionen vergleichen UTF-16-Positionen, CR/LF/CRLF und Unicode-Umbrüche,
    Nullbreitentreffer, Auswahlgrenzen und Vorschaukontext mit der bisherigen
    Zeilenberechnung. Trefferlimits und Apply-Verhalten bleiben unverändert.
  • Ein optionaler fensterloser Messmodus trennt bei Ordnersuchen Enumeration,
    Dateisuche und Zeit bis zur ersten Datei. Er läuft nur auf ausdrücklich
    übergebenen lokalen Eingaben.

[v1.118.8] — 2026-09-05

Behoben

  • Beim Schließen oder Wechseln eines Projekts beendet Fastra noch laufende
    Git-Vorschauen sofort mit einer Erklärung. Insbesondere die erste noch
    ungeladene Diff-Vorschau bleibt nicht mehr mit einer Ladeanzeige stehen,
    wenn ihr abgebrochener Prozess keine verwertbare Antwort mehr liefert.
  • Blob- und Diff-Vorschauen verwenden einen gemeinsamen fensterlokalen
    Auftragshelfer. Jeder Lauf erhält eine eindeutige Identität, gebunden an
    Tab, Dokument, Anfrage und Projektstand. Ein alter Lauf kann dadurch auch
    nach A–B–A-Wechseln im selben Vorschauplatz kein Ergebnis mehr übernehmen.

Qualitätssicherung

  • Kontrollierte Git-Prozessantworten prüfen Schließen, Projektwechsel,
    wiederverwendete Vorschauplätze, wiederholte Anfragen, Fehler und Abbruch
    für Blob- und Diff-Vorschauen sowie die Unabhängigkeit zweier Fenster.

[v1.118.7] — 2026-09-05

Behoben

  • „Dokument prüfen“ folgt wie Formatieren der effektiven Formatwahl:
    Manuelles JSON aktiviert die Prüfung auch in Textdateien; „Reiner Text“
    deaktiviert sie auf JSON-Dateien. Auch endungslos erkanntes XML und SVG
    werden als XML geprüft. Menüangebot und ausgeführter Prüfmodus verwenden
    dieselbe typisierte Auflösung; die Fähigkeitenabfrage führt keinen Parser aus.
  • Bei JSON als effektivem Format behalten .4dform-Dateien ihre zusätzliche
    Schema-Prüfung. Gewähltes 4D aktiviert Strukturhinweise unabhängig von der
    Endung; tool4d bleibt gespeicherten .4dm-Methoden vorbehalten. Ein späteres
    tool4d-Ergebnis wird nach einem Wechsel zu einem anderen Format verworfen.

Qualitätssicherung

  • Die Formatmatrix prüft manuelle Wahl, Inhaltserkennung, SVG/XML-Sonderendungen,
    Formular-Schema, 4D-Strukturhinweise und schreibgeschützte Sonderansichten.
    Der bestehende tool4d-Test erfasst zusätzlich Format- und Schreibschutzwechsel.

[v1.118.6] — 2026-09-05

Behoben

  • Die Ordner- und Projektsuche erklärt direkt beim hervorgehobenen
    Suchen-Knopf, dass auch ein oder zwei Zeichen per Klick oder Return gesucht
    werden können. Nach einem abgeschlossenen Lauf ohne Treffer meldet die
    Suchmaske den Abschluss; sie fordert nicht erneut zur Kurzsuche auf.
    Veraltete Ergebnisse erhalten einen eigenen Hinweis.
  • Ein noch wartender Live-Auslöser verwirft keine unmittelbar zuvor per Klick
    oder Return gestartete Ordnersuche mehr. Neue Sucheingaben entwerten die
    vorherigen Ergebnisse weiterhin sofort.

Qualitätssicherung

  • Ein Regressionstest prüft manuelle Kurzsuchen mit einem und zwei Zeichen
    sowie ohne Treffer über die Live-Verzögerung hinweg. Der Fenster-Selbsttest
    searchoptions prüft Maus und Return bei Mindestbreite sowie die Hinweise
    für abgeschlossene Suchen, veraltete Ergebnisse, leere Eingaben und fehlende
    Suchordner.