docs(upserver): 归档阶段裁决与批量迁移待办

This commit is contained in:
Liubing\LB
2026-09-28 18:17:40 +08:00
parent a6f5e107f8
commit 1c0cdf7a99
376 changed files with 89430 additions and 0 deletions

View File

@@ -0,0 +1,29 @@
# P2-α-A 审查裁决与执行批准
2026-09-28,主会话。用户“复核完毕,没有疑问则进入开发内容”确认继续本单元。
## 基线
修改共享状态前独立核对设计清单20/20(SHA256与长度)一致,见A1-review-verification.json。报告SHA256为9DA70C9B70DDAA09C8F93A0AC2624EF3CBF93C899C05B85779A6272FFF67D024;清单SHA256为577F09692DD4534BD2DE81E150B61780C410D15DA9E30177C435790B73C093CB。
## 逐条裁决
| 意见 | 裁决 |
|---|---|
| Q1 收敛为已有样本盘点 | 接受;不直接修101、不做通用迁移框架 |
| Q2 现有Inspect入口约束 | 接受;新空闲Editor,无Enabled/GContext/Play/permit,使用原固定入口,不清静态态绕门 |
| Q3 M15/M22两类null | 接受;记录真实值与消费语义,不将旧档存在推为自动兼容,不删键 |
| Q4 100出现项/31模块/额外键覆盖 | 接受;逐样本保留,未知/不消费项单列,不声称全量兼容率 |
| Q5 已有102进度与恢复边界 | 接受;不重导旧PF,Unknown不重发/自动回退,当前观察不冒充CAS |
| Q6 产品政策独立 | 接受;批准只读操作,不批准真实迁移或对玩家拒档政策,不关闭整个P2-α/G4 |
| Q7 A0~A4 | 接受;A2诊断不等于A3消费语义盘点完成 |
| P3-1 复用B3扫描 | 采纳,台账附原B3-C编号/文件行号;旧扫描是历史定位,不冒称当前语义绑定,当前源码行号另核 |
| P3-2 全部挑战引用 | 采纳,输出全库源码引用清单并逐读取上下文分析null/缺键;包括写入、清空和空判断,避免仅枚举方法名 |
| P3-3 Tables与时间 | 采纳,冻结cfgData JSON、生成Tables源码及Schema/Bindings,记录集合hash与诊断前后UTC;保留KV102原采样时刻 |
| P3-4 版本与准入 | 采纳,新进程get-version和playing/enabled/permit状态落盘,诊断前后检查 |
## 开发边界
批准A1~A4只读执行。生产/测试源码白名单为空;新增仅本目录文档、指纹、台账和现有工具输出,共享入口/TODO/日志按检查点更新。不得新增Schema解析器、修改存档、运行游戏、请求正式服务、启用permit或打包。发现需代码修订时先提交精确方案完整评审。
当前旧Editor103828已closed/playing=false/ready=false/error=null/permit=false,Enabled历史true;按原方案正常重启后才可Inspect。4C2关闭保持有效。

View File

@@ -0,0 +1,148 @@
# M15逐源码引用台账
覆盖当前Client/Assets/Scripts内标识符直接引用,包括读/写/注释/验证;不把文本清单冒称所有运行时调用图。逐行context见JSON。Road别名的下一步读取另记于语义报告。缺键比较前提为新对象或已Reset,旧对象复用不等价。
| 位置 | 类别 | null与缺键比较 |
|---|---|---|
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:63 | property-declaration | 初始引用null;旧缺键未调用Init不等于清除已存在旧对象 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:72 | assignment | 写入/Reset/反序列化/实例创建点;须结合对应调用前态,见语义报告 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:79 | assignment | 写入/Reset/反序列化/实例创建点;须结合对应调用前态,见语义报告 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:112 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:115 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:117 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:143 | null-observation | 同为null时观察分支一致;不能覆盖同方法内其他直接解引用 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:145 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:153 | null-observation | 同为null时观察分支一致;不能覆盖同方法内其他直接解引用 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:160 | null-observation | 同为null时观察分支一致;不能覆盖同方法内其他直接解引用 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:173 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:174 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:186 | assignment | 写入/Reset/反序列化/实例创建点;须结合对应调用前态,见语义报告 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:202 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:208 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:218 | assignment | 写入/Reset/反序列化/实例创建点;须结合对应调用前态,见语义报告 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:227 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:228 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:229 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:230 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:231 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:232 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:233 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:234 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:251 | null-observation | 同为null时观察分支一致;不能覆盖同方法内其他直接解引用 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:256 | null-observation | 同为null时观察分支一致;不能覆盖同方法内其他直接解引用 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:262 | assignment | 写入/Reset/反序列化/实例创建点;须结合对应调用前态,见语义报告 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:281 | null-observation | 同为null时观察分支一致;不能覆盖同方法内其他直接解引用 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:286 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:324 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:327 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:332 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:333 | comment | 注释不执行,不能作为读取入口 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:352 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:355 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:363 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:365 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:368 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:382 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:388 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:398 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:404 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:406 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:436 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:463 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:555 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:556 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:557 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:558 | comment | 注释不执行,不能作为读取入口 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:559 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:566 | comment | 注释不执行,不能作为读取入口 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:572 | null-observation | 同为null时观察分支一致;不能覆盖同方法内其他直接解引用 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:574 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:592 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:593 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:605 | null-observation | 同为null时观察分支一致;不能覆盖同方法内其他直接解引用 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:618 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:621 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:622 | comment | 注释不执行,不能作为读取入口 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:628 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:630 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:662 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:686 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:710 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:712 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:723 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:729 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:735 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:746 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:799 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:800 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:812 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:817 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:831 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:844 | null-observation | 同为null时观察分支一致;不能覆盖同方法内其他直接解引用 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:846 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:852 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:853 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:874 | assignment | 写入/Reset/反序列化/实例创建点;须结合对应调用前态,见语义报告 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:902 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:915 | null-observation | 同为null时观察分支一致;不能覆盖同方法内其他直接解引用 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:917 | null-observation | 同为null时观察分支一致;不能覆盖同方法内其他直接解引用 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:934 | null-observation | 同为null时观察分支一致;不能覆盖同方法内其他直接解引用 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:936 | null-observation | 同为null时观察分支一致;不能覆盖同方法内其他直接解引用 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:950 | null-observation | 同为null时观察分支一致;不能覆盖同方法内其他直接解引用 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:952 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:953 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:963 | null-observation | 同为null时观察分支一致;不能覆盖同方法内其他直接解引用 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:965 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:966 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:975 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:986 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:1009 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:1034 | null-observation | 同为null时观察分支一致;不能覆盖同方法内其他直接解引用 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:1044 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:1074 | null-observation | 同为null时观察分支一致;不能覆盖同方法内其他直接解引用 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:1076 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:1084 | save-null-capable | null可序列化为原字符串null;证明旧代码能产出本样本,不意味着允许删除键 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:1089 | null-observation | 同为null时观察分支一致;不能覆盖同方法内其他直接解引用 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:1091 | null-observation | 同为null时观察分支一致;不能覆盖同方法内其他直接解引用 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:1098 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs:1099 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/Services/UserService.KVFishingReward.cs:127 | null-observation | 同为null时观察分支一致;不能覆盖同方法内其他直接解引用 |
| Client/Assets/Scripts/GampPlay/ChallengeMatch/Road/ChallengeMatchSceneRoadUI.cs:59 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/GampPlay/ChallengeMatch/Road/ChallengeMatchSceneRoad.cs:81 | alias-read | RoadUI缓存别名_thisEventData;下一行82读取step,需要非null活动前置,已另追踪该别名 |
| Client/Assets/Scripts/GampPlay/ChallengeMatch/Road/ChallengeMatchPlayers.cs:149 | comment | 注释不执行,不能作为读取入口 |
| Client/Assets/Scripts/GampPlay/ChallengeMatch/Road/ChallengeMatchPlayers.cs:151 | comment | 注释不执行,不能作为读取入口 |
| Client/Assets/Scripts/GampPlay/ChallengeMatch/Road/ChallengeMatchPlayers.cs:152 | comment | 注释不执行,不能作为读取入口 |
| Client/Assets/Scripts/GampPlay/ChallengeMatch/Road/ChallengeMatchPlayers.cs:160 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/GampPlay/ChallengeMatch/Road/ChallengeMatchPlayers.cs:229 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/GampPlay/ChallengeMatch/ChallengeMatchSceneUI.cs:139 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/GampPlay/ChallengeMatch/ChallengeMatchSceneUI.cs:175 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/GampPlay/ChallengeMatch/ChallengeMatchSceneUI.cs:199 | comment | 注释不执行,不能作为读取入口 |
| Client/Assets/Scripts/GampPlay/ChallengeMatch/ChallengeMatchSceneUI.cs:203 | comment | 注释不执行,不能作为读取入口 |
| Client/Assets/Scripts/GampPlay/ChallengeMatch/ChallengeMatchSceneUI.cs:320 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/GampPlay/ChallengeMatch/ChallengeMatchSceneUI.cs:442 | comment | 注释不执行,不能作为读取入口 |
| Client/Assets/Scripts/Services/PlayerData/PlayerKVEditorValidationHost.cs:305 | validation-only | 既有验证读取;不属于线上入口 |
| Client/Assets/Scripts/Services/PlayerData/PlayerKVEditorValidationHost.cs:328 | validation-only | 既有验证读取;不属于线上入口 |
| Client/Assets/Scripts/Services/PlayerData/PlayerKVEditorValidationHost.cs:344 | validation-only | 既有验证读取;不属于线上入口 |
| Client/Assets/Scripts/Services/PlayerData/PlayerKVEditorValidationHost.cs:695 | validation-only | 既有验证读取;不属于线上入口 |
| Client/Assets/Scripts/Services/PlayerData/PlayerKVEditorValidationHost.cs:712 | validation-only | 既有验证读取;不属于线上入口 |
| Client/Assets/Scripts/Services/PlayerData/PlayerKVEditorValidationHost.cs:714 | validation-only | 既有验证读取;不属于线上入口 |
| Client/Assets/Scripts/Services/PlayerData/PlayerKVEditorValidationHost.cs:716 | validation-only | 既有验证读取;不属于线上入口 |
| Client/Assets/Scripts/Services/PlayerData/PlayerKVEditorValidationHost.cs:718 | validation-only | 既有验证读取;不属于线上入口 |
| Client/Assets/Scripts/GampPlay/ChallengeMatch/ChallengeMatchScene1.cs:113 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/GampPlay/ChallengeMatch/ChallengeMatchScene1.cs:114 | comment | 注释不执行,不能作为读取入口 |
| Client/Assets/Scripts/UI/Challenge/EventChallengeRewardPopupPanel.cs:78 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/UI/Challenge/EventChallengeRewardPopupPanel.cs:92 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/GampPlay/ChallengeMatch/ChallengeMatchScene.cs:46 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/UI/Challenge/EventChallengePanel.cs:170 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/UI/Challenge/EventChallengePanel.cs:232 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/UI/Challenge/EventChallengePanel.cs:233 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/UI/Challenge/EventChallengeMatchingLoadingPanel.cs:143 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/UI/Home/HomeBtnChallenge.cs:98 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/UI/Home/HomeBtnChallenge.cs:113 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/UI/Home/HomeBtnChallenge.cs:192 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/UI/Home/HomeBtnChallenge.cs:211 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/UI/Home/HomeBtnChallenge.cs:212 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/UI/Home/HomeBtnChallenge.cs:218 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/UI/Home/HomeBtnChallenge.cs:219 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/UI/Home/HomeBtnChallenge.cs:258 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |
| Client/Assets/Scripts/UI/Home/HomeBtnChallenge.cs:259 | requires-active-context | 若两种输入在fresh/Reset后均物化null,直接解引用行为相同:无活动前置时都可能抛异常;不能称空值在所有入口安全。 |

