# 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. ```bash npm run oracle # = tools/swift-oracle/run.sh (braucht Docker) npm test # vergleicht mit den geschriebenen *.swift.json ``` * Szenarien: `packages/core/test/scenarios/.scenario.json` * Ergebnis aus Swift: `.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.