
== 1. 协议常量与边界口径 ==
  ✓ 协议版本 v1
  ✓ 桌容量口径 = 3-10 人
  ✓ 四轮下注枚举齐全
  ✓ 六种动作枚举齐全
  ✓ engineHash 基线与 E1 复核一致

== 2. 建桌 / 入座 ==
  ✓ 合法 table.create 通过
  ✓ capacity=3 边界（最小）通过
  ✓ capacity=10 边界（最大）通过
  ✓ capacity=2 被拒（低于 3）
  ✓ capacity=11 被拒（高于 10）
  ✓ minPlayersToStart > capacity 被拒
  ✓ bigBlind ≤ smallBlind 被拒
  ✓ 非法 chipMode 被拒（仅 space|free）
  ✓ 未知字段被拒（协议禁止扩展字段）
  ✓ 合法 seat.take 通过
  ✓ seatIndex=11 越界被拒
  ✓ 桌域消息缺 tableId 被拒

== 3. 发牌与四轮下注 ==
  ✓ 合法 hand.start 通过
  ✓ 合法 hand.hole（私发底牌）通过
  ✓ 非法牌面表示被拒
  ✓ hand.hole 缺 tableId 被拒（底牌必须绑定具体桌投递）
  ✓ hand.hole 标记单播（底牌不进广播信道）
  ✓ hand.settle 标记单播（只发结算模块订阅者）
  ✓ 合法 hand.street(preflop) 通过
  ✓ 合法 hand.street(flop) 通过
  ✓ 合法 hand.street(turn) 通过
  ✓ 合法 hand.street(river) 通过
  ✓ 非法 street 名被拒
  ✓ 合法 hand.turn（行动请求）通过
  ✓ 非法 legalActions 项被拒
  ✓ 合法 action(raise, 带目标总注额) 通过
  ✓ bet 缺 amountToSat 被拒
  ✓ fold 携带金额被拒

== 4. 摊牌比牌与结算事件 ==
  ✓ 合法 hand.showdown 通过
  ✓ 合法 hand.settle 通过
  ✓ 结算守恒校验通过（Σdelta=0、Σpots 一致）
  ✓ engineHash 与基线不一致被拒（fail closed）
  ✓ 筹码不守恒的 manifest 被检出
  ✓ 伪造 balanced=true 仍被 Σdelta≠0 检出
  ✓ 合法 hand.end（含 deckReveal 可验证发牌）通过

== 5. 错误模型与幂等键 ==
  ✓ 未登记的 error code 被拒
  ✓ 登记过的 error code 通过
  ✓ ENGINE_HASH_MISMATCH 错误码已登记
  ✓ hand 幂等键含 player（主席定稿强制项）
  ✓ 同手不同玩家幂等键互不碰撞（修复 B2a 资金安全缺陷）
  ✓ 手级幂等键格式正确
  ✓ 链上凭证幂等键 chain:txid:vout 格式正确

== 6. 多桌隔离与快照 ==
  ✓ 合法 table.state（含 per-player 视角字段）通过
  ✓ s2c 广播缺 seq 被拒（多桌事件有序性依赖 seq）
  ✓ 第二张桌独立 tableId 通过（多桌并发的协议前提）
  ✓ 大厅 list 结果通过
  ✓ 账户/托管余额视图通过
  ✓ 会话握手通过
  ✓ 会话应答（含 engineHash 协商）通过

========================================
协议一致性: 54 通过 / 0 失败（共 54 项）
========================================