View File

@@ -0,0 +1,106 @@
# A3:100个样本键出现项台账
每行保留一个样本key出现项。详细旧源码引用、原B3编号、Schema行号和逐值hash见同名JSON;引用匹配不是完整语义绑定。OUTSIDE-31仅表示未被受控31模块逐值解码,不等于无业务消费者。
| 样本 | Key | 模块 | 字节 | 原B3直接key调用 | 结论 |
|---|---|---|---|---|---|
| 101 | AquariumEventDataNewKey | OUTSIDE-31 | 437 | | 未被31模块逐值解码;原字符串保留,须单独消费者专项,不可称Valid即已支持 |
| 101 | BattlePassRecordTask | M11 | 161 | B3-C023@Client/Assets/Scripts/DataCenter/BattlePassData.cs:117 | 本轮该键所属模块未报诊断;不代表所有历史值/全部业务路径兼容 |
| 101 | BombGameCount | M01/M02 | 1 | B3-C088@Client/Assets/Scripts/DataCenter/DataCenter.SmallGame.cs:88 | 本轮该键所属模块未报诊断;不代表所有历史值/全部业务路径兼容 |
| 101 | BuffDataList | M06 | 107 | B3-C024@Client/Assets/Scripts/DataCenter/BuffDataCenter.cs:205 | 本轮该键所属模块未报诊断;不代表所有历史值/全部业务路径兼容 |
| 101 | BuyData | M04 | 118 | B3-C067@Client/Assets/Scripts/DataCenter/DataCenter.PlayerShopData.cs:631 | 本轮该键所属模块未报诊断;不代表所有历史值/全部业务路径兼容 |
| 101 | ChainPackDataNew | M04 | 67 | B3-C071@Client/Assets/Scripts/DataCenter/DataCenter.PlayerShopData.cs:858<br>B3-C072@Client/Assets/Scripts/DataCenter/DataCenter.PlayerShopData.cs:900 | 本轮该键所属模块未报诊断;不代表所有历史值/全部业务路径兼容 |
| 101 | DeferredRewardStashService | OUTSIDE-31 | 0 | | 未被31模块逐值解码;原字符串保留,须单独消费者专项,不可称Valid即已支持 |
| 101 | epbdk | M26 | 173 | | 本轮该键所属模块未报诊断;不代表所有历史值/全部业务路径兼容 |
| 101 | epdk | M25 | 1006 | | 本轮该键所属模块未报诊断;不代表所有历史值/全部业务路径兼容 |
| 101 | Event1v1BattleSlapData | OUTSIDE-31 | 603 | | 未被31模块逐值解码;原字符串保留,须单独消费者专项,不可称Valid即已支持 |
| 101 | EventBingo | OUTSIDE-31 | 28 | | 未被31模块逐值解码;原字符串保留,须单独消费者专项,不可称Valid即已支持 |
| 101 | EventBoostPackData | OUTSIDE-31 | 53 | | 未被31模块逐值解码;原字符串保留,须单独消费者专项,不可称Valid即已支持 |
| 101 | EventBossFightData | OUTSIDE-31 | 522 | | 未被31模块逐值解码;原字符串保留,须单独消费者专项,不可称Valid即已支持 |
| 101 | EventCubeMeltData | M19 | 667 | | 本轮该键所属模块未报诊断;不代表所有历史值/全部业务路径兼容 |
| 101 | EventLuckGameRecord | OUTSIDE-31 | 253 | | 未被31模块逐值解码;原字符串保留,须单独消费者专项,不可称Valid即已支持 |
| 101 | EventLuckMagicPlayfabData | OUTSIDE-31 | 173 | | 未被31模块逐值解码;原字符串保留,须单独消费者专项,不可称Valid即已支持 |
| 101 | EventLuckyTowerData | OUTSIDE-31 | 2490 | | 未被31模块逐值解码;原字符串保留,须单独消费者专项,不可称Valid即已支持 |
| 101 | EventOfferDevourFishData | OUTSIDE-31 | 0 | | 未被31模块逐值解码;原字符串保留,须单独消费者专项,不可称Valid即已支持 |
| 101 | EventPackData | M20 | 94 | B3-C101@Client/Assets/Scripts/DataCenter/EventPackData.cs:103 | 本轮该键所属模块未报诊断;不代表所有历史值/全部业务路径兼容 |
| 101 | EventPartnerStatueData | OUTSIDE-31 | 79 | | 未被31模块逐值解码;原字符串保留,须单独消费者专项,不可称Valid即已支持 |
| 101 | EventTransitionTokenDic | OUTSIDE-31 | 2 | | 未被31模块逐值解码;原字符串保留,须单独消费者专项,不可称Valid即已支持 |
| 101 | FishHuntGameCount | M01/M02 | 1 | B3-C089@Client/Assets/Scripts/DataCenter/DataCenter.SmallGame.cs:97 | 本轮该键所属模块未报诊断;不代表所有历史值/全部业务路径兼容 |
| 101 | FishingChallengeData | M15 | 4 | | Malformed M15 field0;JSON null;需区分fresh空态与旧对象复用 |
| 101 | FixedTimeShopDic | M13 | 119 | B3-C090@Client/Assets/Scripts/DataCenter/DataCenter.TriggerPackData.cs:223<br>B3-C092@Client/Assets/Scripts/DataCenter/DataCenter.TriggerPackData.cs:290<br>B3-C094@Client/Assets/Scripts/DataCenter/DataCenter.TriggerPackData.cs:340<br>B3-C095@Client/Assets/Scripts/DataCenter/DataCenter.TriggerPackData.cs:373 | 本轮该键所属模块未报诊断;不代表所有历史值/全部业务路径兼容 |
| 101 | GeneralEventPackData | M22 | 287 | B3-C022@Client/Assets/Scripts/DataCenter/BargainPackData.cs:181 | Malformed M22 field0;selections=null;保持其余礼包字段,下一差异另审 |
| 101 | GuideSaveDataNew | M10 | 342 | B3-C047@Client/Assets/Scripts/DataCenter/DataCenter.GuideData.cs:685 | 本轮该键所属模块未报诊断;不代表所有历史值/全部业务路径兼容 |
| 101 | IsOpenAppraise | M01 | 4 | B3-C051@Client/Assets/Scripts/DataCenter/DataCenter.PlayerData.cs:1457 | 本轮该键所属模块未报诊断;不代表所有历史值/全部业务路径兼容 |
| 101 | IsOpenClubRed | M14 | 1 | B3-C170@Client/Assets/Scripts/Services/ClubService.cs:159 | 本轮该键所属模块未报诊断;不代表所有历史值/全部业务路径兼容 |
| 101 | LastPaymentTime | OUTSIDE-31 | 28 | B3-C032@Client/Assets/Scripts/DataCenter/DataCenter.FishingEventData.cs:849<br>B3-C033@Client/Assets/Scripts/DataCenter/DataCenter.FishingEventData.cs:869<br>B3-C064@Client/Assets/Scripts/DataCenter/DataCenter.PlayerShopData.cs:375<br>B3-C065@Client/Assets/Scripts/DataCenter/DataCenter.PlayerShopData.cs:432<br>B3-C066@Client/Assets/Scripts/DataCenter/DataCenter.PlayerShopData.cs:607<br>B3-C126@Client/Assets/Scripts/DebugFunc.cs:723<br>B3-C191@Client/Assets/Scripts/UI/Advert/AdvertPanel.cs:97 | 未被31模块逐值解码;原字符串保留,须单独消费者专项,不可称Valid即已支持 |
| 101 | Leadboard_LastContinent | OUTSIDE-31 | 2 | | 未被31模块逐值解码;原字符串保留,须单独消费者专项,不可称Valid即已支持 |
| 101 | LuckyTaskADKey | OUTSIDE-31 | 5 | | 未被31模块逐值解码;原字符串保留,须单独消费者专项,不可称Valid即已支持 |
| 101 | Map_5_101 | M03 | 348 | | 本轮该键所属模块未报诊断;不代表所有历史值/全部业务路径兼容 |
| 101 | Map_5_102 | M03 | 303 | | 本轮该键所属模块未报诊断;不代表所有历史值/全部业务路径兼容 |
| 101 | MiniBPKeyNew | OUTSIDE-31 | 1063 | | 未被31模块逐值解码;原字符串保留,须单独消费者专项,不可称Valid即已支持 |
| 101 | MMTest | M31 | 13 | | 本轮该键所属模块未报诊断;不代表所有历史值/全部业务路径兼容 |
| 101 | MonthlySignEvent | M12 | 90 | B3-C085@Client/Assets/Scripts/DataCenter/DataCenter.SignupData.cs:105<br>B3-C086@Client/Assets/Scripts/DataCenter/DataCenter.SignupData.cs:157 | 本轮该键所属模块未报诊断;不代表所有历史值/全部业务路径兼容 |
| 101 | NewPlayerDataDic | M01/M02/M03/M05/M08/M09 | 388 | B3-C050@Client/Assets/Scripts/DataCenter/DataCenter.PlayerData.cs:1182<br>B3-C146@Client/Assets/Scripts/GampPlay/FishingB/FishingBehaviorB.cs:786 | 本轮该键所属模块未报诊断;不代表所有历史值/全部业务路径兼容 |
| 101 | NewRodList | M01 | 13 | B3-C048@Client/Assets/Scripts/DataCenter/DataCenter.PlayerData.cs:339<br>B3-C049@Client/Assets/Scripts/DataCenter/DataCenter.PlayerData.cs:370 | 本轮该键所属模块未报诊断;不代表所有历史值/全部业务路径兼容 |
| 101 | OfferChainsChestData | M16 | 562 | | 本轮该键所属模块未报诊断;不代表所有历史值/全部业务路径兼容 |
| 101 | OfferDiscoPartyManager | M17 | 750 | | 本轮该键所属模块未报诊断;不代表所有历史值/全部业务路径兼容 |
| 101 | OfferStoryChain | OUTSIDE-31 | 14 | | 未被31模块逐值解码;原字符串保留,须单独消费者专项,不可称Valid即已支持 |
| 101 | OfferSweepPackData | OUTSIDE-31 | 131 | | 未被31模块逐值解码;原字符串保留,须单独消费者专项,不可称Valid即已支持 |
| 101 | Pack1A1Data | OUTSIDE-31 | 79 | | 未被31模块逐值解码;原字符串保留,须单独消费者专项,不可称Valid即已支持 |
| 101 | Pack1A2Data | OUTSIDE-31 | 97 | | 未被31模块逐值解码;原字符串保留,须单独消费者专项,不可称Valid即已支持 |
| 101 | PiggyBankPackData | M21 | 287 | B3-C120@Client/Assets/Scripts/DataCenter/PiggyBankPackData.cs:196 | 本轮该键所属模块未报诊断;不代表所有历史值/全部业务路径兼容 |
| 101 | RodData | M03 | 99 | B3-C052@Client/Assets/Scripts/DataCenter/DataCenter.PlayerFishData.cs:429<br>B3-C054@Client/Assets/Scripts/DataCenter/DataCenter.PlayerFishData.cs:589<br>B3-C055@Client/Assets/Scripts/DataCenter/DataCenter.PlayerFishData.cs:619<br>B3-C056@Client/Assets/Scripts/DataCenter/DataCenter.PlayerFishData.cs:645<br>B3-C122@Client/Assets/Scripts/DataCenter/PlayerFishDataRod.cs:275 | 本轮该键所属模块未报诊断;不代表所有历史值/全部业务路径兼容 |
| 101 | RodLevelData | M03 | 11 | B3-C053@Client/Assets/Scripts/DataCenter/DataCenter.PlayerFishData.cs:530 | 本轮该键所属模块未报诊断;不代表所有历史值/全部业务路径兼容 |
| 101 | SeasonStampData | OUTSIDE-31 | 865 | | 未被31模块逐值解码;原字符串保留,须单独消费者专项,不可称Valid即已支持 |
| 101 | ShopPackBuyCount | M04 | 9 | B3-C068@Client/Assets/Scripts/DataCenter/DataCenter.PlayerShopData.cs:702<br>B3-C069@Client/Assets/Scripts/DataCenter/DataCenter.PlayerShopData.cs:732 | 本轮该键所属模块未报诊断;不代表所有历史值/全部业务路径兼容 |
| 101 | SoloDataKey | OUTSIDE-31 | 183 | | 未被31模块逐值解码;原字符串保留,须单独消费者专项,不可称Valid即已支持 |
| 101 | TargetBuffDataList | M06 | 2 | B3-C025@Client/Assets/Scripts/DataCenter/BuffDataCenter.cs:294<br>B3-C026@Client/Assets/Scripts/DataCenter/BuffDataCenter.cs:299<br>B3-C027@Client/Assets/Scripts/DataCenter/BuffDataCenter.cs:310<br>B3-C028@Client/Assets/Scripts/DataCenter/BuffDataCenter.cs:348 | 本轮该键所属模块未报诊断;不代表所有历史值/全部业务路径兼容 |
| 101 | TransitionData | OUTSIDE-31 | 27 | | 未被31模块逐值解码;原字符串保留,须单独消费者专项,不可称Valid即已支持 |
| 101 | TriggerPackDataList | M13 | 2 | B3-C091@Client/Assets/Scripts/DataCenter/DataCenter.TriggerPackData.cs:254<br>B3-C093@Client/Assets/Scripts/DataCenter/DataCenter.TriggerPackData.cs:309<br>B3-C098@Client/Assets/Scripts/DataCenter/DataCenter.TriggerPackData.cs:576<br>B3-C099@Client/Assets/Scripts/DataCenter/DataCenter.TriggerPackData.cs:589<br>B3-C100@Client/Assets/Scripts/DataCenter/DataCenter.TriggerPackData.cs:644 | 本轮该键所属模块未报诊断;不代表所有历史值/全部业务路径兼容 |
| 101 | VIPAdPackData | M04 | 56 | B3-C077@Client/Assets/Scripts/DataCenter/DataCenter.PlayerShopData.cs:1053<br>B3-C078@Client/Assets/Scripts/DataCenter/DataCenter.PlayerShopData.cs:1085 | 本轮该键所属模块未报诊断;不代表所有历史值/全部业务路径兼容 |
| 101 | WelcomeBack | OUTSIDE-31 | 181 | | 未被31模块逐值解码;原字符串保留,须单独消费者专项,不可称Valid即已支持 |
| 102 | AquariumEventDataNewKey | OUTSIDE-31 | 438 | | 未被31模块逐值解码;原字符串保留,须单独消费者专项,不可称Valid即已支持 |
| 102 | BattlePassRecordTask | M11 | 161 | B3-C023@Client/Assets/Scripts/DataCenter/BattlePassData.cs:117 | 本轮该键所属模块未报诊断;不代表所有历史值/全部业务路径兼容 |
| 102 | BombGameCount | M01/M02 | 1 | B3-C088@Client/Assets/Scripts/DataCenter/DataCenter.SmallGame.cs:88 | 本轮该键所属模块未报诊断;不代表所有历史值/全部业务路径兼容 |
| 102 | BuffDataList | M06 | 106 | B3-C024@Client/Assets/Scripts/DataCenter/BuffDataCenter.cs:205 | 本轮该键所属模块未报诊断;不代表所有历史值/全部业务路径兼容 |
| 102 | BuyData | M04 | 15 | B3-C067@Client/Assets/Scripts/DataCenter/DataCenter.PlayerShopData.cs:631 | 本轮该键所属模块未报诊断;不代表所有历史值/全部业务路径兼容 |
| 102 | CampDataDic | M07 | 14 | B3-C009@Client/Assets/Scripts/Camp/CampDataMM.cs:251 | 本轮该键所属模块未报诊断;不代表所有历史值/全部业务路径兼容 |
| 102 | ChainPackDataNew | M04 | 63 | B3-C071@Client/Assets/Scripts/DataCenter/DataCenter.PlayerShopData.cs:858<br>B3-C072@Client/Assets/Scripts/DataCenter/DataCenter.PlayerShopData.cs:900 | 本轮该键所属模块未报诊断;不代表所有历史值/全部业务路径兼容 |
| 102 | DigCount | OUTSIDE-31 | 36 | | 未被31模块逐值解码;原字符串保留,须单独消费者专项,不可称Valid即已支持 |
| 102 | DigGridData | OUTSIDE-31 | 0 | | 未被31模块逐值解码;原字符串保留,须单独消费者专项,不可称Valid即已支持 |
| 102 | epbdk | M26 | 173 | | 本轮该键所属模块未报诊断;不代表所有历史值/全部业务路径兼容 |
| 102 | epdk | M25 | 1012 | | 本轮该键所属模块未报诊断;不代表所有历史值/全部业务路径兼容 |
| 102 | Event1v1BattleSlapData | OUTSIDE-31 | 595 | | 未被31模块逐值解码;原字符串保留,须单独消费者专项,不可称Valid即已支持 |
| 102 | EventBoostPackData | OUTSIDE-31 | 53 | | 未被31模块逐值解码;原字符串保留,须单独消费者专项,不可称Valid即已支持 |
| 102 | EventCubeMeltData | M19 | 676 | | 本轮该键所属模块未报诊断;不代表所有历史值/全部业务路径兼容 |
| 102 | EventLuckGameRecord | OUTSIDE-31 | 253 | | 未被31模块逐值解码;原字符串保留,须单独消费者专项,不可称Valid即已支持 |
| 102 | EventLuckMagicPlayfabData | OUTSIDE-31 | 173 | | 未被31模块逐值解码;原字符串保留,须单独消费者专项,不可称Valid即已支持 |
| 102 | EventPartnerStatueData | OUTSIDE-31 | 120 | | 未被31模块逐值解码;原字符串保留,须单独消费者专项,不可称Valid即已支持 |
| 102 | FishHuntGameCount | M01/M02 | 1 | B3-C089@Client/Assets/Scripts/DataCenter/DataCenter.SmallGame.cs:97 | 本轮该键所属模块未报诊断;不代表所有历史值/全部业务路径兼容 |
| 102 | FixedTimeShopDic | M13 | 233 | B3-C090@Client/Assets/Scripts/DataCenter/DataCenter.TriggerPackData.cs:223<br>B3-C092@Client/Assets/Scripts/DataCenter/DataCenter.TriggerPackData.cs:290<br>B3-C094@Client/Assets/Scripts/DataCenter/DataCenter.TriggerPackData.cs:340<br>B3-C095@Client/Assets/Scripts/DataCenter/DataCenter.TriggerPackData.cs:373 | 本轮该键所属模块未报诊断;不代表所有历史值/全部业务路径兼容 |
| 102 | GuideSaveDataNew | M10 | 318 | B3-C047@Client/Assets/Scripts/DataCenter/DataCenter.GuideData.cs:685 | 本轮该键所属模块未报诊断;不代表所有历史值/全部业务路径兼容 |
| 102 | IsOpenClubRed | M14 | 1 | B3-C170@Client/Assets/Scripts/Services/ClubService.cs:159 | 本轮该键所属模块未报诊断;不代表所有历史值/全部业务路径兼容 |
| 102 | LastPaymentTime | OUTSIDE-31 | 27 | B3-C032@Client/Assets/Scripts/DataCenter/DataCenter.FishingEventData.cs:849<br>B3-C033@Client/Assets/Scripts/DataCenter/DataCenter.FishingEventData.cs:869<br>B3-C064@Client/Assets/Scripts/DataCenter/DataCenter.PlayerShopData.cs:375<br>B3-C065@Client/Assets/Scripts/DataCenter/DataCenter.PlayerShopData.cs:432<br>B3-C066@Client/Assets/Scripts/DataCenter/DataCenter.PlayerShopData.cs:607<br>B3-C126@Client/Assets/Scripts/DebugFunc.cs:723<br>B3-C191@Client/Assets/Scripts/UI/Advert/AdvertPanel.cs:97 | 未被31模块逐值解码;原字符串保留,须单独消费者专项,不可称Valid即已支持 |
| 102 | Leadboard_LastContinent | OUTSIDE-31 | 2 | | 未被31模块逐值解码;原字符串保留,须单独消费者专项,不可称Valid即已支持 |
| 102 | Map_5_101 | M03 | 303 | | 本轮该键所属模块未报诊断;不代表所有历史值/全部业务路径兼容 |
| 102 | Map_5_102 | M03 | 182 | | 本轮该键所属模块未报诊断;不代表所有历史值/全部业务路径兼容 |
| 102 | MiniBPKeyNew | OUTSIDE-31 | 675 | | 未被31模块逐值解码;原字符串保留,须单独消费者专项,不可称Valid即已支持 |
| 102 | MMTest | M31 | 13 | | 本轮该键所属模块未报诊断;不代表所有历史值/全部业务路径兼容 |
| 102 | MonthlySignEvent | M12 | 91 | B3-C085@Client/Assets/Scripts/DataCenter/DataCenter.SignupData.cs:105<br>B3-C086@Client/Assets/Scripts/DataCenter/DataCenter.SignupData.cs:157 | 本轮该键所属模块未报诊断;不代表所有历史值/全部业务路径兼容 |
| 102 | NewPlayerDataDic | M01/M02/M03/M05/M08/M09 | 365 | B3-C050@Client/Assets/Scripts/DataCenter/DataCenter.PlayerData.cs:1182<br>B3-C146@Client/Assets/Scripts/GampPlay/FishingB/FishingBehaviorB.cs:786 | 本轮该键所属模块未报诊断;不代表所有历史值/全部业务路径兼容 |
| 102 | NewRodList | M01 | 2 | B3-C048@Client/Assets/Scripts/DataCenter/DataCenter.PlayerData.cs:339<br>B3-C049@Client/Assets/Scripts/DataCenter/DataCenter.PlayerData.cs:370 | 本轮该键所属模块未报诊断;不代表所有历史值/全部业务路径兼容 |
| 102 | OfferDiscoPartyManager | M17 | 711 | | 本轮该键所属模块未报诊断;不代表所有历史值/全部业务路径兼容 |
| 102 | OfferStoryChain | OUTSIDE-31 | 14 | | 未被31模块逐值解码;原字符串保留,须单独消费者专项,不可称Valid即已支持 |
| 102 | OfferSweepPackData | OUTSIDE-31 | 131 | | 未被31模块逐值解码;原字符串保留,须单独消费者专项,不可称Valid即已支持 |
| 102 | Pack1A1Data | OUTSIDE-31 | 79 | | 未被31模块逐值解码;原字符串保留,须单独消费者专项,不可称Valid即已支持 |
| 102 | PiggyBankPackData | M21 | 170 | B3-C120@Client/Assets/Scripts/DataCenter/PiggyBankPackData.cs:196 | 本轮该键所属模块未报诊断;不代表所有历史值/全部业务路径兼容 |
| 102 | RodData | M03 | 35 | B3-C052@Client/Assets/Scripts/DataCenter/DataCenter.PlayerFishData.cs:429<br>B3-C054@Client/Assets/Scripts/DataCenter/DataCenter.PlayerFishData.cs:589<br>B3-C055@Client/Assets/Scripts/DataCenter/DataCenter.PlayerFishData.cs:619<br>B3-C056@Client/Assets/Scripts/DataCenter/DataCenter.PlayerFishData.cs:645<br>B3-C122@Client/Assets/Scripts/DataCenter/PlayerFishDataRod.cs:275 | 本轮该键所属模块未报诊断;不代表所有历史值/全部业务路径兼容 |
| 102 | RodLevelData | M03 | 22 | B3-C053@Client/Assets/Scripts/DataCenter/DataCenter.PlayerFishData.cs:530 | 本轮该键所属模块未报诊断;不代表所有历史值/全部业务路径兼容 |
| 102 | SeasonStampData | OUTSIDE-31 | 503 | | 未被31模块逐值解码;原字符串保留,须单独消费者专项,不可称Valid即已支持 |
| 102 | ShopPackBuyCount | M04 | 9 | B3-C068@Client/Assets/Scripts/DataCenter/DataCenter.PlayerShopData.cs:702<br>B3-C069@Client/Assets/Scripts/DataCenter/DataCenter.PlayerShopData.cs:732 | 本轮该键所属模块未报诊断;不代表所有历史值/全部业务路径兼容 |
| 102 | SoloDataKey | OUTSIDE-31 | 183 | | 未被31模块逐值解码;原字符串保留,须单独消费者专项,不可称Valid即已支持 |
| 102 | TargetBuffDataList | M06 | 2 | B3-C025@Client/Assets/Scripts/DataCenter/BuffDataCenter.cs:294<br>B3-C026@Client/Assets/Scripts/DataCenter/BuffDataCenter.cs:299<br>B3-C027@Client/Assets/Scripts/DataCenter/BuffDataCenter.cs:310<br>B3-C028@Client/Assets/Scripts/DataCenter/BuffDataCenter.cs:348 | 本轮该键所属模块未报诊断;不代表所有历史值/全部业务路径兼容 |
| 102 | TransitionData | OUTSIDE-31 | 41 | | 未被31模块逐值解码;原字符串保留,须单独消费者专项,不可称Valid即已支持 |
| 102 | TriggerPackDataList | M13 | 366 | B3-C091@Client/Assets/Scripts/DataCenter/DataCenter.TriggerPackData.cs:254<br>B3-C093@Client/Assets/Scripts/DataCenter/DataCenter.TriggerPackData.cs:309<br>B3-C098@Client/Assets/Scripts/DataCenter/DataCenter.TriggerPackData.cs:576<br>B3-C099@Client/Assets/Scripts/DataCenter/DataCenter.TriggerPackData.cs:589<br>B3-C100@Client/Assets/Scripts/DataCenter/DataCenter.TriggerPackData.cs:644 | 本轮该键所属模块未报诊断;不代表所有历史值/全部业务路径兼容 |
| 102 | VIPAdPackData | M04 | 56 | B3-C077@Client/Assets/Scripts/DataCenter/DataCenter.PlayerShopData.cs:1053<br>B3-C078@Client/Assets/Scripts/DataCenter/DataCenter.PlayerShopData.cs:1085 | 本轮该键所属模块未报诊断;不代表所有历史值/全部业务路径兼容 |
| 102 | WelcomeBack | OUTSIDE-31 | 155 | | 未被31模块逐值解码;原字符串保留,须单独消费者专项,不可称Valid即已支持 |

