feat(upserver): 保存M2客户端KV迁移至本人统计写检查点

保存独立KV用户服务、固定会话存档与原业务接线,以及C3d资料缓存和C3e本人统计写。
保留原PF/AGG路线、业务公式和时序;榜单读取、好友资料、公告、匹配及首场景闸仍待完成。

验证:ServiceHost两条件各33组646断言;Unity CLI Loop编译0错误269警告。
包含相关方案、评审裁决、测试及状态文档。未操作服务器、正式账号或打包。
This commit is contained in:
Liubing\LB
2026-09-30 19:19:05 +08:00
parent 1c0cdf7a99
commit 6813da149a
511 changed files with 151858 additions and 2376 deletions

View File

@@ -1,5 +1,323 @@
# 开发日志
## 2026-09-30 C3d:用户澄清后完成已审资料缓存与昵称头像接线
- 用户明确GetPlayLv暂不改变对外行为、不接远端查询;与第五轮范围性审核共同形成完整开工边界,先记录M2-C3d资料缓存用户澄清与实施记录,再红测后编码,无新增审核轮次。
- 生产仅KVUserService:同步缓存缺值1,异步等级独立沿原本人直读/缓存/未加载失败路径;资料缓存同一对象、本人同步事件、他人SearchFriend异步填充昵称头像。响应Level不写等级缓存;四项服务端能力与双闸零修改。新增私有填充重载有唯一实际消费者,无多余抽象或诊断残留。
- 红测17项预期差异,PF对照通过;最终ServiceHost NON_ANDROID与ANDROID+AGG各24组491断言、formalRequests=0。旧存档测试失败定位沙箱UnauthorizedAccess,换工作区临时目录仍复现,沙箱外相同测试通过;未改存档/跳断言,临时诊断已移除。
- Unity首次类型错误为真实ObscuredInt与宿主int差异,显式转换后复验。CLI重载后Node EPERM通过工具批准的沙箱外CLI执行;常规编译Success=true/0错、强制编译后C#错误筛选0,playing/compiling=false。实际程序集是HotUpdate.dll,时间覆盖最终源码;先前Assembly-CSharp时间对照误判已纠正。Console历史故障日志保留,不称整个Console无错。
- 开工2120项源码基线:仅KVUserService、M2MergedGameplayTests两既有项变化,新增C3ProfileCacheTests,其余2118项未变。首次失败及最终结果落盘,详情和交付hash见M2-C3d文件。未改服务器、未发正式请求、未Play/打包/提交Git,原工作树保留。
- 本子批实现与离线/Editor验证完成;四项实际接口/后续接线、真实首场景/跨进程恢复、冻结最终清理与C4仍待完成。入口/状态/TODO/总进度同步,不再要求重复澄清同一getter边界。
## 2026-09-30 C3c:第五轮更新状态核验,发现缓存默认值联动边界
- 用户要求确认四项之外的更新。已读取第五轮范围性裁决,报告hash E0A9A124F98F36EED1CA902A14F6D890E5528A52D58B12C86183D2A26369560F;原统一28/28、C3c 31/31、服务端交付13/13均一致。更新是审核许可范围,不是代码实施;C3ProfileCacheTests不存在。
- 接受GetPlayInfo的原引用/本人事件与SearchFriend昵称头像接线、SetPlayInfo替换、Clear规则及验证范围;四项服务端能力和真实远端等级仍挂起,首场景双闸不解除。
- 源码证明GetPlayLv直接调用GetPlayerLv:仅将后者未命中-1改为1会把前者未加载失败改成成功。与第五轮“GetPlayLv不动、默认1不得污染异步查询”冲突;建议同一文件最小解耦,保留原GetPlayLv行为,未擅自批准或编码。完整记录见M2-C3c第五轮状态核验与缓存联动边界-2026-09-30.md。
- 入口/状态/TODO/总进度同步,本轮无生产/测试/服务器修改、无新测试/网络/Unity/打包、无跨会话消息;现有工作树保留。
## 2026-09-30 C3c:完成四项PlayFab能力服务端开发对接文档
- 用户要求将等级榜、好友/公开资料、公告、匹配移植到KV或现有服务器,生成可直接交付服务器开发的文档。已统一列出原SDK方法/源码位置、原请求/消费行为、现有证据、拟议HTTP合同与JSON及缺值/失败/验收要求。
- 原LevelB保持,仅替换存储/读取提供方;已有接口优先复用。好友沿原路由补Profile,SearchFriend增加公开KV投影为兼容候选;公告明确游戏级作用域、SDK默认10条、旧发布时间/已读保留;匹配四步使用原DuelPVP及Tier/Map/Group/Details,保留3秒轮询、5秒Ready和原RT链路。
- 原PF后台统计配置和DuelPVP规则不从字段名称臆造;待服务端复用实际实现或原配置。公开资料/公告/匹配新增合同均是待审核提案,不是已部署事实,不代表C3c通过。当前入口/状态/TODO/总进度已同步完整对接文档。
- 文档JSON及嵌入字符串解析、成员ID一致性、引用路径和原受审基线均已核验,结果见M2-四项服务端开发对接文档受审hash.json。无业务运行测试结论;仅文档、清单、日志更新,生产/测试/服务器代码零修改、正式请求0、无Play/打包。未向其他会话发送消息,由用户交给服务端。
## 2026-09-30 C3c:更新当前待设计与接线清单,优先复用原接口
- 按用户要求将散落待设计项合为M2-C3c当前待设计与接线清单-2026-09-30.md,并将入口/状态/TODO/总进度指向该单一当前清单。四类接口工作与原有业务分开说明,旧受审文档和hash不重写。
- LevelB公式、统计名、更新时机、本人KV保存方向及LastLoginTimeUtc移出新设计事项。等级榜原GetLeadboardData/GetLeaderboardAsync入口已存在;只换数据提供方,拟HTTP路由不是必须新建。已有等价接口直接用,确缺字段/入口才最小补齐。
- 好友原GetFriendsList/SearchFriend继续复用;公告/匹配仍需等价调用合同,不因缺证据宣称服务器不存在或重做产品。原源码位置、最小候选改动、现有草案状态及合批审核/验证待办已列明。
- 上一轮只读参考本地服务器范围内检索:EventLeaderboardApi的event/GetLeaderboards属于活动榜;PlayerDataService中的LevelB引用位于注释代码,不能当运行能力证据。本地版本不代表线上版本,未修改服务器;本轮仅复核客户端与既有文档。
- 本轮生产/测试/服务器修改0、正式请求0、Unity/打包0;保持既有工作树。未向其他会话发消息,完整审核后编码门槛保持,不增加逐功能审核轮次。
## 2026-09-30 C3c:纠正等级榜设计范围,LevelB沿用原逻辑
- 用户指出仅需修改榜单读取入口,不应重新设计LevelB。接受纠正:原客户端计算和统计名称/更新时机固定,写入仅由PF平移至本人KV;新增设计仅为服务器等级榜读取合同。
- 复核LeadboardData当前源码:SetLvData计算后调用SetLeadboardData,再上传PF;不能把“客户端计算”说成已在KV存储。未要求用户重新确认统计键或新策略,不增加独立审核轮次。
- 范围纠正文档已落盘,上一份草案及原hash保留追溯;入口/状态/TODO同步。仍须C3c完整审核后编码,本轮未改生产/测试/服务器、未发正式请求。
## 2026-09-30 C3c:按用户授权设计等级榜读取与本人统计键合同
- 解释并锁定候选键:全球LevelB、地区代码+LevelB,同值Int32十进制字符串;保留原lv×100000+建筑计算及更新时机,LastLoginTimeUtc沿已有实现。不是整榜存在本人KV,也不再把LevelB定义为临时快照。
- 拟新增POST leaderboard/GetLeaderboard,复用现有CustomServerPost与正式租约;请求统计名/起始位置/数量,返回新UserID/零基位置/统计分数/公开资料。已区分活动榜,未新增管理器或跨账号私有KV访问。完整请求/返回/缺键/失败/候选边界及验收见M2-等级榜读取与本人统计键接口设计-待完整审核-2026-09-30.md。
- 旧PF后台同分、聚合更新、重置配置不凭源码猜测;具体两键写调用不复活已撤回的通用Flush方案。与好友合同合并原C3c完整审核,本轮不是编码许可,也不是接口已部署证明。
- 原28项/31项及好友设计6项hash复算全部一致;独立报告仍第四轮,hash为0E3858D94525FEE7564525F6150DF0B8D9AFD8F4F03DC659F3F16F87B6CAD92C。5段JSON示例解析通过,公式示例1200034核对通过;本轮不声称运行测试通过。
- 本次仅文档、受审清单及入口/状态/TODO/日志更新,现有工作树保留;客户端/测试/服务器代码零修改、线上请求0、无Play/打包、无跨会话消息。
## 2026-09-30 C3c:按用户授权完成好友KV服务端接口设计
- 用户允许本端设计好友服务器接口,由服务端负责修改。比较原路由扩展、独立批量接口、直接跨账号KV后,拟采用原GetFriendsList增加Profile;一次返回KV公开资料,原外层/字符串数组/四兼容字段保持。设计选择并非已部署事实。
- 明确Profile/Statistics的null、LevelB缺键空集合、时间缺键null、读取失败以及旧服务器缺Profile字段的区别;不改变原过滤/排序/名次/事件/伙伴邀请流程。登录时间阶段差异明确列入同一完整审查,不提前改每日刷新。
- 设计/6项hash落盘,JSON示例及其中好友字符串可解析。只有文档和接手状态更新,未提交Git、未修改客户端/服务端源码、未发线上请求;未向其他会话发送消息。服务器交付及客户端编码仍须完整审核通过。
## 2026-09-30 C3c:本人LevelB和登录时间KV存储获用户明确裁决
- 用户明确本人LevelB和LastLogin可以存KV,已记录独立用户裁决并更新当前入口,不再把存储许可列为疑问。复核现有KVUserService读取LastLoginTimeUtc及FishingStage在每日初始化后保存的实现,沿现有键和顺序,不新增同义键或更改更新时间。
- LevelB仍保持原统计计算/触发点;跨玩家数据仍由服务端公开资料/好友/聚合接口返回。具体合同完整审核后编码的门槛保持,本次未改生产/测试/服务器、未发送正式请求或写KV。
## 2026-09-30 C3c:第四轮核验与服务端事实确认单交付
- 已读取审核端第四轮:方向及修订§1–§3准确,四项服务端合同未齐,整体不可编码;本人统计写须与聚合键共同对齐,不单独开工。报告当前hash=0E3858D94525FEE7564525F6150DF0B8D9AFD8F4F03DC659F3F16F87B6CAD92C。
- 原28/28及31/31重算一致,前8项增量7项保持,唯一变化为审核报告追加第四轮;非生产漂移,旧清单保留。
- 完成[接口事实确认单](B3BatchMigration/M2/M2-C3c服务端接口事实确认单-2026-09-30.md):已有证据、四类待填真实路由/字段/缺键/失败响应、原消费约束均具体列出,不猜协议或改服务器。检查点JSON已落盘,未向其他会话发送。无生产/测试源码变更或新正式请求,无Play/打包。
## 2026-09-30 C3c:第三轮隔离边界修订与复审材料更新
- 读取审核端第三轮意见,明确本人KV仅当前会话,Get只传keys;测试目标ID没有进入生产代码,无需删除生产参数。Get实测不能当Set/Delete跨账号实测,业务SearchFriend原目标ID不可误删。
- 按新审核方向记录服务端好友/资料投影、本人KV写原LevelB统计、服务端榜聚合;具体协议/失败映射未完整,未开工。新增隔离边界复审确认,重写当前待确定事项去除旧重复要求,8项增量hash封存,原28/28和31/31核验一致。
- 本轮未修改独立报告、生产/测试/服务器或配置,无新正式请求、Play/打包;供审核端一次完整确认。
## 2026-09-30 C3c:用户授权KV跨账号读取实测
- 已实际使用101/102独立认证会话,双向各试JSON playerId/playFabId/userId及query playerId。8/8均HTTP200并返回本人:101=62、102=60,data摘要等于本人初始/最终基线,不等于目标。准确结论是这些参数未改变归属,非实测403拒绝;不外推其他公开资料接口不存在。
- 14次正式请求(2登录+2初始读取+8探测+2复读),KV/好友/资料写入0;脱敏JSON、[实测结论](B3BatchMigration/M2/M2-C3c-KV跨账号读取实测结论-2026-09-30.md)及增量hash落盘。未持久化Cookie/存档正文,未修改生产/测试/服务器代码,无Play/打包。
## 2026-09-30 C3c:本人KV接口隔离边界复核
- 用户要求确认客户端KV能否读其他玩家。源码PlayerKVClient.GetAsync仅keys/token,经当前认证HttpClient调用playerdata/Get,无目标玩家ID;KVMgr.ReadKV读取原handle本地快照,GameSessionBridge绑定账号Cookie/epoch。确认当前客户端私有KV通道只提供本人数据读取,没有按他人UserID读取的入口。
- 澄清实测:前轮101、102分别登录后读取各自KV;跨玩家查询走friend/SearchFriend,不是playerdata/Get。未做向KV接口传入其他玩家ID的越权拒绝测试,不能宣称已经实测服务器拒绝跨账号请求,也不能推断不存在其他服务端公开资料接口。
- 结论:本人KV存有某字段不等于好友可直接读取,跨玩家数据仍需服务端公开资料/好友接口按权限返回。此次仅源码与既有证据核查,无新网络请求、生产或服务器修改;完整审核门槛保持。
## 2026-09-30 C3c:第二轮裁决核验及SearchFriend正式只读证据
- 已接受报告第二轮纠正,保留既定时间阶段方向;报告仍明确非整批PASS,未编码。统一28/28、原C3c31/31、既有证据6/6重核一致。
- 依据已有普通请求及101/102测试授权,完成2登录+2本人KV读+4SearchFriend,共8正式请求。四次自查/互查ID正确,HTTP200/code=1;返回level均1、资料为空、无LevelB/LastLogin,对照本人KV等级62/60。未写KV或资料、未改好友关系;无正式不存在ID/错误响应结论。
- 已保存脱敏JSON、[本轮记录](B3BatchMigration/M2/M2-C3c第二轮裁决核验与SearchFriend实测-2026-09-30.md)及3项增量hash。没有生产/测试源码或服务器修改,无Play/打包。后续基于具体字段差异补齐同一C3c,不重复询问已测接口存在性。
## 2026-09-30 C3c:复核既有时间裁决与未变接口证据
- 根据用户提醒,回查先存KV后联调的原阶段决定;撤回再次要求用户选择好友时间DB/KV来源的问题。后续LevelB纠正不能扩大为撤销登录时间阶段方向。现有LastLoginTimeUtc仍保留原每日初始化时序,不宣称已证明好友时间等价。
- 用户确认相关服务器接口未改变,沿用既有正式101/102登录、KV读取、互加及好友列表证据;C3b SearchFriend等为真实客户端+内存运输测试,明确区分正式请求。好友未返回LastLogin/LevelB是具体剩余差异,不重问接口存在或新ID方向。
- 新增M2-C3c既有裁决与接口证据复核及6项增量hash供同次审查。完整审核门槛不变,生产/测试/服务器未改,未新增线上请求、Play或打包。
## 2026-09-30 C3c:复核审核端修正与状态补充
- 完整读取报告新增段落:两处技术纠正已采纳,明确C3c整体未通过、局部开工已撤回,无新增编码批准。报告当前SHA256:BBC257276CA74445DDF4D7B25FB8A13F00AAD6F2B032A37D52E90F6AAFFC7CCD。
- 主会话重新核统一基线28/28、原C3c31/31长度与hash一致;C3ProfileCacheTests.cs未创建。检查点见B3BatchMigration/M2/M2-C3c审核更新复核检查点.json。
- 已读审核侧分模块移植清单作背景,其中局部可批的旧措辞不覆盖最新完整审核门槛。好友登录时间来源问题仍待用户回复,不预选;接口事实集中保留,不猜测、不改业务。生产/测试/服务器均未改,未新发线上请求或运行Unity。
## 2026-09-30 C3c:撤回局部开工裁决,按用户要求完整通过后编码
- 已读取独立报告、实核28/28及原31/31基线;原拟只实施缓存可确认部分,用户明确要求所有相关内容先完整审核通过,故撤回该开工裁决。被中断前仅新增裁决文档,生产/测试代码未写。再次核统一基线28/28一致,C3ProfileCacheTests.cs不存在。
- 新增[M2-C3c完整审核前待确定事项](B3BatchMigration/M2/M2-C3c完整审核前待确定事项-2026-09-30.md),区分用户已定业务语义、尚需讨论的好友时间来源和必须由接口证据核实的事实。用户确定后交审核端,不以用户方向确认替代完整审核。无服务器修改或线上操作。
## 2026-09-30 M2 C3c:纯平移统一审查文档交付
- 按用户“完成文档,我会让AI来审查”完成[统一审查入口](B3BatchMigration/M2/M2-C3c纯平移统一审查入口-2026-09-30.md)。补齐首次/升级/建筑/延迟更新、统计请求、榜单/好友读取、原错误返回及UI消费的具体源码位置。
- 明确最新用户裁决优先;撤回临时快照和通用Flush候选,旧“查询时重算LevelB”和“不新增键”建议不得覆盖原统计时点。区分原客户端一次请求与未经证实的后端事务原子性,不引入额外事务要求。LastLogin和其他C3c能力保持同次集中裁决。
- 建立28项基线M2-C3c纯平移统一审查基线.json,SHA256为7ACC6338C044B8A6E503DEEC5256AE81589549C4E8872220EC63876B91E3A6EA;28/28字节数/hash一致,原C3c 31/31仍一致。独立报告尚未落盘,继续使用原报告路径,不拆多轮审查。
- 当前仅文档完成;没有生产/测试代码变更、服务器变更或新正式请求,无Play/打包。用户自行交审,本端未向其他会话发送消息。报告落盘后先核hash、逐条裁决,已批准同合同内容连续实施。
## 2026-09-30 M2:按用户纠正撤回LevelB临时副本方案
- 用户要求LevelB使用与PlayFab版本相同的处理方案。已重新核SetLvData、SetLeadboardData、GetLeadboardData和FriendService的统计消费链,记录[LevelB原语义裁决](B3BatchMigration/M2/M2-LevelB保持PlayFab原语义裁决-2026-09-30.md)。公式、更新时间、全球/地区统计、好友分数及异常流程保持,只替换KV提供方与UserID。
- 撤回上一检查点的临时个人快照及通用Flush实施候选,不再为其等待批准或另开审核。旧文档和hash原字节保留为历史;以本用户裁决覆盖。此前“允许先存一份”不能扩大解释为允许改变原统计能力。
- 无生产实现或正式KV写入需要回滚;本次只改文档/状态入口,保留现有工作树,不改服务器,不运行Unity、业务测试或线上请求。后续沿原C3c记录等价接口映射,不能自行拼榜、改业务或把临时副本当完成。
## 2026-09-30 15:55 M2 C3c:本人统计KV暂存实施增量完成
- 按用户“继续”完成阶段方案的具体化,新增[本人统计KV暂存实施增量](B3BatchMigration/M2/M2-C3c本人统计KV暂存实施增量-2026-09-30.md),并入原C3c同次审查/同份报告,不另开逐功能审核。生产候选仅LeadboardData.SetLeadboardData/SetLvData及using;测试限定ServiceHost五文件,链接完整真实类。
- 核到原UpdatePlayerStatisticsAsync错误回调为Debug.LogError+SetResult(null),原调用者继续复位isRefreshing。方案明确KV已知失败同样记录后正常完成,不能RequireAccepted/throw或新加finally改变原流程。复用固定store,一次Flush;如实记录会覆盖其他待写项、两键不提供事务原子性的限制,待同次审查明确裁决。
- 分数算法、原PF分支、原调用点保留;KV地区来源复用现有校验,未知地区不重复写全球键。LastLoginTimeUtc现有实现零变更,跨玩家投影与最终数据源留真实联调;临时快照、冻结恢复及闲置清理继续登记。
- [检查点](B3BatchMigration/M2/M2-C3c本人统计KV暂存方案检查点.json):原C3c受审31/31一致,原正式基线叠加C2d的Client 2122/2122一致;独立报告未落盘。未改生产/测试/配置/服务器,未运行新业务测试、发正式请求、Play或打包,现有工作树保留。下一步核原C3c报告和本增量hash,逐条正式裁决后连续编码。
## 2026-09-29 M2 CP2A-C14:总进度与待办整理
- 只读核对接手入口、开发状态、总12项Todo、4B3执行清单、M2方案与C13日志,形成[总开发进度与TodoList](总开发进度与TodoList-2026-09-29.md)。明确底层/代表业务与B01/B02/CP1仅限定关闭,CP2A合成及Editor通过但Player/终审未过,CP2B/CP3/CP4+5须完整评审后编码;T01–T12按依赖保留,T12的 `_cheatingScore` 源码修复状态更正为已实施但Player未验。当前单编码端、正式101/102未操作;本检查点仅文档,不改生产/测试源码、不运行Unity、不打包。
## 2026-09-29 M2 CP2A-C13:KVMgr反向依赖只读复核
- 用户要求确认底层依赖高层问题是否解决。当前 `Core/KVMgr.cs` 的四个入口仍直接调用 `PlayerKVGameLoadGuard.Reject`,并使用位于 `Services/PlayerData` 的 `PlayerKVGameSessionHandle`、`KVSnapshot` 和结果类型;Guard 文件仍在 `Services/PlayerData`,由 `PlayerKVGameLoadCoordinator.TryEnter` 进入、释放。当前两侧均属 `HotUpdate.asmdef`,编译无跨程序集分层约束。
- 纠正概念边界:Guard 本身仅依赖 `System`/`Threading`,不调用 `UserService`、Coordinator 或业务;因此不是“KVMgr直接调用高层Service”。但 `Core → Services/PlayerData` 的物理/归属方向仍未调整,不能宣布层级纠偏完成。按既有[同生态位替代策略](B3BatchMigration/M2/M2-管理器同生态位替代策略-2026-09-29.md),迁移阶段保持单一 Guard 的状态、四入口方法体和位置,待调用迁移稳定后再对 Guard/目录归属做独立完整方案评审与裁决,最终清理闲置实现。
- 本检查点只读,未修改生产或测试代码、未运行 Unity、未请求正式服务器、未打包;保留工作树。
## 2026-09-29 M2 CP2A-C12:单编码端执行已审 Player 条件编译补审
- 依用户要求确定单编码端:本端仅按已完整评审、主会话已裁决的单文件边界,修复 `FishingChallengeManager.ResetForKVLoad` 的 `_cheatingScore` 非 Editor 引用;其他生产文件未改。原文件 37862 字节/SHA256 `C0338925…`,现文件 37905 字节/SHA256 `B3CC1145093062C57F52C294684F89CC605996192C49046869954C28B29A584F`,差异只在该赋值拆分,`git diff --check` 通过。[实施与核验](B3BatchMigration/M2/M2-CP2A-Player条件编译补审实施与核验-2026-09-29.md)。
- KVGameLoadTests 89组1962断言0失败;ServiceHost 非 Android 9组86断言、Android+AGG 强制 Rebuild 后 9组86断言,均0失败/正式请求0。首次并行跑两配置造成同一输出目录文件占用,改串行;随后仅切换属性的增量运行仍输出 NON_ANDROID,不算 AGG,强制重编译后核到 ANDROID+AGG。Unity CLI Loop Editor 编译 Success=true、0错误/269警告。
- Unity CLI Loop 动态调用项目现有 `PlayerBuildInterface.CompilePlayerScripts` 时,初次辅助代码 `.Length` 误用导致动态代码编译失败;修正后被 `Restricted` 安全规则以 `DangerousApiCall: System.IO.DirectoryInfo` 在执行前拒绝。没有绕过或改用非 CLI Unity 自动化、没有生成 Player 编译通过证据或包。CP2A 继续实施中、待 Player 验证与终审。未 Play、未访问正式账号;CP2B/CP3 无新编码批准。
## 2026-09-29 M2 CP2A-C11:独立预复核与加速/双端方案可行性裁决
- 原 ZCode [CP2A 独立实施预复核](B3BatchMigration/M2/M2-CP2A独立实施预复核.md)已落盘,主会话复算实施清单19/19、Player 补审基线4/4一致,并[逐项裁决](B3BatchMigration/M2/M2-CP2A独立实施预复核主会话裁决-2026-09-29.md):接受合成层有条件通过,纠正报告对不存在且已排除的 `PlayerKVRuntimeLifetime.cs` 的误述;批准 `FishingChallengeManager.cs` 仅一处条件编译拆分的补充边界,尚未编码。CP2A 仍欠真实 Player 编译与终审,未关闭。
- 对评审侧[加速](加速模式裁决-2026-09-29.md)和[双 Agent](双Agent并行分工方案-2026-09-29.md)新方案完成[只读可行性裁决](B3BatchMigration/M2/M2-加速与双Agent并行方案主会话可行性裁决-2026-09-29.md):可合并同合同批级方案与文档;CP2B/CP3/CP4+5 未经完整前置评审及精确白名单,不能按现文直接编码或仅留终点复核。双端目前只能 A 完成已审 CP2A、B 只读做业务矩阵/完整方案;Survey/Friend 和 Player 补审文件归属冲突待解。保留工作树;本检查点仅文档/hash核查,未改生产/测试源码、未Play/正式请求/打包。
## 2026-09-29 M2 CP2A-C10:AGG合成回归
- 在C9源码快照上补跑ServiceHost Android+AGG:9组86断言0失败、正式请求0;非Android已同值通过。两者仅为合成宿主,不替代真实Player脚本编译。生产/测试源码未再改,19项交付hash及Player补审4项基线不变。CP2A维持实施中。
## 2026-09-29 M2 CP2A-C9:注销/发布竞态再核与快照更新(覆盖C6–C8数值)
- 在已获批 `UserService.KVLoad.cs` 中把 `kvFormalClosing` 置于清句柄之前,内部按epoch取句柄首先拒绝closing,成功加载后发布内部句柄再复核代际/撤销/同一对象;防止注销与发布交错把旧epoch重新暴露。ServiceHost 9组86断言0失败、正式请求0;KVGameLoadTests 89组1962断言0失败。Unity CLI Loop 最终 Editor 编译 Success=true、0错误、**269警告**(本次输出未逐条归因,不能沿用早前增量0警告描述),未Play/打包。
- 源码/测试19项hash重核19/19,新清单SHA256 `733BC3AFD45AA15D06A1A03601829B793012EBA1716BAC860B5AEB98D265BA1B`;因最终编译证据JSON更新,Player补审4项基线重核4/4,新清单SHA256 `DC912EC9A14D4BAB2C1AC4A6B4CC3F5BD7EAEB7240DAE2D5679A3E2F3CDB76D6`。已同步当前自验报告与原ZCode预复核提示词;C6–C8旧hash/增量警告计数保留为历史,不是当前交付值。真实Player目标和独立预复核仍待完成;未修改白名单外生产代码。
## 2026-09-29 M2 CP2A-C8:Player补审基线封存
- 将既有 `FishingChallengeManager.cs`、[单文件补审方案](B3BatchMigration/M2/M2-CP2A-Player编译阻断补审方案-待独立审查.md)、原CP2A裁决与CLI Loop Editor编译证据纳入4项受审基线;清单SHA256 `C14408BB3DDC47CE111FE8D25BEE36C2B889F6A5C0BEB1BEFF52B541CDA89069`。原ZCode预复核提示词要求先核此基线再裁补审,不修改白名单外生产代码。CP2A继续等待独立实施预复核和可行的真实Player编译方法,未关闭。
## 2026-09-29 M2 CP2A-C7:实施快照、范围审计与预复核材料
- [实施中自验报告](B3BatchMigration/M2/M2-CP2A实施自验与待复核边界-2026-09-29.md)、[原ZCode独立实施预复核提示词](B3BatchMigration/M2/M2-CP2A原ZCode独立实施预复核提示词.md)及[Player编译阻断单文件补审方案](B3BatchMigration/M2/M2-CP2A-Player编译阻断补审方案-待独立审查.md)已落盘。19项源码/测试hash重核19/19,清单SHA256 `6F0908CD22A9A22A078A91E1F96527CE466FE7373083BA209DCFD3767C052F92`;原37项受审基线重比26不变/11变化,11项全在已批准的既有生产文件白名单,新增 `PlayerKVRuntimeSelection.cs` 及 `.meta` 也在白名单。修复 `_cheatingScore` 未编码,CP2A仍实施中。共享入口、状态、TODO、批级和总清单已更新为当前检查点,保留旧历史记录及工作树。
## 2026-09-29 M2 CP2A-C6:最终现有目标核验与待审阻断
- 原 handle 在普通 UserService 的内部 `TryGetCurrentGameHandle(epoch)` 按本次结果消费,不留下闲置交接方法;KVHandoffReady持续复核同一对象。Unity CLI Loop 最终 Editor 编译报告已保存为[核验JSON](B3BatchMigration/M2/M2-CP2A-Editor编译核验.json):Success=true、0错误0警告;ServiceHost最终9组86断言0失败、正式请求0;`git diff --check` 通过。第一次把 PowerShell 布尔值写成 `true` 导致结果捕获文件为null,已用 `$true` 重跑并覆盖为有效JSON,不把首次捕获算验收。未Play、未打包或访问正式101/102。
- 真实 Player 编译尚无可用0错误证据:ServiceHost `PlayerProbe` 仅能证明非Editor能力表面编译,历史 `FishingChallengeManager.ResetForKVLoad` 在非Editor引用仅Editor声明的 `_cheatingScore`,不在CP2A白名单,不能顺手修。直接旧式 csproj 的只读编译探测先受沙箱SDK路径访问拒绝,提权后产生大规模引用冲突警告且非目标编译,已主动中断;未生成包。下一步准备精确补审材料及原ZCode实施复核输入,CP2A保持实施中。
## 2026-09-29 M2 CP2A-C5:未验证传输拒绝绿测
- 正式 handler 图对 `HttpClientHandler` 逐项核同一 CookieContainer、UseCookies 与禁重定向,并拒绝未审核 `SocketsHttpHandler`;合成 handler 仍供无网络测试。KVGameLoadTests 89组1960断言0失败,含现存档、共享内层、关闭故障和未验证传输。未访问正式地址。
## 2026-09-29 M2 CP2A-C5:未验证 Sockets 传输红测
- 正式 capability 仍能接纳未核 CookieContainer/重定向策略的 `SocketsHttpHandler`,虽当前生产入口只造 `HttpClientHandler`,但工厂合同不完整。新合成测试直接构造 handler、不发送请求,89组中此组按预期失败(1964断言)。下一步在获批 transport 文件拒绝该未验证类型,并复跑;同时 Player 目标仍有既有 `FishingChallengeManager._cheatingScore` 条件编译阻断,不能把 ServiceHost PlayerProbe 当真实 Player 编译。
## 2026-09-29 M2 CP2A-C4:三传输完整图绿测
- 在获批 `PlayerKVControlledLoadCapability.cs` 内对三 handler 全部 `DelegatingHandler` 内层节点作引用同一性校验,再允许首次认证发送;保留原单图循环检测。合成回归87组1961断言0失败,新增共享内层测试确认认证发送0。无正式网络请求;下一步继续审生命周期/关闭故障及目标编译。
## 2026-09-29 M2 CP2A-C4:共享内层 handler 红测
- 三传输审计发现原 factory 只比较 handler 根对象,两个不同 `DelegatingHandler` 可共享同一内层实例,违反各自所有权。新增正式工厂合成测试,要求首次 `account/Login` 前拒绝共享图;现结果87组、1失败、1957断言,证明当前会先发送认证。仅在获批 capability 文件补完整图的引用同一性检查,之后复跑。
## 2026-09-29 M2 CP2A-C3:正式启动与服务停留首轮接线
- 按获批白名单接入 Bootstrap 捕获及无 PF 组件分流、普通 UserService 正式 KV 加载/内部原 handle 检查点、31模块 Player 绑定、CustomServerMgr 空业务路由租约、PFLoginAct 和 LoginStage 双重停留闸。正式模式仍不公布 `IsLogin`/`IsAuthorized`,不初始化 Mail/IAP,不进入 FishingStage。合成 ServiceHost 发现非法数字未设置 KV 错误码,已修正;9组85断言0失败,正式请求0。KVGameLoadTests 86组、1956断言0失败。Unity CLI Loop 对当前 Editor 增量编译 Success=true、0错误0警告;此前首轮完整编译0错误、272条既有警告。`git diff --check` 通过;未 Play、未访问101/102、未打包。后续继续复核关闭竞态、Player 目标和实施边界,不将首轮接线视为CP2A关闭。
## 2026-09-29 M2 CP2A-C2:正式现存档门绿测
- 在获批的 `PlayerKVControlledLoadCapability.cs`、`PlayerKVLoginContext.cs`、`PlayerKVGameLoadCoordinator.cs` 内增加正式 `CreateForGame` 工厂、三传输共享 Cookie/禁重定向约束及仅正式加载适用的 `newCreate=false` 且非空门;Editor 验证工厂维持隔离。合成回归86组1958断言0失败,含新建非空、既有空、既有完整三分支;无正式网络请求。下一检查点实施启动模式捕获/服务准入前,先核现有时序及补必要红测。
## 2026-09-29 M2 CP2A-C2:正式现存档门红测
- 新增 `CP2AExistingArchiveTests.cs`,通过真实 Coordinator/Context 及合成 HTTP handler 核三种结果:`newCreate=true` 即使有完整数据仍拒绝、既有空档拒绝、既有完整档才交付原 handle;同时断言一次认证/一次 Get、拒绝前不触发 Apply 通知。旧85组均通过,新组因正式 `CreateForGame` 工厂缺失按预期失败,总86组、1930断言、失败1。只使用合成传输,未访问正式地址;下一步仅在批准的 capability/Coordinator 文件实现正式工厂和门槛,再跑绿测。
## 2026-09-29 M2 CP2A-C1:账号/模式红测
- 新增合成测试 `KVGameLoadTests/CP2ARuntimeSelectionTests.cs`,经真实测试宿主验证:旧84组全部通过,新增唯一一组因生产运行选择类型尚不存在而按预期失败;总85组、失败1、1912断言。测试约束缺省PF、精确KV地址、AGG拒绝、101/102规范身份及非法账号拒绝;未使用正式网络。
- 随后仅在获批新文件 `PlayerKVRuntimeSelection.cs` 实现不可变模式/地址/账号准入(含Unity `.meta`),测试项目链接真实源码;绿测85组1931断言0失败。没有修改其他生产文件、没有正式网络请求;旧工作树保持。下一检查点接启动捕获前先为分流/单次认证写合成红测。
## 2026-09-29 M2 CP2A-C0:独立方案审查裁决与收窄批准
- 原ZCode [CP2A独立方案审查](B3BatchMigration/M2/M2-CP2A独立方案审查.md)已落盘(报告 SHA256 `47C412B6F8F29BB09979A5C95EAE31CFBA57DE0810C8FC4BAC6D9ACB9F36D521`);主会话独立复算受审基线37/37长度及SHA256一致,详见[核验](B3BatchMigration/M2/M2-CP2A主会话hash核验.json)。
- [主会话逐条裁决](B3BatchMigration/M2/M2-CP2A独立方案审查主会话裁决与实施边界-2026-09-29.md)接受六项总方向,处理四条P3;报告“12项”与受审表13项上限的计数差异已核。P3-4采纳复用现有生命周期,不批准新RuntimeLifetime文件,正式获批上限为12个生产文件。P3-2创建时间/配置hash版本令牌不采纳,用稳定本地decoder令牌。
- CP2A仅获批非AGG、101/102已有KV档的正式登录与原handle交接,必须阻止进FishingStage;不开放Mail/IAP/业务API或公开IsAuthorized,不自动操作真实账号。未动生产源码,下一检查点按白名单先做合成红测再实施;Editor/Player编译及关闭故障均属验收。旧工作树保留,Unity仅CLI Loop,不用UnitySkills,暂不打包。
## 2026-09-29 M2 CP2-D2:首批范围定稿并送独立方案审查
- 用户再次明确首批账号仅101、102,且选择 CP2 首段只验正式登录/原 handle 交接、阻止进入 `FishingStage`。已据此形成[CP2A完整候选方案](B3BatchMigration/M2/M2-CP2A正式登录与原句柄交接完整方案-待独立审查.md)、[首场景只读依赖表](B3BatchMigration/M2/M2-CP2首场景自动依赖核查-2026-09-29.md)和[原ZCode审查提示词](B3BatchMigration/M2/M2-CP2A原ZCode独立方案审查提示词.md)。
- 受审基线37项长度/SHA256重新计算37/37一致,清单SHA256为 `B36C685EB9E9571DEFA383395EAD61CB86143CB9762FAE4FF208CF49F44A411A`。未见 CP2A 独立审查报告,故 CP2A 仍待评审且无生产代码白名单批准;不以修订2“前置盘点通过”替代完整审查。
- 此检查点只改文档与hash清单;未改任何 CP2 生产/测试源码,未访问正式地址/账号,未用 Unity、未打包。已知工作树改动保留;下一检查点先读原 ZCode 报告并核受审 hash,再逐项裁决。
## 2026-09-29 M2 CP2-D1:首场景静态链纠偏
- 沿 `PFLoginAct→FishingStage.StartAsync` 核出初始 `mail/fetch`、Friend 邀请数、AntiCheat 检查及条件性 Club 读取;`FishingStage` 构造的 `SurveyService` 立即访问旧 `PlayFabMgr.Instance`,`LeadboardData.SetLvData` 仍走 PlayFab 排行榜,问卷匹配还将 `UserId` 当十六进制 PF 身份。已修订[CP2 设计输入](B3BatchMigration/M2/M2-CP2正式接线设计输入与新增阻断-2026-09-29.md),撤回“仅接正式登录即可进入首场景”的候选验收表述。
- CP2 分段合同仍须完整方案独立审查:若只验正式登录/原 handle 交接,应在跳场景前明确关门;若验首场景,就把这些同步/自动路径列入同批白名单和测试。当前未获 CP2 编码批准;没有访问正式接口/账号、没有生产代码改动或打包。
- 本次只读事实封存为 `B3BatchMigration/M2/M2-CP2-D1源码事实基线.json`,30项文件长度及 SHA256 另次重算 30/30 一致;它不是完整方案受审白名单。
## 2026-09-29 M2 CP2-D0:正式接线只读核查与账号边界
- 用户确定首批仅已核准且已有 KV 档的账号;未核准、新建或无档账号必须停止,不自动建档、不静默回退 PF。该裁决已写入[CP2 设计输入与新增阻断](B3BatchMigration/M2/M2-CP2正式接线设计输入与新增阻断-2026-09-29.md)。
- 只读核查补出正式实例准入、第31模块 Reset、`IsLogin`/`IsAuthorized` 与 `UserId` 语义、登录后立即 `mail/fetch`、AGG PF 资料写入及 GameLoaded 后 Close 故障等缺口;列出三种接线方案和推荐方向。原修订2仅批准 CP2 依赖盘点,以上仍需完整方案独立审查及主会话裁决。
- 本检查点仅新增设计输入和源码 hash 草案,未修改 CP2 生产/测试源码,未请求正式地址或账号,未运行 Unity、未打包。保留既有工作树;下一检查点完成首场景 API/PF 调用清单与精确白名单,再封存受审 hash。
## 2026-09-29 M2 CP1-3:独立实施复核主会话裁决与限定关闭
- 原ZCode独立实施复核报告hash F4871E2B…;主会话重新核交付95/95长度与SHA256一致,原19份Client改动保持。逐项裁决七项及P3两项,见[CP1关闭裁决](B3BatchMigration/M2/M2-CP1独立实施复核主会话裁决与限定关闭-2026-09-29.md)。
- 审核者实际复跑加载84组1911、Context23组278、B02 13组544,合计120组2733断言0失败;清理失败3进程未被审核者重跑,不算入独立复跑。GameLoaded后关闭失败没有专项用例,列入CP2会话验收;旧屏障故障保留语义不被描述成资源全部释放。
- CP1限定关闭,仅指合成环境加载交接;CP2正式启动/认证/工厂/绑定/路由及账号政策仍需完整方案独立审查,未获批编码。无正式接口/账号操作,不进Play、不打包、不改生产源码;下一检查点进行CP2设计。
## 2026-09-29 M2 CP1-2:补验、边界核验与批末交付
- 最终封存复算:交付95/95长度与SHA256一致,已有Client改动19/19保持原样,CP1-final-verification.json为本检查点最终证据;CP1仍未关闭,CP2仍未获批。
- 加载最终84组1911断言、Context 23组279断言、B02完整13组544断言、清理失败prepare/schema/apply隔离进程5/8/8断言全部0失败。准确记录初次B02只跑1组及新测试属性编译首败;不把首败或未覆盖项隐去。
- CLI Loop已完成强制编译,报告ErrorCount=0、WarningCount=272、Success=null;前后本项目非Play/非编译。错误日志唯一项为不支持get-project-info。只读反射加载接口探针被Restricted规则拒绝,保留原返回,不绕过限制,不声称探针/Player目标通过;Editor.log文件读取受访问限制,已用允许的CLI日志查询完成诊断。
- CP1-scope-verification.json:已有19份Client修改全部hash一致,新生产差异仅获批两份文件,受审19项中的其余17项保持原字节;Guard/KVMgr未改。git diff --check通过。
- 落盘[交付说明](B3BatchMigration/M2/M2-CP1实施交付与CP2输入-2026-09-29.md)、当前交付hash及[原ZCode复核提示词](B3BatchMigration/M2/M2-CP1原ZCode独立实施复核提示词.md),更新接手卡/入口/状态/TODO/批量及全局待办/机器状态。CP1待批末复核,CP2待完整方案审查;最终无用实现清理仍是后续交付门。
- 没有正式请求、真实账号操作或付费;不进Play、不打包、不动git索引、不提交。下一检查点由原ZCode产出CP1独立实施复核报告,主会话再核交付hash并逐项裁决。
## 2026-09-29 M2 CP1-1:合成加载交接已实现,进入补验
- 生产改动严格限定Context和Coordinator;新增内部原handle出口,正式/验证共用加载主体,Guard Dispose与GameLoaded发布受closeGate串行,Revoke同步清除发布引用。Guard/KVMgr源码未动。
- CP1-red.log:78组中唯一失败为正式加载应释放Guard;既有77组通过。新增测试编译首败为测试误用Success,已改用实际Accepted属性,未因此更改生产API。CP1-green.log:84组1911断言,0失败。
- 补验继续:把发布竞争屏障准确移到原handle获取时、B02四入口和隔离清理失败回归、CLI Loop编译及边界核验。CLI可连接,但get-project-info并非当前服务支持的工具,改用其实际提供的只读状态查询。尚未批末独立复核,不称CP1关闭。
- 无正式接口/账号写入,不进Play,不打包;已有工作树修改保留。
## 2026-09-29 M2 CP1-0:修订2复审核验与限定批准
- 原ZCode修订2报告已落盘,主会话19/19长度及SHA256一致,报告hash AA8B72D5…;逐项裁决CP1、CP2、P2-1、P3-1及修订1遗留项,见[M2修订2主会话裁决](B3BatchMigration/M2/M2-修订2独立复审主会话裁决与CP1实施边界-2026-09-29.md)。仅批准Context+Coordinator两份生产源码和合成测试宿主;CP2仍待完整方案审查。
- 已明确三个接口消费关系;TryAcquireGameHandle仅由Coordinator内部消费。每检查点记录验证,批末交原ZCode复核,最终删除闲置实现。现有Client改动hash已保存;截至此检查点尚未修改生产/测试源码。
- 固定http://s101.local:18080/;Unity CLI Loop、不用UnitySkills、不打包、不访问正式账号/接口。
## 2026-09-29 M2会话交接检查点
- 用户希望在本轮后重开主会话,避免长历史反复压缩。已核M2目录尚无修订2独立复审报告;创建[M2新主会话接手卡](B3BatchMigration/M2/M2-新主会话接手卡-2026-09-29.md),列明当前结论、下一动作、审批门和工作树保护。此检查点仅文档,不改源码、不运行Unity/正式接口。
## 2026-09-29 M2检查点0续:修订1审查裁决与正式接线依赖补审
- 原ZCode修订1独立方案报告已读取;主会话重算15/15受审hash一致,逐条处理P2-1及P3×3。接受“先移植后优化”总路线,但CP1–CP2尚未批准编码;Player历史`_cheatingScore`错误不得算作正式构建通过。[完整裁决](B3BatchMigration/M2/M2-修订1独立审查主会话裁决与新增阻断-2026-09-29.md)。
- 只读源码进一步核实:普通启动创建PlayFabMgr并执行Awake旧同步循环;受控KV配置/普通登录尚被旧路径约束;PlayerKVAccountLease仅放行验证路由,CustomServerMgr在kvOnly拒绝普通API;31模块Bindings仅Editor编译。因此修订1“30–50行正式接线”判断不足。
- 落盘修订2补审方案、原ZCode提示词、19项SHA256/长度基线;主会话复算19/19一致。CP1只拟合成验证可复用的原handle交接,CP2真实启动/认证/网络/Player Bind另行完整设计;若CP1注定弃用,不予编码。下一检查点是原ZCode复审报告hash与逐条裁决。
- 本检查点只读源码并更新文档;未改M2生产/测试代码,未运行Unity或正式接口,未操作101/102,不打包。最终代码须在迁移稳定后移除闲置接口与无用内容,每检查点续记日志。
## 2026-09-29 M2检查点0:先移植后优化方案送审准备
- 用户批准迁移顺序与流程图。复查源码确认更具体的前置:`PlayerKVGameLoadCoordinator.LoadAsync`成功后仍持有Guard,`LoadedForValidation`要求Guard仍在;KVMgr四入口遇Guard均拒绝。Editor限定玩法成功Apply后先释放Guard再发布原handle。正式路径不能直接开放验证入口,方案要求独立审查最小分流方式。
- 落盘M2修订1方案、原ZCode独立审查提示词与15项SHA256/长度基线。总体路线按先能力/调用迁移、后Guard与目录优化;四入口本体和Guard类不顺手修改。原ZCode独立审查及主会话逐条裁决尚未完成,CP1–CP2源码白名单未批准。
- 本检查点只有文档和hash清单;未改M2生产/测试代码、未运行Unity或正式接口、不操作101/102、不打包。下一检查点为审查报告hash核对和逐项裁决,之后才按批准范围编码。
## 2026-09-29 M2设计检查点:Guard事实核对与移植优先纠偏
- 源码及`git diff`确认:B02从PlayFabMgr移到KVMgr的四个KV方法中,`Reject(ReadLocal/Update/Sync/Sync)`和对应返回值均原样保留;当前PlayFabMgr其他方法仍有11处Guard调用。**后续历史核证纠正来源**:9月15日前的仓库树`f40a816cc`以及该文件旧提交`7a7c1e9f5`均无Guard;9月28日upserver迁移提交`0eb43b2b4`才同时给旧方法加Guard、新增四KV入口和Guard实现。故Guard是本次迁移新增,不是原始PlayFabMgr的固有逻辑。
- 受控KV加载在31模块Apply期间持有Guard并要求`Violations==0`;四入口的拒绝/计数有现行验证。Guard不是KVMgr天然必需,但当前直接删改会改变已审加载合同;迁移时不顺手改,完成后凭证据单独决定是否保留。
- 接受用户纠偏:撤回R1/R3同批归位KVMgr和Guard优化的建议。下一步先形成逐旧成员/调用方/行为差异的完整迁移方案,再交原ZCode审查与主会话裁决;迁移稳定后另评估优化。本检查点只更新文档,未修改生产/测试代码,未运行Unity或正式接口。
## 2026-09-28 B02方案修订1:KVMgr命名与入口迁移
- 按用户要求将新管理器名称确定为KVMgr,记录最终保留PlayFabMgr文件但运行调用和自动执行归零。B02仅新增四KV入口原义迁移,不重写底层、不同时改成实例API或旧PF同名方法。
- 已有4业务/限定玩法文件18处、2验证文件20处直接调用纳入限定迁移;当前测试在B02兼容目录适配、历史受审材料保留。修订1白名单为34既有运行文件+2验证文件,不表示全部需大改。
- 原方案/提示词/61项hash保留,新修订1方案、边界、提示词和80项hash封存;当前仍待独立方案审查。此次只改文档/台账,没有生产或测试源码变更。
## 2026-09-28 B02设计检查点D0–D2
- 用户明确选择核心进度完整业务批;只读核查建造先扣费后协程发奖、SetLv/OnLvChange、鱼竿升级/升星、地图领奖、引导与奖励开包开箱。未修改生产源码。
- 185文本锚点、原23文件交集22候选(主合同14项)、2400静态奖励Drop一级分布落盘;后续奖励链使拟方法白名单扩至29文件。静态盘点不冒充运行配置/递归覆盖。
- 完整候选方案、V01–V14、明确多键部分失败停止与C依赖、提示词及受审基线已准备。需一次完整方案审查,未批准编码或真实运行;没有为缩短流程假设多键原子性或遗漏卡包/箱子。
## 2026-09-28 B01检查点4:复核裁决关闭
- 125/125受审hash及长度一致;八项结论接受,两P3限定采纳:Music继续本地设置,双平台只证明本批合同、不泛化平台等价。报告复跑范围按表格限定,未夸大旧回归独立复跑。
- 三调用B业务关闭,正式接线待C;新增当前分类副本,不修改冻结证据。下一步B02完整方案,暂无新编码批准。
## 2026-09-28 工作区清理
- 按用户授权清理31个旧KVSync合成测试目录(6670文件,约1.88 GiB),保留当日测试、原始日志、真实备份及许可。新增定向gitignore规则,未跟踪文件从22256降至858(清理记录添加前)。
- B01受审清单125/125一致,原有代码/场景/字体改动保持;没有实施新业务或改变待独立实施复核状态。详见[清理记录](../WorkspaceCleanup/清理记录-2026-09-28.md)。
## 2026-09-28 B01检查点3封板核验
- 交付清单125项SHA256/字节逐项一致;方案报告仍匹配CP0,设计冻结其余22项不变,生产diff恰为批准8文件。核验见B3BatchMigration/B01Tests/seal-verification.json。
- 同步机器可读TODO残留的待方案审查字段;当前统一为待独立实施复核。没有继续下一批编码。
## 2026-09-28 B01检查点2–3:验证与实施交付封存
- 最终25组292断言(Android/iOS各自)、结果故障12组144断言通过;42/86/29、Bridge、4B1、4B2、B3A及SERVICE_HOST回归通过。Unity编译0错误272警告;实际对象B01/固定路由/M14/31模块23/34/3/83断言通过。
- 增补失败锁定、配套实例、设备拒绝权限与提示标记分离、受控诊断等边界;原始红绿及动态汇总脚本JsonConvert歧义首败均保留。
- 仅八批准运行文件及固定Editor验证入口;未改注册/Owner/Core/正式地址,无真实API/Play/许可/收费/打包。交付见B3BatchMigration/B01-实施交付.md,下一步B01-独立实施复核.md;未关闭B01,未继续下一批生产编码。
## 2026-09-28 B01检查点0–1:方案裁决与限定实施
- 独立方案通过,无P1/P2;30/30基线一致,四条P3逐项采纳。批准范围、同账号新epoch、取消分支、GM排除及LevelChange后续批依赖已落盘。
- 8个批准运行文件已实现固定Owner、两键本地Accepted/拒绝规则、原实例通知授权、UI捕获与失败停止;无Core/Owner/注册/真实存档修改。
- 先红后绿:缺固定构造、授权回来Resolve新服务、缺异常复位、旧UI错误关闭、重复授权提前成功、PF关闭时机回归、写失败未锁后续、配套服务不匹配均有原始红绿输出。当前23组278断言与依赖结果故障12组144断言通过。
- 用户说明Unity未启动后经CLI启动进程93500,随后用户手动确认已启动。CLI初始get-project-info不在该服务工具表,改用list/compile/固定验证入口。首次Unity编译0错误272警告;实际B01对象验证23断言、2次合成Get、playing=false、无共享容器替换。还在检查点2收口,不宣称交付关闭。
## 2026-09-28 历史开发内容按批次本地提交
- 用户授权按批次commit,沿用feat/upserver;客户端129文件已提交0eb43b2b4、CLI Loop及清单952文件已提交c4ae02def、回归工具232文件已提交a6f5e107f;方案/评审/TODO/hash台账与本日志合入文档批次。
@@ -1500,3 +1818,467 @@ PFLoginAct从配置取空ID;UserService.LoginWithBackend在正整数账号检
选取通知提示ShowNotice读写及俱乐部IsOpenClubRed已读标记共3处存档调用,同批展开通知授权await和多个UI入口;不为凑30条混入足迹/问卷/奖励。完成一份方案、8运行文件白名单、每调用/上游合同、普通Accepted与故障规则、10项验收、提示词与执行TodoList。B01仅B固定业务能力准备,B→C依赖保持,正式构造注册/默认kv/真实运行不启用。自审补明M14为键存在即已读(任意非null字符串),不能只识别"1"。入口/状态/TODO/总清单/JSON统一到B01待方案审查;连续钓鱼v4搁置。无生产/测试源码修改,无Unity/正式API/打包;本轮开始并完成设计准备,下一步独立批级方案审查,之后才编码。
B01送审封板:30/30文件SHA256与长度一致,3个计划新增路径不存在;224条分类ID唯一、旧223均已映射;扫描时2108个生产源码本轮末核验均未变。核验见B3BatchMigration/B01-封板核验.json。
## 2026-09-28 B02修订2检查点D0–D2:管理器优先路线及交审
- D0:读取修订1独立审查,主会话重算80/80 SHA256一致;逐条承接P2-1与四P3。验证计数差异确认为EditorHost18行19次,加另一文件1次,共20次;不修改旧报告。
- D1:按用户最新意图暂缓原34文件核心整包,落盘修订2:管理器与存档调用优先→剩余SDK依赖→整体集成。当前可审实施范围为5运行文件+2验证文件+KVMgr.cs/meta的四入口等价搬迁;全部旧方法/调用归属、失败及生命周期尚须合并设计,不虚报已获全面编码授权。
- P2-1保留为T08/C正式启用前置:多键部分远端保存须检测、差异对账及受控恢复。暂不增加核心操作框架,不改变建造/随机奖励/UI顺序。
- D2:同步入口、开发状态、TODO、总清单、批量执行TodoList与机器台账,保存新白名单/调用清单/审查提示词。用户明确交原ZCode会话,提供转发提示词,不发送给其他Codex任务。
- 原方案/报告/基线保留;本轮无生产代码、Unity/Play、正式API/账号操作、许可、打包或提交。下一步原ZCode审查修订2,主会话随后核hash并裁决。
修订2封板核验:当前87/87、原修订1的80/80、原版61/61 SHA256/长度及预期不存在路径全部一致;新文档链接检查通过。四入口当前直接引用仍为运行18次、验证20次,说明尚未实施。git diff --check通过(既有CRLF提示不属错误)。送审manifest SHA256:3FAC73DFB827F5007C29D133B12F6BD3FA36C9454C84BEF6822C5AEF94854BA1。核验见B02/B02-修订2封板核验.json;用户转发给原ZCode,尚未声称已发送或审查已启动。
## 2026-09-28 B02修订2四入口CP0:受审裁决与源码基线
主会话重算修订2受审87/87、计划新增路径absent6/6,独立审查路线与§4均PASS;P2一条与P3三条逐条裁决,见B02/B02-修订2审查裁决与四入口实施批准.md。仅批准5运行文件、2验证文件、KVMgr.cs/meta及兼容测试副本。已保存7份现有源码逐字节基线及hash到B02/Tests/Compatibility/baseline;开始CP1前先建立真实KVMgr测试入口。
### B02修订2 CP1:四入口搬迁
兼容Route工程先指向真实KVMgr,编译红测CS2001(新文件不存在);工具环境需将APPDATA临时设为本批工作目录以避开全局NuGet.Config读取权限,未修改用户全局配置。现已从PlayFabMgr逐字方法体迁至静态KVMgr.cs并创建meta;旧四方法及BEGIN/END块移除,6个运行/验证调用文件仅改类型限定名,共38次引用(运行18、验证20)。旧PF方法和生命周期仍在原Mgr;即将运行离线验证。
### B02修订2 CP2:离线行为与故障回归
兼容副本保留原受审测试源码hash、只改KVMgr类型/编译路径/输出目录;Route工程编译真实KVMgr并验证13组544断言通过,B01业务副本25组292断言通过。B01结果故障副本在真实KVMgr源码仅注入WriteKV结果钩子后验证12组144断言通过;旧B01测试和原报告未覆写。NuGet配置用项目配置和本批临时APPDATA,不改用户全局设置;三个项目的单独obj目录已修正初次构建警告。原始结果逐字节复制与hash见B02/Tests/Compatibility/evidence。
### B02修订2 CP3:Unity CLI Loop与范围核验
Unity CLI Loop确认Editor非Play;B01固定合成验证成功、23断言/正式请求0;固定存档Route合成验证成功、34断言/auth2/Get2/合成写1/正式请求0、restored=true。强制重编译触发后再次CLI Loop编译Success=true,0错误0警告。7个既有源码文件与CP0基线逐字节对照,只出现审定的旧块移除或四调用限定名替换;KVMgr方法体与原块一致,生产旧四入口引用0,见source-diff-audit.json。本轮无Play/真实账号/打包。
### B02修订2 CP4:交付封板与责任侧
已保存KVMgr四入口交付、独立实施复核提示词、后续旧方法三档分流草案;44项交付源码/测试/证据hash封板,manifest SHA256=E5BA5240F4F5DD4376F2AB2879E0A09E7F4E0960DE50C942F07D50AC4D3D593A。共享入口、开发状态、TODO、批级与总清单、机器台账同步为“作者实施自验完成,待原ZCode独立实施复核”。测试结果及严格源码差异见交付,不将四入口段标为整个管理器/4B3完成。原修订1/2方案及审查报告保留。
## 2026-09-29 B02修订2四入口独立实施复核裁决与限定关闭
原ZCode报告PASS,无P1/P2、P3一条。主会话重算44/44交付hash一致,逐条接受四方法等价、7源码文件严格白名单、旧四入口归零和必要回归;澄清故障注入项目使用真实KVMgr源码的单钩子副本,审核者独立复跑合计38组497断言(非报告结论误写的50组),Route全量13/544是主会话交付证据。P3的首次restore命令写入关闭裁决,不修改冻结测试。此实施段限定关闭;下一步主会话旧PF方法/调用方合并设计,正式KV与SDK移除仍未批准。本轮只作文档裁决,没有代码/Unity/Play/正式API/打包操作。
## 2026-09-29 M2合并设计检查点P0:现状重扫与正式归属边界
复用原Roslyn只读扫描器重扫当前2109源码文件,仍为224语法候选/81文件,按路径、成员、方法、参数与旧224项对应,丢失0/新增0;逐项矩阵含当前源码hash及旧分派,但上游合同均未标记完成。旧分类20个读取/初始化项包含充值、活动、PVP、延迟/好友奖励等,不能整体作为普通标记批。源码核实`PlayerKVLoginContext`私有固定handle没有正式交接出口;其账号租约不是KVMgr可用的游戏句柄;`PlayerKVGameLoadCoordinator`成功结果不返回handle;31模块`PlayerKVGameplayBindings`仅Editor非SERVICE_HOST;`PlayerKVGameLoadCapability.CreateForValidation`和`ConfigureKVForValidation`仍是受控验证入口;正常`SaveBackend=kv`被拒绝,默认登录及普通`IsLogin`仍依赖PlayFab。以上加入[M2底稿](B3BatchMigration/M2/M2-旧方法与调用方合并设计底稿.md),下一检查点补正式会话交接与业务上游白名单,形成一份合并方案后送原ZCode完整审查。本检查点无生产代码、Unity/Play、正式请求、账号操作或打包。
## 2026-09-29 M2设计纠偏:KVMgr层级依赖
用户指出KVMgr应为底层存档入口,不应反向调用外部Service。主会话核实当前KVMgr四方法未直接调用UserService/CustomServerMgr,但`Core/KVMgr.cs`依赖`Services/PlayerData`的加载guard及存储类型;其中guard由上层GameLoadCoordinator控制,属于真实的反向编排依赖。B02独立PASS仅审等价搬迁,不证明这一层级正确。已落盘[层级纠偏意见](B3BatchMigration/M2/M2-KVMgr层级依赖纠偏意见-待审.md)并在M2底稿置顶引用;建议业务/Service→KVMgr→Handle/Owner,加载Service仅通过存储模块准入契约与显式handle交接控制,不扩充KVMgr为业务编排器。保持B02封存交付和限定关闭,不改生产代码;纠偏进入M2完整方案与审查范围。
## 2026-09-29 M2纠偏独立审查裁决与修复Todo重排
原ZCode独立报告接受纠偏方向,但明确底稿不可编码;主会话核其报告SHA256=ABABB99EEE22D4E50A038A91AA5AF6D484E21F32546C6767F4A276031F62891A及源码事实。接受B02仅行为等价、正式可写handle无交接、224候选只是盘点和一次合并方案审查。对“guard须下沉”作限定裁决:现有guard自身仅依赖System/Threading,不向Coordinator或其他Service回调,先使KVMgr归位同一存储模块并保持这一单一准入门,不预设第二套状态。审查所称21处引用分解后是20处限定方法调用/5文件,加类型声明/参数;已逐文件列入[修复顺序与当前/目标依赖图](B3BatchMigration/M2/M2-架构复审裁决与修复顺序-2026-09-29.md)。R0完成、R1完整方案仍在主会话,后续R2一次方案评审裁决、R3–R4实施验证复核、R5业务批、R6正式接线与SDK收尾。B02封存44/44仍匹配。本检查点仅文档与只读源码核查,无生产代码、Unity/Play、正式请求、账号操作或打包。
## 2026-09-29 M2管理器同生态位目标澄清
用户要求KVMgr与PlayFabMgr同生态位,评估先完整替代旧Mgr全部函数、切换调用后再处理保护。源码核出旧Mgr对外四类:GetLocalData、UpdateUserDataValue、SyncDataImmidiate、CompareDatas;另有Instance、PF缓冲/SDK发送、Unity生命周期与Editor循环。现有KVMgr四入口已覆盖KV键读写/同步能力,但旧调用仍224语法候选/81文件。两处立即保存分别属钓鱼鱼饵和转盘券消费,不能机械改为bool成功。已落盘[同生态位替代策略](B3BatchMigration/M2/M2-管理器同生态位替代策略-2026-09-29.md):KVMgr完整接管存档对外能力,PF合档与生命周期分别交迁移/加载和会话Service,现有Owner负责同步;可先定全部管理器能力后按业务域连续替换,但最低handle归属、加载guard、读三态、写uncertain/原票据必须随替换生效,T08等正式启用保护在默认切换前完成。纳入R1完整方案,尚未编码/运行正式账号/打包。
## 2026-09-29 M2旧Mgr三块职责落点核证
回应用户对CompareDatas、Awake和PF定时器去向的追问,核源码确认三者仍在PlayFabMgr、没有迁移。PF CompareDatas只由UserService.InitData调用,做PF UserData与PlayerPrefs时间戳合并/回写;正常KV已有Prepare→Decode→31模块Apply,不应复制PF双源合档,历史账号转换另待一次性受控迁移政策。Awake仍注册Instance、建5缓冲并启动40秒循环,SubBoostrap仍创建旧组件;KV Owner有显式FlushAsync但没有该自动调度,Revoke也不等于远端确认。已在[同生态位策略](B3BatchMigration/M2/M2-管理器同生态位替代策略-2026-09-29.md)写明拟由上层会话/小型生命周期适配器接Unity暂停退出与定时,原handle调用KVMgr→Owner Flush,Close前有界观察;不是已存在功能。R1仍需完整方案评审,不修改生产代码或运行游戏。
## 2026-09-29 M2 CP2A-C15:补审后交付封存与下一批前置核查
- 将原 CP2A 的 19 项交付及获批的 `FishingChallengeManager.cs` 条件编译补审合并为[20 项交付清单](B3BatchMigration/M2/M2-CP2A-C15补审后交付hash.json);逐文件重算 20/20 长度与 SHA256 一致,清单 SHA256 为 `575AE946452078011CCD068303217377E0AA98C0EF0B0A1103F19D527B6D6E4D`。这只封存当前实施版本;真实 Player 编译仍未通过验证,CP2A 未关闭。
- 只读核首场景和首批业务接线:`LoginStage` 仍阻止正式 KV 进入 `FishingStage`;现有 Setting/Club 的固定 handle 构造只在限定路径可用,正式注册仍为无 handle 实例;首场景即时旧 PF/业务请求缺完整接口合同。下一批先形成一份句柄发布与业务接线合并方案,完整评审和明确裁决后再编码。未改生产/测试源码,未运行 Unity、正式 101/102 或打包,保留全部工作树改动。
## 2026-09-29 M2 CP3A-D0:加速批级完整方案封存,待一次独立前审
- 在 CP2A 阶段闸不开放的前提下,形成[CP3A 原句柄正式业务发布与 B01 两提示键完整方案](B3BatchMigration/M2/M2-CP3A原句柄正式业务发布与B01提示接线完整方案-待独立审查.md)和[一次性原 ZCode 联合审查提示词](B3BatchMigration/M2/M2-CP3A原ZCode一次性批级方案审查提示词.md):同次独立审查 CP2A 获批单文件增量交付与 CP3A 编码前方案,两项结论分开。源码核实登录前 `SubBoostrap` 已建 Setting 且完成 Notification.Init、31 模块会解析原 Club 实例;因此方案选择原实例单次绑定并在绑定前拒绝旧 PF。范围仅 ShowNotice/IsOpenClubRed,不进入 FishingStage、不开 Mail/IAP/API 路由或公开授权。
- [18 项受审基线](B3BatchMigration/M2/M2-CP3A-受审基线.json)重算 18/18 长度和 SHA256 一致,清单 SHA256 `F7311D9D923A61E8F665B021184C9C969C551EC1DDD96D2F23BF2F9CD1C98D49`。截至本检查点独立报告尚未落盘,CP3A **待评审、无生产编码批准**;CP2A 真实 Player 编译仍未验。保留工作树,未改生产/测试源码、未启动 Unity、未操作正式账号、未打包。下一步待一次独立方案报告后先核受审 hash 再逐条裁决,合同内连续编码并逐检查点记日志。
## 2026-09-29 M2 CP2B-D1:首场景条件调用增量只读盘点
- 在[原显式首场景链](B3BatchMigration/M2/M2-CP2首场景自动依赖核查-2026-09-29.md)上补出[登录天数事件、动态活动初始化与 AIHelp 身份依赖](B3BatchMigration/M2/M2-CP2B首场景依赖增量核查-2026-09-29.md):`InitData()` 末尾发布 LoginDays;战令激活时订阅者保存 `BattlePassRecordTask` 仍走 PlayFabMgr;`InitManager()` 按反射和活动配置创建 sentry、订阅并检查活动;AIHelp 的 `pfid` 仍取旧 `UserId`。这些是条件性链,未在真实配置下断言必然写入,不能用静态扫描宣称首场景完整。`AssetsServer` 和 `docs` 未见相应服务端路由/响应合同。保持阶段闸,不猜接口或静默屏蔽业务。
- CP3A 联合独立审查报告仍未落盘;CP2A 20/20、CP3A 18/18 受审文件 hash 再核一致。此检查点仅新增设计输入文档与日志;未改生产/测试源码,未启动 Unity、正式账号/API 或打包。下一步继续准备 CP2B 所需的精准调用/身份矩阵;CP3A 收到报告时优先核 hash、逐项裁决后进入编码。
## 2026-09-29 M2 CP2B-D2:本机服务端不作线上契约依据
- 用户明确禁止动本机服务器代码,原因是线上版本可能不同。此前对 `C:\projects\N3-Server-CN` 仅做过只读搜索/读取和一次 Git 状态查看,**未修改该目录任何文件**;从现在起不再检查或操作该目录,也不以其中控制器/模型推定线上路由、身份或响应合同。已在[CP2B增量依赖核查](B3BatchMigration/M2/M2-CP2B首场景依赖增量核查-2026-09-29.md)写明线上契约待核。客户端阶段闸继续关闭,CP3A独立报告仍待落盘;本检查点仅更新文档/日志,无生产代码、正式请求、Unity或打包。
## 2026-09-29 M2 CP3A-C0:联合前审 hash 与逐条裁决,测试先行
- 原ZCode[联合独立报告](B3BatchMigration/M2/M2-CP3A独立方案审查.md)已落盘;主会话重核 CP2A 20/20、CP3A 18/18 hash 一致,并[逐条裁决和冻结五文件边界](B3BatchMigration/M2/M2-CP3A联合独立审查主会话裁决与实施边界-2026-09-29.md)。接受 CP2A 单文件增量但 Player 仍未验;批准 CP3A 原实例绑定与 B01 两提示键。纠正报告两处事实:Club 在后续 LoginStage 注册而非 SubBoostrap 同方法;现有 B01Tests 使用 ClubSlice,不能冒充真实 ClubService 已验。P3 三条已裁,CLI Loop 无 `build` 命令,不猜 Player 参数或绕过 Restricted。
- 当前开始按裁决先做真实对象合成红测,再在五文件白名单内编码;`FishingStage` 门、公开授权、普通 API 和线上 101/102 保持关闭。用户明确本机服务器不可改且非线上契约,本批不触及该目录。保留工作树,每检查点更新日志。
## 2026-09-29 M2 CP3A-C1:真实对象 Editor 红测
- 在获批固定 Editor 验证入口 `KVPromptStateValidation.cs` 增 CP3A 合成用例,用本地 `.invalid` 传输与真实 Setting、Club、Notification 对象验证正式未绑定拒绝、原 handle 绑定及撤销后拒绝。Unity CLI Loop 增量编译 0 error/1 warning;随后 `execute-dynamic-code` 按预期在 `formal service constructors exist` 失败,证明生产接线尚不存在。没有触碰正式 101/102 或本机服务器代码。
- 现按已裁决的五生产文件边界进入连续实现。红测仅是前置失败证据,不宣称功能验收完成;阶段闸和 Player 未验证状态保持。
## 2026-09-29 M2 CP3A-C2:原实例接线首轮绿测
- 在已裁决五文件内,Setting/Club 捕获正式出生模式,正式无句柄的两提示键失败关闭;通知原实例增加完成初始化后的固定 Setting 绑定和在途屏障;UserService 在 GameLoaded 原句柄、同 epoch 验证后预检三原容器实例,再一次性绑定,部分失败沿原撤销路径关闭,同进程不再重绑。
- Unity CLI Loop Editor `compile` 当前 0 error/272 warning(既有告警未作清零声明);`execute-dynamic-code` 的 CP3A 真实对象合成用例通过 13 断言,模拟 `playerdata/Get` 1 次,正式请求 0,未改变全局容器。此为首轮绿测,仍须检查旧 B01、部分失败/重复绑定、ServiceHost、阶段闸与交付 hash。未读写本机服务器,未操作 101/102、未打包。
## 2026-09-29 M2 CP3A-C3:旧 B01 与真实模块回归
- 旧 B01 组合用例初跑发现纯 Editor 模块验证器直接 `new ClubService()`,没有正式启动注册的冻结选择;该验证器的 M14/B2-20 两处纯解码对象改用获批的显式 PF 测试构造 `new ClubService(false)`,生产登录路径不变。随后 Unity CLI Loop 编译 0 error/269 warning;B01 23 断言、固定路由 34、M14 3、31 真实模块两 epoch 83 均通过,正式请求 0。
- 这同时暴露独立 `InternalEditorBoost` 入口可能缺冻结选择,需在批末审查其是否属于 CP3A 正式路径/是否需要另行补审;不可把纯验证器修正当作正式入口覆盖。阶段闸未开、Player 仍未验。本机服务器代码未访问或修改。
## 2026-09-29 M2 CP3A-C4:扩展合成边界与加载回归
- CP3A 固定真实对象用例补同 handle 重复绑定、通知初始化在途预检、部分绑定撤销、同实例跨 epoch 重绑拒绝;Unity CLI Loop 增量编译 0 error/1 warning,该用例 28 断言通过、3 次本地模拟 Get、正式请求 0。KVGameLoadTests 89 组/1966 断言/0 失败;ServiceHost 非 Android 与 Android+AGG 顺序运行各 9 组/86 断言/0 正式请求。并行编译同一 ServiceHost 目标曾产生 obj 文件占用,顺序重跑均绿;该占用非产品缺陷。
- 唯一新发现的潜在入口问题是 `InternalEditorBoost` 直开场景可绕过正常 `SubBoostrap.RegisterServices`,因此 Club 无冻结选择会拒绝旧 PF;此支线不在已裁决的“仅传入冻结选择”变更内,暂不擅改。先整理最小补审输入,其余已批准范围继续核验。本机服务器继续不访问。
## 2026-09-29 M2 CP3A-C5:Editor 直开入口补审边界
- 源码核实 `LoginStageCtx`/`FishingStageCtx` 的 Editor 直开可调用 `InternalEditorBoost.Init()`,该方法不经过正常冻结选择注册;Club 正式构造的缺选失败会影响此 PF 开发入口。已形成[最小单文件补审方案](B3BatchMigration/M2/M2-CP3A-Editor直开入口最小补审-2026-09-29.md),建议仅允许精确 PF 的直开路径注册一次冻结 PF 选择,其余值失败关闭。此增量**尚未获审,未编码**;保持主流程已批准实现与现有阶段闸,不能宣称 CP3A 交付关闭。
## 2026-09-29 M2 CP3A-C6:快照封存与补审提交
- 当前八项客户端生产/测试[临时实施快照](B3BatchMigration/M2/M2-CP3A-C5实施快照hash.json)重算8/8一致,清单 SHA256 `AE6D58C8C21D34E7264554FAC1E899DF34960D6DED7750C8BE94504F42E4A0F4`;它不是最终交付。Editor直开[五项补审基线](B3BatchMigration/M2/M2-CP3A-Editor直开入口补审基线.json)重算5/5一致,清单 SHA256 `5D4B7AB1336DBB3BA4E532B5B36EDBB4654A12150BA51F4A9217BB7BED783E86`,[原ZCode单点提示](B3BatchMigration/M2/M2-CP3A-Editor直开入口原ZCode补审提示词.md)已备;报告尚未落盘,不做白名单扩展编码。
- `LoginStage.RequestNextAct` 仍在冻结 KV 选择时直接返回,不进入 `FishingStage`;正式地址常量仍为 `http://s101.local:18080/`。进度/TODO 顶部已改为 CP3A 当前状态。未读取/修改本机服务器代码,未运行正式账号或打包。
## 2026-09-29 M2 CP2B-D3:客户端线上合同待核矩阵
- 仅从客户端补成[首场景线上合同待核矩阵](B3BatchMigration/M2/M2-CP2B客户端首场景线上合同待核矩阵-2026-09-29.md):Mail、Survey 两读两写/奖励、排行榜直接 SDK、AntiCheat、Friend、Club、登录天数/动态活动、AIHelp/AutoRestart 分别列出已知形状与线上尚须证明的 Method/route、身份、响应和失败语义。它不是线上契约或 CP2B 编码批准;`FishingStage` 继续阻断。未读取/修改本机服务器代码、未发正式请求、未运行 Unity 或打包。
## 2026-09-29 M2 CP3A-C7:批末等待单点补审
- 临时实施快照再核8/8一致,`git diff --check` 对本批已跟踪改动无空白错误。Editor 直开入口独立补审报告截至本检查点未落盘,因此不修改未获批方法,不标 CP3A 完成;后续必须先重核5项补审基线并逐条裁决。CP2A真实Player脚本编译与CP2B线上合同仍是各自独立阻断。工作树保留,本机服务器代码未访问/修改。
## 2026-09-29 M2 N1:KV 命名一致性只读盘点
- 用户指出新 KV 类名容易被理解为 PlayFab 依附物。只读核查显示精确 `PlayKV` 为0,实际约127个 `PlayerKV*` 类型(31 public/96 internal)、24个同前缀源码文件、16个引用其路径的测试工程;另有 Editor/测试反射字符串。已记[命名影响盘点](B3BatchMigration/M2/M2-KV命名一致性只读盘点-2026-09-29.md)。`Player` 原义是玩家,但命名可以调整为以 `KV` 开头;具体映射待用户偏好与独立完整方案审查。
- `PlayFabUserService` 承载正式 KV 登录、`PlayFabMgr` 仍承载 Editor loop,属于实际提供方/职责边界,不能用类型字符串替换伪装已解决。CP3A当前受审hash保持不变;本检查点未改任何生产或测试源码,未访问本机服务器、Unity、正式账号或打包。
## 2026-09-29 M2 CP3A-C8:Editor 单点补审裁决与命名时点
- 原ZCode [Editor直开独立补审](B3BatchMigration/M2/M2-CP3A-Editor直开入口独立补审.md) 已落盘,SHA256 `4AADED515BF88856B580005B18D448D8C7985D46FD240FFBA78CDC6ED29CCA06`;主会话重核受审5/5、此前实施快照8/8,并[逐条裁决批准](B3BatchMigration/M2/M2-CP3A-Editor直开入口补审主会话裁决与实施边界-2026-09-29.md)仅扩展 `SubBoostrap.cs` 的 `InternalEditorBoost.Init()`。现进入该单文件最小修复;其他生产文件和正式路径不变。
- 用户同时明确:`PlayerKV*` 暂时保留,整体移植完成后再做命名处理。已更新[命名盘点](B3BatchMigration/M2/M2-KV命名一致性只读盘点-2026-09-29.md)与 TODO;本批不改名。未访问/修改本机服务器代码,未操作正式账号或打包。
## 2026-09-29 M2 CP3A-C9:Editor 直开最小修复与编译
- 只在获批 `SubBoostrap.cs/InternalEditorBoost.Init()` 开头检查容器冻结选择:现有 PF 沿用,现有 KV 拒绝;缺选时只有精确 `playfab` 注册一次 PF 选择,`kv`/`kv-loop`/未知/空值在注册任何服务前拒绝;Setting 从实际选择捕获模式。注册后核同一引用,未改正式 `RegisterServices`。Unity CLI Loop Editor 编译 0 error/269 warning。下一检查点跑 CP3A/B01/31模块及加载宿主回归,随后封存 hash;暂不宣称直开真场景已实测。
## 2026-09-29 M2 CP3A-C10:单点修复后完整本地回归
- Unity CLI Loop 固定 CP3A 真实对象28断言通过(本地模拟 Get 3次、正式请求0、全局容器未变);B01 23断言、固定路由34、M14 3、B2-20真实31模块83断言通过;Editor非Play。KVGameLoadTests 89组/1962断言/0失败;ServiceHost非Android及Android+AGG各9组/86断言/正式请求0。Unity CLI Loop编译0 error/269 warning。此组验证不包含 `InternalEditorBoost` 真实直开场景启动,也不替代Player脚本编译;批末报告会标明。
- 用户命名裁决已落文档:整体移植完成前保持 `PlayerKV*`,此批源码未改名。本机服务器代码继续不访问或修改,未操作正式账号或打包。
## 2026-09-29 M2 CP3A-C11:交付封存与批末复核输入
- [十项交付清单](B3BatchMigration/M2/M2-CP3A-C11交付hash.json)重核10/10一致,清单 SHA256 `2E3E1EB14807709E49A58937DC6AD30F015780F252F96027B9EE73AC4038F329`;`git diff --check` 本批文件无空白错误。已落盘[交付与限制](B3BatchMigration/M2/M2-CP3A-C11交付与待终审-2026-09-29.md)和[原ZCode一次批末复核提示](B3BatchMigration/M2/M2-CP3A原ZCode批末独立实施复核提示词.md)。独立实施报告尚未落盘,CP3A不关闭;直开真实场景/Player脚本编译未称通过。
- 命名延后裁决已入命名盘点、TODO和总进度:本次不改 `PlayerKV*`。阶段闸、固定地址和101/102现存档准入未变;本机服务器代码不访问或修改。保留工作树,未Play、未操作正式账号或打包。
## 2026-09-29 M2 F0:最终通关前临时门控清账规则
- 用户新增硬要求:所有为开发方便而暂时冻结、跳过、忽略或由合成替身代替的处理路径,在完整确认通关之前都要恢复真实处理并验收。已创建[最终临时门控与忽略路径清理清单](B3BatchMigration/M2/M2-最终通关前临时门控与忽略路径清理清单-2026-09-29.md),初步列出阶段跳转、公开登录态、加载接收者、首场景自动调用、KV普通路由、旧PF业务、验证替身、账号/渠道政策和欠证;同时明确安全边界不能无条件拆除。
- 总进度、总TODO与4B3执行TODO已加入最终清账门槛。后续每批登记新增开发绕行,完整评审、主会话裁决和精确白名单之后才修改代码;每检查点记解除状态与证据,最终静态重扫及真实全链验收前不报整体通关。本检查点只改文档,未读写本机服务器代码,未改生产代码,未运行正式账号、Unity 或打包;现有工作树保留。
## 2026-09-29 M2 CP3A-C12:批末独立复核主会话裁决
- 原ZCode[独立实施复核](B3BatchMigration/M2/M2-CP3A独立实施复核.md)落盘,报告SHA256 `D415CE132C9CED7196F0E2E6683D027AA60222FE6FFF139F28898B88ABF8924B`;主会话复算CP3A-C11交付10/10长度与hash一致、清单SHA256 `2E3E1EB14807709E49A58937DC6AD30F015780F252F96027B9EE73AC4038F329`一致,并[逐项裁决限定关闭](B3BatchMigration/M2/M2-CP3A独立实施复核主会话裁决与限定关闭-2026-09-29.md)。本次无生产代码变更。
- 审核记KVGameLoadTests 89组/1964断言,旧交付记1962;主会话当前工作树连续两次`dotnet run --no-restore`均89组/1960断言/0失败。数字差异不认作CP3A新增覆盖,CP3A真实对象28断言由Unity CLI Loop固定用例另证。审核建议直接`InternalEditorBoost.Boost()`称可隔离,源码有全局容器/UI及远程配置读取,不执行该建议;真直开仍待验。CP2A Player脚本编译和CP2B线上合同/首场景仍待,阶段闸保持。未访问本机服务器代码、正式101/102或打包,工作树保留。
## 2026-09-29 M2 CP2B-D4:线上公开合同只读探查
- 只对固定正式地址作无凭据 GET:根路径 HTTP 200,正文 `n3ftapi 0.0.1-nogit`;`/swagger/v1/swagger.json`、`/swagger`、`/swagger.json`、`/openapi.json`、`/api-docs` 均 404。结果已写入[CP2B 客户端线上合同矩阵](B3BatchMigration/M2/M2-CP2B客户端首场景线上合同待核矩阵-2026-09-29.md)。没有访问业务路由、登录账号、修改服务器或客户端代码。公开文档未提供足以确认 Mail/Friend/Club/AntiCheat 等路由的合同;CP2B 完整方案前审仍缺可信线上依据,阶段闸保持,不能通过猜测或暂时忽略处理来抢开首场景。
- 为减少审核往返,后续将同一业务合同的读写及失败处理合成一次批级完整前审、批内连续实施/测试与一次批末复核;白名单外新增依赖才做针对性补审。当前无新生产代码批准,工作树保留,Unity未运行、未打包。
## 2026-09-29 M2 CP2B-D5:解释线上合同前置与源码索引
- 用户询问为何需要线上合同及相关代码。已在[CP2B矩阵](B3BatchMigration/M2/M2-CP2B客户端首场景线上合同待核矩阵-2026-09-29.md)补主要源码索引:LoginStage跳转、FishingStage自动触发、CustomServerMgr的KV宽泛路由拒绝、Mail/Friend/Club/AntiCheat请求、Survey旧PF与十六进制身份、排行榜直调SDK、公开登录态消费者。明确所需是实际Method/route、认证/身份、响应/错误/幂等合同,而非一定要Swagger;也没有把客户端字符串当线上真相。
- 只读归并后确认现有224候选中的普通业务写含付费、领奖、进度、社交奖励及活动,不能仅按`UpdateUserDataValue`同名机械分批。下一批仍需按完整业务合同成组评审,当前未获新生产代码批准;本检查点仅文档,保留阶段闸、工作树和固定地址,未访问本机服务器代码、正式账号或打包。
## 2026-09-29 M2 CP2B-T-D0:用户纠偏与正式普通请求运输前审
- 用户明确:KV 模式一律拒绝普通请求是为了移植临时加入,最终 KV 应正常走业务请求。只读核对 `f40a816cc` 原 `CustomServerMgr` 普通发送、迁移提交 `0eb43b2b4` 的 `kvOnly`/验证租约,以及当前租约仅认两个验证路由;确认可把**运输恢复**与**首场景业务合同**拆开评审。不能只删 `if(kvOnly)`:正式租约在31模块Apply之前绑定,另有同Cookie、epoch、旧响应、401/退出排水和RTService.Cookie依赖。
- 已形成[CP2B-T完整方案](B3BatchMigration/M2/M2-CP2B-T正式KV普通业务请求恢复完整方案-待独立审查.md)、[7项受审基线](B3BatchMigration/M2/M2-CP2B-T受审基线.json)、[原ZCode一次性批级提示](B3BatchMigration/M2/M2-CP2B-T原ZCode一次性批级方案审查提示词.md)。拟用同一Context租约在GameLoaded/CP3A三实例交接后恢复现有普通请求包装方法,验证租约和旧PF分支不变;首场景仍阻断,具体线上路由/响应与公开身份另审。当前无报告、无代码批准,未改生产/服务器代码、未调用正式101/102,工作树保留。
## 2026-09-29 M2 CP2B-T-D1:首轮报告核验与集中补审
- 首轮[独立方案审查](B3BatchMigration/M2/M2-CP2B-T独立方案审查.md)已落盘,报告 SHA256 `AABDE906E3B6E1B622CC30264F95D8114A8BEE905CD3462948392DBAFF83AE59`;主会话重新核[七项受审基线](B3BatchMigration/M2/M2-CP2B-T受审基线.json)长度/SHA256 为 7/7 一致,清单 SHA256 `3DF008B9474D730C82CACA65FAE0306CC18B13DF6454C0ED0694A7273A368842`。首轮报告早于用户要求追加疑点的提示更新,实际只答原五问;已作[逐项主会话裁决](B3BatchMigration/M2/M2-CP2B-T首轮独立报告主会话裁决与补审边界-2026-09-29.md),状态为待补审,**未批准编码**。
- 按用户要求,将正式/验证租约隔离、路由兼容与15秒超时、运输就绪前实际调用及公开身份、RT Cookie/SessionVersion、401回调线程与退出/双重Close竞态集中写入[同一审查提示](B3BatchMigration/M2/M2-CP2B-T原ZCode一次性批级方案审查提示词.md)第6—8项,请审核AI在同一报告补答,不改受审七项或反复封存。继续阻断首场景,未改生产/测试/服务器代码,未发正式101/102请求、未用UnitySkills或打包;工作树保留。
## 2026-09-29 M2 CP2B-T-D2:补审完成、P2 核查与编码边界
- [独立审查](B3BatchMigration/M2/M2-CP2B-T独立方案审查.md)现已补第6—8项,报告 SHA256 `922F5A438AE92D5869868F88FCB5274D584782DC0C50FC047C2840A489923251`;受审七项复算7/7,清单 SHA256 `3DF008B9474D730C82CACA65FAE0306CC18B13DF6454C0ED0694A7273A368842`。对报告新增 P2 路由疑点,静态追踪实际 `ICustomServerMgr` 调用与 Mail/EventPartner/IAP/AntiCheat 动态来源,未见现有合法查询串;`mail/fetch` 为常量。已形成[完整主会话逐项裁决与精确白名单](B3BatchMigration/M2/M2-CP2B-T完整审查主会话裁决与实施白名单-2026-09-29.md),批准 CP2B-T 运输子批在三个生产文件及必要合成测试内编码。
- 实施条件:正式租约保持原15秒超时、验证两路由隔离、401/退出先同步失效、后台响应不得直接操作Unity服务;首场景与公开身份仍阻断。此检查点尚未改生产/测试代码;本机服务器未访问或修改,正式101/102未请求,工作树保留、暂不打包。
## 2026-09-29 M2 CP2B-T-C1:先建立运输回归断言
- 在获批测试白名单内增加正式/验证租约隔离、同 Cookie、15秒超时、规范路径、就绪前零发送、就绪后普通 GET/POST、401 同步禁用的合成测试。`KVGameLoadTests` 先运行得到预期编译红灯:缺少待实现的正式租约属性(IsFormal/FormalCookies/BusinessTimeout);这不是既有代码回归。下一步只改三个获批生产文件并使这些断言转绿,再补退出/在途旧响应与 PF 回归。无真实网络请求、本机服务器修改、UnitySkills 或打包。
## 2026-09-29 M2 CP2B-T-C2:同租约运输首版转绿
- 在获批三个生产文件内完成正式模式租约路由/同 Cookie/15秒超时、管理器就绪/失效及普通 GET/POST 转发、UserService 原 handle 交接后发布与专用 KV 401 退出接线;验证租约及 PF 原分支保留。`KVGameLoadTests` 90组/1995断言/0失败;ServiceHost 非 Android 10组/99断言/0正式请求。首次沙箱执行被既有 `obj` 写权限拦住,随后仅以提权运行本地合成测试,没有访问正式服务器;ServiceHost 首次编译发现局部名遮蔽和测试委托签名错误,已修复重跑通过。
- 仍需补在途旧响应、后台调用回主线程和关闭失败合成证据,以及 Android+AGG、Unity CLI Loop Editor 编译与批末复核。阶段闸、公开身份、线上业务合同均未打开;本机服务器不访问/修改,工作树保留,不打包。
## 2026-09-29 M2 CP2B-T-C3:竞态/双目标与Unity编译
- 在已批测试边界补当前401后禁止重复发布、后台请求回原服务线程、404非授权失败、在途旧200返回空、同账号新epoch新Cookie/新租约及正式租约Close失败不重开。`KVGameLoadTests` 90组/2012断言/0失败,ServiceHost非Android与Android+AGG顺序运行各10组/119断言/0正式请求;PF原分支回归仍绿。测试专用超时属性已从生产租约删除,改用测试反射检查,避免留下闲置实现。
- Unity CLI Loop `get-version`确认 C盘项目与2022.3.62f2c1,最终[Editor编译核验](B3BatchMigration/M2/M2-CP2B-T-Editor编译核验.json)为Success=true、0错误/272警告。`git diff --check` 本批生产/测试/日志无空白错误(仅CRLF提示)。首场景、公开登录态、正式账号和线上业务路由仍未运行;Player脚本编译未证,不打包、不访问或修改本机服务器。总进度/TODO/最终门控F5已更新为运输已实施、待批末复核,F5尚不销账。
## 2026-09-29 M2 CP2B-T-C4:交付封存与一次批末复核输入
- [九项交付清单](B3BatchMigration/M2/M2-CP2B-T交付hash.json)复算9/9字节与SHA256一致,清单SHA256 `3DDA92619732D44DA7E226991C2FE82474C1F915334B62C7390045BD39920915`;[交付与限制](B3BatchMigration/M2/M2-CP2B-T交付与待终审-2026-09-29.md)和[原ZCode一次批末独立实施复核提示](B3BatchMigration/M2/M2-CP2B-T原ZCode一次性批末独立实施复核提示词.md)已备。报告截至本检查点未落盘,CP2B-T不关闭;收到后先核九项hash、逐条裁决,若有问题只做精准修复。
- 本批只改获批三个生产文件和两个合成测试文件。加载90组/2012断言0失败,ServiceHost双目标各10组/119断言0失败/正式请求0,Unity CLI Loop Editor编译0错误/272警告。`git diff --check`本批文件无空白错误;既有工作树保持。`FishingStage`、公开身份、线上业务语义、真实Player和SignalR仍未通过,最终F5不销账;未触碰本机服务器或正式账号,不打包。
## 2026-09-29 M2 CP2B-T-C5:批末独立复核主会话限定关闭
- 原ZCode[批末独立实施复核](B3BatchMigration/M2/M2-CP2B-T独立实施复核.md)落盘,报告SHA256 `F417FD86E7CDFFB5F3E86F0514F1E22824A59E14691EAEE6EE861E8EC9AF191D`;主会话重算[九项交付hash](B3BatchMigration/M2/M2-CP2B-T交付hash.json)的长度/SHA256为9/9一致,清单SHA256 `3DDA92619732D44DA7E226991C2FE82474C1F915334B62C7390045BD39920915`。[逐项裁决](B3BatchMigration/M2/M2-CP2B-T独立实施复核主会话裁决与限定关闭-2026-09-29.md)接受正式KV普通GET/POST同租约运输的限定关闭;不代表首场景、公开身份、真实Player/SignalR或线上业务接口验收。
- 审核者复跑90组/2008断言/0失败,交付记2012;主会话在同一九项hash下复跑90组/2006断言/0失败。逐组结果比较只有既有`B2-C1-issuance-close-race`因`if(issue.Result) Check(...)`条件分支从104变98;本批新增用例两次均44断言/0失败。总数差异不算新增覆盖,也不构成产品回归。总进度/TODO/执行清单与最终F5均更新:运输子批限定关闭、F5真实业务最终清账仍待。未改生产代码或本机服务器,未发正式账号请求,不打包,工作树保留。
## 2026-09-29 M2 DP1-D0:双提供方纵切设计与集中前审输入
- 按最新用户裁决只读核 `SubBoostrap` 单次选择、`LoginStage` 始终注册旧类、`PFLoginAct`/`QuitAct` 下转、第31模块绑定及 `IUserService` 的 PlayFab 身份语义;约 213 处 `IUserService` 文本引用、223 处 `PlayFabMgr.Instance` 调用分布于82文件。确认不能仅改 DI 就宣称独立 KV 或首场景可用。
- 已写[DP1候选完整方案](B3BatchMigration/M2/M2-双提供方独立KV用户服务抽离方案-待完整评审-2026-09-29.md),比较继续 partial、全量同批替换、登录纵切三路;推荐登录纵切并保留阶段闸,PF/AGG 原路线及 SDK 均保留。评审重点为 `IUserService` 的真实语义与第31模块最小接收契约,禁止假身份、空方法和 KV 错误静默回退。
- 第 2 个模块 `SmallGameData` 构造函数直接需要 `IUserService`,已纳入审查,不能假定窄登录接口独自解决 DI。[18项受审基线](B3BatchMigration/M2/M2-DP1受审基线.json)复算18/18字节与SHA256一致,清单SHA256 `858C43EF26361EB348D4CE36C7F3AFC8AF4DAF85E754A45F3D960A2D078145FA`;[一次性集中独立审查提示](B3BatchMigration/M2/M2-DP1原ZCode一次性完整方案审查提示词.md)已备。**报告未落盘,尚无精确生产/测试代码白名单,不编码。** 本检查点仅改文档;现有工作树保留,未触碰本机服务器、正式账号、Unity或打包。
## 2026-09-29 M2 审核节奏纠偏:撤回 DP1 单独送审
- 用户指出审核频率未降低,主会话确认问题在于 CP2B-T 批末关闭后又为 DP1 单独备前审,把合批拆回了多轮。现[裁决](B3BatchMigration/M2/M2-合批审核节奏纠偏-2026-09-29.md):DP1 提示/18 项基线仅保留底稿,不启动独立审查;若报告已经在途则吸收其事实,不再因此新增 DP1 单独编码/批末复核。
- 下一次正式前审合并独立 KV 服务、CP2B 首场景以及同合同 CP3 调用;只在可信线上合同和完整可编码方案齐备后送一次审。主会话一次核 hash/逐项裁决/定白名单,批内连续实施并于每检查点记日志,迁移终点统一独立复核;白名单外新增合同或架构才精准补审。`AGENTS.md` 的编码前完整评审仍保持。本检查点仅文档,无代码/服务器/Unity/正式账号/打包操作,工作树保留。
## 2026-09-29 M2 合批执行偏好确认
- 用户再次明确减少送审次数、开发阶段尽量不中断。已在[合批节奏裁决](B3BatchMigration/M2/M2-合批审核节奏纠偏-2026-09-29.md)写明:批准白名单内的常规编译/测试失败与实现修复直接连续处理、每检查点记日志;仅新线上合同、方案外架构、白名单越界或不可逆操作停下精准裁决,不把每个检查点升级为审核。
- 只读重查首场景合同矩阵及项目文档:固定地址根路径可达、公开 Swagger/OpenAPI 常见入口仍无已记录有效合同;当前资料只证明客户端拟请求的路径,不足以让首场景上线。DP1 仍不单独送审;本检查点未改生产/测试/本机服务器代码,未调用 Unity、正式账号或打包。
## 2026-09-29 M2 合批开发 C0:首场景与同合同调用归并工作稿
- 用户要求本开发侧执行下一步。已核当前没有 DP1 独立报告或新的可信线上合同文件;CLI Loop `compile` 只有 Editor 重编译参数,无无打包 Player 脚本编译选项,先前动态代码尝试被 Restricted 拒绝,未绕过。
- 只读对照 `FishingStage`、`PFLoginAct`、Survey/Leaderboard、Mail/Friend/AntiCheat、31 模块和224项调用矩阵,形成[一份合批实施方案工作稿](B3BatchMigration/M2/M2-合批实施方案工作稿-2026-09-29.md):串起独立 KV 服务→登录→首场景自动调用→同合同存档读写,标出 Survey B3-C179–C182、SmallGame C087–C089、Friend C175/C176 的实际业务归属;不把200项候选当机械替换。
- 目前线上 Method/route、公开身份、Survey 抽样/领取、榜单替代和动态配置命中仍无可信完整合同,工作稿非可编码白名单且未送审。继续只读补齐同一批方案,不拆 DP1 小审查;此检查点未改生产/测试/本机服务器代码,未调用正式账号、Unity Play或打包,工作树保留。
## 2026-09-29 M2 客户端/服务端职责与问题单
- 用户重申:本 Agent 只负责客户端,服务器本机代码和远程代码属于其他开发内容且可能不同;不得读取/修改服务器代码,疑问写文档沟通。已据客户端 `Mail`、`AntiCheat`、`Friend`、`Club`、`Survey`、排行榜和场景初始化调用形成[一份集中线上合同问题单](B3BatchMigration/M2/M2-客户端致服务端线上合同集中问题单-2026-09-29.md),按 Method/path、身份、成功/空/错误、重试/幂等、线上启用状态一次提问,不当成服务端代码任务单。
- 合批实施工作稿已引用该问题单。客户端不通过猜测线上路由或本机源码补合同,不增加 DP1 单独审查。本检查点仅文档;未读取或修改任何服务器代码,未请求正式账号/打包,工作树保留。
## 2026-09-29 M2 问题归属澄清
- 用户指出集中问题单容易被误解为所有问题都与 PlayFab 或服务端有关。已在[同一问题单](B3BatchMigration/M2/M2-客户端致服务端线上合同集中问题单-2026-09-29.md)新增分工:邮件/好友/俱乐部/反作弊是普通游戏服 API 合同;问卷两键、十六进制旧 ID 和排行榜直调才是客户端旧 PlayFab 依赖;KV 会话是新链路,动态活动由客户端配置与服务端接口各答相应部分。每行写明答复方,不把客户端/产品策略甩给服务端。
- 本检查点仅澄清文档,未改客户端生产/测试或任何服务器代码;不新增审核轮次,现有工作树保留。
## 2026-09-29 M2 新玩家 ID 裁决接收
- 用户明确 KV 模式的 PlayFab ID 已换成新玩家 ID,不需再确认新旧 ID 映射。只读核 `PlayerKVLoginContext` 成功路径把 `session.PlayerId` 写入 `PlayerKVAccountDescriptor.PlayerId`;这是 KV 模式身份来源。旧 `IUserService.UserId`/`EntityKey` 与 Survey 十六进制、排行榜 SDK 调用属于尚待客户端迁移的旧消费者,不是要求用户或服务端重新决定 ID。
- 已在[合批工作稿](B3BatchMigration/M2/M2-合批实施方案工作稿-2026-09-29.md)和[集中问题单](B3BatchMigration/M2/M2-客户端致服务端线上合同集中问题单-2026-09-29.md)改为“KV 用新 PlayerId、PF 保留旧 ID”;服务端仅需在确有新接口时提供路由/响应事实。暂停的 DP1 旧身份疑问由[节奏纠偏文件](B3BatchMigration/M2/M2-合批审核节奏纠偏-2026-09-29.md)标为已覆盖,不额外送审。本检查点仅文档,未改生产/测试/服务器代码。
## 2026-09-29 M2 邮件身份与原逻辑裁决
- 用户明确邮件沿用原有逻辑,KV 仅使用新的玩家 ID。客户端只读核 `InGameMailHandler`:fetch/send/updateState 请求体无 PlayFab ID,请求身份由认证会话 Cookie 承载;`InGameMailService.Init` 的 `UserId` 只供 `MailCache` 生成本地缓存和同步游标键。KV 将使用认证会话的新 `PlayerId` 作本地邮件键,PF 仍用原键;不再单独索要邮件新合同,实际线上功能仍待验收。
- 已修正[合批工作稿](B3BatchMigration/M2/M2-合批实施方案工作稿-2026-09-29.md)与[集中问题单](B3BatchMigration/M2/M2-客户端致服务端线上合同集中问题单-2026-09-29.md)。本检查点仅改文档;未改生产/测试或服务器代码,未调用正式账号、Unity 或打包;工作树原有改动保留。
## 2026-09-29 M2 旧接口确认范围收窄
- 用户再次明确:原有游戏服接口沿用原流程,服务端只需确认将显式旧玩家 ID 换为新 ID 后仍接受;客户端不应逐项索要既有路由、响应和 Swagger。只读核邮件请求体无 ID、好友邀请数空正文、俱乐部部分使用 `ApiPlayerId`、反作弊显式 `playerID=UserId`;等级榜仍直接调用 PlayFab SDK,属于确有替代能力缺口,不混入旧接口 ID 确认。
- 已把[集中问题单](B3BatchMigration/M2/M2-客户端致服务端线上合同集中问题单-2026-09-29.md)缩为“一项新 ID 接受确认+有新能力时才需答的排行榜接口”,并在[合批工作稿](B3BatchMigration/M2/M2-合批实施方案工作稿-2026-09-29.md)和[早期客户端矩阵](B3BatchMigration/M2/M2-CP2B客户端首场景线上合同待核矩阵-2026-09-29.md)明确后续裁决优先。服务端接受尚未作为线上实测记账;常规功能由客户端接线后回归。本检查点仅文档,未改生产/测试/服务器代码,不打包,工作树保留。
## 2026-09-29 M2 等级榜 KV 存储裁决
- 用户明确 KV 模式应替代 PlayFab 等级榜统计,等级分数存 KV、从 KV 读取。只读核 `LeadboardData.SetLeadboardData/GetLeadboardData` 仍直接调 PlayFab SDK,旧社交榜要全服和地区前 50 名;`PlayerKVClient` 仅有认证账号自己的 Get/Set/Delete,没有跨账号枚举或排序。另核活动榜已有 `event/GetLeaderboards` 普通游戏服请求,与 PlayFab 等级榜分开。
- 已将[合批工作稿](B3BatchMigration/M2/M2-合批实施方案工作稿-2026-09-29.md)、[集中确认项](B3BatchMigration/M2/M2-客户端致服务端线上合同集中问题单-2026-09-29.md)和[早期客户端矩阵](B3BatchMigration/M2/M2-CP2B客户端首场景线上合同待核矩阵-2026-09-29.md)更新:个人等级分数进 KV 已定;全服/地区前 50 名需要服务端开发侧提供基于 KV 的聚合读取入口,客户端不伪造多玩家榜。此项是实现缺口,不再作为“等级分数存哪里”的产品疑问。检查点仅改文档,未改生产/测试/服务器代码,工作树保留,不打包。
- 补核 KV 存档已有 `Lv` 和 `InfiniteBuildingData`,旧等级榜分数计算为等级×100000+建筑等级;客户端方案优先从现存 KV 值推导个人分数,是否另建索引由完整方案和跨玩家聚合读取实现决定,不盲目写重复键。
## 2026-09-29 M2 全体 PlayFab 玩家数据迁 KV 原则纠偏
- 用户明确本期开发目标本来就是 KV 模式替代 PlayFab 玩家数据存储:原 PF 读写改 KV 读写,不再逐字段追问存储选择;PF 模式仍保留原 SDK。此前把等级榜“存哪里”当产品疑问是开发侧误判。已在[合批工作稿](B3BatchMigration/M2/M2-合批实施方案工作稿-2026-09-29.md)、[集中确认项](B3BatchMigration/M2/M2-客户端致服务端线上合同集中问题单-2026-09-29.md)、[审核节奏裁决](B3BatchMigration/M2/M2-合批审核节奏纠偏-2026-09-29.md)和 TODO 顶部固定该原则;全服/地区榜跨玩家读取只作为其他开发侧实现依赖,不再请用户裁决存储位置。
- 只读复核 `SurveyService` 的四处 PlayFabMgr 读写与 `LeadboardData` 两处 PlayFab SDK 调用,作为合批客户端迁移清单输入。当前完整合批方案/精确白名单尚未获评审裁决,依 `AGENTS.md` 暂未改生产代码。本检查点仅改文档,未读取或修改服务器代码,现有工作树保留,不打包。
## 2026-09-29 M2 合批预审 C1:核证、裁决与方案补全
- 用户通知审查完毕后,读取最新[合批预审意见](B3BatchMigration/M2/M2-合批工作稿独立预审意见-2026-09-29.md),SHA256 `8C8F1BD7F703260BB764568DB13F4FB3F94C86D8B62A3A3099816FFFA752F879`。报告明确不是正式前审,没有受审hash清单;未事后制造受审基线。旧DP1报告SHA256 `8C577A6D81ADAEC4E175F186EA2E4D1674588F2C47269C8B38A6EBAFD16E1ACF`,其18项原基线重新核对长度/SHA256全一致,清单hash仍为 `858C43EF26361EB348D4CE36C7F3AFC8AF4DAF85E754A45F3D960A2D078145FA`。
- [逐项裁决](B3BatchMigration/M2/M2-合批预审主会话裁决-2026-09-29.md)接受P2-A/B/C与P3-D/E、吸收DP1 R1/R2/R3及P3事项;覆盖旧“身份恒空”建议。工作稿补齐窄生命周期/第31模块契约、CustomId setter、成功结果传递真实AccountDescriptor、身份先于场景发布、冻结选择不二次决策、默认名短ID与Survey十进制%10、地区未知不得混入全局榜、ServiceHost测试迁移和耦合文件回归。IUserService现含PF EntityKey类型的实际依赖被明确登记,不虚称独立KV类已完全脱离SDK类型。
- 进一步只读追踪首场景LoginDays:战令写BattlePassRecordTask;成就直接写已注释,真实合入NewPlayerDataDic;礼包初始化可写GiftVIPDData/TriggerPackDataList/FixedTimeShopDic;FishingEventData按配置进入SetEvent;MiniBP读写MiniBPKeyNew;LuckyTask调用具体模型SaveTaskData。已写入同一方案,不额外送审,也不让用户替客户端查调用链。
- 接手入口、开发状态、TODO与M2接手卡顶部同步当前状态。**没有新代码许可,本轮未改生产或测试代码**;仍由开发侧补完同一方案的动态活动实际命中、奖励写入失败顺序及完整白名单后一次正式前审。未读/改服务器代码,未调用正式账号或Unity,不打包;工作树原改动保留。
## 2026-09-29 M2 合批 C2:修订复核裁决与正式前审包完成
- 收到原ZCode《合批工作稿修订版独立复核》,报告hash为97FC767CF71A25A1731F08B9193D7A20EBF5227ED007D25D8952C44130EE59FE。报告仍明示非正式前审、不授编码许可。本次不再只改工作稿,已完成整批正式方案和单次提示词。
- 逐条裁决:接受关闭API消歧、跨账号公开资料补集中问题单;不接受“CustomId接口已有setter”事实,实际UserService.cs:70只有getter,具体类:131才有setter,保留必要接口修改。旧DP1基线18/18仍一致,不恢复独立小批。
- 开发侧补全:本地活动配置1466项/70组Type/SubType,FishingEvent和TriggerPack直接LoginDays条件均0,但Init及其它事件仍可达;LuckyTask两模型具体持久键、好友邀请计数附带领奖进度读、邮件批量HasRead后筛HasReward的旧缺陷均写入整批方案。奖励保留旧协议,明确票据确认不等于多键/跨系统事务,不伪报崩溃恢复保证。
- 交付:M2-合批正式实施方案-待完整审查-2026-09-29.md、候选白名单(110现存文件、12拟新增含.meta/测试)、224项存档调用台账、动态配置投影、集中能力问题单、正式受审基线及原ZCode一次性正式前审提示词。基线2165项含只读源码快照,不扩成2165文件修改许可。
- 自核:2165/2165长度与SHA256一致;12拟新增仍不存在;224唯一调用ID且全部路径在候选清单;旧21140字节工作稿hash不变。manifest hash为DBC965EDBF48FADA4C1508F2662562F4FD72C01711D8E2FE2022AC4956896EF3。记录见B3BatchMigration/M2/M2-合批正式前审包自核.json。滚动文档diff --check通过(仅LF/CRLF提示)。本次仅文档/核证,未运行或宣称测试/编译通过。
- 下一动作:审核侧对该包做一次完整正式前审,写M2-合批正式独立方案审查-2026-09-29.md;主会话核hash并一次裁决后在获批范围连续编码/测试/日志,终点一次独立实施复核。不是再送工作稿预审,也不逐接口询问ID或存储位置。若真正合同变化只停相关部分,其它已审工作继续。
- 未完成:本批生产/测试实现、跨账号能力接通、奖励故障恢复裁决/实证、真实Player和完整场景通关、临时门控/闲置实现清理。Core/KVMgr物理反向依赖仍是待办,不宣称已解决。服务器代码未读未改,原工作树保留;无Play、正式101/102请求、付费或打包,Unity仅CLI Loop。
## 2026-09-29 M2 合批 C3:用户通知审核完成后的落盘核查
- 已检查预定正式报告路径,以及CodexOutput(含隐藏/忽略文件)内合批/正式审查文件。当前未找到M2-合批正式独立方案审查-2026-09-29.md或其它新增合批正式报告;最新已落盘审核仍为17:52的修订版工作稿独立复核,其明示不授编码许可。另只读查看可见审查任务,未取得本包新报告。
- 重核本包2165/2165长度及SHA256一致,12拟新增仍不存在;manifest hash仍为DBC965EDBF48FADA4C1508F2662562F4FD72C01711D8E2FE2022AC4956896EF3。现有源码无基线漂移。
- 已仅询问新报告的保存路径/任务位置,不要求重审,不改写方案或新增审核轮次。报告定位后直接核hash、记录裁决并执行已批准范围。当前未改生产/测试代码,未接触服务器代码、正式账号或打包。
## 2026-09-29 M2 合批 C0 正式前审通过并开工
正式报告有条件PASS,主会话重核2165/2165基线一致、12新增不存在,已逐项裁决2P2/4P3并锁定110+12职责边界。裁决见B3BatchMigration/M2/M2-合批正式审查主会话裁决与实施记录-2026-09-29.md。现进入C1连续编码;双阶段闸保留,AggUserService只回归,服务器/正式账号/打包不操作。
## 2026-09-29 M2 合批 C1:独立KV用户服务与登录退出核心接线
- 正式前审获批后连续编码:新增KVUserService,实现IUserService但不继承/引用旧PF服务或SDK;正式认证/Coordinator/原handle/提示绑定/身份事件/退出撤销从旧PF partial迁出。旧类保留PF、AGG、受控验证与kv-loop需要的成员;移出的闲置formal分支已删除。
- 增加有实际消费者的IKVUserLoadReceiver/IKVUserLifecycle;Bindings通过模块31窄契约,PFLoginAct和QuitAct通过生命周期契约;IUserService增加CustomId setter并移除EntityKey,Duel PF专属调用改取具体能力,KV缺匹配服务明确止步。LoginStage按冻结选择注册独立服务,并拒绝已有活PF存档组件。PFLoginAct预订RT成功事件,双阶段闸保留。
- 成功GameLoadResult携带不可变AccountDescriptor;新身份仅在31模块Apply、原handle和普通请求就绪后发布,Chat订阅先于唯一成功事件。LastLoginTimeUtc缺失/畸形/有效三态已实现,TimeRefreshManager显式把MinValue映射null;本次登录时间写入留C2首场景初始化完成点,未冒充已实现。移动端易盾/TapJoy暂缓已入最终清单。
- 红绿记录:新增宿主契约测试首先因缺少KVUserService产生CS2001;抽离时出现旧分支文本残留语法错误及Found为bool?的编译错误,均在批内修正。Unity自动生成两接口.meta,检测到已有文件后保留,没有覆盖GUID。
- 真实新服务合成登录(认证/Get注入内存handler、其余30业务模块为宿主夹具、模块31为真实新类)覆盖:加载期间无身份;重复单发;Chat订阅先于事件;原cookie与认证新ID;畸形资料不发成功;401同步失效;加载中退出丢弃迟到响应;PF SDK/平台助手/奖励调用均0。不能以此冒充Unity真实31模块容器运行。
- 最终ServiceHost非Android和Android+AGG均12组147断言,正式请求0;KVGameLoadTests 90组2008断言0失败,run=20260929122820_8824a3679d0341819a9eb00ef181dc84。此前11组129及12组143是中间进度,不另算覆盖。加载套件断言竞态说明保持。
- Unity仅CLI Loop compile:首轮0错272警告;收尾最新Success=true、0错269警告,见M2-合批-C1-unity-compile.json。仅Editor编译,Player/真实Chat和SignalR未验。作用域diff --check通过(仅CRLF提示);旧LoginStage尾空白已随本文件接线清理。
- 本轮相对正式基线修改12个既有源码/测试文件,新增7项源码/测试/.meta;无白名单外源码变动,AggUserService源码hash不变。详细差异与交付hash见M2-合批-C1检查点与交付hash.json;原正式受审manifest/方案/报告不回写。
- 下一步继续同一已审批C2:共用存档入口/固定会话/调度与224项调用迁移、首场景和奖励。补真实Chat/RT旧会话回调回归;LastLoginTime写入时点;C3同时解除两阶段闸时还需处理PFLoginAct.OnDestroy的当前临时KV撤销,不能正常交接后误注销。无需再送C1小审。服务器代码未读未改,无Play、正式账号请求、付费或打包;M2和奖励完整通关均未完成。
## 2026-09-29 M2 合批 C2a:共用存档与首批业务调用(继续同批,不送小审)
- C1组合基线2172项全部一致。实现固定会话的KV/PF共用store、一次绑定/退出失效、真实票据确认、KV资料与40秒调度;迁22项业务读写(活动仓库、主档、鱼竿地图、引导、战令、小游戏),原序列化/remoteStore保留。
- 首场景接入初始化保存后确认LastLoginTimeUtc;发现原跨日刷新吞异常,补成功标记并在失败时阻止时间推进。两阶段闸仍在,未冒充首场景已跑。保存途中退出、Unknown、Guard、不可重绑及真实活动仓库/时间管理器回归纳入宿主。
- ServiceHost两条件均16组215断言,formalRequests=0;加载90组2008断言0失败。CLI Loop Editor初次0错272既有警告,最终增量报告另存;未Player编译、Play、正式请求、付费或打包,服务器源码未读未改。
- 本轮初次编译缺FlushBufferedData,补原SyncData内部委托后通过。diff --check通过;两个新增.meta由Unity创建,保留GUID。累计交付33项,hash `7DF87736B6204DFD1689606BF40514E9299FB86F8D7ED5B13B3572537370EFBE`,原基线其它2144项不变,AggUserService不变。
- [完整记录](B3BatchMigration/M2/M2-合批-C2a实施记录-2026-09-29.md)、[进度台账](B3BatchMigration/M2/M2-合批-C2调用迁移进度.json)。继续180项业务存档+2项即时消耗、奖励动作收集/确认、Chat/RT及真实首场景回归;本次22项runtimeVerified仍false。无需送C2a单独审查,M2未完成。
- C2a收尾补核:批量Flush不能仅凭无Blocked/Unknown就视为全部确认,现捕获调用开始时每键最终回执并逐张核对;await期间被后续写覆盖的旧回执保持Superseded,后续值需自己的flush。新增11键跨批覆盖回归通过,最终宿主两条件均16组215断言。该回执记录是本store保存确认,奖励同步动作收集仍未完成。
## 2026-09-29 M2 合批 C2b:活动存档迁移(继续同批,不送小审)
- C2a组合基线2177项一致;在正式范围内修改14个生产、4个测试文件,无新增源码路径。新迁42处,累计64业务调用,剩余138+2即时消耗;原受审台账不回写,runtimeVerified全false。
- 活动代币真实服务改固定store,坏档/拒写不默认零余额;先接受候选JSON再更新内存与原通知。旧通用活动管理器、FishingEventData主体/分部、7种集中活动存档、鱼竿配件保存已接KV/PF共用路线。AllRefresh汇总错误,不把失败全吞后返回整批成功;其直接调用者是PlayerShopData,真实跨日订阅全链未验。
- 回归最初因沙箱File.Replace拒绝出现StorageError,工作区合成探针证实;CLI Loop另遇Node spawnSync EPERM。经工具批准沙箱外运行通过,未改原子协议、不用UnitySkills。两种宿主条件17组235断言、formalRequests=0;最新CLI Loop编译0错272警告。diff --check通过。
- [记录](B3BatchMigration/M2/M2-合批-C2b实施记录-2026-09-29.md)与[进度](B3BatchMigration/M2/M2-合批-C2调用迁移进度.json)已更新。累计47项交付hash `8F027C0677BE42099CFA7EA3ED53D86497DF55C9A7627C29006526CE7B7C0729`,原基线其它2130项不变,AggUserService不变。未重跑未改动的加载核心,不以历史90组结果冒充本轮复跑。
- 两个即时消耗的现有提前继续缺陷已核出,按同批方案连调用者修;奖励动作确认/UI/真实Chat/RT/场景及kv-loop宿主注入兼容仍待。首场景双闸未放开;服务器源码未读改,未Play/正式账号请求/付费/打包,M2未完成。
## 2026-09-29 C2 连续开发中(不交接、不新增送审)
- 按用户要求,不再把内部检查点作为停止点。开工复核原基线+C2b组合2177项一致;保持正式审查hash与候选白名单。
- 已接同步奖励动作回执收集及嵌套ShowData延后展示;Survey/Friend/Mail及实际调用者改为等待确认,邮件批量按请求前集合和RewardTaken处理,个人邮件膨胀规则保留;失败/旧会话不自动重放。此时真实业务配置/多键崩溃恢复尚未通关。
- 首轮CLI Loop编译0错误274警告;合成回归18组244断言、formalRequests=0。首个竞态测试因更新主档使目标进入首批而未制造预期覆盖,调整为12键后真实未发送覆盖用例通过;没有更改KV核心。
- 随后继续52处商店/触发礼包/营地/Buff等保存及2处即时消耗真实调用链的迁移,尚在开发验证中,不把此日志当作当前最终hash或完成证据。
## 2026-09-29 M2 合批 C2c:连续完成一大批,不把检查点当停止点
- 从 C2b 连续修改 65 个生产文件、3 个测试文件及清理文档;无新增源码路径,白名单外代码零改。新迁 134 项,累计 198/202 经共同 store;3 项原固定 KV 提示保留 PF 支路,1 闲置项待最终清理;2 即时消耗已接真实等待调用链,runtimeVerified 仍全 false。
- 同步奖励回执收集及最终确认、嵌套 ShowData 延期、Survey/邀请/邮件实际链、商店主购买/订单防重、俱乐部签到、Chat 生命周期连续实施。KV 不可用时先拒绝奖励动作,未自动重放。补单 HomePanel 的 await 缺口明确未完成。
- 最新 ServiceHost 两条件各 20 组262断言;CLI Loop Editor 0错272警告;M08-M23 28断言,B2-20 31实模块/83断言/恢复=true;旧装备9组28断言通过。全部正式请求0,未 Play、付费、Player构建或打包。
- 实测旧 fishing-reward 在 GuideDataCenter.Init:100 空引用;旧 fishing-consume 在 MiniBattlePassDataProvider.GetMiniBattlePassRecord:143 空引用。两者是各自手工隔离宿主缺新增 store,已保留失败和完整堆栈,未动白名单外文件、未生产空值绕过。退出状态 disabled、not ready、无 permit,非 Play。
- 将两个旧验证宿主与真实 HomePanel 三文件差异合成一份可评审方案;已通过的装备宿主不扩面。只范围差异需裁决,普通编译/测试自修不再送审;不将 C2c 误称整个 C2/M2 完成。
- 累计交付110项,原基线其它2067项不变,组合2177项一致;清单 SHA256 `8AA47B90E292CF39A0ED7D5304B57516AFE3B0378A2B96A27E494FA9A1202AB9`。原正式报告/manifest/方案/白名单/224项台账字节不变。git diff --check通过,原工作树保留,服务器源码未读改。
- [完整记录](B3BatchMigration/M2/M2-合批-C2c实施记录-2026-09-29.md)、[集中差异方案](B3BatchMigration/M2/M2-合批-C2c集中边界差异与后续连续开发方案-2026-09-29.md)、[hash](B3BatchMigration/M2/M2-合批-C2c检查点与交付hash.json)。用户要求继续优先:以后在已审范围内通过就自动推进后续,只有真实越界/合同/不可逆操作或整批交付才交接。
## 2026-09-30 用户追加约束:保留原主要业务流程
> **2026-09-30 用户硬约束:迁移必须保留原主要业务逻辑和工作流程。** 存储提供方与身份替换不能顺带改变奖励数量、扣费次数、订单/补单语义、活动触发条件、业务事件先后及登录退出流程。已审保存确认等待和旧缺陷修复必须逐项记录前后差异、验证连带影响;不把它们当任意改业务的许可。已改代码也须对照迁移前客户端基线,不能仅凭编译或合成用例通过称无回归。任何开发性冻结/忽略均须最终恢复或清理;不能用跳过功能或生产空值兜底隐藏失败。此约束与原三文件范围差异一起供审查侧核对,原受审方案和 hash 不重写。
- 已同步入口、状态、接手卡与 TODO。存档迁移完成不等于流程等价已验;后续对现有改动补前后行为对照,尤其扣费/发奖次数、订单状态、活动事件顺序与失败后恢复。
- 本检查点只更新约束和验收待办,未修改生产代码、旧受审文档或交付 hash;三文件差异仍待审查。
## 2026-09-30 三文件差异的原流程影响核查
- 两个旧验证宿主仅拟离线注入适配;HomePanel await 配套实际改变等待和失败分支,不能称零影响。原“成功后继续”表述存在跳过 CurRewardQCount/OnNoReward/MaskClose 的主界面停滞风险;同时 TriggerPack/暂存奖励涉及存档,Unknown 时也不能盲目继续。
- 已形成 [业务流程保留补充](B3BatchMigration/M2/M2-C2c差异方案业务流程保留补充-2026-09-30.md),与原三文件差异合并一次裁决后实施。原受审文档/hash及生产代码均未改。
## 2026-09-30 补单收回原处理时序
- 源码核对原 PlayFab 补单同步本地发放/入缓存,云端后台上传失败只记日志;原 HomePanel 不等待云端。KV 已有固定 store 与40秒调度,可保留同类处理时序。
- 撤回 HomePanel await 和同步链强制等待确认提议,文件扩展收缩为两个离线验证宿主;补单语义修订与其合并一次差异审查。只修订补单,不改其它已审动作边界。
- [最新修订](B3BatchMigration/M2/M2-C2c补单保留原异步存档流程修订-2026-09-30.md)。未改生产代码及原受审/hash文件,未声称原有跨系统窗口或失败恢复已解决。
## 2026-09-30 用户收紧 M2 为纯平移
- 此裁决适用于全迁移,不仅补单:不修原业务缺陷、不夹带确认等待、通知重排或新失败策略。发现原问题登记后续,不自行修改。
- 已定位奖励动作聚合、Survey/Friend/UI、邮件批量状态修正、商店/签到确认和防重入、钓鱼/转盘时点等需整批核减;原有保护与新增保护须区别,保留接手前工作树。
- [唯一核减清单](B3BatchMigration/M2/M2-纯平移范围纠偏与既有改动核减清单-2026-09-30.md)。本次只记录裁决和核减输入,尚未恢复生产行为,不改旧受审/hash文件。现有差异审查须合并此范围收缩,避免继续按旧扩展方案实现。
## 2026-09-30 用户通知审核完成:报告定位与核减准备
- 尚未定位本轮完整审查报告,已请求路径;未将用户审核完成误记为未审核。先完成C2c组合2177项核证:2176一致,唯一差异为用户授权更新AGENTS.md,生产无新漂移。
- 对15个关键文件核原文来源,结果见 [核减基线](B3BatchMigration/M2/M2-纯平移核减基线核对-2026-09-30.json);不能用HEAD全文件回退覆盖早期未提交改动。
- [继续前记录](B3BatchMigration/M2/M2-纯平移继续前核证记录-2026-09-30.md)。入口措辞已同步为全部迁移阶段。仅文档/只读准备,未改生产或服务器。
## 2026-09-30 C2d 纯平移核减与配置恢复检查点
- 根据用户再次确认审核完成,冻结当前纯平移方案并记录完整裁决;未伪称收到新独立报告。保留旧正式报告/基线与整个工作树。
- 32个客户端源码与2个测试文件核减/接线,HomePanel原始hash一致。已删除本轮失去消费者的奖励动作收集及活动读档辅助实现。原缺陷统一登记移植后,禁止借迁移修复。
- 两个旧离线验证宿主补store;修复体力恢复场景首败。NON_ANDROID、ANDROID+AGG各18组254断言通过,耗能19组85断言通过。合并CLI曾180秒超时,原始失败和底层结果保留,单组重跑。最终编译0错误269警告。
- 用户要求恢复debugconfig:只改EventApiURL回http://s101.local:18080/,其他字段深度对照不变。未Play、未发正式请求、未读改服务器代码、未打包。
- 完整证据与待办以C2d实施记录/交付hash为准;M2仍未真实全链通关。不为常规回归另发审核。
- C2d最终补记:奖励单组55组243断言通过;M08-M23 28断言及B2-20真实31模块83断言通过,sameObjects/restored=true;退出状态四项false。组合核对无边界外代码变化,HomePanel原始hash一致。当前继续项是C3真实集成与既有外部能力缺口,不把用户配置恢复当批准Play或正式写入。
## 2026-09-30 C3a 补充离线验证检查点
- 完整加载90组2006断言0失败;CLI原装备9组28断言、restored=true;退出回调补现有契约编译输入后10组35断言;非Editor工厂探针隔离不相关测试partial后2类工厂检查通过。首次工程编译失败保留,原工程/断言/生产不改,临时targets及复跑命令可查。
- C2d组合2177项及20证据hash仍一致。Unity退出playing/enabled/ready/permitExists均false。
- 静态证实FishingStage→SetLvData→PF统计、FishingAct→GetFriendData→PF好友列表尚可达;公开资料和匹配缺口未接通。相关既有服务端能力缺口阻断首场景放开,不重问ID/邮件协议、不伪造零PF调用。
- 详见C3a验证记录与证据hash;未Play/正式请求/付费/打包,未读改服务器代码,不为常规验证另发审查。
## 2026-09-30 KV替代范围与工作归属纠偏
- 用户重申原PlayFab相关功能由KV管理器承接。已写AGENTS:不把等级榜/好友等当新增需求,不默认转交服务端;先核客户端等价映射,有具体能力证据再集中沟通。
- 当前KVMgr/PlayerKVClient接口仅显示当前账号读写与同步,不能据此宣称线上无其它能力。撤回“主要工作在服务端”判断。
- 剩余SDK接线一次性核查材料已落盘,已审存档不重复审;未发消息或伪称审核完成。生产、原测试、配置和服务器均未改,历史hash保留;仅用户规则增量单列。
## 2026-09-30 开发进度统一整理
- 新增M2当前开发进度与执行TODO作为当前状态入口,区分已实现、离线验证、剩余SDK接线与真实验收,不给虚假整体百分比。新UserID口径及后续执行顺序一并记录。
- 读取刚落盘原ZCode防跑偏报告并核hash;重算C2d为112/113一致,唯一AGENTS增量对应用户要求及已有增量记录。接受静态一致结论,不当成C4通过;无需重复确认已授权规则写入。
- 仅文档更新,无代码/测试/配置/服务器修改,无git提交,保留所有原审核和hash。
## 2026-09-30 C3b UserID兼容执行检查点
- 用户批准旧字段名+新UserID、按原流程实施并测试;服务端内部未知不作为反复等待确认的理由。开工前已记录完整裁决与三测试文件hash。
- 现有普通请求已走IUserService.UserId/ApiPlayerId或对方新ID,不做多余生产替换。真实FriendService/DTO接入原宿主,101/102及PF对照、八条原路由、错误返回、邀请码往返、撤销后不再发送通过。
- NON_ANDROID/ANDROID+AGG各21组380断言,formalRequests=0;非EditorFactoryProbe通过。新增测试曾把已撤销会话误期望为null,按原合同改成拒绝异常,首败保留,生产不动。
- 剩余直接SDK替代和真实线上兼容仍未通过;本轮无服务器修改、正式请求、Play或打包。新交付记录为C3b增量,不改历史hash。
## 2026-09-30 PlayFabClientAsyncAPI替换范围核对
- 按用户要求全量核查客户端:15处名称引用含2处重试包装,共13处实际SDK操作。原PF用户服务9处保留于PF模式;共用等级榜读写、好友列表、公告4处仍需KV等价替换。
- 补入此前清单遗漏的公告与真实NoticePopupPanel发布入口;逐项记录榜单、好友、他人资料和公告需要的原字段及通知/展示时序。KV他人资料仅缓存未命中没有远端读取,不算完成。
- 更新同一份剩余SDK核查文档与当前TODO,未拆分送审。当前检查点仅源码核查,不改代码/配置/服务器,不发正式请求,不重复执行不相关测试,保留原工作树及历史hash。
## 2026-09-30 C3c 连续核查至必要差异审查点
- 继续查明历史文档有friend/GetFriendsList候选,当前SearchFriend已有请求/响应DTO;没有读取本地/远程服务器源码,也没有把历史分析当线上事实。
- 反证历史“Level直接映射”:原好友/伙伴UI除100000,普通等级12会显示0且丢建筑等级。LastLogin缺失不仅涉及活跃数量,还会令伙伴邀请的无保护.Value读取异常;不通过修改UI或伪时间绕过。
- 原已审方案没有上述完整等价合同,公告文件又超出原候选白名单。按用户“继续直到必须审核”到此形成C3c一份集中差异包,包含五类映射、最小文件候选、验证范围与原ZCode提示,不拆逐功能评审。报告未落盘,当前下一动作在审查侧。
- 只读核验2122项Client及C3b的4项交付、8项证据全部一致。生产/测试/配置未改,未发正式请求、未Play/打包;无新增业务测试通过声明。更新入口、状态与TODO,原历史hash保留。
## 2026-09-30 15:09 C3c好友接口线上事实核实
- 用户质疑当前接口是否已支持一次返回好友资料。按既有测试授权,对正式101/102各一次登录和一次friend/GetFriendsList读取,不发送playerProfile、不操作KV Set/Delete或好友增删。
- 两账号登录HTTP200/state0/newCreate=false;好友列表均HTTP200/code1/friends空数组。已证实接口可用,撤回不支持的推断;尚不能判定非空单项LastLogin/等级/建筑等级字段和KV数据来源。
- 首次受限调用HTTP异常留证,获工具批准后复测成功。成功正式请求4次,仅保留脱敏结构;认证的服务端原有副作用不被称为零副作用。未读改服务器代码,未改生产,未Play/打包。
- 原C3c受审包保持原hash,新增线上事实补充及两份探测JSON,更新当前进度与入口。下一证据应为非空好友项或当前线上合同,不自行创建正式好友关系来填样例。
## 2026-09-30 15:36 用户授权正式互加好友完成
- 用户明确批准101/102互加好友,并允许必要时103–110。先记录执行裁决和边界;本次只使用已有101/102,不改正式准入开关。
- 第一次预检仅读旧Lv键未取得等级,未发好友写操作;根据现行DecodeCore读取NewPlayerDataDic.newData第0槽,101=62、102=60。保留首次失败,未改生产解析器或用户存档。
- 101 AddFriend→102 AcceptFriend均HTTP200/code1,最后双方各1名好友并匹配对方UserID。真实非空项只有PlayFabId/DisplayName/AvatarUrl/Level,Level均1;未返回LastLogin/建筑等级。已证实基本批量好友资料可用,不能再笼统声称不支持。
- KV两账号LastLoginTimeUtc等资料键缺失;本次未运行首场景保存和UpdateProfile,等级差异不能直接归因于服务器内部实现。具体事实已加同一C3c差异包增量,不拆新审核。
- 本轮14次正式HTTP(首次2+最终12),其中2次授权好友写;未发KV写、资料更新、付费,未Play/打包,未读改服务器。关系保留供后续联调,未使用103–110。更新状态/入口/TODO,原封存hash保持。
## 2026-09-30 用户授权服务器参考源码只读分析
- 用户本次明确允许参考D:/ft/server/N3-Server,禁止修改。只读HEAD 71db75ff147f3b3d25496a14594af1e2414a72cf及相关账号/好友/资料模型;参考仓库既有脏文件保留,无源码编辑。
- 确认LevelB生成在客户端SetLvData(普通等级×100000+建筑等级及原clamp);服务器PlayerDataService的LevelB除100000只是整份注释的旧PF转换,不当作活动实现。有效PlayerInfo来自DB普通Level。
- DBPlayer已有LastLoginTime,AccountService每次登录赋UTC并刷新缓存;PlayerInfo及FromDB/回源/预热投影丢弃该字段。建议现有好友接口补LastLogin和KV派生LevelB;保留普通Level、原消费流程及客户端每日刷新时间写入点,不重复维护好友KV登录时间。
- 明确本地参考版本与线上不同(旧hex转换、PF好友操作、本地无GetFriendsList action),不能据此推断线上仍调用PF;建议由服务端开发者对照线上分支,不让客户端Agent改服务器。
- 分析意见及源码hash新增为C3c讨论增量,不改原受审封存,不拆额外审查;无新线上请求、无客户端生产改动。
## 2026-09-30 用户确认先存KV后联调的阶段方向
- 用户允许先在KV保存对应数据、优先客户端PlayFab→KV移植,真实服务端联调时再决定接口调整,并要求保存文档。
- 已新增阶段方案:LevelB作为临时KV快照候选,来源仍为原算法;登录时间复用现有LastLoginTimeUtc,避免重复同值键及提前影响每日刷新。相应方向作为原“LevelB不冗余持久化”建议的用户新修订记录,不篡改原受审hash。
- 跨玩家好友/榜单、公告、匹配不伪造结果、不默认砍功能,保留联调待办。临时快照用途、时间权威来源、阶段闸及所有开发冻结登记,最终通关前恢复/归并/清理无消费者实现。
- 更新入口、进度、状态、TODO;具体新增代码边界并入原C3c集中裁决,不另开逐字段送审。本轮只写文档,没有新生产/测试/服务器代码修改、线上请求或KV写入。
## 2026-09-30 客户端剩余项核查检查点(仅文档)
用户要求完成客户端剩余核查,并将本人统计写能否独立实施纳入原C3c裁决。先核当前入口、TODO、原报告第五轮及C3d交付,13/13项一致、报告E0A9A124…69560F未更新;记录2121项C#源码基线。未恢复旧暂存方案或把客户端可写能力当编码许可。
已静态核对共用业务8处直接SDK、GetPlayLv远端缺口、已有LastLoginTimeUtc/提示存档/普通业务运输、两阶段闸与PFLoginAct销毁注销、匹配两处绕行、移动平台与渠道边界、旧验证消费者及BaseEventData。原PF/AGG有效实现保留;BaseEventData原文件相对HEAD无diff,不具备迁移造成闲置的删除证据。GUID/类型文本检索无命中不当全资源运行证明。
新增《M2-C3c客户端剩余项核查与本人统计独立实施待裁决-2026-09-30.md》,第5节R2-S给出独立写入的最小候选及精确差异:原PF统计更新配置、通用Flush包含其他待写、部分接受/确认、同键覆盖/旧会话、log后正常完成语义;请原ZCode在原报告一次给结论与白名单,不另开功能审核轮,不重审C3d。生产、测试、配置、服务器均未修改,未Play/正式请求/重跑回归/打包;更新入口、状态、TODO及总进度。扫描中一次清单字段名files误取已纠正为items后核13/13,不以空数组当通过;两个猜测路径已改为rg定位的真实文件,不作为缺文件结论。
最终核验:2121项源码全部未变、无新增源码;C3d 13/13和原报告hash保持,新增入口链接均有效。根状态文档原有混杂CR换行导致git diff --check报告大量历史空白问题;不全文件格式化,以保留旧内容为先。已按首个逻辑换行定位本轮置顶条目,验证移除本轮插入块后旧文本逐字符相同;未声称全工作树diff检查通过。
## 2026-09-30 C3e开工检查点
原C3c第六轮R2-S附条件通过,21项仅报告按预期更新、2121源码无漂移;已在M2-C3e本人统计写裁决与实施记录记录C1–C7主会话裁决、纠正审核绝对化措辞及唯一生产方法边界。先红测,再获审范围编码;无服务端、场景、其他功能改动。
C3e红测检查点:真实LeadboardData全文件入宿主,未执行活动依赖只补会抛错的签名。原回归及PF/AGG统计对照通过,KV应写store却调用PF的预期断言失败;生产尚未修改,准备唯一方法接线。
## 2026-09-30 C3e限定完成检查点
获审本人统计写已接现有KV store;唯一生产方法SetLeadboardData+using,公式/SetLvData/触发点/PF和AGG均保持。最终两条件各33组646断言,CLI Loop编译0错误269警告,非Play。两次测试场景错误(关服等待与已发/未发票据)依据原真实流程修正并保留首败,生产无扩改。2121源码仅4既有C#改变+1测试新增,其余2117项一致,另测试项目链接真实类。服务端统计键/序列化已冻结到C3e实施记录,原PF统计配置保留一行读侧联调待确认。四项读取/协调接口及最终冻结清账仍未关闭;不逐函数送审,不操作服务器或正式账号,不打包。
## 2026-09-30 用户授权提交检查点
用户要求commit当前内容。已核分支feat/upserver、暂存区原为空、C3e交付19/19未变,按511个精确路径保存当前M2迁移源码/meta、测试、方案评审及状态规则。凭据模式命中三项均为authorization用户授权文本;字体资源、PreBoot浮点变化、工具忽略项和历史生成日志等保留工作树。Git预检通过;只创建本地提交,不push。该提交不表示M2全链通关。