MatchMaster/server/laf-cloud/main合并local后兼容性复查.md
2026-09-10 19:55:12 +08:00

7.7 KiB
Raw Permalink Blame History

main 合并 local 后兼容性复查

日期:2026-09-10。范围为独立 server 仓库;只合并、测试和复查,没有推送或部署。

最新范围调整:用户明确本次仅上线七日签到、新手礼包、战令,每日任务不进行上线操作。本文保留全仓审计历史,当前发布清单与限定范围验收以同目录 三模块上线范围与检查.md 为准。

合并方式

  • 合并前 main:8e4a9789188b1b85bc0162e8dacda6de61c5d209。
  • local:faf881a853e0c5e181e9a34c3f8baaae373fcb00,保留该分支及其历史,不移动、不删除、不推送。
  • 共同祖先:1dd0e9f23dd81faeb16566bcae3c34d3ff3e56ca。
  • 将 local 独有的 15 个提交压缩为 main 上的一个新提交。main 原有“更新战令”提交保留,不用 local 文件快照覆盖 main。
  • 两个冲突文件:functions/wx/KeFuInfo.ts、functions/wx/iosgetPayInfo.ts。客服下单同时保留战令订单字段和礼包统计快照;旧 iOS 查单同时保留战令专用发货状态及礼包埋点。环境配置沿用 local 的环境变量方式。
  • 测试加载器补充 @/passCheckUpgrade 真实模块解析;新增 4 项战令与礼包共存测试,未用空实现跳过战令校验。

与上次检查对照

项目 合并后结果 处理意见
战令接口/支付兼容缺失 已消除本次分支差异造成的问题。保留 main 的 passCheckUpgrade、passCheck 合并视图、订单版本/周期、固定价格、旧客户端补单过滤及领取保护 生产按完整合并版本核对,不再仅使用 local 版支付函数;不代表已完成真实支付联调
旧客户端每日任务协议 仍不兼容。dayTaskInfo/getTaskReward 仍使用 V2;当前 MatchMaster 客户端仍发送 levelPass/share/useEnergy/useProp 发布前统一新旧任务协议;旧字段请求不等同于 V2 taskId 请求,不能凭现有测试中的“legacy taskType”名称认定旧客户端兼容
V2 任务账号登录 本次补充确认的严重问题。main 保留旧任务刷新循环,V2 task.version=2 被当成任务对象写 value,触发 TypeError 需要单独修复登录与任务接口的数据格式兼容;该问题已在合并前 main 复现,不是冲突解决新增
七日签到收据衔接 仍未解决。后端查询自动领取,当前客户端依赖 canClaim、自行生成 ID,未处理服务端 todayClaim 恢复 修复断线/退出后同日恢复及第 7 天完成态补发;处理旧本地防重记录兼容
登录/支付环境变量 配置前提仍存在。IDCOUNT_NAME、小游戏 App ID/Secret、支付签名密钥等必须配置 不能只更新函数代码;检查 idcount 对应文档及原生 Mongo 访问能力
IAA 分库路由 部分接口固定访问 users;属于此前已存在的范围调整 只有已停用 IAA 才能作为预期变更放行;仍有 IAA 客户端时继续构成不兼容
drawHead.ts:35 仍有多余 ] 造成语法错误,前次两份仓库对照均已存在 不属于新增 merge 错误,但整仓发布前必须处理

1. 战令保护验证

新增测试位于 tests/rookie-gift.test.mjs:

  1. Android/原生 iOS 下单拒绝错误战令周期;正确请求保存 passVersion=2/passEnd,高级战令价格由服务端固定为 3000 分、数量 1。
  2. 旧 iOS 客服下单和 iosOrder→order 转单保留战令版本、周期和价格。
  3. wx/getOrderReward 拒绝用通用领取流程消费升级战令订单,订单保持待专用发货状态。
  4. 旧 iOS 战令查单成功后保持 state=1,等待战令专用发货;已经完成的升级订单继续返回兼容成功响应,且不产生礼包埋点。

上述 4 项全部通过。原有礼包测试继续验证礼包快照、跨周期支付、重试去重键及数数失败不阻断支付。passCheck.ts、passCheckUpgrade.ts、wx/getOrderReward.ts 相对合并前 main 无改动。