View File

@@ -0,0 +1,37 @@
# A3:31模块双向台账
Decode位置及Apply合同详见JSON。Absent只说明本样本未覆盖对应Present;共享主档会关联多个模块,但100个原样本出现项只计一次。
| 模块 | 内容 | 101键 | 102键 | 观察与边界 |
|---|---|---|---|---|
| M01 | 玩家附加/核心 | BombGameCount、FishHuntGameCount、IsOpenAppraise、NewPlayerDataDic、NewRodList | BombGameCount、FishHuntGameCount、NewPlayerDataDic、NewRodList | 101此模块未报诊断但整档Malformed;102完整Decode Valid;无样本键不等于覆盖所有Present格式 |
| M02 | 小游戏次数 | BombGameCount、FishHuntGameCount、NewPlayerDataDic | BombGameCount、FishHuntGameCount、NewPlayerDataDic | 101此模块未报诊断但整档Malformed;102完整Decode Valid;无样本键不等于覆盖所有Present格式 |
| M03 | 鱼杆地图 | Map_5_101、Map_5_102、NewPlayerDataDic、RodData、RodLevelData | Map_5_101、Map_5_102、NewPlayerDataDic、RodData、RodLevelData | 101此模块未报诊断但整档Malformed;102完整Decode Valid;无样本键不等于覆盖所有Present格式 |
| M04 | 商店 | BuyData、ChainPackDataNew、ShopPackBuyCount、VIPAdPackData | BuyData、ChainPackDataNew、ShopPackBuyCount、VIPAdPackData | 101此模块未报诊断但整档Malformed;102完整Decode Valid;无样本键不等于覆盖所有Present格式 |
| M05 | 活动基础 | NewPlayerDataDic | NewPlayerDataDic | 101此模块未报诊断但整档Malformed;102完整Decode Valid;无样本键不等于覆盖所有Present格式 |
| M06 | 增益 | BuffDataList、TargetBuffDataList | BuffDataList、TargetBuffDataList | 101此模块未报诊断但整档Malformed;102完整Decode Valid;无样本键不等于覆盖所有Present格式 |
| M07 | 营地 | | CampDataDic | 101此模块未报诊断但整档Malformed;102完整Decode Valid;无样本键不等于覆盖所有Present格式 |
| M08 | 成就 | NewPlayerDataDic | NewPlayerDataDic | 101此模块未报诊断但整档Malformed;102完整Decode Valid;无样本键不等于覆盖所有Present格式 |
| M09 | 钓鱼箱 | NewPlayerDataDic | NewPlayerDataDic | 101此模块未报诊断但整档Malformed;102完整Decode Valid;无样本键不等于覆盖所有Present格式 |
| M10 | 引导 | GuideSaveDataNew | GuideSaveDataNew | 101此模块未报诊断但整档Malformed;102完整Decode Valid;无样本键不等于覆盖所有Present格式 |
| M11 | 战令 | BattlePassRecordTask | BattlePassRecordTask | 101此模块未报诊断但整档Malformed;102完整Decode Valid;无样本键不等于覆盖所有Present格式 |
| M12 | 签到 | MonthlySignEvent | MonthlySignEvent | 101此模块未报诊断但整档Malformed;102完整Decode Valid;无样本键不等于覆盖所有Present格式 |
| M13 | 触发礼包 | FixedTimeShopDic、TriggerPackDataList | FixedTimeShopDic、TriggerPackDataList | 101此模块未报诊断但整档Malformed;102完整Decode Valid;无样本键不等于覆盖所有Present格式 |
| M14 | 公会加载态 | IsOpenClubRed | IsOpenClubRed | 101此模块未报诊断但整档Malformed;102完整Decode Valid;无样本键不等于覆盖所有Present格式 |
| M15 | 挑战 | FishingChallengeData | | 101此模块field0 Malformed;102缺键按Missing,整档Valid |
| M16 | 宝箱链礼包 | OfferChainsChestData | | 101此模块未报诊断但整档Malformed;102完整Decode Valid;无样本键不等于覆盖所有Present格式 |
| M17 | Disco礼包 | OfferDiscoPartyManager | OfferDiscoPartyManager | 101此模块未报诊断但整档Malformed;102完整Decode Valid;无样本键不等于覆盖所有Present格式 |
| M18 | 伙伴 | | | 101此模块未报诊断但整档Malformed;102完整Decode Valid;无样本键不等于覆盖所有Present格式 |
| M19 | 消块 | EventCubeMeltData | EventCubeMeltData | 101此模块未报诊断但整档Malformed;102完整Decode Valid;无样本键不等于覆盖所有Present格式 |
| M20 | 活动礼包 | EventPackData | | 101此模块未报诊断但整档Malformed;102完整Decode Valid;无样本键不等于覆盖所有Present格式 |
| M21 | 储蓄罐 | PiggyBankPackData | PiggyBankPackData | 101此模块未报诊断但整档Malformed;102完整Decode Valid;无样本键不等于覆盖所有Present格式 |
| M22 | 砍价礼包 | GeneralEventPackData | | 101此模块field0 Malformed;102缺键按Missing,整档Valid |
| M23 | 足迹 | | | 101此模块未报诊断但整档Malformed;102完整Decode Valid;无样本键不等于覆盖所有Present格式 |
| M24 | 靶场 | | | 101此模块未报诊断但整档Malformed;102完整Decode Valid;无样本键不等于覆盖所有Present格式 |
| M25 | 药水 | epdk | epdk | 101此模块未报诊断但整档Malformed;102完整Decode Valid;无样本键不等于覆盖所有Present格式 |
| M26 | 弹珠 | epbdk | epbdk | 101此模块未报诊断但整档Malformed;102完整Decode Valid;无样本键不等于覆盖所有Present格式 |
| M27 | 刮刮卡 | | | 101此模块未报诊断但整档Malformed;102完整Decode Valid;无样本键不等于覆盖所有Present格式 |
| M28 | 节日礼包 | | | 101此模块未报诊断但整档Malformed;102完整Decode Valid;无样本键不等于覆盖所有Present格式 |
| M29 | Pinata | | | 101此模块未报诊断但整档Malformed;102完整Decode Valid;无样本键不等于覆盖所有Present格式 |
| M30 | 挖矿加载壳 | | | 仅重置加载壳;DigCount/DigGridData未在此解码,另列OUTSIDE-31 |
| M31 | 登录附属 | MMTest | MMTest | 101此模块未报诊断但整档Malformed;102完整Decode Valid;无样本键不等于覆盖所有Present格式 |

