== 端到端冒烟：真实服务端进程 + 多桌并发 + 免费整手 ==
  [server] [poker-server] listening on http://127.0.0.1:8891
  [server] [poker-server] engineHash = d8b87237f4b9ec79ed9234843f6c8b1f0f610fc4220998db5bc60b409ea7726a
  [server] [poker-server] settlement = outbox(未配置；space 桌默认拒开)
  [server] [poker-server] ws 通道 = ws://127.0.0.1:8891/ws
  [server] [poker-server] 投递日志 = 未开启（POKER_EVENT_LOG=1 开启）
  [server] [poker-server] 行动超时 = 30000ms（env POKER_ACTION_TIMEOUT_MS，0=关；每桌可覆盖）
  ✓ 服务端进程启动成功
  ✓ 启动日志回带引擎基线哈希

  [桌 A] capacity=3 tableId=T-a3090dd8c478
  ✓ 桌 A（3 人）打满一整手后回到等待态（hand.end ×1）
  ✓ 桌 A 发牌/盲注/底牌事件齐全
  ✓ 桌 A 四轮下注推进至摊牌（street + showdown）
  ✓ 桌 A 每人恰好收到 1 条自己的底牌（1/1/1）
  ✓ 桌 A hand.* 事件 seq 严格递增（无跨桌污染）
  ✓ 桌 A 零 error 应答（实测 0 条）
  ✓ 桌 A 实际产生 12 次客户端动作（≥ 人数 3）

  [桌 B] capacity=4 tableId=T-6253815588e1
  ✓ 桌 B（4 人）打满一整手后回到等待态（hand.end ×1）
  ✓ 桌 B 发牌/盲注/底牌事件齐全
  ✓ 桌 B 四轮下注推进至摊牌（street + showdown）
  ✓ 桌 B 每人恰好收到 1 条自己的底牌（1/1/1/1）
  ✓ 桌 B hand.* 事件 seq 严格递增（无跨桌污染）
  ✓ 桌 B 零 error 应答（实测 0 条）
  ✓ 桌 B 实际产生 16 次客户端动作（≥ 人数 4）

  [桌 C] capacity=6 tableId=T-f5c16e00259d
  ✓ 桌 C（6 人）打满一整手后回到等待态（hand.end ×1）
  ✓ 桌 C 发牌/盲注/底牌事件齐全
  ✓ 桌 C 四轮下注推进至摊牌（street + showdown）
  ✓ 桌 C 每人恰好收到 1 条自己的底牌（1/1/1/1/1/1）
  ✓ 桌 C hand.* 事件 seq 严格递增（无跨桌污染）
  ✓ 桌 C 零 error 应答（实测 0 条）
  ✓ 桌 C 实际产生 24 次客户端动作（≥ 人数 6）
  ✓ 三桌 tableId 互不相同（并发隔离，实测 3 个）

========================================
冒烟结果: 24 通过 / 0 失败（共 24 项）
========================================
