Files
mdg-filius/tools/swift-oracle
julian.kiedaischandClaude Opus 5.5 0c843dc3de fix(fls): archive path folding measured against Swift
41 path pairs replayed in the Swift core decide which spellings name
the same file. Two corrections: full Unicode case folding (ß, ligatures,
final sigma, micro, long s) instead of toLowerCase, and width folding of
the whole Halfwidth and Fullwidth Forms block. Swift treats composed and
decomposed spellings as one dictionary key; here the writer refuses both.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-29 20:09:19 +00:00
..

Swift-Orakel

Der Swift-Kern von filius-ipad (Laufzeit, Modell, .fls, Berichte — alles ohne Oberfläche) lässt sich unter Linux bauen. Dieses Werkzeug nutzt das als Maßstab für die Übertragung: Ein Szenario wird einmal als JSON beschrieben, in Swift abgespielt, und die TypeScript-Übertragung muss dieselbe Ausgabe liefern — jedes einzelne Spurereignis, jede Antwort, den Endzustand.

npm run oracle          # = tools/swift-oracle/run.sh (braucht Docker)
npm test                # vergleicht mit den geschriebenen *.swift.json
  • Szenarien: packages/core/test/scenarios/<name>.scenario.json
  • Ergebnis aus Swift: <name>.swift.json daneben — wird eingecheckt, damit die Tests ohne Docker und ohne Swift laufen.
  • Vergleich: packages/core/test/oracle.test.ts. Er meldet das erste abweichende Spurereignis mit Nummer.

Wie es gebaut wird

fetch-upstream.sh holt filius-ipad am festen Stand 3b5ded0 und kopiert die oberflächenfreien Quellen nach Sources/FiliusCore/ (nicht eingecheckt). Apple-Module, die es unter Linux nicht gibt, sind auf das Nötige verkleinert:

Modul Ersatz
CoreGraphics Foundation (hat CGPoint/CGFloat unter Linux)
CryptoKit swift-crypto (gleiche Schnittstelle)
Compression eine Funktion, compression_decode_buffer mit rohem DEFLATE über zlib
Network entfällt: TopologyRemoteLinkLANController.swift wird nicht mitgebaut

patches/linux-type-checker.patch teilt zwei lange Ausdrücke auf, an denen der Linux-Compiler die Typprüfung abbricht. Das Verhalten ändert sich dadurch nicht.

Neue Schrittarten

Eine Schrittart gibt es zweimal — in Sources/Oracle/main.swift und in packages/core/test/oracle.test.ts. Beide müssen dasselbe JSON schreiben.