test(map): den Spiegel der Geländetabelle in der laufenden CI-Spur schützen, und den Erreichbarkeitstest schärfen (#126) - #129
Merged
Conversation
…huetzen, und den Erreichbarkeitstest schaerfen (#126)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Der rote Faden
Zwei Tests, die mehr versprachen als sie hielten. Beide stammen aus Paket 21.7, beide sind erst durch das adversariale Gegenlesen dieses Pakets aufgefallen.
Fixes #126
Das CI-Loch — bewiesen, nicht vermutet
Die kanonische Geländetabelle steht notgedrungen zweimal im Repo:
Gameplay/Match/GlutrinneTerrainMap.csauf der Unity-Seite, und ein handgespiegelter Ausdruck intools/Nova.SimRunner/Determinism10000Scenario.cs. Das lässt sich nicht auflösen —tools/Nova.SimRunner*kompiliertGameplay/nicht, das ist eine eingefrorene Grenze.Gepinnt war bisher nur die eine Hälfte. Die Spur, die den Gameplay-Ausdruck pinnt, liegt in
Assets/Tests/EditMode/und läuft in keiner CI (tests.ymlfährt ausschließlichdotnet test tools/Nova.SimRunner.Tests).Das wurde nicht behauptet, sondern nachgewiesen: eine geänderte Konstante in
GlutrinneTerrainMap.csließ die Kette 736/736 grün durchlaufen. Host und Gast hätten danach verschiedene Karten gerechnet — ein Desync, der sich als „beim Gegner laufen die Einheiten woanders" äußert und den später niemand der Kartenarbeit zuordnet.Die Behebung, ohne auf Unity zu warten
Ob die Unity-Tests in die CI kommen, ist eine Inhaberentscheidung mit Lizenzkosten und liegt offen (#110). Bis dahin braucht es Schutz in der Spur, die tatsächlich läuft.
GlutrinneTerrainSourceGuardTestsliest beide Quellen als Text — dasselbe Muster, mit demNoFloatInSimulationTestsseit jeher Dateien prüft, die in seiner Assembly gar nicht kompiliert werden. Drei Tests:IsImpassable-Prädikat Token für Token zwischen beiden Quellen. Kommentare und Leerraum werden vorher entfernt — eine Umformatierung löst also keinen Fehlalarm aus, und genau das ist gegengeprüft.Die Fehlermeldungen sagen, was zu tun ist — beide Ausdrücke nachziehen, nicht den Wächter anpassen. Ohne diesen Satz wird aus einem Wächter beim dritten roten Lauf eine Formalie.
Was er nicht fängt: Semantik. Er bemerkt, dass sich etwas bewegt hat, nicht ob die Bewegung richtig war.
Rot-Nachweis — unabhängig nachgefahren
Vom Orchestrator selbst, nicht nur vom Worker berichtet:
CornerGapMinRadiusinGlutrinneTerrainMap.csvon 11 auf 12 gesetzt, Kette gefahren, zurückgesetzt.Vorher wäre derselbe Eingriff grün durchgelaufen. Das ist der ganze Punkt.
#126 — der Erreichbarkeitstest
Der Test aus 21.7 prüft über das FlowField, dass jedes Feld und jedes HQ von beiden Startpunkten erreichbar bleibt.
IntegrationField.Generatesät die Zielzelle aber ohne Begehbarkeitsprüfung — ein Ziel auf einer unbegehbaren Zelle bekommt Kosten 0 und gilt als erreicht.Der Befund ist nachgeprüft und verschärft: auch
RequestFlowFieldundTryAddFieldprüfen es nicht. Der Test übersah damit genau den Fall, gegen den er existiert.Die Behebung liegt im Test, nicht in
Simulation/Pathfinding/— das gehört dem Einheitenstrang und bleibt unangetastet. Der Test prüft die Begehbarkeit seiner Ziele jetzt selbst, bevor er die Erreichbarkeit prüft. Das ist ohnehin die schärfere Variante: sie trennt zwei Fehlerbilder, die vorher zu einem grünen Haken verschmolzen — „das Feld liegt auf einer Wand" ist etwas anderes als „das Feld ist umbaut".Auch hier ein Rot-Nachweis: ein Feld testweise auf eine Wandzelle geschoben, Test wird rot, Änderung zurückgenommen.
Nachweis
dotnet test tools/Nova.SimRunner.Tests -c Release: 736/736 → 739/739 grün, vom Orchestrator unabhängig nachgefahrenHerkunft
Erarbeitet von Kimi K3 als delegiertem Worker; Rot-Nachweise und Testkette vom Orchestrator unabhängig nachgefahren. Der Befund selbst stammt aus dem adversarialen Gegenlese-Lauf zu Paket 21.7 (
reports/v8.6.0/sprint-21/08-kimi-gegenlesen-karte.md).