# 百人赛生产发布清单 > 开期规则更新:登录和过关上报不再自动开期。升级已部署旧开期逻辑的环境时,先更新 `login`、`userLevel` 移除调用,再更新 `cloudRise/periods`,然后更新 `cloudRise/index`、`activityConfig/list` 并使用新版客户端。HomeScene 检查解锁门槛、无已开启活动及上期结束超过 12 小时后显式请求开期;首次参与免冷却。此说明替代下文历史检查中的“登录开期”,并不扩展黄金矿工的发布范围。 检查日期:2026-09-23。用户补拉线上代码后,重新以 **`main@8ab07ab`(更新N个复活礼包)** 为基线;检查对象为 `local@03d7b5f` 加本次登录兼容修正。旧基线 `0b9a0b9` 的结论由本次复查更新。未连接生产数据库,未部署、未 push。 ## 1. 发布结论 本次只上线百人赛:**新增 8 个云函数/内部模块,更新 1 个已有函数 `login`,准备 3 个集合**。按下表逐个发布 `.ts` 及对应 `.yaml`,不要整仓同步。 新版每日/周任务不在本次发布范围;`login` 继续沿用 main 的旧版四项任务刷新。黄金矿工已从本次必发的 `login`、`activityConfig/list` 移除运行依赖。其他文件中的黄金矿工实现仍保留,不能整目录部署后当作已经全局关闭。 ### 更新 main 后发现的差异 新 main 比旧基线修改了 `login` 和 5 个支付函数。发布范围和集合数量不变,但旧 local 的 `login` 缺少线上新增的 `reborn_Gift_2~5` 补单处理,以及所有五档复活礼包支付确认后的 `state=1` 标记。直接覆盖会回退线上行为;本次已将 main 的这两段逻辑补入 local,保留百人赛接入和黄金矿工屏蔽。 5 个支付函数为 `wx/KeFuInfo`、`wx/getOrderReward`、`wx/iosgetPayInfo`、`wx/iosorderPaySig`、`wx/orderPaySig`。新 main 包含五档定价、订单归属/支付状态校验、客户端确认发奖兼容及重复导入清理。它们不在百人赛发布清单内,保持线上新版 main;**不要用当前 local 的支付文件覆盖,否则会回退这些更新**。本次没有合并整条 main 分支,也没有改动这些支付文件。 ## 2. 精确函数清单与顺序 下列路径相对 `laf-cloud/functions/`;实际云函数名称以 YAML `name` 为准。 | 顺序 | 云函数名称(同名 .ts + .yaml) | 类型 / HTTP 方法 | 本次作用 | | --- | --- | --- | --- | | 1 | `activityConfig/store` | 新增内部模块,`methods: []` | 公共活动配置版本、开关与索引 | | 1 | `cloudRise/stats` | 新增内部模块,`methods: []` | 关卡统计数据,供对手模拟使用 | | 1 | `cloudRise/rules` | 新增内部模块,`methods: []` | 三阶段匹配、胜负、超时规则 | | 1 | `cloudRise/analytics` | 新增内部模块,`methods: []` | 数数埋点与失败重试 | | 2 | `cloudRise/periods` | 新增内部模块,`methods: []` | 登录建立个人活动期与配置快照 | | 3 | `cloudRise/index` | 新增玩家接口,POST | 匹配、开局、结算、状态和奖励回执 | | 4 | `cloudRise/admin` | 新增管理接口,POST | 初始化索引、发布配置;校验 `ADMIN_TOKEN` | | 4 | `activityConfig/list` | 新增日程接口,GET / POST | 只返回已登录玩家的个人百人赛期 | | 5 | `login` | 更新已有函数,保持 GET / POST | 登录开期,隐藏完整百人赛存档,屏蔽黄金矿工接入 | `cloudRise/index`、`activityConfig/list` 与当前客户端实际请求路径一致。不要使用旧文档中的 `cloudRise/cloudRise`、`cloudRise/cloudRiseAdmin` 等名称。 现有依赖 `Utils`、`jungleConfig`、`wucaiMigration` 已与 main 对比,源码无差异,保持线上版本。`userCoin`、`jungleTreasure` 也与 main 完全一致,**无需重复发布**。统计 JSON 已内嵌在 `cloudRise/stats.ts` 中,`data/`、`tools/`、`tests/`、README、配置示例均不是云函数。 新 main 已包含 `login` 的 `miniProgramWelfare` 字段初始化和缺省返回,因此它不再是本次相对线上的增量;福利领取接口仍未包含在本次发布中。 ## 3. 集合与索引 首次上线创建以下集合;如已存在则复用,不清空数据。 | 集合 | 数据与写入时机 | 是否需要预填 | | --- | --- | --- | | `activityConfigs` | 公共版本配置,百人赛使用 `activityId: "cloudRise"`、`recordType: "version"` | 需要发布一条有效百人赛模板,推荐调用 admin 的 `save` | | `cloudRiseSamples` | 每个玩家每期最多一条文档,`samples` 数组内最多三个已结算阶段,`_id = runId` | 不需要;空集合可使用内置统计冷启动 | | `cloudRiseRuns` | 整轮完成、失败、超时后的精简归档,不存对手数组 | 不需要 | 复用已有 `users`:增加 `cloudRisePeriod` 对象、`cloudRiseState` JSON 字符串;奖励余额仍保存在 `coinAmount`,不创建个人期集合、奖励集合或埋点集合。埋点待重试记录保存在活动存档中。已有 `order`、`idcount`、`ab_config` 等仍由原登录逻辑使用,无需为本次新建。 在 `POST /cloudRise/admin` 执行: ```json { "action": "setup_indexes", "adminToken": "" } ``` 该操作会调用以下 9 项索引创建;只有返回 `code: 1` 才算完成。 | 集合 | 索引 | 附加约束 | | --- | --- | --- | | `users` | `{ taskTime: 1 }` | 匹配资料池查询使用,不是启用每日任务 | | `users` | `{ onlyId: 1 }` | unique;部分条件 `onlyId: { $type: "number" }` | | `activityConfigs` | `{ activityId: 1, configVersion: 1 }` | unique;部分条件 `recordType: "version"`;名称 `activity_config_version` | | `activityConfigs` | `{ activityId: 1, recordType: 1, status: 1, effectiveFrom: -1, publishedAt: -1 }` | 普通索引 | | `activityConfigs` | `{ activityId: 1, "config.periodId": 1, publishedAt: -1 }` | 普通索引 | | `cloudRiseSamples` | `{ "samples.stage": 1, "samples.start_level": 1, "samples.success_num": 1 }` | 阶段样本数组 | | `cloudRiseSamples` | `{ uid: 1, periodId: 1 }` | unique;部分条件 `schemaVersion: 2`;名称 `cloudRiseSamples_uid_period` | | `cloudRiseRuns` | `{ uid: 1, periodId: 1 }` | 普通索引 | 上线前检查 `users.onlyId` 数字值没有重复,否则唯一索引会失败;不要为使索引通过而直接删除用户。配置、活动状态和样本由服务端维护,不给客户端直写权限。 main 中不存在百人赛模块,按本次首次上线场景无需运行配置迁移、旧样本迁移或历史归档精简。如果生产曾有 main 之外的人工部署记录,应先核对存量再决定,不能直接运行同时处理黄金矿工的 `activityConfig/migrate.cjs`。 **本次不创建 `goldMinerPlayerPeriods`,也不创建任何每日/周任务相关集合。** ## 4. 暂不发布的内容 | 内容 | 本次处理 | | --- | --- | | `goldMiner/` 全目录,包括配置、支付、管理、测试期、任务与网页 | 不发布,不设置 `goldMiner/trigger.json` 定时器,不发布黄金矿工配置 | | `userLevel` | 相对 main 的黄金矿工进度接入不发布;保留线上 main | | `wx/orderPaySig`、`wx/iosorderPaySig`、`wx/KeFuInfo`、`wx/checkIos`、`wx/payCallBack`、`wx/getPayInfo`、`wx/iosgetPayInfo`、`wx/getOrderReward` | 均不属于百人赛依赖,保持线上 main,避免引入黄金矿工支付分支 | | `dayTaskInfo`、`getTaskReward`、`dailyTaskService`、`dailyTaskConfig`、`dailyTaskDebug` 及每日/周任务配置 | 不发布、不迁移任务数据;这些源码与 main 无新增差异,不代表仓库内所有 V2 接口源码已关闭 | | `miniProgramWelfare` | main 之后的独立功能增量,本次不发布 | | `rechargeStats` 及 `recharge-stats.trigger.json` | main 之后的独立统计增量,本次不发布、不新增定时器 | 本次实际隔离改动: - `login` 不再静态导入黄金矿工支付模块,不执行黄金矿工查单或补发;遇到该类订单保留原记录并跳过通用商品补发,避免误发或误删。 - `activityConfig/list` 不再导入或查询黄金矿工;测试期开关、黄金矿工配置和历史数据都不能使其在此列表中出现。 - 新版每日/周任务的登录调用原本已注释,继续保持;旧版每日任务仍正常刷新。 上次检查时未提交的 `goldMiner/payment.ts` 测试商品校验、`wx/payCallBack.ts` 的 `pay_test` 分流,已由用户提交为 `03d7b5f`。本次仍不改动,也不纳入发布清单。 ## 5. 配置、上线验收与暂停 1. 按函数顺序发布,并在启用百人赛模板前完成集合和索引准备。此活动不需要新增定时任务。 2. 管理密钥实际读取 **`ADMIN_TOKEN`**,不是旧文档中的 `CLOUD_RISE_ADMIN_TOKEN`。复用已有值或在服务端设置,不下发客户端。 3. 保留线上登录变量:`WX_MINIGAME_APP_ID`、`WX_MINIGAME_APP_SECRET`、`IDCOUNT_NAME`,确认计数器记录存在;保留原有 iOS 补单使用的商户配置和私钥。百人赛本身不增加支付依赖。 4. 正式环境 `PAYMENT_APP_ENV` 应为 `production` 或保持未设置的生产默认行为,不用 `test`;正式模板 `durationHours` 必须为正整数小时。现有依赖 `thinkingdata-node` 需支持 `trackFirst/flush/close`,登录继续依赖 `ip2region`。实际生产安装状态需在控制台确认。 5. 对 `cloudRise/admin` 发送 `save`,参考 `functions/cloudRise/cloudRise-config.publish.example.json`:替换 adminToken、configVersion、periodId、startsAt、endsAt,核对正式门槛、时长和三个奖池。示例不是自动发布的生产配置;`startsAt` 必须晚于实际保存时间,版本标识不可覆盖。`enabled: true` 在请求顶层,不放进 config。 6. 模板生效后成功登录才创建个人期。`endsAt` 不会让模板自动停止以后登录的新开期;个人结束时间是登录开期时间加 durationHours。停止新开期时,将最新已生效版本记录的外层 `enabled` 设为 `false`,不要删除模板。已有个人期、挑战和待保存奖励继续有效;这是暂停新开期,不是立即清空所有活动。 7. 匹配资料池按用户确认保留 **超过 2 个自然月未活跃** 的现有规则:`users.onlyId != 当前玩家`、`0 < taskTime < inactiveBefore(now)`。没有符合条件的玩家资料时匹配会失败;`cloudRiseSamples` 可以为空,用户头像昵称资料池不可为空。旧客户端 PRD 中“三个月”的文字应以本次确认为准。 8. 达到门槛的专用账号执行:登录 → 携带 `users.onlyId` 和 token 查 `activityConfig/list` → `cloudRise/index` 的 status → prepare_match → cancel_match → 重新 prepare_match/confirm_match → begin/finish → save_reward → 下一阶段。检查仅有百人赛入口、99 个对手、同一期截止时间不延长、重复奖励上报不重复入账、失败/到期/三阶段完成后列表隐藏、下次登录才重新开期。 9. 检查普通登录和普通订单补发保持正常;确认没有黄金矿工查询、订单创建或定时器被新增。核对样本、归档、金币余额和真实埋点。匿名活动列表为空是预期行为,不能用空请求判断百人赛配置是否正常。 ## 6. 本地验证 以下回归覆盖百人赛状态与奖励、并发和重试、配置与索引、数数发送、个人期、活动列表隔离、登录隔离、当前客户端联动,以及本次新增的五档 iOS 复活礼包补单兼容验证: 重新验证结果:**140/140 通过,0 跳过**。新增用例先在修正前复现五档补单失败,再在补齐 main 逻辑后全部通过;同时确认黄金矿工订单不进入旧 iOS 商户补单。 ```powershell node --test --test-reporter=spec laf-cloud/functions/cloudRise/tests/cloud-rise.test.mjs laf-cloud/functions/cloudRise/tests/analytics.test.mjs laf-cloud/functions/activityConfig/tests/list.test.mjs laf-cloud/tests/login-cat-arr.test.mjs laf-cloud/tests/login-wucai-state.test.mjs laf-cloud/tests/login-ios-reborn.test.mjs node laf-cloud/functions/cloudRise/tools/generate-cloud-rise-stats.mjs --check ``` 统计数据与 `stats.ts` 校验通过;9 个发布函数及递归依赖的 TypeScript 语法、YAML 名称和依赖边界检查通过,无黄金矿工或新版每日任务 import。检查中已修正旧管理密钥测试名、统计生成器的旧路径、客户端测试漏加载 apiBaseUrl,以及与现有 2 个月资料池、main 的 users 登录路由不一致的旧断言;未更改这些业务规则。 这些是本地模拟及客户端源码联动测试,不证明生产集合、索引、环境变量或函数已经部署。仍须完成上述生产环境检查和专用账号冒烟。