Skip to content

test(ai): Ausgangspin der kanonischen KI-Partie vom Identitätspin trennen (D-101) - #79

Merged
cubetribe merged 1 commit into
mainfrom
fix/ai-outcome-pin
Aug 9, 2026
Merged

test(ai): Ausgangspin der kanonischen KI-Partie vom Identitätspin trennen (D-101)#79
cubetribe merged 1 commit into
mainfrom
fix/ai-outcome-pin

Conversation

@cubetribe

Copy link
Copy Markdown
Collaborator

Das Problem

SkirmishAiTests.AiBehaviorId_TracksWhatTheAiActuallyDoes pinnte drei Werte in einer Zusicherung:

Assert.That(AiBehaviorId.Value,  Is.EqualTo("r5.779A1B5B"));
Assert.That(decided,             Is.EqualTo(2548u));
Assert.That($"0x{endState:X16}", Is.EqualTo("0x14472B2B943ED2BB"));

Die Kopplung war beabsichtigt und gut begründet — der Kommentar sagt: „Either half alone is useless."

Sie liegt aber an der falschen Naht. Entscheidungstick und Endzustand bewegen sich bei jeder Änderung an der Simulation, in der die KI spielt — nicht nur bei einer Änderung an der KI. Gemessen an den offenen Sprint-16-PRs:

Paket was fiel KI-Code berührt?
16.1 Sammler (#68) nur endState nein
16.2 Spawn (#69) decided 2546 statt 2548, und endState nein
16.3 Baustellen (#71) decided = 0 — unentschieden nein

Damit riss der Test bei jedem Paket, und die im Kommentar hinterlegte Prozedur schickte den Netzstrang in tools/Nova.AiLab/reports/behavior-log.md — das Verhaltensjournal des Einheitenstrangs, also das falsche Buch. Der Test liegt zudem in tools/Nova.SimRunner.Tests/, einem Verzeichnis, das in der Schreibhoheitstabelle gar keinen Eigentümer hatte (#75).

Die Änderung

Der Pin wird geteilt, nicht geschwächt.

  • SkirmishAiTests.AiBehaviorId_TracksWhichAiThisIs behält die Kennung samt ihrer Prozedur. Einheitenstrang.
  • CanonicalAiOutcomeTests (neu) hält Entscheidungstick und Endzustand. Netzstrang.

Die Diagnose, die die Kopplung leistete, geht nicht verloren — sie wandert aus der Zusicherung in den Fehlertext, wo sie ohnehin erst gelesen wird:

Befund Bedeutung
Ausgang bewegt, Kennung bewegt die KI hat sich geändert → Revision bumpen, Journaleintrag
Ausgang bewegt, Kennung unverändert die Simulation darunter hat sich geändert → der verursachende Strang zieht die Zahlen nach
Ausgang unentschieden (Tick 0) Defekt, kein verschobener Pin → Ursache beheben, Zahlen nicht anfassen

Die letzte Zeile ist neu. Sie wird zuerst und getrennt geprüft, damit der Fehlertext „bewegt" und „kaputt" auseinanderhält — genau der Unterschied zwischen #68 und #71, den man bisher nur durch Vergleichen der Zahlen erkannte.

Was am Einheitenstrang berührt wird

So wenig wie möglich: vier Deklarationen werden internal, damit der Harness wiederverwendbar ist (Seed, EndToEndBudgetTicks, AiHost, BuildMatch). Die Testlogik dort ist unverändert; die Zusicherung schrumpft auf eine Zeile, der Kommentar verweist auf die neue Datei.

AiHost/BuildMatch sind damit Vertragsfläche und im Regelwerk als solche eingetragen: umbenennen oder Signatur ändern nur nach Ansage, der Inhalt bleibt frei.

Falls @arn-c0de den Harness lieber ganz in eine eigene Datei ausgelagert sähe, ist das eine saubere Folgeänderung — sag Bescheid in #75.

Governance

  • D-101 im DecisionLog, mit vier bewerteten Alternativen
  • 13-15_Parallelbetrieb.md 1.4.0: tools/Nova.SimRunner.Tests/ bekommt erstmals eine Eigentümerzeile — geteilt je Datei, fremde Testdateien nur nach Ansage. Damit ist Schreibhoheit: tools/Nova.SimRunner.Tests/ hat keinen Eigentümer #75 im Kern beantwortet
  • Keine der vier Determinismus-Baselines ist berührt

Warum das jetzt kommt

Ohne diese Trennung kommt kein einziger Sprint-16-PR durch die CI, auch keiner der noch gebaut wird.

🤖 Generated with Claude Code

…ennen (D-101)

SkirmishAiTests pinnte Kennung, Entscheidungstick und Endzustands-Hash in einer
Zusicherung. Die Kopplung war beabsichtigt, liegt aber an der falschen Naht:
die beiden Zahlen bewegen sich bei JEDER Aenderung an der Simulation, in der
die KI spielt. Paket 16.1 verschob den Endzustand, 16.2 zusaetzlich den Tick -
beide fassen keine Zeile KI-Code an. Die im Kommentar hinterlegte Prozedur
schickte den Netzstrang damit in das Verhaltensjournal des Einheitenstrangs.

Entscheidungstick und Endzustand ziehen nach CanonicalAiOutcomeTests um, das
der Netzstrang besitzt. Die Kennung bleibt in SkirmishAiTests, samt ihrer
Prozedur. Die Diagnose geht nicht verloren: der neue Test liest die Kennung mit
und unterscheidet im Fehlertext zwischen KI- und Simulationsaenderung.

Neu ist eine Zusicherung, die es vorher nicht gab: eine unentschiedene Partie
(Tick 0) ist ein Defekt und kein verschobener Pin. Sie wird zuerst und getrennt
geprueft. Genau dieser Fall trat in Paket 16.3 auf.

Vier Deklarationen in SkirmishAiTests werden internal, damit der Harness
wiederverwendbar ist; er ist damit Vertragsflaeche und im Regelwerk vermerkt.
tools/Nova.SimRunner.Tests/ bekommt erstmals eine Eigentuemerzeile.

Keine Baseline-Datei beruehrt.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@cubetribe
cubetribe requested a review from travelhawk as a code owner August 9, 2026 18:55
@cubetribe
cubetribe merged commit 48df5fe into main Aug 9, 2026
8 of 9 checks passed
@cubetribe
cubetribe deleted the fix/ai-outcome-pin branch August 9, 2026 18:58
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