View File

@@ -0,0 +1,59 @@
# A3:空态语义与未消费键裁定
2026-09-28,主会话只读盘点。以下是源码观察及后续候选,不是生产兼容修订批准。
## M15:不是随机坏档,但也不能宣称任意入口都可安全读取null
101保存的FishingChallengeData原字符串为`null`。旧代码有明确生产路径:FishingChallengeManager.ClearFishingChallengeData(184~189)清对象后DoSave;OnSettleFinished(false)(869~875)同样清对象后DoSave;DoSave(1082~1084)直接JsonConvert.SerializeObject。因此这不是只能靠手工造出的值。旧PlayerData.InitData在792~794遇到键才调用InitChallengeData(string),后者218反序列化得到null。
**null和缺键的等价性必须限定前态**:新对象默认null,受控Reset也清null;这两种前态下,缺键不装载与显式null的最终对象均为null。但旧对象已经有挑战数据时,“缺键不调用Init”与“显式null清对象”并不等价,不能推广为热换号安全,也不能通过删键替代兼容。
### 全部直接引用清单与分类
`M15-all-references.txt`和`A3-M15-read-ledger.json/md`覆盖当前Scripts全部142处标识符文本出现:94处需活动上下文、20处空判断/条件读取、6处赋值、1处别名、1处可保存null、1处声明、8处验证、11处注释。逐行保留路径、当前行号、原语句及上下文,注释/验证没有冒充运行读取。`M15-type-and-key-references.txt`扩大到Assets/LocalPackages的类型及key引用。该枚举不声称覆盖反射、资源持久化事件或任意动态加载代码的全部调用图。
| 入口/组 | null与fresh缺键行为 | 结论 |
|---|---|---|
| ShouldOpen:139;ChallengeState:1028 | 显式null分别false/state0 | 两种空态观察一致 |
| Init:244、ProcessLastChallenge:278 | 无当前事件且null则返回;有当前事件才new并InitBaseData;历史结束处理先判非null | 空态与活动初始化分开,不应在Decode中激活挑战 |
| UpdateLocalData:569、AddScoreByQuality:601、OnSettle:840、UpdateTimeData:946、GetTimeSpan:1072、GetOpenEventKey:1087 | 有null分支/前置检查,具体见当前源码 | 同一空对象前态下分支一致;不扩大为所有异步续体安全 |
| IsFirstOpen:110、IsTimeAllow:169、IsFinishCurLevel:200、IsClearAllLevel:205、各比分/结算/机器人/奖励方法 | 多处直接解引用,需要已初始化活动 | null与fresh缺键均不满足活动前置;不能为让这类入口继续而造默认挑战 |
| CheckAutoOpenPanel:495、IsSettleState:1062 | 状态0路径不进入需要时间的分支 | 对空态有保护 |
| InChallenge:510 | 状态0仍可发起资源加载;后续依赖eventChallengeMain/config,未独立证明无效入口无法触发 | 保留为活动入口生命周期限制,本次不修,不批准101真实挑战运行 |
| HomeBtnChallenge.OnEnable:64~119 | CheckInit→ShouldOpen;false时禁用并return,其后才直接读EventId/uiStep | 正常首页入口按此门工作;后续动画/事件读取仍依赖活动上下文 |
| Challenge UI/Scene/Road/Players | 全部直接读取位置见台账;例如SceneRoad.Awake:81取别名,82读_thisEventData.step | 依赖挑战场景合法进入;直接null解引用在两种空态下都不安全,未运行这些场景 |
| KV捕鱼奖励准入UserService.KVFishingReward:127 | 非null才判断挑战状态 | 不将缺挑战自动当作已启动挑战 |
| Clear/OnSettleFinished(false)/DoSave | 明确可写回JSON null | 保留原样本和原key,不授权自动删键 |
最小候选:后续独立兼容方案只讨论“存在且为JSON null”的挑战输入如何保持未激活空态,原对象结构的严格检查保持。不得改变活动入口/场景/计分/奖励算法;需要测试fresh、Reset后、旧状态到空态、非对象错误输入及保存语义。此处没有修改Schema或Apply。
## M22:null列表是原构造默认值,不能用清空礼包消除诊断
GeneralEventPackData是struct,构造函数:30的selections默认null,:45原样保存。BargainPackData.UpdateData:204~216构造时未提供selections,随后SaveData:181序列化全部_data;原加载PlayerData:829~836按redirectID/PackType=3调用LoadData(:185原样赋值)。101的redirect4056001在冻结配置中PackType=3(A3-M22-pack-config.json),不是因为礼包类型错配而故意拒绝。
`M22-all-selections-references.txt`核查Assets/LocalPackages当前C#文本:旧构造与序列化可保留null;现有Bargain玩法中没有找到读取列表元素/Count的业务逻辑,元素访问出现在KV验证;新DecodeBargain:238 IntegerList要求数组,PlayerKVBargainState:318拒绝null,Apply:64复制新List。因此**不是只改Schema一行即可保证整个物化链支持null**。
候选优先讨论保留null的窄兼容:Schema、解码DTO、Apply/Snapshot各自应明确定义null、空数组和非空数组;其余11整数/2布尔/浮点等字段与_isPresent不能丢失。不以“当前没读元素”为由把整键删除、重建礼包或自动把null写成[]。真正改动白名单和测试须另完整评审。
## 26种模块外键(42个出现项)
100个样本出现项中,58个出现项关联31模块;42个出现项/26种键在该解码图之外。Schema的Valid仅覆盖31模块,不等于raw中所有key逐值通过。Raw保留这些键供其他消费者,并不承诺其生命周期隔离或迁移安全。
| 类别 | 键与旧消费定位 | 本次处置 |
|---|---|---|
| 泛型活动仓库 | Event1v1BattleSlapData、EventBoostPackData、EventBossFightData等;具体类型引用见key台账,EventDataRepository:26/38/55按typeof(T).Name读写(原B3-C001/C002等) | 保留;需具体活动解码/写入归属专项,未为它们造Schema |
| 懒加载或独立模块 | AquariumEventDataNewKey、DigCount/DigGridData、EventBingo、EventLuckGameRecord、EventLuckMagicPlayfabData、EventPartnerStatueData、MiniBPKeyNew、LuckyTaskADKey、OfferStoryChain、OfferSweepPackData、Pack1A1Data/Pack1A2Data、SoloDataKey、TransitionData、WelcomeBack、DeferredRewardStashService、LastPaymentTime | 逐key旧引用与B3字面量/同文件候选位于A3-key-ledger.json;存档保存不等于已批准所有玩法使用;不清理 |
| 当前C#文本未定位 | EventLuckyTowerData、EventOfferDevourFishData、EventTransitionTokenDic、Leadboard_LastContinent、SeasonStampData | Assets/LocalPackages搜索exit1无命中,见搜索元数据;可能历史/外部/动态来源,无法判断废弃,原值保留 |
原审查引用的“234行”是早期文本初扫;本轮复用的B3DesignAudit/calls.json实际223个语法调用。按原B3-C编号/历史行号引用,并附当前源码引用;同文件候选不冒充精确语义绑定,也不因无字面量命中推断无读写。
## 其他严格项与样本覆盖限制
| 项 | 本轮观察 | 后续规则建议 |
|---|---|---|
| AD坏槽/多表示 | 两样本M08未报诊断;Achievements/DecodeAchievements分别解析AchievementData、AD、ad并检查重叠值;当前样本没有覆盖所有旧坏槽 | 保留严格拒绝迁移候选;不得沿用旧静默跳过,也不得宣称坏槽已实测兼容 |
| 未知鱼/错归属/缺卡配置/同卡冲突 | M03本轮未报诊断;DeriveFish显式检查鱼/地图/卡及下标;部分旧派生会限制重量/等级、补最低卡数量 | 原字节与运行派生值区分,原备份不改;没有新样本时仅记录合同,不能说全历史档支持 |
| core布局/重复表示/时间/数值 | 新主档、别名与旧顶层存在优先级/冲突处理;此次无新diagnostic,不代表所有布局/时区组合 | 保留各表示与采样UTC/cfg指纹;不手工拼新core试图消诊断 |
| 未采到Present的模块 | M18/M23/M24/M27/M28/M29等本批无相应直接键,M30仅加载壳 | 明确Absent覆盖,未来要拓展这些业务需相应样本和用例;不把31节点运行过当31类真实档齐全 |
结论:两类兼容冲突已得到具体来源及边界,不需要先修改整个活动框架;后续最小单位应为101两类空态的精确兼容方案。模块外键和样本代表性仍是正式启用前问题;本轮不修改101,也不覆盖102已续进度。

