Commit Graph

  • 268b864e28 refactor(battle-node): delete legacy ComputeFrames switch; dispatch is now lookup-or-drop gamer147 2026-06-03 14:38:22 -04:00
  • 503c382646 refactor(battle-node): extract ForwardWhenBothReadyHandler; share handler instances via BuildHandlers gamer147 2026-06-03 14:33:26 -04:00
  • db2f711894 refactor(battle-node): extract JudgeHandler gamer147 2026-06-03 14:30:40 -04:00
  • aacd7b56ad refactor(battle-node): extract TurnStartHandler gamer147 2026-06-03 14:27:17 -04:00
  • c03fb3c139 refactor(battle-node): extract RetireKillHandler gamer147 2026-06-03 14:24:35 -04:00
  • d35818360f refactor(battle-node): extract TurnEndFinalHandler gamer147 2026-06-03 14:21:54 -04:00
  • 538099ff4b refactor(battle-node): extract TurnEndHandler gamer147 2026-06-03 14:17:20 -04:00
  • 477faf3df3 refactor(battle-node): extract SwapHandler (mulligan barrier) gamer147 2026-06-03 14:13:26 -04:00
  • 3e2931b085 refactor(battle-node): extract LoadedHandler gamer147 2026-06-03 14:10:33 -04:00
  • e5ec8a0de1 refactor(battle-node): extract InitBattleHandler gamer147 2026-06-03 14:07:49 -04:00
  • 7c36933c06 refactor(battle-node): extract InitNetworkHandler gamer147 2026-06-03 14:04:58 -04:00
  • 73d2c4e1b8 refactor(battle-node): add frame-handler contract, context, and empty registry shim gamer147 2026-06-03 13:59:02 -04:00
  • 57d91236a0 chore: ignore *.bak editor backups gamer147 2026-06-03 13:56:59 -04:00
  • 4f89463f9c refactor(battle-node): extract frame factories into BattleFrames gamer147 2026-06-03 13:52:36 -04:00
  • 85c43a9a72 refactor(battle-node): move session phase + post-swap hands into BattleSessionState gamer147 2026-06-03 13:47:35 -04:00
  • 95554cee04 refactor(battle-node): name ComputeFrames routes as DispatchRoute gamer147 2026-06-03 13:43:39 -04:00
  • afe2984075 test(battle-node): drive PvP flow handshakes through the mulligan barrier gamer147 2026-06-03 10:58:33 -04:00
  • feb387d3d5 test(battle-node): real scripted bot drives handshake through the mulligan barrier gamer147 2026-06-03 10:53:51 -04:00
  • 2d31037648 fix(battle-node): type-agnostic mulligan barrier withholds Ready until both swap gamer147 2026-06-03 10:52:33 -04:00
  • 8052ed60ec refactor(battle-node): scripted bot drives the handshake as a real participant gamer147 2026-06-03 10:51:08 -04:00
  • a533e9d89d feat(battle-node): client-shaped handshake builders for the scripted bot gamer147 2026-06-03 10:49:38 -04:00
  • 633c29b44f feat(battle-node): BuildReady overload carrying the opponent's hand gamer147 2026-06-03 10:48:43 -04:00
  • ae11fe0957 fix(battle-node): assign turnState per side instead of hardcoding 0 gamer147 2026-06-03 10:47:56 -04:00
  • 84ed07d3af chore(dev): enable Steam-ticket bypass + PvP matching for local smoke gamer147 2026-06-03 09:09:23 -04:00
  • feaa149f04 feat(auth): select ISteamServer impl by Auth:BypassSteamTicket config gamer147 2026-06-03 09:07:51 -04:00
  • c27bf444a5 refactor(auth): drop null-guard on dev steam ticket log; add test fixture doc gamer147 2026-06-03 09:06:26 -04:00
  • ae94d62357 feat(auth): add Dev-only always-valid ISteamServer for local no-Steam clients gamer147 2026-06-03 09:02:54 -04:00
  • 05d8169012 refactor: type reward_type columns as UserGoodsType enum gamer147 2026-06-03 07:50:49 -04:00
  • fb1e91cdf1 Diagnostic logging gamer147 2026-06-02 22:10:18 -04:00
  • c551d7b05e refactor(battle-node): drop dead BattleResult.{Lose,Win,Consistency} members gamer147 2026-06-02 21:17:30 -04:00
  • d76b96b339 test(battle-node): lock server-authored frame shapes against prod captures gamer147 2026-06-02 20:03:56 -04:00
  • a198174ede fix(battle-node): involuntary-drop survivor gets DisconnectWin, not Win=NoContest gamer147 2026-06-02 19:26:16 -04:00
  • 0a8a84b2cc refactor(battle-node): unify TurnEndFinal / Retire-Kill / gameplay-forwarder dispatch across types gamer147 2026-06-02 18:37:24 -04:00
  • 1685b509c3 fix(battle-node): TurnEndFinal pushes LifeWin=101 (player perspective), not LifeLose=102 gamer147 2026-06-02 18:11:24 -04:00
  • ee23985055 fix(battle-node): push BattleFinish on Scripted TurnEndFinal so the client doesn't park on the disconnect-checker gamer147 2026-06-02 17:48:20 -04:00
  • c7e61c6f8d fix(battle-node): hand events are unencrypted JSON arrays, not encrypted dicts gamer147 2026-06-02 17:14:13 -04:00
  • 8f270a87f0 refactor(battle-node): gate WS diagnostic logging behind config flag gamer147 2026-06-02 16:49:17 -04:00
  • 9fc1d055d8 fix(battle-node): ack 'hand' SIO events to unblock client emit queue gamer147 2026-06-02 16:41:40 -04:00
  • 672a89ed46 refactor(matching): IMatchingResolver shared by every do_matching family gamer147 2026-06-02 15:18:48 -04:00
  • 9f11896f7b feat(battle-node): polite Socket.IO close on waiting-room timeout gamer147 2026-06-02 14:05:25 -04:00
  • a6b9a942ab chore(battle-node): delete dead ScriptedProfiles.Opponent{Matched,BattleStart}Profile fields gamer147 2026-06-02 13:58:32 -04:00
  • 5c4e427fab feat(battle-node): clear RealParticipant outbound archive on session terminate gamer147 2026-06-02 13:10:15 -04:00
  • 10d9f74d05 feat(battle-node): add OutboundSequencer.Clear() for terminate cascade gamer147 2026-06-02 13:07:00 -04:00
  • 3991bcc653 feat(battle-node): bound InboundTracker with watermark-guarded sliding window gamer147 2026-06-02 13:06:08 -04:00
  • 898b872edd fix(rank-battle): route ai-start through the queue-time MatchContext gamer147 2026-06-02 12:28:42 -04:00
  • 24f9b2240e feat(matching): move BotRoster from hardcoded fixture to DB-backed seed gamer147 2026-06-02 11:58:19 -04:00
  • 8aead62116 fix(battle-node): revert Bot Matched/BattleStart push (corrupts OppoBattleStartInfo) gamer147 2026-06-02 11:23:13 -04:00
  • d87f9beb81 fix(rank-battle): use prod-verified bot cosmetic ids to unblock LoadOpponentAssets gamer147 2026-06-02 11:09:20 -04:00
  • 51e9dd2094 fix(battle-node): Bot mode must push Matched + BattleStart (client state-machine triggers) gamer147 2026-06-02 09:56:22 -04:00
  • 45c4461515 fix(rank-battle): use real rm_ai_setting.csv ai_id values in BotRoster gamer147 2026-06-02 09:41:38 -04:00
  • bf783639c1 fix(rank-battle): inherit BaseRequest so auth fields survive translation roundtrip gamer147 2026-06-02 09:29:48 -04:00
  • 8723cff998 test(battle-node): BotBattle_FullLifecycle integration test gamer147 2026-06-02 01:32:07 -04:00
  • fee84cca24 feat(battle-node): wire WS handler's case BattleType.Bot to real (Real, NoOp) session gamer147 2026-06-02 01:29:11 -04:00
  • a4685a9188 feat(battle-node): Bot dispatch arms in ComputeFrames gamer147 2026-06-02 01:27:08 -04:00
  • 07eb6f1c05 feat(rank-battle): AiStart returns ai_id + camelCase self/oppo_info gamer147 2026-06-02 01:24:04 -04:00
  • bb63b0df2f feat(rank-battle): real DoMatching with PvP pair + AI fallback mapping gamer147 2026-06-02 01:21:38 -04:00
  • 7c4aa89d45 feat(rank-battle): RankBattleController shell + DTOs + routing smoke tests gamer147 2026-06-02 01:19:02 -04:00
  • a55187e10e feat(matching): IBotRoster + hardcoded BotRoster fixture (8 bots, one per class) gamer147 2026-06-02 01:15:41 -04:00
  • 7eaf13893e feat(matching): MatchContextBuilder.BuildForRankBattleAsync for rank battles gamer147 2026-06-02 01:13:19 -04:00
  • b65cf81977 feat(matching): per-mode policy + AI-fallback branch in InProcessPairUp gamer147 2026-06-02 01:09:42 -04:00
  • 3866c93065 refactor(matching): extend PairUpResult with IsAiFallback flag gamer147 2026-06-02 00:57:25 -04:00
  • d7bb44973a feat(matching): ModePolicy registry for per-mode pair-up policy gamer147 2026-06-02 00:55:18 -04:00
  • b17c802581 feat(config): MatchingConfig section with AI-fallback threshold gamer147 2026-06-02 00:54:44 -04:00
  • 0095bdf0cf feat(arena-tk2): SoloDefaultsToScripted config flag for dev convenience gamer147 2026-06-01 23:48:14 -04:00
  • 8112b3f81f feat(arena-tk2): split do_matching success into 3007 owner / 3004 joiner gamer147 2026-06-01 23:24:13 -04:00
  • 0ecd565774 fix(arena-tk2): park returns 3002 RETRY + empty node_server_url gamer147 2026-06-01 22:50:48 -04:00
  • 43c0a6cf31 test(battle-node): PvP integration tests (handshake, gameplay, Retire, disconnect, timeout) gamer147 2026-06-01 22:30:01 -04:00
  • 225c20daeb feat(arena-tk2): PvP pair-up trigger via /do_matching, ?scripted=1 opt-in gamer147 2026-06-01 22:14:04 -04:00
  • 28b1d7531a feat(emulated-entrypoint): InProcessPairUp service for TK2 PvP matching gamer147 2026-06-01 22:06:49 -04:00
  • 0bb19320df feat(battle-node): WS handler Pvp branch with WaitingRoom gamer147 2026-06-01 22:02:21 -04:00
  • ca5a1e926d feat(battle-node): RealParticipant session-finished signal + Pvp cascade gamer147 2026-06-01 21:58:47 -04:00
  • 2789dc08cb feat(battle-node): WaitingRoom for PvP WS rendezvous gamer147 2026-06-01 21:55:11 -04:00
  • db054205b3 feat(battle-node): PvP TurnEnd broadcast + flipped Retire/Kill result gamer147 2026-06-01 21:51:27 -04:00
  • 72dc1887d9 feat(battle-node): PvP gameplay-frame forwarding arms gamer147 2026-06-01 21:46:28 -04:00
  • 8a97dd0194 test(battle-node): PvP handshake dispatch sees cross-perspective contexts gamer147 2026-06-01 21:41:35 -04:00
  • 875a4baa29 refactor(battle-node): move handshake phase reads to per-participant gamer147 2026-06-01 21:33:17 -04:00
  • ac78473a3e feat(battle-node): add RealParticipant.Phase for per-side handshake state gamer147 2026-06-01 21:25:11 -04:00
  • b75eb512ea docs(battle-node): refresh ScriptedBotParticipant <remarks> to match Phase 2 wiring gamer147 2026-06-01 21:23:09 -04:00
  • 560feb231a refactor(battle-node): generalise BuildMatched/BuildBattleStart for PvP gamer147 2026-06-01 21:16:11 -04:00
  • 2d7cee38d3 refactor(battle-node): drop old BattleSession; rename V2 -> BattleSession gamer147 2026-06-01 20:10:14 -04:00
  • 91472df6fc refactor(battle-node): cut handler over to BattleSessionV2 + participants gamer147 2026-06-01 20:07:45 -04:00
  • bbc3a47f7a test(battle-node): BattleSessionV2 dispatch covers Scripted-mode routing gamer147 2026-06-01 20:03:06 -04:00
  • b2f3d25be0 feat(battle-node): add BattleSessionV2 broker (unused yet) gamer147 2026-06-01 20:01:54 -04:00
  • d665f88067 refactor(battle-node): unify IMatchingBridge.RegisterBattle signature gamer147 2026-06-01 20:00:52 -04:00
  • acd0997cfb feat(battle-node): add RealParticipant wrapping WS + sequencers gamer147 2026-06-01 19:57:45 -04:00
  • fcdcc5d590 feat(battle-node): add ScriptedBotParticipant wrapping v1.2 burst gamer147 2026-06-01 19:56:01 -04:00
  • 553a79c795 feat(battle-node): add NoOpBotParticipant gamer147 2026-06-01 19:55:00 -04:00
  • 9079715da6 feat(battle-node): add IBattleParticipant interface gamer147 2026-06-01 19:54:03 -04:00
  • ae7ff25af0 feat(battle-node): add BattleType, BattleFinishReason, BattlePlayer gamer147 2026-06-01 19:53:31 -04:00
  • 479548fa56 test(battle-node): integration test expects three frames per cycle gamer147 2026-06-01 17:42:44 -04:00
  • 136149ed6b test(battle-node): wire-shape test for BuildOpponentJudge gamer147 2026-06-01 17:40:33 -04:00
  • 1ef101f851 feat(battle-node): push Judge after opponent TurnEnd so client transitions gamer147 2026-06-01 17:37:55 -04:00
  • 007513e55c test(battle-node): TurnEnd dispatch tests expect three-frame burst (TDD red) gamer147 2026-06-01 17:34:59 -04:00
  • 8a5b8b747d feat(battle-node): BuildOpponentJudge builder for v1.2 turn-end Judge gamer147 2026-06-01 17:32:22 -04:00
  • 70b2872589 feat(battle-node): add JudgeBody record for opponent turn-end Judge push gamer147 2026-06-01 17:30:00 -04:00
  • 5021217134 test(battle-node): wire-shape test + refresh stale comment for v1.1 gamer147 2026-06-01 15:20:48 -04:00
  • ff8e4abea8 test(battle-node): integration test drives two opponent-turn cycles gamer147 2026-06-01 15:04:21 -04:00
  • decdef29cf test(battle-node): TurnEnd cycle can fire multiple times gamer147 2026-06-01 15:01:19 -04:00
  • e30fdb7570 feat(battle-node): scripted opponent turn loop pushes TurnStart + TurnEnd gamer147 2026-06-01 14:57:49 -04:00
  • 96ae090a3a test(battle-node): rewrite TurnEnd dispatch test for two-frame cycle gamer147 2026-06-01 14:53:32 -04:00