refactor(battlenode): low-churn §B/§D/§E/§F quality cleanups

Behavior-preserving; 231 BattleNode tests green.

- §D: MsgEnvelope.Try -> RetryAttempt (drops keyword-escape; wire key stays "try");
  SocketIoFrame.AckResponse arg -> pubSeqEcho.
- §B: Gungnir.EmitInterval -> BattleNodeOptions.AliveEmitInterval (unused literal
  moved to its config home); deck-idx 4L -> InitialHand.Length + 1.
- §E: shared Wire.WireJsonOptions.CamelCase replaces the duplicated camelCase
  JsonSerializerOptions in EngineIoHandshake and MsgEnvelope.
- §F: do-NOT-consistency-fix polarity notes on TurnEndFinalHandler (From wins)
  and RetireKillHandler (From loses).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
gamer147
2026-06-04 23:06:44 -04:00
parent e70f32db79
commit 7d4da69f22
22 changed files with 84 additions and 62 deletions

View File

@@ -90,13 +90,14 @@ public static class ServerBattleFrames
/// <summary>
/// Compute the player's hand after a mulligan. For every idx in <paramref name="swapIndices"/>
/// that is currently in the hand, replace it with the next unused deck idx (starting at 4,
/// since 1..3 were dealt). Positions of kept cards are preserved.
/// that is currently in the hand, replace it with the next unused deck idx (the first idx past
/// the opening hand — <see cref="InitialHand"/> is 1-based and contiguous, so that's
/// <c>InitialHand.Length + 1</c>). Positions of kept cards are preserved.
/// </summary>
public static long[] ComputeHandAfterSwap(IReadOnlyList<long> swapIndices)
{
var hand = InitialHand.ToArray();
var nextDeckIdx = 4L;
var nextDeckIdx = (long)(InitialHand.Length + 1);
for (var pos = 0; pos < hand.Length; pos++)
{
if (swapIndices.Contains(hand[pos]))
@@ -151,7 +152,7 @@ public static class ServerBattleFrames
ViewerId: FakeOpponentViewerId,
Uuid: WireConstants.ServerUuid,
Bid: bid,
Try: 0,
RetryAttempt: 0,
Cat: EmitCategory.Battle,
PubSeq: null,
PlaySeq: null,