docs(battlenode): regen-guard banners on hand-edited .g.cs + accessor-band null-policy invariant (M-HC-4 final review)
This commit is contained in:
@@ -159,6 +159,15 @@ internal sealed class SessionBattleEngine
|
||||
// Each returns LIVE engine state off the seated player, mirroring the Phase-1 oracle reads
|
||||
// (VanillaFollowerOracleTests: player.Pp, player.HandCardList.Count, ClassAndInPlayCardList,
|
||||
// leader == the Class card). seat:true == player, false == opponent (F-N-2).
|
||||
//
|
||||
// INVARIANT (two accessor bands, different null-engine policy):
|
||||
// • This "oracle" band (down to EvolveWaitTurnCount) goes through Seat(), which THROWS if the
|
||||
// engine isn't owned/seated for this session. It is TEST-ONLY — called solely from the
|
||||
// node-native harness/tests, where the engine is always seated. Do NOT call these from a wire
|
||||
// handler.
|
||||
// • The wire-path band below (PlayedCardCost/Spellboost/Clan/Tribe/Id) DEGRADES to a fallback
|
||||
// when the engine isn't owned (single-active-engine gate), so a non-engine session never
|
||||
// crashes. Production handlers read ONLY that band.
|
||||
|
||||
public int LeaderLife(bool playerSeat) => Seat(playerSeat).Class.Life;
|
||||
public int Pp(bool playerSeat) => Seat(playerSeat).Pp;
|
||||
|
||||
Reference in New Issue
Block a user