fix(ai): nicht laenger endlos auf dem leeren Aetheriumfeld ernten PR (#85) - #97
Open
arn-c0de wants to merge 1 commit into
Open
fix(ai): nicht laenger endlos auf dem leeren Aetheriumfeld ernten PR (#85) #97arn-c0de wants to merge 1 commit into
arn-c0de wants to merge 1 commit into
Conversation
Aus dem Betatest vom 10.08.2026 (Issue VibecodingGermany#85): die KI kam nach Erschoepfung ihres Startvorkommens wirtschaftlich zum Stillstand. Das war kein Strategiemangel, sondern ein LIVELOCK aus einer fehlenden Pruefung. TryGetOwnFieldCell waehlte das Erntefeld allein nach Distanz zum HQ und sah IsExhausted nicht an. Der EconomySystem raeumt beim leeren Feld HarvestFieldId, genau dieses Raeumen liess den Harvester in die Leerlaufliste der KI fallen, und die schickte ihn auf dasselbe leere Feld zurueck — jeden Entscheidungstick, bei Einkommen null, waehrend die drei Felder abseits der Startpositionen mit 33.000 AE offenstanden. Der Spielerpfad filtert erschoepfte Felder seit den endlichen Feldern (VibecodingGermany#80) korrekt; nachgezogen wurde damals nur eine der beiden Stellen. ZWEI ENTSCHEIDUNGEN ueber das geforderte Minimum hinaus, beide mit Grund: - Der PLATZIERUNGSANKER filtert bewusst weiter nicht. TryGetOwnFieldCell hat eine zweite Aufrufstelle, die das naechste Feld als Anker fuer "wo ist meine Basis" benutzt. Filtert man dort mit, setzt ein nachgebautes Refinery sich ans naechste Feld MIT Reserve — auf dieser Karte das umkaempfte Zentrum oder die Gegenecke. Das ist eine strategische Entscheidung, und sie als Nebenwirkung zu treffen waere schlechter, als sie offen zu lassen. - Der RUECKWEG bleibt bedient. Den ganzen Wirtschaftsschritt zu ueberspringen, wenn kein Feld mehr uebrig ist, haette einen kleineren neuen Defekt erzeugt: ein Harvester mit letzter Ladung ausserhalb der Abladereichweite bleibt dann stehen, weil ein gehaltener Rueckwegbefehl nur durch die KI aufgeloest wird. Gegattert sind deshalb nur die feldabhaengigen Teile. BELEGE - Neuer Test SkirmishAiFieldExhaustionTests: ein kleines Feld naeher am HQ wird leergemint, danach darf es nie wieder zugewiesen werden und die KI muss anderswo weiterernten. Gegenprobe gefahren — mit abgeschalteter Pruefung faellt er mit genau diesem Befund. - 708/708 gruen, keine der vier Baseline-Dateien angefasst. - Die kanonische Partie ist BYTE-IDENTISCH (Tick 3.213, Endzustand 0xE002DD893916967B, alle Laborartefakte gleich): dort erschoepft sich kein Feld, die neue Bedingung greift also nie. Anders als im Issue vermutet wird damit keine Determinismus-Baseline rot, und es braucht keinen zweiten PR. - IM LAUFENDEN SPIEL GESEHEN: eine Partie auf diesem Stand gespielt. Die Harvester fahren nach dem Startvorkommen zu anderen Quellen, und es kommen weiter neue Einheiten, bis alles zerstoert ist. Ein Nebenbefund fuer die Werkzeugkiste: der Executor nimmt einen Erntebefehl auf ein leeres Feld an, die Economy raeumt ihn danach. Der Defekt erzeugte also NULL abgelehnte Intents — die Spalte intentsRejected, die im Labor als Fruehwarnsignal gilt, kann diese Fehlerklasse grundsaetzlich nicht sehen. AiBehaviorId.Revision bleibt bei 7: die kanonische Partie entscheidet unveraendert, und 8 ist bereits an das Basisverteidigungs-Verhalten vergeben — zwei verschiedene Staende duerfen sich keine Kennung teilen.
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.
Was & Warum
Die KI kam nach Erschöpfung ihres Startvorkommens wirtschaftlich zum Stillstand (#85) — kein Strategiemangel, sondern ein Livelock: TryGetOwnFieldCell wählte das Erntefeld allein nach Distanz zum HQ, der EconomySystem räumte den Befehl auf dem leeren Feld sofort wieder, und genau dieses Räumen liess den Harvester in die Leerlaufliste fallen, aus der die KI ihn jeden Entscheidungstick auf dasselbe leere Feld zurückschickte. Die Erntewahl überspringt erschöpfte Felder jetzt; ist keines mehr übrig, ruhen Nachbestellung und Erntebefehle, statt Kommandos ins Leere zu schicken.
Checkliste
dotnet test tools/Nova.SimRunner.Testslokal grün[Unreleased]in CHANGELOG.mdEchte Entscheidung getroffen? → D-ID im DecisionLog— keine; die zwei Abwägungen unten sind Umsetzungsentscheidungen innerhalb des Einheitenstrangs und stehen als Begründung im CodeExterne Beiträge