Repository navigation
Fastra 1.122.1
·
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 Helferfastra-diffstartet 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.pyprüft die versprochene Aktivierung (--focus-diff)
auch im Standardlauf, nicht nur mit Aufnahmen.
Intern
DiffWireRequest.wireKeysersetzt die per Hand gespiegelte Feldliste in der
App;ExternalDiffServicebekommt Endpunkt und Öffnen-Schritt injiziert.DocumentLintMode.forFileExtensionfragt den Format-Resolver statt eine
zweite Endungstabelle zu pflegen.FileDiff.blocks(for:)behandelt den
unerreichbaren Wurf wiecomparemitpreconditionFailurestatt 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
EditorTabbündelt die Felder eines Datei-Vergleichs (Auftrag, Ergebnis,
Generation) inFileDiffTabStateund die eines strukturierten Git-Diffs
(Auftrag, Dokument) inGitDiffTabState. 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 FoundationsCollectionDifference
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
CollectionDifferencemit 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ürCollectionDifferenceauf 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 mitFASTRA_DIFF_MEASURE=1.
[v1.119.0] — 2026-09-05
Neu
- Andere Programme können Fastra über
Contents/Helpers/fastra-diffals
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 --jsonbeschreibt Protokollversion und Fähigkeiten ohne
App-Start. Argumente, Dateifehler, unbekannte Optionen, Startfehler und
Übergabefehler besitzen getrennte Exit-Codes. Der öffentliche Vertrag steht
indocs/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 indocs/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
searchoptionsprüft Maus und Return bei Mindestbreite sowie die Hinweise
für abgeschlossene Suchen, veraltete Ergebnisse, leere Eingaben und fehlende
Suchordner.