e2d470d37f2ab06814fffa8f4280681cfa548f79
审查发现 C-1(阻塞):export_packets.js 的 snap() 直接存了 class.export.js get_deskinfo() 返回的 PushCards.playproc/seatlist——这两个 字段在服务端是无拷贝的活引用赋值,脚本却在整局跑完后才统一 JSON.stringify 写盘,导致中途出牌不断原地改写这两个对象,已存的 step5 快照被事后篡改成终 局状态。修法是在 snap() 里对 get_deskinfo 的返回值套一层已有的 clone()。这 是导出脚本"延后序列化"这个用法本身的缺陷,不动 server/。 同时按裁决引入固定种子:min_random 只在 class.paiju.js 的发牌洗牌里用到, 原始实现走 Math.random();改为在导出脚本进程内 monkey-patch 一个 xorshift32 确定性 PRNG(写法与服务端既有测试 test_flow.js 等一致),种子值 DEAL_SEED 写 成具名常量。连跑两次导出脚本,packets.json 逐字节无 diff。 test_fixture.js 补强三条断言:底牌"只发给部分座位"改为精确断言恰好1个座位; 新增 packetIndex/roomtype/step 自洽性检查;step5 快照的 playproc 回归锁直接 捕获本次的活引用污染类缺陷;deskinfo 阶段覆盖从"≥3个"改为显式钉死 [1,2,3,5,6]。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Description
No description provided
11 MiB
Languages
JavaScript
99%
HTML
0.8%
PHP
0.1%