Zum Hauptinhalt springen

Sicherheit

Sicherheit & Determinismus-Vertrag

Stellarchs Kampf-Engine ist deterministisch. Gleicher Seed + gleiche Teams + gleiche Kampfkonfiguration = byteidentischer Eventstrom jedes Mal. Diese Seite ist die tragende Vertrauenserklärung für Zuschauer, Deck-Builder und jedes Drittanbieter-Tool, das ein Ergebnis verifizieren möchte.

Wie der seeded RNG funktioniert

Jedes Match konstruiert eine SeededRng-Instanz aus dem persistierten Seed des Kampfes (eine Ganzzahl). Diese einzelne Instanz wird durch jeden Engine-Aufruf (Targeting, AttackResolver, DeathResolver, RoundResolver), jeden Fähigkeits-Hook (Splash, Killstreak, Shock, Hemobane) und jeden Regelwerks-Hook (Earthquake, Reverse Speed) gefädelt. Keine Engine und keine Fähigkeit konstruiert ihr eigenes Random.

Warum Wiederholungen byteidentisch sind

Drei Invarianten erzwingen Determinismus. (1) Alle Zufälligkeit fließt durch einen SeededRng. (2) Keine Datei unter dem Engine-Namensraum verwendet Random.new, Kernel.rand, SecureRandom oder Array#sample — ein tragender Test scannt jede Datei und schlägt bei jedem Treffer sofort fehl. (3) Keine Uhrenentropie: Time.current / Time.now werden für Zufälligkeit in der Engine nirgendwo verwendet.

Der No-Raw-RNG-Wächter

Ein dedizierter Spec scannt bei jedem Testlauf jede Ruby-Datei unter dem Engine-Namensraum. Schleicht sich eine nicht-seeded RNG-Quelle ein, schlägt der Spec sofort mit Datei- und Zeilennummer fehl. Nur der SeededRng-Wrapper selbst ist befreit. Dieser Wächter läuft bei jedem CI-Build.

Wie man ein Kampfergebnis verifiziert

Nimm jede persistierte Kampfzeile. Führe den Simulator gegen denselben Seed und denselben Team-Snapshot erneut aus. Der zurückgegebene Eventstrom passt zum Original Event-für-Event, einschließlich Schadenswerten, Trefferwürfen, Todesreihenfolge und Reflexionen. Wiederholungen werden bei jeder Controller-Anfrage regeneriert und 5 Minuten zwischengespeichert — die byteidentische Garantie macht das sicher.

Probleme melden

Findest du einen Fall, in dem eine Wiederholung vom Original abweicht, melde bitte ein Issue. Gib den Battle-Slug, die ursprüngliche Eventanzahl und den Eventindex an, an dem die Abweichung erscheint. Das Team behandelt Determinismus-Regressionen als die höchste Priorität.