View File

@@ -0,0 +1,49 @@
# P2-α-A交付与后续最小开发建议
2026-09-28。主会话已完成A1裁决、A2现有固定入口诊断、A3语义盘点和本次A4交付准备,**待独立执行复核,尚未宣布整个P2-α或G4完成**。
## 结果
| 验收 | 证据与结论 |
|---|---|
| 方案完整审查与裁决 | 20/20基线一致;七项与四P3全部裁决,A1-审查裁决与执行批准.md |
| 配置/时间 | cfgData267项、Tables源码616项,共883项前后不变;A1-environment-freeze.json记录集合hash与KV102原采样时间;A2-sampling-window.json记录本地UTC窗口,未冒充服务器时间 |
| 新空闲入口 | 旧103828正常退出,新90064;A2-get-version.json=2022.3.62f2c1;前后playing/enabled/ready=false、run=null、permit=false;没有创建claimed,原11个保持 |
| 本地解码 | 10155键→Malformed,仅M15/M22 field0;10245键→Valid,0错误;源hash与历史cdTime修复后诊断一致;只诊断,不Open/Apply/发布,writes=0 |
| 键覆盖 | A3-key-ledger.json/md:100出现项,58唯一键,含逐值hash、字段规则、旧源码/B3直接key编号及同文件候选、Decode/Apply引用与未验证项;原样本不去重 |
| 模块覆盖 | A3-module-ledger.json/md:31节点,明确Absent样本边界和加载壳;不是31类真实Present全覆盖 |
| M15逐入口 | 142处直接引用,扩大至Assets/LocalPackages且忽略ignore规则后仍142无新增;分类和逐行上下文保留;Road别名继续追踪;null安全仅限对应前置条件 |
| M22 | 旧构造/保存允许null;4056001 PackType=3;新DTO与Apply也要求非null,不能只修改Schema或清空礼包 |
| 模块外键 | 42出现项/26种;5种当前源未定位也保留。不把Valid解释为所有Raw键兼容;不用新解析器静默过滤 |
| 运行边界 | Unity错误日志0;无Play/运行许可/正式接口请求/存档写/业务或测试源码改动;只用了原CLI固定本地诊断 |
本地Editor自身可能有启动检查等环境联网;“无正式接口请求”指本任务没有访问s101/PlayFab数据接口,不将环境行为夸张为整台机器网络流量为零。
## 最小后续建议
下一开发候选是**101两类历史空态的精确兼容差异方案**,以只改必要加载表示、保留原始存档为目标。是否进入该方案由本单元独立复核后的主会话裁决决定;不在本轮直接改代码。
- M15:讨论存在JSON null能否物化为“未激活挑战”并保留raw key;普通对象严格检查保留。验证fresh/Reset后/旧状态→空态,错误字符串/数字/数组仍拒绝;不改活动开启、场景或奖励逻辑。
- M22:首选评估保留selections=null的表示,而非自动转[]。范围必须同时覆盖Schema、DecodedSave不可变DTO、Bargain Apply/Snapshot及真实对象回归,集合非空时仍深复制;其余礼包字段和存在标记不变。
- 两类处理均需完整方案独立审查后才编码。诊断只能证明101当前两条首要问题,消除后若浮现下一处配置问题,应记录并按差异边界处理,不能扩大修复直到绿。
- 不要求101变Valid才认可本次盘点完成;不导入101,不覆盖102,不再钓鱼补证,不开展全活动重构。
## 后续真实迁移政策(产品待确认,未授权执行)
| 场景 | 建议政策 | 当前证据与缺口 |
|---|---|---|
| 尚未迁入KV、旧PF仍为唯一权威 | 兼容不足先停止该账号切换,是否保留PF入口由产品确认;不给玩家空白新档 | 已定位两类空态和额外键;缺代表性真实用户样本,不能直接用于全用户拒档 |
| KV已存在后续进度 | 不用旧PF覆盖或自动合并;先确认权威源、身份与停写窗口 | 102为具体反例:旧PF与当前KV已分叉;当前KV234004/383仅为9/28备份观察,不是今后永远基线 |
| 决定迁移单账号 | 源/目标各自备份与hash、账号映射证据、精确key/值差异、排他写入条件及恢复清单必须可审 | 101/102授权不代表任意其他账号或批量导入授权;没有CAS不能保证并发覆盖安全 |
| 写入Unknown/可能已提交 | 停止后续写,独立读取观察;不自动重发、不切回PF继续双写 | 读取一致只证明观察时点;无新幂等/CAS保证 |
| 人工恢复 | 只对确认属于本次、且之后无新增合法进度的精确键讨论恢复;有并发/不明变化则停止 | 不全库回退、不删未知键;任何恢复需要当前态和具体范围重新审核 |
用户产品决策仍包括:不兼容档如何呈现/是否保留旧入口;目标已有数据时何者权威及人工处置;正式迁移对象与停写窗口。该表是可审政策草案,不以用户本轮“进入开发”替代这些决定。
## 作者自审与限制
没有新建诊断类、Schema模拟器、运行框架或兼容代码;清单生成只是shell文本/元数据盘点,实际判断使用原固定生产Decode。一次清单整理命令的PowerShell语法错误发生在执行前,纠正后生成;未产生业务副作用,不涉及源码。
本轮未观察的新输入错误、额外key消费路径、挑战异步入口合法性、通用反射/资源事件覆盖、全量真实用户代表性均列为未验证,没有冒称修复。历史PF身份/DNS、StorageError、非Editor编译和完整4B3/4C/4D/tickets问题保持,不让本专项扩大范围。
交独立复核:使用A4-独立执行复核提示词.md及execution-review-hashes.json。复核返回后由主会话核hash并逐条裁决,决定本只读单元是否关闭以及下一最小兼容方案;不能把本次只读交付当成正式迁移完成。

