Files
ft/CodexOutput/upserver/B3BatchMigration/执行TodoList.md
Liubing\LB 6813da149a feat(upserver): 保存M2客户端KV迁移至本人统计写检查点
保存独立KV用户服务、固定会话存档与原业务接线,以及C3d资料缓存和C3e本人统计写。
保留原PF/AGG路线、业务公式和时序;榜单读取、好友资料、公告、匹配及首场景闸仍待完成。

验证:ServiceHost两条件各33组646断言;Unity CLI Loop编译0错误269警告。
包含相关方案、评审裁决、测试及状态文档。未操作服务器、正式账号或打包。
2026-09-30 19:19:05 +08:00

125 lines
43 KiB
Markdown
Raw 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.
# 4B3B/C批量迁移执行 TodoList
> **2026-09-30 19:12 第六轮裁决落盘:C3d 通过+R2-S 附条件放行(原ZCode)**:①[C3d 交付](M2/M2-C3d资料缓存用户澄清与实施记录-2026-09-30.md)核证 13/13 hash 一致、代码与第五轮批准逐点吻合(GetPlayerLv 缺省1/GetPlayInfo 占位+SearchFriend/GetPlayLv 保持显式失败),双条件 24组491断言编译 0 错——**按批内规则关闭**。②对[本人统计写独立实施申请](M2/M2-C3c客户端剩余项核查与本人统计独立实施待裁决-2026-09-30.md)(R2-S)裁决**附条件允许**(替代第四/五轮写入侧挂起,读取侧不变):C1 键合同冻结(`LevelB`/`ContinentCode+LevelB` 为本人 KV 键、十进制字符串值,服务端照此对齐);C2 地区缺失仅写全球键(=原 PF 双同名退化净效果);C3 失败一律原日志路径后正常完成、异常不得逃出 async void;C4 ≥1 键接受时 await 一次既有 FlushAsync(全 pending 随行登记为已知差异);C5 不称两键原子;C6 SetLvData/AwaitSetLvData 公式时序零改动、PF/AGG 分支不变;C7 统计写完成≠等级榜完成,PF 统计聚合模式(Last/Max/Sum)登记一行服务端确认。生产仅 `LeadboardData.cs`,测试含真实类入宿主+`C3StatisticsWriteTests` 红测先行。③核查文档 §2/§3 立场确认(F1补充生命周期交接挂起到双闸同批、F7 删除须证迁移因果)。**主会话核 hash 后即可按此范围开工。**
> **2026-09-30 17:00 C3c 第五轮:可编码范围裁决落盘(原ZCode)**:用户裁定四项服务端事实挂起等服务器实现。原ZCode审核其余内容后[追加第五轮裁决](M2/M2-C3c剩余SDK接线独立差异审查-2026-09-30.md):**批准范围性编码许可**——唯一生产文件 `KVUserService.cs`:`GetPlayerLv` 对齐原默认 1、`GetPlayInfo` 恢复原占位/同引用/一次事件三段语义并**绑定已实测的 SearchFriend 为远端源**(code>0 且 info 非空→更新+发布,否则静默=原 PF 失败路径)、`SetPlayInfo` 替换语义、`ClearPlayInfos` 原版;`GetPlayLv` 维持现状(真实等级读取随事实①迁);配套 M2MergedGameplayTests+C3ProfileCacheTests 红测先行。**不批准**:LeadboardData/FriendService/FriendModel/TileNews/Duel/任何 LevelB·LastLogin 代码/PlayerKVClient 改动——全部挂起等四项事实;双闸维持。批内常规失败自修不送审,越界即停。
> **2026-09-30 16:52 C3c 第四轮确认完成(原ZCode)**:对[隔离边界修订与复审确认](M2/M2-C3c隔离边界修订与复审确认-2026-09-30.md)完成审核确认并[追加第四轮](M2/M2-C3c剩余SDK接线独立差异审查-2026-09-30.md):**§1–§3 确认准确**(跨账号实测 8 次 Get 带目标参数均只返本人数据,为隔离裁定提供网络实证;采纳澄清——业务路由的目标 ID 参数如 SearchFriend.PlayFabId 必须保留不得误删);§4 四项裁决:本人统计写客户端形状可预定(LeadboardData 单文件、两键同值、原时序/错误语义)**但与榜聚合键对齐后才可定稿**,好友字段投影/榜入口/公告/匹配四项待服务端事实。**整体未达可编码**——剩余四个具体服务端事实(①好友/资料路由字段名与缺键/失败语义 ②前50入口+键对齐 ③公告入口 ④匹配入口),到位后并入 C3c 送完整裁决。零编码、双闸维持。
> **2026-09-30 16:47 KV 读取隔离最终裁定+重设计审核意见已写入(原ZCode)**:用户最终裁定 **`playerdata/Get` 只能读本人、不可读他人**,与此相关逻辑需重新设计。原ZCode 按指示向[C3c 审查报告](M2/M2-C3c剩余SDK接线独立差异审查-2026-09-30.md)追加第三轮正式意见:①**第二轮"按对方 ID 读 KV"解锁作废**,禁止扩展 PlayerKVClient 加目标 ID 或任何跨玩家 KV 读取;②正确方向=**服务端侧投影**——服务端内部读各好友 KV 后经既有路由按原 PF 字段形状返回(入口不变/返回逻辑不变/值不变/存储迁 KV 全部吻合),客户端零新增跨玩家逻辑;③统计更新走本人 KV 写(不受隔离限制)+服务端聚合读取;④开发侧需按投影形状逐字段对齐原 PF 消费链后重写好友/资料接线方案送完整裁决;⑤服务端待确认维持四类(好友/资料字段投影、前50聚合、公告、匹配);⑥禁止以隔离为由降级/停用好友榜单功能。**整体"审核通过后才编码"门槛不变,零编码维持。**
> **2026-09-30 16:35 用户四项产品裁决(原ZCode 记录,供并入 C3c 材料)**:①**服务端入口没有变**——只是传入的参数值可能变(新 UserID),**返回逻辑不能变**;②**LevelB 的值也没有变**——只是存储地址从 PlayFab 移到 KV(原计算、原更新时点、原统计语义全部保持,客户端不得重算/派生/伪造);③**LastLogin 也是如此**——值语义不变(最近登录时间),存储从 PlayFab 档案移到 KV;④**SearchFriend 失败是服务器的部分,客户端应该按此执行**——客户端按既有路由与原消费契约接线,失败语义归服务端域,客户端不补失败测试、不新增失败处理分支。原ZCode 状态更新:未通过清单中 ⑤SearchFriend 失败语义**闭合**、②③LevelB/LastLogin 投影方式**闭合**(值不变+存储迁 KV,无客户端重算)、好友族入口**闭合**(路由已在、参数值换新 ID、返回逻辑不变);**剩余唯一事实缺口**=等级榜统计更新/前50聚合读取/公告/匹配四条原本走 PlayFab SDK 端点的能力"由哪个现有服务端入口承载"需指认(客户端代码内无对应非 PF 路由可猜,按铁律不猜路由)。待开发侧把四裁决并入 C3c 材料+四条承载入口指认后送完整裁决,通过后才编码。
> **2026-09-30 16:30 未通过项汇总供用户确认(原ZCode)**:接受[SearchFriend 正式实测增量](M2/M2-C3c第二轮裁决核验与SearchFriend实测-2026-09-30.md)(8 次正式请求,101/102 自查+互查四场景 HTTP200/code=1,四字段、目标 ID 原样、无 Unknown 字面、无 LevelB/LastLogin;两账号 KV 均无 LevelB/LastLoginTimeUtc/InfiniteBuildingData 键)——SearchFriend"存在 ID 场景"由离线兼容升级为正式实测,但不存在账号/非法 ID/失败语义仍未验、level=1 与真实等级不一致未定论。**未通过审核内容全量清单已交用户确认**:C3c 七项 SDK 残余(等级榜写/榜聚合/好友字段投影/LastLogin 投影/他人资料远端链含 KVUserService 三方法恢复/公告/匹配)+门槛性未通过(整体通过才编码)+四类待用户决策点(LevelB 投影方式、LastLogin 终选留联调与否、四类服务端入口交谁、SearchFriend 失败语义补测与否)。被否决方案(LevelB 暂存/查询重算/HomePanel await/邮件批量修复)列明确不可再入。
> **2026-09-30 16:28 C3c 第二轮修正完成(原ZCode)**:依[既有裁决与接口证据复核](M2/M2-C3c既有裁决与接口证据复核-2026-09-30.md)(用户确认服务器接口未变;主会话撤回"DB/KV 时间重选"提问),原ZCode向[C3c 审查报告](M2/M2-C3c剩余SDK接线独立差异审查-2026-09-30.md)追加第二轮修正:**修正三**——登录时间方向的准确状态是"按既有'先存 KV 后联调'阶段方向推进(复用 LastLoginTimeUtc、联调时再定终选),缺的是跨玩家字段投影事实,不是方向再决策"(前节"待用户确定"表述系待选项化错误,引用《先存KV方案》:5/:23/:41 核实);**修正四**——接口证据分两级:正式实测级(Login/playerdata/Get/Add/Accept/GetFriendsList 路由+四字段,HTTP200)与离线兼容级(SearchFriend 等 C3b 21组380断言、formalRequests=0)**均不是缺证据项**;真正缺证据的收窄为四类字段/接口事实(好友 LevelB/LastLogin 投影语义含缺键差异、统计更新+前50聚合、公告、匹配)。裁决级别②/③维持不变,不构成整批 PASS。**C3c 整体仍未通过、零编码。**
> **2026-09-30 16:25 C3c 裁决复核与报告修正完成(原ZCode)**:主会话对 C3c 报告[逐项裁决](M2/M2-C3c审查主会话裁决与资料缓存实施边界-2026-09-30.md)接受 R1–R6 并纠正两处表述;用户最新要求"全部审核通过后才可编码、未确定内容先与用户确定"已**撤回局部开工许可**。原ZCode[修正与状态补充](M2/M2-C3c剩余SDK接线独立差异审查-2026-09-30.md)已追加至报告:①如实更正本人错误——`LastLogin.Value` 空值抛 InvalidOperationException 非 NRE(与 P3a 同类的未验证断言,记录在案);②澄清原链跳过条件仅 Profile/Statistics 为空,缺 LastLogin 好友仍入列表、下游表现为异常路径,"缺时间就跳过"=扩大过滤明确禁止;③撤回状态独立核证干净(基线 28/28、C3ProfileCacheTests 不存在、零局部编码)。待确定事项表中"登录时间优先复用服务端 DB 时间"的方向与原 PF 语义吻合为合理候选,按流程待用户确定后并入 C3c 再审。**当前状态:C3c 整体未通过、五类 SDK 残余零编码、服务端四问为唯一解锁路径。**
> **2026-09-30 16:35 分模块修改清单已编制(原ZCode)**:核验全部完成后,将 PlayFab→KV 移植的全部修改按模块整理落盘为[分模块清单](M2/M2-PlayFab移植修改清单-分模块-2026-09-30.md)——当前工作树 111 修改+14 新增文件,分 A–J 十个模块(KV 基础设施/核心管理器/用户服务与身份/登录舞台/31 存档模块 202 项调用/业务服务/UI/活动系统/编辑器测试/其他),每项标注〔平移〕〔原样(含登记未修旧缺陷)〕〔待接线〕三性质;另列"已核减回原样"与"PF SDK 残余待 C3c 四问"两节防误读。
> **2026-09-30 16:20 C3c 独立差异审查已落盘(原ZCode,按用户铁律从严)**:按[纯平移统一审查入口](M2/M2-C3c纯平移统一审查入口-2026-09-30.md)完成一次性集中审查,报告见[M2-C3c剩余SDK接线独立差异审查](M2/M2-C3c剩余SDK接线独立差异审查-2026-09-30.md)。**28/28 基线 hash 一致**(清单 `7ACC6338…`)。R1 原行为基线 13/13 逐字符核证属实,**新发现两处等价陷阱**:`FriendService:150,153` 对无 Statistics 的好友整条跳过(KV 响应缺统计字段会静默清空好友列表)+ friends 项为 JSON 字符串四字段形状。裁决:R2 统计更新=③禁客户端先行改写;R3 好友列表=②(缺 LevelB/LastLogin 合同,反证否决"Level直接映射"与假时间)+榜聚合=③;R4 LastLogin 两候选来源未裁决保持;R5 他人资料形状恢复=①可批(远端源 SearchFriend 待实测)、公告=③、匹配=③。**R6 仅批准 KVUserService 三方法原语义恢复**(含 GetPlayerLv 默认值 -1→1 与异常类型差异修正),其余文件零编码直至事实到位。文末汇总服务端最小四问(统计更新+聚合入口/好友 LevelB+LastLogin 投影/公告入口/匹配能力)。待主会话核 hash 逐条裁决。
> **2026-09-30 14:45 审查侧铁律(用户指令,最高优先级)**:审查时**不可以的修改一律不通过**——任何会影响正常线上逻辑的改动都是高危,破坏会很恐怖。具体执行口径(对齐用户全局规则与 M2 合批 C2 案例):①逐 hunk 区分"授权改动"与"夹带变更",后者无论动机(更安全/更健壮/更合理/顺手修复)一律打回;②编译通过/合成测试通过**不构成**行为等价证明,必须对照迁移前基线核原始行为;③奖励、扣费、邮件、订单、支付等直接触碰玩家资产与线上数据的路径从严——宁可误杀送修订,不可放过变更;④异步化(void→Task)、新增 await、清列表/状态重置时机、失败分支重排、展示与通知后移是重点盯防项;⑤审查者对接口成员/行为声明的事实断言必须逐字符核对源码,不凭记忆(引以为戒:P3a CustomId getter-only 误判);⑥根因未定不用重跑成功抹掉首败。此规则适用于后续全部审查,含待命的四项 PF 能力承接接线核查(等级榜/好友/资料/匹配直接关联线上逻辑,为最敏感区)。
> **2026-09-30 14:40 定时任务已停止(用户指令)+ 整体进度盘点**:每30分钟监控任务已删除(共运行17轮,全程留痕于本列表)。截至停止时的整体状态:**个人存档纯平移编码+离线验证全部完成**(C1→C2d→C3a,见下方条目链),当前全局卡点=四项 PlayFab 能力的 KV 承接接线(等级榜聚合/他人公开资料/好友列表/匹配)——14:18 重申其为**迁移范围内客户端工作**,待审查侧一次性核查分类(漏接/可复用/真缺口)+必要的服务端能力事实;之后 C3 真实首场景验证(PF计数=0 才解双闸)→ C4 清账+批末全量独立复核 → 最终通关清单(移动端易盾/TapJoy、PlayerKV 改名、物理分层、Player 编译、P2-α 全体策略、打包)。**完成度估算:客户端已审纯平移编码 ≈95%,本合批 C1–C4 ≈85%,项目总体(至最终通关)≈72%**(主要不确定量=四项接线的实际规模)。详细里程碑列表见本次会话输出。
> **2026-09-30 14:30 定时进度更新(C3a 离线验证完成 + KV 替代范围重申;审查侧待命一项核查输入)**:[C3a 验证记录](M2/M2-C3a验证边界与执行记录-2026-09-30.md)(14:12)——KVGameLoadTests **90组2006断言0失败**、装备链 9组28断言、ExitRegression(临时 targets 补 IKVUserLifecycle 编译输入后)**10组35断言0失败**、非Editor工厂探针通过;C2d 组合 2177 项+20 项证据 hash 全部未被改动;两处首败(旧退出工程缺新接口、PlayerProbe 混入测试 partial)以仅存于 CodexOutput 的临时编译输入解决并留痕。**静态证据:首场景仍有残余 PF 调用**(`SetLvData→UpdatePlayerStatisticsAsync`、好友 `GetFriendsListAsync`、他人资料/匹配未接通)——PF 计数≠0,双闸依法保留。[KV替代范围重申](M2/M2-KV替代范围重申与剩余SDK接线集中核查-2026-09-30.md)(14:18)撤回"主要工作在服务端侧"的表述:等级榜/公开资料/好友/匹配是**迁移范围内客户端接线工作**;KVMgr 现仅 4 个 handle 操作、PlayerKVClient 仅个人 playerdata 三操作;已备好**给原审核AI的一次性核查输入**(五条规则:区分漏接/可复用游戏服调用/真实缺口三类,不重开产品问题)。另:此前防跑移核查标记的 AGENTS.md 增量确认为**用户授权的规则增量**(14:18 附 hash 单独记录),该疑点解除。**下一步=审查侧执行该一次性核查(待用户指令)或服务端能力事实到位。**
> **2026-09-30 14:15 当前状态独立审核(防跑偏核查,用户要求)**:因开发 agent 切换过 AI,原ZCode 对实际代码做了全面核查,报告见[防跑偏核查](M2/M2-当前状态独立审核-防跑偏核查-2026-09-30.md)。**结论:与纯平移裁决一致,未发现跑偏**——C2d 交付 113 项中 112 项与当前磁盘 hash 一致(封存后零代码改动);十项核减逐一实证落地(HomePanel 字节级零修改、PlayerSaveAction 零残留、邮件批量恢复原 HasRead/HasReward 旧缺陷保留、钓鱼/转盘仅换存储接口时序未动、Survey/Friend 原签名、Chat 仅 BOM 差异、AllRefresh 恢复逐活动容错、两 fixture 注入在位、store 接线完好)。**两项待用户确认的非代码事项**:①根 AGENTS.md 在 C2d 封存后 1826→2432 字节(内容为规则条文,文风似用户裁决——请确认作者);②会话期间根仓库新增 3 个提交(文档/测试归档+CLI Loop 工具链,无迁移生产代码)。C3 未开始,双闸保持。
> **2026-09-30 14:00 定时进度更新(C2d 后连续第三轮无新文件,仅刷新时间戳)**:最新仍为 C2d 交付(12:11),C3 未开始落盘,状态与 12:30 条目相同(核减完成、全绿离线验证、双闸保持、下一步 C3)。
> **2026-09-30 12:30 定时进度更新(C2d 纯平移核减完成,fixture 首败已解决)**:[纯平移主会话裁决与C2d实施记录](M2/M2-纯平移主会话裁决与C2d实施记录-2026-09-30.md)(12:11)——用户两次确认"审核完毕继续"作为依据。**核减 32 个客户端源码+2 个宿主测试文件**(按基线逐字节对照,非整树回退):Survey/邀请/商店/签到恢复原同步签名与通知顺序、邮件恢复原 HasRead/HasReward、钓鱼/转盘只换存储接口不动调用时序、Chat/FishingEventData 恢复原逻辑;**移除无消费者的 PlayerSaveAction 与收集状态**;HomePanel 零修改;TimeRefreshManager 的 LastLogin 哨兵适配保留(属 KV 时间戳前置)。两 fixture 经"原未启动 PF shell + PlayFabPlayerSaveStore 委托 kv-loop"注入后**首败解决**:耗能 19组85断言、奖励 55组243断言、M08-M23 28断言、B2-20 83断言/31实模块全过;ServiceHost 双配置 18组254断言(较 C2c 减少的 2组为已撤回的聚合/强制等待用例);**最终编译 0错误/269警告**;CLI 合并超时按单组重跑未当成功。邮件批量枚举、调用者不等待、跨系统崩溃窗口等**原缺陷登记待移植完成后另行授权**。用户 debugconfig 已恢复正式 URL(留证据)。**下一步=C3 真实场景验证;C4 批末全量独立复核仍未到。**
> **2026-09-30 12:00 定时进度更新(C2d 停在 fixture 首败后 30 分钟无新文件)**:最新证据仍为 11:29 的 final-compile(0错误/272警告)与首败"fishing validation: real recovery can write during pending"(`UserService.KVFishingValidation.cs:217`)。无 C2d 实施记录、无核减进度更新——开发侧应在处理"原调用行为↔KV pending 禁写合同"的映射裁决或已暂停。待其落盘后继续跟进。
> **2026-09-30 11:30 定时进度更新(C2d 纯平移核减执行中,首败已留痕)**:开发侧 11:16–11:29 连续落盘 C2d 证据——核减采用"git HEAD 原文+原基线 hash 校验"方式(脚本断言 HEAD 变体与原受审基线一致才作为对照,避免误回退接手前改动),含[按核证基线核减](M2/C2d-按核证基线核减.py.txt)与[活动原流程核减](M2/C2d-活动原流程核减.py.txt)两脚本。**最终编译 Success=true、0错误/272警告**(11:29)。**fixture 回归诚实首败**:fishing-consume 验证在 `UserService.KVFishingValidation.cs:217` 抛"Fishing validation: real recovery can write during pending"——核减回原调用行为后与 KV 底层"pending 期间禁止写"合同出现张力,属需要裁决的存储层映射问题而非可静默跳过;retry 结果文件为 0 字节(写入中断),超时后编辑器状态干净(playing/enabled/ready/error 均 false/null)。C2d 尚未出实施记录,核减仍在进行。名义 198/202 数字待核减完成后重新认定。
> **2026-09-30 11:00 定时进度更新(重大方向裁决:全流程纯平移,C2c 强化核减待执行)**:主会话 10:29–10:45 连落四份文档。①用户最新裁决"修改原来的逻辑……你需要的是平移即可"——**迁移只做存储提供方替换+新身份接线,不做业务修复/确认等待/防重入/展示延后/时序重排**,适用整个迁移流程(根 AGENTS.md 已由用户同步更新,C2c 组合 2177 项复核 2176 一致、唯一变化即该文件)。②[核减清单](M2/M2-纯平移范围纠偏与既有改动核减清单-2026-09-30.md)点名六类已实施强化须对照原行为收回:PlayerSaveAction 聚合/票据后展示、Survey/Friend 的 Task 化与领取锁、邮件 HasRead→RewardTaken 修复、商店/签到确认与订单去重、钓鱼/转盘调用者等待链、坏档抛错与 Chat 重试——保留 KV 存储/身份必要接线,逐块核减非平移行为。③[补单修订](M2/M2-C2c补单保留原异步存档流程修订-2026-09-30.md):**HomePanel 完全不改**(当前文本与 HEAD 一致,await 从未实施),三文件差异缩至两个 KVFishing 离线 fixture 注入。④[核证记录](M2-纯平移继续前核证记录-2026-09-30.md):用户已告知"审核完成可继续",但开发侧尚未定位该轮审查报告路径,已向用户请求定位——**当前卡点=报告定位**。定位后按序:核 hash→连续核减→原业务流程测试。数字名义 198/202 不变,但其中奖励链实现将按裁决回撤重做。
> **2026-09-30 10:30 定时进度更新(主会话恢复运转,差异审查推进中)**:停等约 12 小时后出现新动作——主会话 10:24 更新接手卡、10:25 落盘[差异方案业务流程保留补充](M2/M2-C2c差异方案业务流程保留补充-2026-09-30.md):两个 KVFishing 验证文件**只准修离线 fixture 注册/DI**(禁改正式钓鱼/发奖/扣费逻辑、禁弱化断言);**HomePanel 补单链被认定存在真实业务流程影响风险**——原链为补单发放→礼包拍脸→暂存奖励 Flush→ShowData→进度条→MaskClose,须拆分"持久化成功/奖励展示/普通界面收尾"三职责,失败不得阻断 MaskClose 卡死主页、不得永久冻结/静默丢队列/自动重放,无补单时保留原快速路径;"只加 await"不获承认零影响。补充与 09-29 三文件差异方案合并一次审查后再编码。数字不变:198/202+2/2 代码级、双闸保持。**下一步=合并审查裁决落盘后开发侧恢复实施。**
> **2026-09-30 10:00 定时进度更新(第二十三轮无新检查点,仅刷新时间戳)**:最新文件仍为 C2c(09-29 22:20),集中差异裁决停等约 700 分钟(近 12 小时),状态与 23:00 条目相同(198/202+2/2 代码级、双闸保持、钥匙在主会话侧)。
> **2026-09-29 23:30 定时进度更新(连续第二轮无新检查点)**:最新文件仍为 C2c 系列(22:20),集中差异裁决已停等约 70 分钟。批次钥匙仍在主会话侧:对[集中边界差异方案](M2/M2-合批-C2c集中边界差异与后续连续开发方案-2026-09-29.md)(旧 reward/consume 验证宿主 store 注入 + HomePanel 补单 await)作出最小范围裁决前,C2 无法收口进入 C3。数字不变:198/202 + 2/2(代码级)、ServiceHost 20组262断言、编译 0错误/272警告、runtimeVerified 全 false、双闸保持。若用户希望恢复推进,可指示主会话处理该差异单。
> **2026-09-29 23:00 定时进度更新(无新检查点,符合预期停等)**:最新文件仍为 C2c 系列(22:20 接手卡),40 分钟无新增。这不是异常停滞:C2c 之后的下一步是[集中边界差异方案](M2/M2-合批-C2c集中边界差异与后续连续开发方案-2026-09-29.md)(旧 reward/consume 验证宿主 store 注入 + HomePanel 补单 await,涉及白名单外文件)**等待主会话最小范围审查裁决**,开发侧按边界规则停在正确位置。裁决到达前 C2 无法收口进入 C3。当前数字不变:198/202 业务调用、2/2 即时消耗(代码级),ServiceHost 20组262断言、编译 0错误/272警告,runtimeVerified 全 false,双闸保持。
> **2026-09-29 22:30 定时进度更新(C2c 已落盘,调用迁移代码级收官)**:[C2c 实施记录](M2/M2-合批-C2c实施记录-2026-09-29.md)(22:18)——**业务调用累计 198/202(本段 +134)**:余 4 项中 3 项为 Club/Setting 已有固定 KV 提示路线(保留 PF 分支)、1 项无消费者待最终清理;**2/2 即时消耗真实等待链已编码**(扣饵确认后才咬钩、转盘扣费确认后才抽随机)。奖励动作回执收集落地 PlayerSaveStores:Survey/邀请/邮件批量(修为 RewardTaken+冻结未领集)/商店抵扣/订单回调/俱乐部签到全部改为确认后才展示;Chat 消费本次生命周期。验证:ServiceHost 双配置各 **20组262断言** formalRequests=0、编译 **0错误/272警告**、固定入口 M08-M23 28 断言 + B2-20 83 断言/31 实模块通过。**两条旧回归诚实首败未掩盖**:fishing-reward(GuideDataCenter.Init NRE)与 fishing-consume(MiniBP GetMiniBattlePassRecord NRE),根因均为白名单外旧验证宿主手动 new 对象缺 store 注入——开发侧已落[集中边界差异方案](M2/M2-合批-C2c集中边界差异与后续连续开发方案-2026-09-29.md)(含 HomePanel 补单 await),**待最小范围审查后才改**。检查点交付:97 改+12 增,原基线 2067 项不变,组合核对通过。C2 尚未宣布完成(真实奖励栈 UI 延伸、C3 验证未做),双闸保持。**估算上调:客户端编码约 92%,本批约 80%;下一步关键节点=集中差异最小审查→C3→C4 批末全量独立复核。**
> **2026-09-29 22:00 定时进度更新(C2c 验证证据已落盘,实施记录未出)**:新增三份 C2c 文件(21:57-21:58)——Unity 编译 **Success=true、0错误/271警告**(较 C2b 的 272 再减 1);[固定验证结果](M2/M2-合批-C2c-固定验证结果.json)显示两条受控验证用例通过:`M08-M23` 28 断言(仅 M08-M23 范围、共享容器未触碰)与 `B2-20` 83 断言(**31 个真实模块、双 epoch 受控事务**、fullB220=true、恢复成功、PF 禁用调用 0)。调用迁移台账仍为 C2b 的 **64/202**(进度 JSON 未更新,21:23),C2c 实施记录尚未落盘——开发侧应仍在 C2 验证/迁移段。无 C4/批末交付迹象。双闸保持。
> **2026-09-29 21:30 进度更新(C2b 已落盘)**:[C2b 实施记录](M2/M2-合批-C2b实施记录-2026-09-29.md)(21:25)——**调用迁移累计 64/202(本段 +42)**,余 138 business-store + 2 即时消耗。EventTokenService/AEventDataManager/FishingEventData 主体+PVP/魔药/弹珠/刮刮乐/锁链/迪斯科/存钱罐/EventPack/鱼竿配件等 14 生产文件迁移完成;坏档报错不再默认零余额、AllRefresh 失败汇总上抛。验证:ServiceHost 双配置各 **17组235断言** formalRequests=0,CLI Loop **0错误/272警告**,累计 47 项交付 hash `8F027C06…`,与原基线组合 2177 项核对通过,白名单外零漂移。两处首败如实记录(沙箱 File.Replace EPERM→StorageError、Node spawnSync EPERM 阻断编译,均经批准的本地提升运行解决,未改协议规避)。**开发侧自查发现两个即时消耗调用链真实缺陷**:`FishingBehaviorB` 未等消费确认即进入咬钩、`FishingTurntablePanel` 不论成败都标记已同步且已先抽随机值——下段须按方案修真实链路而非换方法名。速率 42 项/25 分钟,机械迁移余量约 1.5–2 小时;奖励链+Survey/Friend/Mail 仍是最重未完段。双闸保持,runtimeVerified 全 false 未虚报。**估算上调:客户端编码约 82%,本批约 55%,项目总体约 67%。**
> **2026-09-29 21:15 进度整理与开发状态确认(原ZCode)**:正式前审有条件 PASS 经[主会话 C0 裁决](M2/M2-合批正式审查主会话裁决与实施记录-2026-09-29.md)全盘接受(P2-1 定死 TimeRefreshManager 三分映射与 LoginTime 写入时点、P2-2 易盾/TapJoy 暂缓并登记移动端清账、P3a-d 全采纳),白名单 110+12 冻结,**编码已获批准并连续实施中**。[C1](M2/M2-合批-C1检查点与交付hash.json)(20:32)完成独立 KVUserService、两个窄契约、DI/生命周期、formal 宿主迁移,编译 0 错误/269 警告。[C2a](M2/M2-合批-C2a实施记录-2026-09-29.md)(21:00)完成 IPlayerSaveStore+两实现、40秒调度、LastLoginTime 机制、**22/202 项业务调用迁移**,ServiceHost 双配置各 16组215断言、KVGameLoadTests 90组2008断言、编译 0 错误/272 警告,累计 33 项交付 hash `7DF87736…`。审查侧实地抽查确认:三个新文件已存在、`SmallGameData` 已真实注入 store 且零 `PlayFabMgr.Instance` 残留、台账 `runtimeVerified` 全 false(诚实未虚报)。**当前 C2 继续中:余 180 项 business-store + 2 项即时消费 + Survey/Friend/Mail/UI + 动作回执收集;双阶段闸保持,C3 零 PF 计数全绿后同次解除;C4 一次全量独立复核。** 余量按代码量估计本批约完成 30%(22/202 调用+C1 全部),M2 整体编码进度约 75%。
> **2026-09-29 合批正式前审已落盘:有条件 PASS**:原ZCode按[正式前审提示词](M2/M2-合批原ZCode一次性正式前审提示词-2026-09-29.md)完成 hash 门控整批审查,报告见[合批正式独立方案审查](M2/M2-合批正式独立方案审查-2026-09-29.md)。基线独立复算 **2165/2165 零漂移 + 12 expectedAbsent 全部不存在**,manifest hash 一致。**批准在候选白名单 110+12 文件与方案 §2–§7 行为边界内连续编码,无 P1**;关键独立核证:83 个含 PlayFabMgr.Instance 文件 82 个入白名单(唯一例外 kv-loop 按设计不改)、台账 224 条路径全覆盖、邮件批量 HasRead/HasReward 旧缺陷属实(`InGameMailHandler.cs:448-468`)、Survey 十六进制%10 与代码吻合、tbfishingevent 1466 行实测相符。2 项 P2 为批内精确设计点(LastLoginTime 三分映射须在 TimeRefreshManager 显式 MinValue 判别、易盾/TapJoy 移动端链登记)+4 项 P3(双闸同步解除、AggUserService 白名单注记、Chat 时序验证、台账翻验)。审查者披露并更正上轮 P3a 事实错误(接口 CustomId 实为 getter-only,setter 修订必要)。不批准:奖励通关声明、聚合/资料/好友/匹配放行、Player/SignalR/线上验收。待主会话重核报告与 hash 后逐项裁决、冻结白名单即可开工。
> **2026-09-29 合批工作稿修订版独立复核已落盘**:主会话对预审作出[逐项裁决](M2/M2-合批预审主会话裁决-2026-09-29.md)(预审七项全部接受;EntityKey 因是 PlayFab DTO 须移出共用契约、Duel 三处同批迁移;GetDefaultName 取 min(5,长度)、Survey 十进制尾数 %10 映射 TailNumberList;正式 KV 只信冻结选择)后,工作稿修订版(17:47)把全部裁决落入正文。原ZCode[修订版复核](M2/M2-合批工作稿修订版独立复核-2026-09-29.md)确认:七项承接完整、LoginDays 六消费者链/TimeRefreshManager nullable/TailNumberList/EntityKey DTO 等新增声明抽验全部属实,并补充 `EvtAPISvrLoginSuccess` 三订阅者(Chat/Mail/RT)与发布顺序吻合的证据。余 3 项 P3:CustomId setter 表述失准(**后经主会话否决——审查者错误,接口实为 getter-only**)、生命周期契约出现第三个关闭名须定死映射、跨账号公开资料读取应补入集中问题单或明确延期。**无 P1/P2;P3 修正后可编制受审 hash 基线进入正式前审。**
> **2026-09-29 合批工作稿独立预审已落盘**:原ZCode按纠偏裁定对[合批工作稿](M2/M2-合批实施方案工作稿-2026-09-29.md)及合同矩阵/集中问题单做只读事实/问题吸收,报告见[预审意见](M2/M2-合批工作稿独立预审意见-2026-09-29.md)。事实底座**通过**:启动链六行声明、首场景自动链(Survey/AntiCheat/Friend/AIHelp/AutoRestart/RT恢复/LoginDays)、等级榜公式与SDK直调、新PlayerId来源(`PlayerKVLoginContext.cs:198`)逐项核证属实;用户三项新裁决(新PlayerId不映射、原接口沿用只集中确认新ID、等级分存KV)三文档口径一致且未越服务器边界。**新发现 P2-A**:`SetLvData` 地区榜名 = `ContinentCode+leadboardLevelName`,KV 无大陆码来源,地区统计名会静默与全局同名——须产品裁决或补来源。另 P2-B(DP1 的 R2/R3 修订与测试迁移义务未承接)、P2-C(FishingStage 授权等待是软门,身份发布须硬断言先于场景切换并覆盖 `AutoRestart`/暂停恢复两个 IsLogin 消费者)、P3-D(GetDefaultName 短 ID 崩溃)、P3-E(SaveBackend 再读取方向二选一)已列成 §4 七项清单供最终方案并入后送审。此为预审不构成编码许可;正式前审仍需 hash 基线+一次完整审查+一次裁决。
> **审核节奏纠偏(2026-09-29)**:[合批裁决](M2/M2-合批审核节奏纠偏-2026-09-29.md)已暂停 DP1 单独送审;下次合并双提供方用户服务、CP2B 首场景和同合同 CP3 调用,一次完整前审后连续编码,最终统一独立实施复核。缺线上合同先只读补齐;不因 DP1 底稿已写就另开一轮审核。
> **2026-09-29 DP1 独立方案审查已落盘**:原ZCode 按[集中审查提示](M2/M2-DP1原ZCode一次性完整方案审查提示词.md)完成一次性完整审查,重算 18/18 基线 hash 及清单 hash 全部一致(无漂移)。总裁决**限定通过**:方案 C 最小纵切成立——正式 KV 路径可在 DP1 内脱离 `PlayFabUserService` 运行时实例与 PlayFab SDK 调用(执行路径调用图已逐点核证),PF/AGG/受控验证/kv-loop 四通道不受损。无 P1 阻断;P2 三项需修订:R1 未决点1须落成确定裁决(DP1 的 KV 类**必须**实现 `IUserService`——`SmallGameData` 构造注入+`ClubService` 属性注入+`PFLoginAct` 注入三重 DI 证据,并附成员三分表:真实实现/如实未发布状态/显式失败)、R2 既有 formal 合成测试(ServiceHost Program/Stubs)迁移与三个不改文件的签名耦合核验义务须写入白名单、R3 `PFLoginAct` CustomId 下转 NRE 与 `QuitAct` 双下转失效须定死中立面机制(建议窄接口)。详见[独立方案审查](M2/M2-DP1独立方案审查.md)。待主会话重核 hash、逐项裁决并冻结精确白名单后才可编码。
> **DP1 待完整前审(2026-09-29)**:[独立 KV 用户服务候选方案](M2/M2-双提供方独立KV用户服务抽离方案-待完整评审-2026-09-29.md)、[18项 hash 基线](M2/M2-DP1受审基线.json)和[集中审查提示](M2/M2-DP1原ZCode一次性完整方案审查提示词.md)已备。待独立报告后核 hash、逐项裁决与定白名单;现阶段不改生产/测试代码。保留 PF/AGG、阶段闸和正式 101/102 准入限制。
> **2026-09-29 CP2B-T运输限定关闭**:九项交付hash 9/9一致,原ZCode[独立实施复核](M2/M2-CP2B-T独立实施复核.md)及[主会话逐项裁决](M2/M2-CP2B-T独立实施复核主会话裁决与限定关闭-2026-09-29.md)接受同租约普通GET/POST运输的限定交付。首场景闸、公开身份、真实线上业务接口、Player编译和SignalR另审;保留PlayFab路线并为独立KV用户实现编制完整方案。
> **2026-09-29 M2 CP3A限定关闭**:原ZCode独立实施复核已收,主会话重核交付10/10 hash并[逐项裁决](M2/M2-CP3A独立实施复核主会话裁决与限定关闭-2026-09-29.md)。仅原句柄/三原实例/B01两提示键及Editor直开PF单点属于本次关闭;CP2A Player编译、Editor真直开和CP2B首场景仍待证,阶段闸不变。下一批同合同合并完整前审与一次批末复核,批内检查点更新日志。
> **2026-09-29 M2 最终清账门槛**:将用户要求的全部开发期冻结/忽略路径纳入[最终处理清单](M2/M2-最终通关前临时门控与忽略路径清理清单-2026-09-29.md);每批登记新增绕行,完整评审和裁决后逐项恢复真实业务、验证并记日志,最终重扫、清闲置实现。清单未销账不得宣称整体通关;现有首场景闸与101/102安全准入维持。仅文档更新,未改本机服务器代码。
> **2026-09-29 M2 CP2A-C9 实施中**:正式登录/仅101、102现存KV档/原handle及阶段双闸已接入;合成89组1962断言、ServiceHost 9组86断言、Unity CLI Loop Editor 0错误/269警告。真实 Player 编译与原ZCode独立实施复核未完成,既有 `_cheatingScore` 白名单外阻断待补审;CP2A不关闭。未Play、未访问正式账号、未打包;最终闲置实现清理仍待后续。
> **2026-09-29 M2 CP1限定关闭**:原ZCode独立实施复核报告已落盘,主会话重核交付95/95 hash一致,并[逐项裁决](M2/M2-CP1独立实施复核主会话裁决与限定关闭-2026-09-29.md);独立复跑120组2733断言0失败,P3两项按证据限定接受。CP2正式接线仍待完整设计、独立审查及主会话裁决,未获批编码;最终闲置实现清理、旧Mgr停用和流程图未完成。固定http://s101.local:18080/,Unity仅CLI Loop,不用UnitySkills,暂不打包。
### 以下为历史检查点(以上方为准)
> **2026-09-29 M2 CP1-2最新状态**:修订2原ZCode报告已核19/19 hash并逐项裁决;CP1两源码限定实施及合成回归完成,待原ZCode批末独立实施复核,尚未关闭。加载84组1911断言、Context 23组279断言、B02完整13组544断言、隔离清理失败3进程5/8/8断言,均0失败。CLI Loop编译报告0错误/272警告,Success=null;前后非Play/非编译,接口反射探针受Restricted规则拒绝并保留限制说明。已有19份Client改动hash全部保留;CP2仍待完整设计审查,CP3–CP5及最终闲置代码清理未完成。 [CP1交付](M2/M2-CP1实施交付与CP2输入-2026-09-29.md) · [原ZCode复核提示词](M2/M2-CP1原ZCode独立实施复核提示词.md)。固定http://s101.local:18080/;不用UnitySkills,暂不打包。
### 以下为历史检查点(以上方为准)
> **M2当前执行门(2026-09-29)**:修订1独立审查及主会话15/15 hash、P2/P3裁决已完成;总路线通过,CP1–CP2未获编码批准。新增启动/认证/租约/Player绑定阻断已纳入[修订2方案](M2/M2-正式接线依赖补审方案-修订2-待评审.md),[19项受审基线](M2/M2-正式接线依赖受审基线-修订2.json)复算一致,待原ZCode按[提示词](M2/M2-正式接线依赖补审提示词-修订2.md)复审。复审后主会话逐条裁决;若CP1会成为闲置代码则并入CP2设计。此时不进入源码实施,不把旧Mgr/SDK停用视为已完成。
> **M2最新检查点**:[先移植后优化修订1完整方案](M2/M2-先移植后优化完整方案-修订1-待独立审查.md)、[15项受审基线](M2/M2-先移植后优化受审基线-修订1.json)、[原ZCode提示词](M2/M2-先移植后优化独立方案审查提示词-修订1.md)已完成;下一步是独立审查与主会话hash/意见裁决,**不是编码**。正式受控加载成功后Guard仍持有,需审查“正式路径成功Apply后释放再发布原handle、验证路径不变”的必要适配。
更新:2026-09-29。依据:F01–F12审查侧全部接受,M2[架构复审裁决与修复Todo R0–R6](M2/M2-架构复审裁决与修复顺序-2026-09-29.md)为当前推进顺序;以下E/B编号保留历史执行索引。正式地址固定http://s101.local:18080/,Unity CLI Loop,不打包。
> **最新用户纠偏覆盖下文旧R1描述**:先完成可逐项对照的管理器能力/调用迁移,保持Guard原位、原语义及已审四入口不变;只作真实后端合同所需的最小适配。Guard归属、KVMgr物理移动、生命周期抽象和代码清理留到迁移验收后的另案评审。下一步仍是修订完整迁移方案、交原ZCode审查并由主会话裁决;未批准生产代码。详见[策略最新段](M2/M2-管理器同生态位替代策略-2026-09-29.md)。
- [x] E0:阅读续裁决;主会话确认无新增流程分歧,按要求纠正文档口径与链接。
- [x] E1:复用既有只读扫描器,生成当前224处/81文件快照;旧223项全部映射,识别1处方法提取、1处内部调用新增,不覆盖旧台账。
- [x] E2:落盘224项分派分类及理由;区分首批、后续候选、限定已处理、保留PF和本次排除。该分派不代表全部上游已审。
- [x] E3:完成首批B01“通知提示与俱乐部已读状态”完整方案、3处存档调用规则及通知上游链、白名单和B→C依赖。
- [x] E4:完成批级自审、独立审查提示词、受审基线;同步入口和当前状态。
- [x] E5:审查会话一次完整批级方案审查;主会话核hash并逐项裁决后才能编码。
- [x] E6:在白名单内连续实施B01;合同内实现错误直接修复和回归,保留首败,不拆成逐调用审查。
- [x] E7:既有适用回归+本批业务/迟到回调/失败专项+Unity编译;形成一份批级交付。
- [x] E8:一次独立实施复核→主会话裁决关闭B01,更新剩余分类。
- [ ] E9:管理器优先迁移继续推进;四入口搬迁已审查、实施和限定关闭。M2旧方法/调用替代的合并设计仍在准备,必要业务适配不省略,不逐函数审批。
- [ ] E10:B范围具备后完成C加载发布/后端固定/定时暂停退出接线方案及实施;正式集成验收包含连续操作、动作收口和旧回调隔离。
- [ ] E11:按总清单处理身份/迁移政策/稳定性/tickets及4D/G4;外围迁移/SDK清理和平台验收保持各自前置,暂不打包。
首批只选3处存档调用,是因为实际展开包含整条通知授权异步链、多个UI入口和俱乐部红点内存/事件顺序;不为达到20–40个建议数混入奖励、支付或增加无关改动。批准范围不是“只改3行”。
当前下一步:主会话R1,准备“旧成员与调用方逐项映射+原handle受控交接+复用B01代表业务”的一份完整迁移方案。Guard及KVMgr物理位置不动。四入口限定关闭,M2复审尚未批准编码;修订1核心整包继续暂缓,不批准旧34文件实施。详见[修正后的顺序](M2/M2-架构复审裁决与修复顺序-2026-09-29.md)。
用户补充目标:KVMgr与PlayFabMgr同处**玩家存档入口**生态位。R1须一并审[全部旧Mgr成员的替代去向与保护先后](M2/M2-管理器同生态位替代策略-2026-09-29.md):先定完整存档合同,再按业务域连续替换调用;最低会话归属/加载准入/错误结果保护不可留到最后,T08等正式启用保护可在调用迁移后、默认切换前收尾。目标是最终旧Mgr运行调用/自动执行归零,不复制PF合档与SDK定时器。
R1必须逐项核实`CompareDatas`、`Awake`、40秒PF循环、暂停/退出与Editor测试循环的现状及KV对应行为,不能直接复制进KVMgr或预设新生命周期组件;旧路径保持到替代行为通过审查和验证。见[策略的具体核查点](M2/M2-管理器同生态位替代策略-2026-09-29.md)。
- [x] B02-D0:原核心进度只读盘点及修订1完整方案保留历史。
- [x] B02-D1:修订1独立报告读取、80/80核验、P2/P3与各项意见主会话裁决。
- [x] B02-R2-D0:管理器优先总路线、全部模块进度、旧方法替代必需合同落盘。
- [x] B02-R2-D1:四KV入口精确白名单、行为等价验收、检查点0–4及送审材料准备。
- [x] B02-R2-D2:原ZCode独立审查总体路线与四入口范围均通过,主会话87/87核hash、逐条裁决并批准限定实施。
- [x] B02-R2-CP0–4作者部分:四入口等价搬迁、必要回归、CLI编译、44项交付hash及复核材料已完成。
- [x] B02-R2-实施复核:原ZCode PASS;主会话44/44 hash及六项/P3逐条裁决,四入口段限定关闭。
- [ ] B02-Migration-Design:当前224候选/81文件只读重扫与逐项映射已完成,[M2底稿](M2/M2-旧方法与调用方合并设计底稿.md)已核实正式固定句柄交接和31模块正式绑定尚缺。继续按真实归属与失败语义补齐可审白名单、验收矩阵;完整评审后才实施,不把四入口完成当全部管理器替代。
- [ ] 正式停用旧Mgr与SDK移除:按依赖完成,最终核对直接引用、组件/自动执行、SDK类型/工程引用。
[修订2方案](B02/B02-管理器优先迁移方案-修订2-待评审.md) · [修订2提示词](B02/B02-独立方案审查提示词-修订2.md) · [旧审查裁决](B02/B02-修订1审查裁决与修订2范围调整.md)。