Files
mdg-filius/tools/swift-oracle
julian.kiedaischandClaude Opus 5.5 c3fe56ab16 feat(fls): import installed programs and their settings
importProject carries a host's installed programs into the model with
the settings Swift keeps (web server port, Gnutella peer limit, DNS
recursion and forwarder, personal firewall) and two it does not (the echo
server's port, the generic client's target), plus Java's "switched on".
The Swift oracle writes programs and settings; they match on the 13 files
Swift reads completely.

Intended differences, named in the test:
- every FILIUS program is kept; Swift drops command prompt, text
  editor, file explorer, image viewer, echo server and generic client;
- a web server's files stay in /webserver, its document root; Swift
  moves them to /www. No program state goes into a host's files.
- multicast_server.fls: maxTeilnehmerZahl refers to a shared Integer
  (a button's icon text gap, 4); Swift falls back to 3.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 06:12:15 +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.

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.