View File

@@ -0,0 +1,18 @@
# P2-α-A只读盘点独立执行复核
你是独立复核侧。仅只读源码/本地证据/hash,不启动Unity、执行许可、联网、写存档、修改共享状态或源码。落盘 `CodexOutput/upserver/P2-alpha-A只读盘点执行独立复核-2026-09-28.md`,由主会话裁决关闭。
先核P2AlphaAudit/execution-review-hashes.json,阅读原方案、独立方案报告、A1裁决、A4交付;核A1-review-verification.json中的原方案基线证据。原20项清单和后续产物清单含义不同,不混淆。
请逐项审查:
1. 生产/测试白名单为空是否保持,是否只复用InspectPFBackup,未创建新Schema/诊断框架、未Open/Apply/Play/发许可或写正式接口。
2. 20/20裁决、267cfgData+616Tables、真实UTC采样窗、旧/新进程版本与准入是否充分;配置集合hash与KV样本时间是否可复核。
3. A2原结果101的M15/M22两项、102Valid与历史对照是否真实,不把合成身份/本地时间冒充真实认证。
4. 100样本键出现项、58唯一键、31模块双向表、42出现项/26模块外键是否准确;B3原223语法调用编号/历史行号与当前引用区分是否诚实,字面量缺失和同文件候选不等于完整语义绑定。
5. M15所有142直接引用及别名是否涵盖源码边界,null与缺键的fresh/Reset前态限制是否正确;未把挑战直接解引用无保护解释成“任何入口安全”。
6. M22构造默认null、PackType=3、当前DTO/Apply约束是否核实;后续候选是否保留其他礼包字段,不自动规范[]或清档。
7. 未定位5键、AD坏槽、未知鱼/配置派生、Present样本不足及身份/并发等未决项是否清晰保留;候选政策是否误当用户产品批准。
8. 能否关闭本只读盘点单元(非整个P2-α/G4),然后进入101两类空态最小兼容完整方案准备;如不够请给精确最小补充,勿要求自动正式服试错或消费补样。
输出受审hash结果、逐条结论、P1/P2/P3与引用位置、接受/有条件接受/退回。遇未覆盖场景应按本方案要求的“发现并登记未决项”与“必须在本单元验证完成的项”区分,不因盘点发现未来问题就自动扩大本轮代码范围。

