Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.jsondaneben — 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.
Korpus
--corpus importiert jede .fls unter corpus/ und schreibt
corpus/corpus.swift.json: je Datei die Zählwerte und Warnungen des Imports
und unter state Swifts ganzes importiertes Modell ohne die zufälligen UUIDs
(Geräte, Ports und Kabel als Indizes, IP-Konfiguration, Doku-Elemente mit
ihren abgeleiteten IDs). Daran misst packages/fls/test/importProject.test.ts
den Umbau — auf den 13 Dateien, die Swift vollständig liest.
Dateisystem und Strings
--vfs spielt die Fälle aus packages/core/test/vfs.cases.json im
virtuellen Dateisystem ab (jedes Ergebnis, jeder Fehler samt Werten, der
Endzustand mit SHA-256 der Binärdaten). --strings misst, was Swift aus
Strings macht, wo JavaScript abweicht: Trimmen, Kleinschreibung, Gleichheit,
Sortierung, Base64 — und die ganzen Mengen whitespacesAndNewlines und
controlCharacters über alle Unicode-Skalare. Grenze: Das ist Foundation
unter Linux; ihre Steuerzeichen-Tabelle hat in Ebene 14 einen Fehler, den
der Port nicht übernimmt.
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.