# Port-QA Je Meilenstein: Tests, Bild, Leistung, bekannte Unterschiede, Commit. ## U1 · C#-Simulation | Punkt | Ergebnis | | --- | --- | | Tests | `content` 75/75, `core` 91/91, `m2` 73/73, `golden` 157/157, `determinism` 6/6 = **402/402**; dreimal in getrennten Prozessen; Protokoll `logs/u1/core-tests.json` | | Golden-Parität | 19 Szenarien, 120 Snapshots, 51.221 Werte; größte Abweichung 0 in allen Kategorien (Toleranzen siehe U1-RULES.md) | | Bild | `screenshots/u1/replay-start_three_lanes-t10.png`, `replay-boss_cycle-marching.png`, `replay-grotto_contested-t15.png`: Godot-Positionen (Punkte) und C#-Positionen (Ringe) decken sich (31/31, 35/35, 15/15) | | Leistung (Mac M5) | Simulationsschritt bei 120 Einheiten: Godot 1,587 ms, C#/.NET 8 0,259 ms; Bot-Partien pro Runde: 648 ms zu 36 ms (`logs/u1/sim-bench-*.json`) | | Bekannte Unterschiede | technische Repräsentation (Klassen statt Dictionaries, stabile Sortierung, 32-Bit-int, kein ungenutzter Zufallsgenerator); Referenzfehler R1 bewusst übernommen | | Offen | erledigt in U1.5: Lauf im Unity-Editor, Mono-Leistung. Weiter offen: Kerntests auf Windows 11 und Fedora 44 | | Commit | Zweig `luneraria/u1` (`4d6ed17`) | Hinweis: Die Projektdateien des .NET-Harness (`tools/dotnet/*/*.csproj`) fehlten im U1-Commit, weil `.gitignore` alle `*.csproj` ausschloss. Sie sind seit U1.5 eingecheckt. ## U1.5 · Unity-Integrationsprüfung | Punkt | Ergebnis | | --- | --- | | Umgebung | Unity 6000.3.20f1 (6.3 LTS), Personal-Lizenz, URP 17.3.0, Editor-Mono 6.13.0, Standalone-Backend Mono, API-Level .NET Standard 2.1 | | Tests | Unity Test Runner (EditMode): 402/402 in Release und Debug, dazu 2 Integrationstests; .NET 8 weiter 402/402. Protokolle `logs/u1_5/editmode-results-*.xml`, `core-tests-*.json` | | Golden in Unity | 51.221 Werte, Abweichung 0 in allen Kategorien und Bereichen (Gold, HP, Positionen, Türme, Ancients, Wellen, Helden, Boss, Gewinner, …) | | Float-Befund | Mono rechnet float32-Zwischenwerte doppelt genau. Das beeinflusste eine Zielentscheidung (`mirror_match` Runde 7: +4,8 s Kampfdauer). Behoben durch explizite Rundung in `Vec2`; .NET-Ergebnisse byteidentisch zu vorher | | Bild | keines; U1.5 hat keine sichtbare Szene. Nachweis sind der Schritt-Trace (`tools/port/trace_diff.py`) und die Float-Probe (`logs/u1_5/float-probe-*.json`) | | Leistung (Editor-Benchmark) | Schritt mit 120 Einheiten: Editor Release 0,51 ms, Debug 1,00 ms; .NET 8 0,24–0,26 ms; Godot 1,60 ms (`logs/u1_5/sim-bench-*.json`) | | Bekannte Unterschiede | R1 bewusst übernommen; F1 (Mono-Float) behoben ([KNOWN-BEHAVIOR-DIFFERENCES.md](KNOWN-BEHAVIOR-DIFFERENCES.md)) | | Offen | IL2CPP- und Player-Läufe unter Windows 11 und Fedora 44 (Build-Module fehlen, Installation nach Freigabe) | | Commit | Zweig `luneraria/u1.5` | ## U2 · Unity-Spielwelt | Punkt | Ergebnis | | --- | --- | | Tests | Blender-Pipeline 176/176 und Unity-Verifier 128/128 (9 Assets). Test Runner EditMode 11/11: Kern 402 Prüfungen, 2 Integrationstests, 4 Bildratentests. PlayMode 2/2: Szene bei echten Bildraten, Vertical Function Test | | Parität | Bot-Partie Seed 2 (9 Runden) und Seed 9 ab Runde 21 in der sichtbaren Szene mit demselben Fingerabdruck wie der reine Kern; ebenso bei 30, 60, 120 fps, unbegrenzt, mit Rucklern und bei 8× Tempo | | Bild | `screenshots/u2a/` (Assets), `u2b/` (Karte mit Godot-Kameraeinstellungen; Vergleich mit `g2/nachher`), `u2d/` (14 Schlüsselmomente der Partien) | | Leistung | macOS-Player (M5, 1080p, VSync aus) mit 116 Einheiten: 161–199 fps; Hauptthread 1,3 ms, Render-Thread 1,3 ms, Simulation unter 0,1 ms. Ausreißer beim Present (p95 18–26 ms) offen für U5 | | Bekannte Unterschiede | keine Verhaltensunterschiede. Darstellung vereinfacht: Platzhaltermodelle für Einheiten, Materialien, Effekte, Debug-Anzeige statt HUD ([U2-WORLD.md](U2-WORLD.md)) | | Offen | Windows-/Linux-Player (Build-Module); Leistungsspitzen (Batch-Import inzwischen erledigt, siehe unten) | | Commits | `luneraria/u2`: U2A `49cb4af`, U2B `8a72cb1`, U2C `3871b3e`, U2D `323cc3a` | ### Batch-Import aller Modelle (nach U2D) | Punkt | Ergebnis | | --- | --- | | Tests | Blender-Pipeline 1.616/1.616 und Unity-Verifier 1.247/1.247 (86 Modelle); zwei Exportläufe byteidentisch. Test Runner EditMode 11/11, PlayMode 2/2 mit allen Modellen | | Parität | Vertical Function Test mit allen Modellen: Seed 2 `DCE95C96556F3A1A` (12.690 Schritte), Seed 9 ab Runde 21 `7B8E43AEFC0D60C5` (4.195 Schritte), beide gleich dem Kern; Szene bei 30, 60, 120 fps und unbegrenzt gleich | | Bild | `screenshots/u2a-batch/.png` (Kontaktbögen aller Modelle), `screenshots/u2a-batch/01-…` bis `14-…` (Partie mit allen Modellen) | | Leistung | macOS-Player mit allen Modellen, 116 Einheiten: 158–160 fps (Mid-Lane 205–207). Hauptthread 2,5 ms, Render-Thread 3,2 ms, etwa doppelt so viel wie mit dem Platzhalter. Present-Ausreißer kürzer (p95 18 statt 24 ms). Player 228 MB | | Befund | Projekt liegt in iCloud Drive; Konfliktkopien im Build-Cache machten den Player unbrauchbar. `LunePlayerBuild` fängt das ab ([U2-WORLD.md](U2-WORLD.md)) | | Bekannte Unterschiede | keine Verhaltensunterschiede; starre Figuren ohne Godots prozedurale Gliederbewegung | | Offen | Draw Calls messen (U5); Windows-/Linux-Player (Build-Module) | | Commit | `luneraria/u2`: Batch-Import `3ca38a8` (Modelle direkt in Git) | ## U3 · G3-HUD portieren | Punkt | Ergebnis | | --- | --- | | Tests | EditMode 23/23 (Kern 402 Prüfungen, Sichtmodell, Bildraten-Logik). PlayMode 13/13: Verify A–I **718 Prüfungen, 0 Fehler** (Port von `verify_g3` 715/715 plus Teil I), Szene bei echten Bildraten, Vertical Function Test, Capture, UI-Toolkit-Probe. Bildwerkzeuge und Spieltest sind `Explicit`. Protokolle `logs/u3/`, Summen `tools/out/hud-verify-*.txt` | | Parität | Bot-Partie Seed 2 `DCE95C96556F3A1A` (12.690 Schritte), Seed 9 ab Runde 21 `7B8E43AEFC0D60C5` (4.195 Schritte), beide unverändert gleich dem Kern | | Bild | `screenshots/u3/motive-1920x1080/` (14 G3-Motive), dieselben als JPEG in `motive-1280x720/`, `motive-2560x1080/`, `motive-2560x1440/` (Nachtrag), `pruefung/` (Teile B–F), `aufloesungen/` (1152×720 … 2560×1440), `spieltest/` (Wellen 1–8) | | Leistung | macOS-Player mit HUD, 116 Einheiten: 169 fps (Übersicht) und 218 fps (Mid nah). HUD-Skripte **0,090 bzw. 0,078 ms je Bild**; Simulation 0,09/0,04 ms, Ansichten 0,31/0,33 ms. Ausreißer beim Present (p95 10–13 ms) im Rahmen der U2D-Streuung. Rohdaten `logs/u3/player-benchmark-macos.json` | | Bekannte Unterschiede | Godots deklarierte Schriftgewichte werden in der Referenz nie angewendet (String-Schlüssel „wght“); Port zeigt wie G3 Regular 400. Kein Hauptmenü, kein Grottenlicht. Details [U3-UI.md](U3-UI.md) und [KNOWN-BEHAVIOR-DIFFERENCES.md](KNOWN-BEHAVIOR-DIFFERENCES.md) | | Nachtrag (7. Oktober 2026) | Spieltest über die echte Oberfläche: Wellen 1–8 gespielt, Ende in der Planung von Welle 9 (`logs/u3/playtest-log.txt`). Tooltip-Wertzeilen ohne Umbruch wie Godots `GridContainer`. Die im U3D-Commit genannten Motivsätze in drei weiteren Auflösungen nachgeholt (vom U3-Stand `e2aadcb`). Befund für U4: Startbildschirm nicht in der Szene eingebunden (behoben im U4-Nachtrag) | | Offen | Hauptmenü und Netzwerk (U4); Schriftgewichte, Grottenlicht und weitere Darstellung (U5); Windows-/Linux-Player (Build-Module) | | Commits | `luneraria/u3`: U3A `4dee9b1`, U3B/U3C `2b86c0d`, U3D `66867f3`; Nachtrag `luneraria/u3-nachtrag` = `527f7c5` (auf U5.2) | ## U4 · Netzwerk | Punkt | Ergebnis | | --- | --- | | Tests | Protokoll `NetSuite` **43/43** (Port von `test_lune_net.gd`), Mehr-Runden-Loopback `NetRoundsSuite` **12/12** (Port von `net_rounds.py`, In-Prozess mit `LuneLoopback`), `LuneWireTests` Round-trip. EditMode 29/29, PlayMode 13/13, Kerntests .NET 457/457 (402 + 43 + 12) | | Parität | Bot-Partien unverändert `DCE95C96556F3A1A`, `7B8E43AEFC0D60C5`; Mindestumfang M4 erfüllt (Ready, private Planung, Bot-Übernahme, Wiedereinstieg, Snapshots, Revanche, Disconnect, sechs Plätze) | | Bild | Startbildschirm `LuneMainMenu` (Offline/Hosten/Beitreten), sichtbar erst seit dem Nachtrag: `screenshots/u4/startbildschirm/` (macOS-Player: Startbildschirm, Planung, Kampf, Verlassen-Dialog, zurück im Startbildschirm, zweite Partie); Partiefenster unverändert U3 | | Leistung | keine eigenen Netz-Messungen; Rahmen 20/s wie in der Referenz (`LuneNet.FrameInterval` 0,05 s), 13 Floats je Einheit | | Bekannte Unterschiede | TCP statt ENet (Rahmen auf demselben Socket, Verwerfen über Serial); Zwei-Prozess-Loopback als In-Prozess-Test; vereinfachtes Hauptmenü; „Menü“ fragt vor der Rückkehr (Godot kehrt sofort zurück) | | Nachtrag (7. Oktober 2026) | Startbildschirm in der Szene: `LuneWorldBuilder` legt `LuneNetPlay` an, das Menü hat eine eigene Fläche über dem HUD, „Menü“ → „Zum Menü“ führt zum Startbildschirm zurück. Tests und Benchmark ohne Startbildschirm (`LuneMatchDriver.DirectStart`, `-luneBenchmark`). EditMode 29/29, PlayMode 14/14 mit neuem `StartScreenTests` (26/26), Verify 718/0, Fingerabdrücke unverändert. macOS-Player-Selbsttest `-luneSmoke` 26/26 (`logs/u4/smoke-macos.json`, Bilder `screenshots/u4/startbildschirm/`). Offen: ein zusammenhängender PlayMode-Lauf auf dem Endstand und ein Player-Benchmark; der Mac schlief zugeklappt während der Wiederholungsläufe. Details [U4-NETWORK.md](U4-NETWORK.md#nachtrag-startbildschirm-in-der-szene-7-oktober-2026) | | Offen | Windows-/Linux-Player (Build-Module); Internetpartie über mehrere Rechner; optional unzuverlässiger Rahmenkanal | | Commits | `luneraria/u4` `769e622`; Nachtrag `luneraria/u4-nachtrag` (auf U5.2) | ## U5 · Visuelle Neuausrichtung (Vertical Slice) | Punkt | Ergebnis | | --- | --- | | Tests | EditMode 29/29, PlayMode 13/13, Kerntests .NET 457/457. Keine Regeländerung; Fingerabdrücke der Bot-Partien unverändert | | Parität | Golden 51.221 Werte unverändert, 0 Abweichungen; Darstellung liest nur | | Bild | `screenshots/u5/mid-lane-*.png` (Übersicht, Türme, Ancient, Grotte, Weitwinkel); Vergleich mit `../saumwacht-godot/docs/luneraria/screenshots/g3/vorher-1920x1080/` und `zwischenstand-1920x1080/` | | Leistung | macOS-Player mit PBR+Nebel+VFX, 116 Einheiten: 132 fps (Übersicht), 182 fps (Mid nah). HUD 0,088 bzw. 0,077 ms je Bild. Gegenüber U3 −20…−25 % | | Kartenqualität | entschieden und umgesetzt: **Weg 2 (Stufen)** — Zielqualität im Lankorridor (22 m), Randstufe (Farbe + Steinschicht) in Bergen und Kluft. Nachweis `screenshots/u5/edge-mountains.png`, `lane-and-edge.png`; Leistung `logs/u5/player-benchmark-stufen.json` (133 / 180 fps) | | Bekannte Unterschiede | Stufen statt flächiger Zielqualität (harte Grenze je Knoten); Figuren ohne Künstler-Sculpts; keine Decals/Partikel; LOD/Draw Calls offen | | Offen | restliche Zonen und Einheitenmodelle auf Zielqualität; Künstler-Sculpts; LOD und Atlanten | | Commits | `luneraria/u5` `2c1686b` (Slice), `luneraria/u5.2` `7fa038a` (Stufen) | ## Ausblick Nach der Entscheidung über die Kartenqualität folgen die restlichen Zonen, Einheitenmodelle und gegebenenfalls Künstler-Assets.