2. 任务数据导致登录失败的可复现路径

代码位置:functions/login.ts 的旧任务刷新循环(本次合并结果约第 206 行);V2 数据来源为 functions/dayTaskInfo.ts / dailyTaskService.ts。

  1. 任务接口写入 JSON.stringify({version:2,dayKey,...,dailyTasks,weeklyRewards}),同时 taskTime=Date.now()。
  2. 此账号再登录,若满足 timestamp > taskTime(旧登录逻辑的日刷新条件,跨日会触发),循环执行 task[key].value=0。
  3. 遍历 version 时实际执行对数字 2 写属性,抛出 TypeError: Cannot create property 'value' on number '2',登录无法返回成功。

验证使用真实 refreshTaskData 生成 V2 数据,沿用登录模拟框架,设置 taskTime=0 确定触发刷新,并以“登录应返回 code=1”为断言。合并结果失败;将登录实现替换为合并前 main 8e4a978 的代码,在内存中复跑同样失败。未把生产用户数据改成测试状态,未将这个已知失败行为写成应通过的业务测试。

注意:相较上次对 local 的检查,合并后的 login 不再自动把旧任务转换为 V2,但其他任务接口仍会转换,所以不能宣称任务问题已经消除。恢复 local 的登录刷新也只能解决登录格式问题,不能单独解决当前旧客户端任务协议不兼容。

验证记录

Node.js v24.11.1。运行:

$env:TEST_WX_PAY_NOTIFY_URL = 'https://sor779u2w8.sealoshzh.site/wx/payCallBack'
node --test --test-reporter=spec laf-cloud/tests/sign-in-activity.test.mjs laf-cloud/tests/starter-pack.test.mjs laf-cloud/tests/rookie-gift.test.mjs laf-cloud/tests/payment-routing.test.mjs laf-cloud/tests/monthly-card-renewal.test.mjs laf-cloud/tests/login-wucai-state.test.mjs laf-cloud/tests/wucai-migration.test.mjs laf-cloud/tests/jungle-treasure.test.mjs laf-cloud/tests/daily-task-v2.test.mjs laf-cloud/tests/task-reward-request.test.mjs
检查 结果
上述持久化测试集(含新增共存测试) 125 项,118 通过,7 失败,退出码 1
新增战令/礼包共存测试 4/4 通过,包含在 125 项内
V2 任务登录定向复现 合并结果 1 项失败;合并前 main 对照 1 项同样失败,不计入上述 125 项
TypeScript 语法解析 扫描 75 个 TS 文件,只有既有 drawHead.ts:35 语法错误;不是完整类型检查或云端构建
冲突标记、diff 空白检查 提交前检查,不保留未解决冲突

7 项现有失败仍为 Jungle 奖励表、领取资格、回调状态、下单及 usersAd 路由等 6 项,以及五彩迁移未付费状态判定 1 项,与上一轮失败名称一致。它们不因新增共存测试通过而视为解决。微信、数数、数据库均为模拟,没有真实扣款或生产联调。

发布建议

合并是代码整合,不是上线放行。先解决任务协议/登录和签到收据问题,再配置环境并进行正式发布验收。

现有 七日签到与新手礼包生产上线文档.md 基于旧 local 候选版本,不能原样视为本次 main 的发布清单。特别需要更新:

  • 保留战令相关依赖及所有支付保护;当前支付函数新增礼包共享依赖时也仍依赖 passCheckUpgrade。
  • 合并后 login 沿用 main 的旧任务实现,不应按旧文档声称它调用 dailyTaskService。
  • 补齐 IDCOUNT_NAME 和 WX_MINIGAME_APP_SECRET 的部署核对项。
  • 生产仍不发布 signInTestAdmin,不能按整目录覆盖时误带测试管理接口。
  • 新手礼包奖励数量仍由实际发布客户端决定,旧后端 README 数量与当前客户端不同的问题仍需核对。

本次保留用户要求的合并范围,没有擅自修复上述既有业务问题,也没有改动 MatchMaster 客户端工作区。