Files
ft/CodexOutput/upserver/阶段4最小真实玩法闭环方案独立审查-2026-09-24.md

57 lines
6.5 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.
# 阶段4最小真实玩法闭环方案独立审查(R1)
日期:2026-09-24。审查者:ZCode会话。
**独立性声明**:未参与R1方案、核查文档编写(均为主会话编制)与任何实施;此前参与为4B3A等审查。本轮只读+hash计算,仅新增本报告。
## 受审版本核对
`阶段4最小真实玩法闭环方案受审基线-2026-09-24.json`共70项,逐项重算SHA256——**全部一致**。源码核查文档的关键断言本审查独立复核属实:`SubBoostrap.cs:88` AddComponent<PlayFabMgr>(模式必须在其前锁定✓);`SavePlayerData`先`Publish<PlayerData>`事件再全量序列化19槽+vipL/ld/ad/bd/ct/rt(**确为整档NewPlayerDataDic而非独立EquipRodID键**✓);`SetEquipRodID`→红点→SavePlayerData链;`OnClickEquip`入口;`LoginCore`仍PF先行的现状。
## 总结论
**接受。** 两项分别回答:**范围调整合理**;**方案足以批准白名单编码**(附两项P2裁决确认,均为裁决/澄清级,不需重报方案)。
## 一、范围调整是否合理:合理
- 用户已确认"真实游戏、单账号、重启式重登"优先——R1把原B/C中最小必要子集(facade统一路由、单装备可等待保存、生命周期关闭)合并为一次接线,**以"一进程一次会话"的硬合同换取免建跨账号回调框架**——这是正确的工程取舍:首轮唯一会话内固定handle使旧回调归属问题在该模式下不存在(进程内二次发布被拒),而非被掩盖。
- 复用而非重建:4A Bridge(session不拥有权合同天然支持借用apiSession)、4B2 Schema/Transaction/31绑定、4B3A四入口、原40秒调度位、原序列化单份——无重复实现、无第二套加载器/定时器/队列。
- 三条路线否决理由成立(全量B/C首跑晚;独立验证面板非用户选择)。
- 边界诚实:Editor专用模式、Player不开放、默认PF不变、PF仅身份不碰UserData、消费/4C不启用、P2-α/G4保持——未把"测试账号"当作放宽跨会话或正式数据风险的理由。
## 二、方案是否足以批准白名单编码:足以(附裁决确认)
逐项核查(§7提示词要求):
1. **启动先于PF Awake** ✓:§2.1在AddComponent前读许可固定模式;核查文档证实:88位置;"已启动旧实例不允许热切"防域重载后二次进入。
2. **apiSession直接借给4A Bridge** ✓可行:Bridge不拥有/不Dispose session(4A合同);与CustomServerMgr.UseAccountSession共享同一CookieContainer(两HttpClient并发共享线程安全容器,只读使用);Logout顺序合同(§4先Bridge排水后session)与401禁自动重认证(§4)闭合了两处既有风险(核查文档点名的Logout直接Dispose与401后台重登)。
3. **31真实对象绑定与M31准入** ✓:Bindings只做映射不复制算法;真实容器在FishingStage.InitData前尚未启动玩法Init——满足4B2事务"未启动容器"前提;M31运行时准入不放宽B2验证限制。
4. **初始化自动写与PF分离** ✓(诚实迭代策略):记录登录→装备全部KV变更key并与fixture允许范围核对,超范围停止run留差异裁决——不预设全部副作用已知;无PF回退/双写红线明确。
5. **序列化单份复用** ✓:提取核心、旧void接口调用同核心——白名单行明确"字段/格式/经济算法不改"。
6. **准确票据与装备UI** ✓:首次内存变更前捕获handle、取该次真实票据、Superseded≠确认、防重入、失败不显示云端成功——合同正确(细化见P2-1)。
7. **进程重载限制** ✓:CreateNew标记+进程ID/启动时间命名、域重载/重复Play拒绝、新进程才可重占——机制可靠(崩溃残留标记不误伤新进程)。
8. **Logout/401排水** ✓:同步撤销facade准入→generation失效→Bridge.Close排水→才Dispose session/清Cookie;ShutdownRegistry有界观察沿用;退出不发起Flush、不把未确认记作成功。
9. **Editor模式数据授权与4C边界** ✓:专用fixture/备份/恢复前置声明、"正式老用户空KV不当新档"、消费路径不启用并遇即停——不构成4C通过或普通用户开放承诺。
**白名单评估**:14项文件与上述接线一一对应、无越界面;新增两个文件的职责清晰(GameplayLoop单次状态/拥有权、Bindings映射);禁改清单保住全部已关闭底层。
## 发现清单
**P2-1|装备链多票据的等待规则需一句裁决级澄清。** `SavePlayerData`先`Publish<PlayerData>`事件(订阅者可能在事件中再触发保存产生额外票据/键),装备入口"取该次NewPlayerDataDic对应票据"在嵌套写下可能不是水位内全部写。最小澄清建议:装备成功判定=该次票据Confirmed**且**本run键日志中装备链新增写集合与fixture允许范围一致(§2.3已有键核对,补一句"若装备链产生多张票据,等待该链全部票据或以水位Flush汇总为准")。不需要重报方案,检查点2落实施说明即可。
**P2-2|真实运行的数据授权是显式前置,需在编码批准时同步确认归属。** §6已声明"无合适数据先交付fixture准备内容待用户确认"——建议主会话裁决时明确:专用测试账号选择、全档fixture的备份/恢复责任人、允许写入键范围清单,与P2-α真实数据专项的边界关系(专用可丢弃账号≠存量真实档迁移授权)。编码可先行,真实PlayMode验证待此确认。
**P3-1**:`SavePlayerData`核心提取时`Publish<PlayerData>`应保留在旧void接口原位置(核心不含Publish),避免改变订阅者读取时序——建议写入检查点2实施说明。
**P3-2**:run-control标记文件跨崩溃累积——建议Setup入口提供只读"历史标记列表"诊断(不提供删除旁路)。
**P3-3**:暂缓发布API成功事件期间,`IsApiServerLogin/IsLogin`依赖InternalId——实施时断言此窗口内无外部依赖这两个属性的路径被触发(若有则记录为差异)。
## 残余限制
首轮单账号硬合同牺牲进程内重试(用户已接受);热换号、全B/C跨账号、消费语义(4C)、身份迁移、tickets长期历史、P2-α、4D/G4均保持未启用;PlayMode真实写待本方案裁决+数据授权后执行。本报告仅方案结论,不构成实施完成或4B3/B/C/G4通过。
## 结论
**接受R1方案。** 范围调整合理、方案足以批准白名单编码;P2-1/P2-2随主会话裁决落实施说明/授权确认后即可按检查点0–3推进。建议交付后按既有模式做独立实施复核。