View File

@@ -0,0 +1,39 @@
# P2-α-A执行复核裁决与关闭
2026-09-28,主会话。接受独立执行复核,**限定关闭P2-α-A只读盘点单元**,无需再次复审此单元。进入101两类历史空态精确兼容的完整方案准备;不是批准兼容编码、101导入或真实玩法运行。
## 基线核验
更新共享文档之前重算1232/1232项SHA256及字节,全部一致。记录:`A5-execution-review-verification.json`。
- 受审清单SHA256:`D35384EF21F1AD6A6C3D55859AEE4CC334EDB80F8059A6FC0FE37C1EB28740A2`。
- 独立报告SHA256:`B374F3346D42946666F403C9542AB408CDBBAF31E50C19FFF0A01A145C7E1685`。
- 报告:`../P2-alpha-A只读盘点执行独立复核-2026-09-28.md`;结论接受,无P1/P2。
- 不重写原受审清单及A1~A4证据。之后入口/TODO/日志等变化属于本关闭及下一方案的文档增量,不是受审源码漂移。
## 八项裁决
| 项目 | 裁决 |
|---|---|
| Q1 白名单与只读 | 接受;仅现有Inspect和静态盘点,未改业务/测试源码,未发正式存档接口请求 |
| Q2 配置、时间及准入 | 接受;883项指纹、原KV采样时间及本地UTC窗口分开;90064诊断前后空闲无许可,不伪称本轮再次实测编辑器状态 |
| Q3 诊断 | 接受;101仅M15/M22,102 Valid;合成描述符不等同真实身份,诊断不等同可导入 |
| Q4 台账 | 接受;100出现项/58唯一键/31模块/26种模块外键,B3候选与实际语义分开 |
| Q5 M15 | 接受;142直接引用及Road别名,空态等价限定fresh/Reset,直接解引用场景前置仍未证明 |
| Q6 M22 | 接受;null旧构造来源成立,后续应覆盖Schema/DTO/Apply,保留其他字段与存在性 |
| Q7 未决项 | 接受;5键、AD/配置严格项、代表性和身份/并发缺口保持;产品政策未获执行批准 |
| Q8 关闭边界 | 接受;关闭本只读单元,不要求101先变Valid,不关闭整体P2-α、4C或G4 |
## 三条P3裁决与落实
| 意见 | 裁决与交付 |
|---|---|
| P3-1 每处M15前置状态锚点 | 采纳;下一方案附142行引用、近邻声明/条件行号及已知状态门;找不到可证明的门时明确“依赖有效活动上下文、未证明可达性”,不编造保护 |
| P3-2 五键定位尝试 | 采纳;下一方案显式链接原搜索结果和元数据,并列搜索模式/范围/exit1含义;不为了清档重跑或推断废弃 |
| P3-3 102分叉时间线 | 采纳;下一方案附9/24原PF、一次导入、4C1、4C2及9/28末次备份的证据链接;时间点不得拼成单次消费过程 |
## 当前边界
下一工作是完整兼容方案、最小文件白名单、红绿/真实对象测试矩阵与送审提示词。沿用方案完整评审后编码、每检查点记录日志。主会话可直接准备方案,无需用户重复选择方向;收到下一方案独立报告后再核hash并裁决实施。
本次关闭只读核验,没有重跑Unity/游戏、收费动作或接口调用。正式地址固定`http://s101.local:18080/`;仅Unity CLI Loop,不用UnitySkills、不打包。

