Skip to content

fix(ai): keep the flanked staging cell inside the wave ring (r10) - #145

Open
cubetribe wants to merge 1 commit into
mainfrom
fix/ai-personality-staging-ring
Open

cubetribe wants to merge 1 commit into
mainfrom
fix/ai-personality-staging-ring

Conversation

@cubetribe

Copy link
Copy Markdown
Collaborator

Folge-PR zum Review von #144 (D-114, KI-Persönlichkeit). Behebt B1 und B2 und nimmt die kleineren Befunde B4 bis B7 mit.

Was und warum

  • B1 (hoch): Die Flanke hat den Sammelpunkt senkrecht zur Linie zum Gegner verschoben. Auf der diagonalen Glutrinne lag er dadurch bei Chebyshev 22 vom HQ und damit außerhalb des Wellenrings (16).
    • Folge: Jede Einheit auf dem Weg dorthin galt als „committed“ und griff allein an. Welle, Stärkegate und DefendHome liefen leer.
    • Behebung: GetStagingCell skaliert den Versatz jetzt auf StagingDistanceCells zurück. Der Punkt dreht sich also um das HQ, statt hinausgeschoben zu werden.
    • Unverändert: der Pfad ohne Flanke und die neutrale Persönlichkeit.
    • Echte Zellen: Slot 1: (118,107) und (107,118). Slot 0: (6,17) und (17,6).
  • B2 (mittel): Der Igel-Heimradius (14) reichte über den Sammelpunkt hinaus. Apply deckelt jetzt, was eine Persönlichkeit hinzufügt, auf StagingDistanceCells − 1, auf dem ausgelieferten Profil also 11.
    • Warum Deckel statt kleinerem Delta: Die Invariante verknüpft zwei Profilwerte, und nur Apply sieht beide.
  • B4: Der Flanken-Spiegeltest liest die HQ-Zelle jetzt aus der gebauten Partie (119 statt des Footprint-Ursprungs 118). Ein neuer Test vergleicht ihn mit dem Sammelpunkt, den die KI über IAiGoalObserver meldet.
  • Regressionstest für die Wellenlogik:
    • Ring-Test für jede Flanke und beide Slots.
    • FlankedWave_SendsNobodyBeforeTheFirstWaveIsReady: Vor der ersten fertigen Welle ist nichts committed und es gibt keinen Angriff, für beide Fraktionen und Flanke −10/0/+10.
    • Test für den Igel-Radius.
  • B5: NOVA_MATCH_SEED warnt jetzt bei einem ungültigen Wert und außerhalb des Menüs.
    • Festgelegt: Die Variable greift bei jedem lokalen Start, damit eine gemeldete Partie auch über AutoStart und Harness nachstellbar bleibt.
  • B6: Die Docstrings in AiPersonality sind berichtigt: Bit-Bereiche, 1728 Kombinationen, ToString-Beispiel.
  • B7: Im CHANGELOG ist der Sammelpunkt-Satz berichtigt, und es steht jetzt drin, dass der kanonische Seed Ansturm spielt.
  • Revision: AiBehaviorId steigt auf r10, ohne neue D-ID (Inhaberentscheidung). D-114 trägt einen Absatz „Berichtigung (2026-10-17)“, das DecisionLog steht auf 1.46.1.

Nur vermerkt, kein Code

  • B3: Eine Allianz-KI mit Ansturm hat kein Einkommen mehr, wenn sie den Builder vor der fertigen Raffinerie verliert. Heute ist der Fall nicht erreichbar, weil die KI immer Legion spielt. Er wird relevant, sobald die KI Allianz spielt.
  • B8:
    • Das Debug-HUD zeigt „Neutral“ auch in Partien ohne KI.
    • Im DecisionLog fehlen 1.42 bis 1.45 und D-110 bis D-113; sie liegen auf feat/generals-look-and-feel.
    • Der Lobby-Kommentar ist folgenlos, weil WithOffer den Seed überschreibt.

Nachweise

  • dotnet test tools/Nova.SimRunner.Tests -c Release: 783/783 grün. CanonicalAiOutcomeTests ist unverändert und grün.
  • Gegenprobe: Mit abgeschalteter Rückskalierung meldet der Regressionstest 91 frühe Angriffe, dieselbe Zahl wie im Review. Der Abgleichstest schlägt dann ebenfalls fehl.
  • Probe über die ganze Partie (Balanced, passiver Gegner): Ohne fertige Welle gibt es 0 Angriffsbefehle bei allen Flanken und beiden Fraktionen. Vorher waren es 91 bis 222.
  • Unity EditMode (6000.5.4f1, batchmode): 663/663 grün. Der Lauf startete vor dem r10-Schritt, der nur die Konstante und den headless Pin ändert.
  • check_docs.py: OK.
  • Nicht gespielt. Das Spielverhalten mit Flanke und als Igel ändert sich. Ersatznachweise sind die Tests oben. Restrisiko: Wie die gedrehten Sammelpunkte im Spiel aussehen, ist ungeprüft.

Changelog

Neuer Eintrag unter [Unreleased] → Behoben. Dazu Berichtigungen im D-114-Eintrag unter Hinzugefügt.

🤖 Generated with Claude Code

The D-114 flank shifted the staging cell perpendicular to the line toward
the enemy. On the diagonal Glutrinne that moved it to Chebyshev 22 from
the HQ, outside the staging ring at 16, so every unit on its way counted
as committed and attacked alone: 91-222 attack orders per match before
any wave was ready, against 0 without a flank. The flank now scales the
offset back onto the staging distance, turning the cell around the HQ.
The unflanked path and the neutral personality are unchanged.

The Turtle home radius (10 + 4 = 14) reached past the staging cell and
called the waiting wave home; Apply now caps what a personality adds one
cell short of the staging distance (11 on the shipped profile).

Also from the PR #144 review: the flank test now reads the real HQ cell
and is checked against the cell the AI reports; a regression test pins
"nothing committed, no attack before the first ready wave";
NOVA_MATCH_SEED warns on unparsable values and outside the menu;
AiPersonality docstrings and the D-114 changelog text are corrected.

AiBehaviorId moves to r10; no new D-ID, D-114 carries a correction.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant