42 lines
4.9 KiB
Markdown
42 lines
4.9 KiB
Markdown
# P2AlphaImport101 D0-固定101历史档导入最小方案:独立方案评审
|
||
|
||
日期:2026-09-28。审查者:ZCode会话。独立性声明:未参与本方案编写与任何导入执行;此前参与为P2-α-A/B/C全链审查。本轮只读+hash重算+**源指纹独立逐值核对**;未构建/跑工具/访问正式或PF接口/操作Unity/验证危险参数。
|
||
|
||
## 受审hash核对
|
||
|
||
| 项 | 结果 |
|
||
|---|---|
|
||
| `design-review-hashes.json`(60项) | **全部一致** |
|
||
| `expectedAbsent`(Import101.cs/Import101Tests.cs/import-101.claimed) | **全部确认不存在** ✓ |
|
||
| `D0-source-values.json`(55条) | **本审查独立逐值重算:55/55键名/UTF8 hash全部一致**;源文件SHA256=`E6EB3E65…`吻合;source=PlayFab/title108EE8/customId101/55键元数据吻合 |
|
||
|
||
## 总判定
|
||
|
||
**通过。** 无P1/P2;P3三条不阻塞。方案是最小正确的单账号测试导入设计,且诚实处理了Import102先例中的已知缺口。
|
||
|
||
## 七项逐条
|
||
|
||
**1. 最小范围:确认。** 游戏源码零修改(Client下全部禁改);仅Preflight目录Program两固定单参分支+两个新辅助文件(expectedAbsent已证当前不存在);csproj默认包含规则免改。三路线取舍合理(改Import102为通用迁移器扩大已验收路径;裸HTTP脚本省略候选校验/claim/替身测试——均正确否决)。无遗漏必要依赖(复用S101AccountSession/PlayerKVClient/Schema.Decode/Import102取值方式复制)。
|
||
|
||
**2. 固定输入与门闭合:确认(经独立核对)。** 55键源指纹本审查逐值重算全部一致;两种历史null(M15/M22经B修复后)与未知键**原样写入不过滤**("不能按31模块过滤"正确);配置7项hash固定版本`import101-fixed-20260928-v1`+送审不符即停+**两清单自身hash在实现中锁定**(防同时改清单绕门)——三层固定闭合。候选Decode用本次真实ServerTimeUtc而非历史时间——正确。
|
||
|
||
**3. claim/并发/停写:足够且诚实。** claim在Set**之前**CreateNew持久化、之后即"已消耗"(崩溃不自动重跑);目标Get不提供CAS——**明确声明安全边界依赖专用账号停写窗口、不宣称消除并发竞争**;D3才建立实际窗口(不打断用户提前停机)。不要求全体用户迁移或CAS工程(正确留界)。
|
||
|
||
**4. 一次Set/Unknown/落盘失败口径:自洽(且修复了Import102已知缺口)。** "set-result写盘失败不短路观察"(作者自审明示这是对照真实Import102发现的缺口);进入Set后一切异常按"可能已写";观察Get恰一次不重试;成功五条件同时满足(Set明确Success+after恰55原值+证据持久化+停写未破坏),**Unknown后读值相同也不自动标成功**;无隐含重发/自动清空("失败不是恢复到空档的授权"——因Unknown/外部进度会使清空成数据丢失——正确)。
|
||
|
||
**5. 测试接缝与故障覆盖:可实施、不过度。** 接缝仅internal参数(输入副本/handler工厂/候选回调/保存回调);CLI固定绑真实实现、测试不联网;11个验证组覆盖源/登录/非空/候选/持久化/claim/成功/Unknown/落盘失败/after异常/再执行——含"故障注入≠真实样本不兼容"的显式区分声明。成功组至少一次真实55键+真实配置隔离Decode——与替身组分层清楚。
|
||
|
||
**6. D0–D4门完整:确认。** 方案评审→实现/离线(D2即交独立实施复核,**正式导入前双门**:实施复核+D3停写窗口)→一次执行→执行复核→限定关闭。当前仅批准方案。
|
||
|
||
**7. 限制声明完整:确认。** 请求计数上限(1登录+2Get+1Set)按实际到达阶段计数;登录可能新建账号的后置拒绝语义;PlayerId非回显;本地钟未校验;26模块外键/身份映射/业务覆盖限制保留;101导入≠全体用户/正式启用。
|
||
|
||
## P3清单(不阻塞)
|
||
|
||
- **P3-1**:D3停写窗口记录建议包含"窗口起止的本地UTC+操作者标识+当时101无其他连接的可核实手段清单(哪怕只有'用户声明所有客户端已停用')"——把不可证明性显式落为记录字段而非省略。
|
||
- **P3-2**:`D0-config-hashes.json`建议在D1实现中以常量内嵌版本串比对而非仅文件hash(防清单文件被移动后路径失效绕过门)。
|
||
- **P3-3**:观察Get的after矩阵建议记录"服务器返回键的原始顺序"(Ordinal对账不受影响,但顺序差异可作为未来并发观察的辅助信号,零成本留证)。
|
||
|
||
## 结论
|
||
|
||
**通过D0方案。** 主会话核hash(已代验60/60+absent 3/3+源指纹55/55独立重算)逐条裁决后按D1(三文件实现+专用构建)→D2(替身验证+独立实施复核)→D3(停写窗口+一次真实导入)→D4(执行复核+限定关闭)推进。本方案批准≠导入已执行;101导入成功也仅覆盖单账号测试,不代表全体用户迁移或P2-α整体关闭。
|