View File

@@ -0,0 +1,6 @@
{
"count": 20,
"matched": 20,
"manifestSHA256": "577F09692DD4534BD2DE81E150B61780C410D15DA9E30177C435790B73C093CB",
"mismatches": []
}

View File

@@ -0,0 +1,107 @@
{
"phase": "P2-alpha-A-design-only",
"createdUtc": "2026-09-28T03:16:31.0489632Z",
"count": 20,
"items": [
{
"path": "Client/Assets/Editor/KVGameplayLoopSetup.cs",
"sha256": "63C369187806A2645C8C6A1411397A6CB7CDDBF5A2DC0E41D905872168DC8675",
"bytes": 5105
},
{
"path": "Client/Assets/Scripts/DataCenter/BargainPackData.cs",
"sha256": "E3AB3F9E80509DDF959A26B8C3C2DA957B760DDC3B82A93D4160711DE31D3748",
"bytes": 12328
},
{
"path": "Client/Assets/Scripts/DataCenter/FishingChallengeManager.cs",
"sha256": "DDE32B179C213CA4B3C7B0929FA807FFA454BDCFC490C3EA6996CBDB2AD7B3DE",
"bytes": 37838
},
{
"path": "Client/Assets/Scripts/Services/PlayerData/PlayerKVGameplayBindings.cs",
"sha256": "710A0050277BE07AC781F976945D8D2DDF7704EA616D0BF83797ABA2FA6530EA",
"bytes": 6874
},
{
"path": "Client/Assets/Scripts/Services/PlayerData/PlayerKVSaveSchema.cs",
"sha256": "6AA8973A276C0D297B1FC9076349F2CC15EC4B58968FFA721274118261CB162E",
"bytes": 75709
},
{
"path": "Client/Assets/Scripts/Services/UserService.KVGameplayLoop.cs",
"sha256": "930D1FF02108915F2223BC340010EF1697942EC50CDE9457A578BF1AEEEF2B4A",
"bytes": 40556
},
{
"path": "CodexOutput/upserver/后续真实运行采样与离线复跑约定-2026-09-28.md",
"sha256": "AA577135FA3D4DC8B0B510BAEA8550DB3F8FFCE8C8F6C9DF983AC8373A653A74",
"bytes": 2526
},
{
"path": "CodexOutput/upserver/阶段4最小真实玩法闭环102兼容审查裁决与实施批准-2026-09-24.md",
"sha256": "BCC494B50715A76D66A0B7AEC94E782327538F5D0AED011737AB1AD2370F2CEE",
"bytes": 2108
},
{
"path": "CodexOutput/upserver/阶段4B2修订2审查裁决与实施批准-2026-09-23.md",
"sha256": "71DF63FCEE375F8D6E6B0DCB9AD332CCBCC44668B6EA9BBB7C4E08046E58C8B6",
"bytes": 4262
},
{
"path": "CodexOutput/upserver/阶段4B2字段与模块加载合同-正式版3-2026-09-23.md",
"sha256": "2DB02D14C9C06472960591B265B80500A3CE389C6BB20E935CDE45C7F0B707A4",
"bytes": 37288
},
{
"path": "CodexOutput/upserver/阶段4C2实施复核裁决与关闭-2026-09-28.md",
"sha256": "8ABDA98C319D9A6F9570F6B36705E971EF407560083DAC742200296222E6A281",
"bytes": 4781
},
{
"path": "CodexOutput/upserver/阶段4C2完整实施独立复核-2026-09-28.md",
"sha256": "0AFFFE245B1F8F08D656C56BE7D2A21B4AC06A9F3DD830045227E21FBEA978CE",
"bytes": 7145
},
{
"path": "CodexOutput/upserver/其他AI审查提示词-P2-alpha-A只读盘点-2026-09-28.md",
"sha256": "B8B6158681A560BA52FCBF1C909332B30004A47C7398F1C4AAAE61E645FB1412",
"bytes": 2033
},
{
"path": "CodexOutput/upserver/KVGameplayLoopTests/backups/20260928T025514Z/102.json",
"sha256": "A00C2BA9B1E11C177D735CEF7CC925099E9D7C32ADFAE9B0D6DBBA6F784BEF40",
"bytes": 14408
},
{
"path": "CodexOutput/upserver/KVGameplayLoopTests/cdtime-source-schema.json",
"sha256": "05DC05CA47FFF26DBA2EC41761B536F589EB4C5A7FEE6E754952EF27C688165D",
"bytes": 1442
},
{
"path": "CodexOutput/upserver/KVGameplayLoopTests/pf-source-backups/20260924T041802Z/101.json",
"sha256": "E6EB3E656B62A3535FDB8F0DC517321A4C3E32F3A8D95385A2B7D5C0AA8222EF",
"bytes": 22144
},
{
"path": "CodexOutput/upserver/KVGameplayLoopTests/pf-source-backups/20260924T041802Z/102.json",
"sha256": "827F36084648449CEFAFB96B3CE62093DF70B8A87E33A526DA5B03A9C135A377",
"bytes": 14392
},
{
"path": "CodexOutput/upserver/KVGameplayLoopTests/pf-source-schema.json",
"sha256": "6E475CE8820697C4C6B3311A8C5212B604598AC76CF093F637A235092C20A873",
"bytes": 1536
},
{
"path": "CodexOutput/upserver/KVGameplayLoopTests/unity-source-inspection.cs.txt",
"sha256": "B12C6122FE5738F05420D0C4A7A2DAF384DDC51CF2F1131A40B7821795737F16",
"bytes": 360
},
{
"path": "CodexOutput/upserver/P2-alpha-A已有存量档只读盘点方案-待评审-2026-09-28.md",
"sha256": "10B737948F395B0CD6E10EE8026B70A688CD697D9036EDA5EE6D478ECFFDB91E",
"bytes": 9860
}
]
}

View File

@@ -0,0 +1,6 @@
{
"checkedUtc": "2026-09-28T03:33:25.0594371Z",
"manifestSHA256": "D35384EF21F1AD6A6C3D55859AEE4CC334EDB80F8059A6FC0FE37C1EB28740A2",
"checked": 1232,
"mismatches": []
}

File diff suppressed because it is too large Load Diff