feat(ai): KI-Profile als Datenschicht (Nova.AI.Data) — Stufe 1 von 5, verhaltensneutral - #36
Conversation
cubetribe
left a comment
There was a problem hiding this comment.
Geprüft: vollständiger Diff-Audit des Stapels (Determinismus, Bösartigkeit unter feindseliger Annahme, Cheat-Fläche, Korrektheit, Beweislage, Vertragsflächen), jeder Fund gegengeprüft.
Kein Bösartigkeitsbefund. Der Determinismus ist sauber: kein float/double, keine Hash-Container, keine instabile Iterationsreihenfolge, Zielwahl mit vollständigem Tiebreaker. Die acht migrierten Zahlen wurden unabhängig gegen MatchRunner.cs:243-247 und SkirmishAiSystem.cs:94-103 verifiziert — sie stimmen wertgleich.
CI ist nach Freigabe der Fork-Läufe grün: tests, docs-check, integrity, baseline-guard.
Eine Anmerkung ohne Blockwirkung: Der Changelog nennt die vier Determinismus-Baselines als Neutralitätsnachweis. Die führen die Skirmish-KI nicht aus — was du selbst zwei Stufen später dokumentierst. Der reale Nachweis dieser Stufe sind die handgeschriebenen Literale in AiProfileTests. Ziehe ich beim Aufräumen nach.
Angenommen.
Die Stellschrauben der Skirmish-KI lagen an zwei Orten: als Konstruktor-Defaults auf AiFactionProfile und als const-Felder in SkirmishAiSystem. Tunen hiess damit Verhaltenscode editieren, und vier Werte (Kadenz, Suchradius, beide Queue-Batches) waren von aussen gar nicht erreichbar. Sie liegen jetzt vollstaendig in einem AiProfile unter Nova.AI.Data. VERHALTENSNEUTRAL, und das ist der Nachweis, nicht die Absicht: Das ausgelieferte Profil ms1-canonical traegt die bisherigen acht Zahlen wertgleich (Strommarge 0, Armee 12, Angriffsschwelle 6, Harvester 2, Kadenz 20, Suchradius 8, Batches 2). Nichts wurde gerundet oder "verbessert". Die vier Determinismus-Baselines bleiben gruen, 561/561 SimRunner-Tests. Die Signatur von AiFactionProfile und SkirmishAiSystem bleibt unveraendert, damit MatchRunner nicht angefasst werden muss - der gehoert dem Netzstrang. Zwei Vorarbeiten sind mit erledigt. AiFactionProfile verglich bisher NUR den Fraktionsnamen, sodass zwei Profile mit gleichem Namen und verschiedenen Zahlen als gleich galten; das faellt erst beim Tunen auf, wo genau das der Regelfall ist. Und Nova.AI.Data steht auf noEngineReferences: true, ist also strukturell enginefrei statt zufaellig - eine Profilklasse kann so keine FactionId nennen und unbemerkt zur zweiten Definitionstabelle werden. Dazu zwei veraltete Behauptungen in der Klassendoku von SkirmishAiSystem: GB-002 "kein Auto-Acquire" gilt seit D-087 nicht mehr, und SetRallyPoint wird sehr wohl akzeptiert (IsProducerRole liest producerRole: Refinery aus der Definitionstabelle). Der Code galt, die Doku nicht. (cherry picked from commit c5deb5c)
6aa4681 to
23729f3
Compare
Was & Warum
Die Stellschrauben der Skirmish-KI lagen an zwei Orten: als Konstruktor-Defaults
auf
AiFactionProfileund alsconst-Felder inSkirmishAiSystem. Tunen hiessdamit Verhaltenscode editieren, und vier Werte — Kadenz, Suchradius, beide
Queue-Batches — waren von aussen gar nicht erreichbar. Sie liegen jetzt
vollständig in einem
AiProfileunterNova.AI.Data.Dieser PR ändert kein Verhalten. Er ist bewusst der erste: er läuft den
ganzen CI-Weg samt der neuen Wächter einmal durch, ohne dass Verhalten zur
Debatte steht.
Der Nachweis, dass er neutral ist
Das ausgelieferte Profil
ms1-canonicalträgt die bisherigen acht Zahlenwertgleich — Strommarge 0, Armee 12, Angriffsschwelle 6, Harvester 2, Kadenz 20,
Suchradius 8, beide Batches 2. Nichts wurde gerundet oder „verbessert". Die vier
Determinismus-Baselines bleiben grün, und genau das ist der Nachweis.
Was sich ändert
AI.Data/AiProfile.cs(neu)readonly struct, Gleichheit über alle WerteAI.Data/AiProfiles.cs(neu)ms1-canonicalundlegacy-defaultsAI.Data/Nova.AI.Data.asmdefnoEngineReferences: trueAI/AiFactionProfile.csAiProfile, Signatur unverändertAI/Nova.AI.asmdefNova.AI.DataAI/SkirmishAiSystem.cstools/Nova.SimRunner.Tests/AiProfileTests.cs(neu)tools/Nova.SimRunner.Tests/…csprojAI.Data/in die geteilten QuellenMatchRunnerist nicht angefasst — deshalb blieb die Signatur vonAiFactionProfileunverändert.Zwei Vorarbeiten sind mit erledigt:
AiFactionProfileverglich bisher nur denFraktionsnamen, sodass zwei Profile mit gleichem Namen und verschiedenen Zahlen
als gleich galten — was erst beim Tunen auffällt, wo genau das der Regelfall ist.
Und
Nova.AI.Dataist jetzt strukturell enginefrei statt zufällig, kann alsokeine
FactionIdnennen und unbemerkt zur zweiten Definitionstabelle werden.Tests
dotnet test tools/Nova.SimRunner.Tests -c Release→ 561/561 grün, die vierDeterminismus-Baselines inbegriffen und nicht angefasst.
Im laufenden Spiel gesehen
Nichts — dieser PR ändert kein Verhalten, es gibt nichts zu sehen.
Die Stufen 3 und 4 sind inzwischen gespielt worden und tragen die Beobachtung
im eigenen Text; Stufe 2 ist gemessen, aber im Spiel nicht erkennbar und sagt das
dort auch.
Was noch kommt
r1→r2r2→r3r3→r4Alle fünf sind gebaut, getestet und zusammen als Integrationsstand geprüft
(565/565, Determinismus über 24 Seeds ohne Abweichung). Sie kommen einzeln,
damit jede für sich beurteilbar bleibt.
Checkliste
dotnet test tools/Nova.SimRunner.Testslokal grün — 561/561[Unreleased]in CHANGELOG.mdExterne Beiträge