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

83 lines
7.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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`。运行:
```powershell
$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 客户端工作区。