Files
ft/CodexOutput/upserver/P2-alpha-A已有存量档只读盘点方案-待评审-2026-09-28.md

94 lines
9.6 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.
# P2-α-A 已有存量档只读盘点方案(待完整评审)
日期:2026-09-28;主会话。4C2已限定关闭,按“最小改动、先跑起来”要求,推荐先推进正式启用前已有硬前置P2-α,首单元只处理已有本地样本与迁移规则,不扩展玩法。用户如另选下一方向,本方案保留候选,不视为开发批准。
## 1. 目标与选择
P2-α来自4B2修订2裁决:正式启用前须完成真实档兼容盘点、版本/字段识别、迁移/备份、失败退出、人工恢复专项及用户产品确认。102成功不代表所有历史PF档均兼容。
| 选择 | 成本与边界 | 本次建议 |
|---|---|---|
| 已有样本只读盘点,输出逐差异处置规则 | 不改业务、不访问服务器;先定位真实缺口;两个专用账号不能证明用户全量兼容率 | **采用为P2-α-A** |
| 直接修改101两处null兼容 | 改动可能很小,但M22空态语义/消费路径尚未完整确认;不能将“旧档存在”当作“合法且等价” | 后续按盘点结果提出单独精确差异方案 |
| 建通用自动迁移并批量导入 | 增加身份、停写窗口、版本/CAS/回滚等依赖,当前没有代表性样本及目标授权 | 不在本单元申请 |
本单元交付是**可审计差异台账和待确认迁移政策**,不是启用KV、清理历史档或实现新迁移框架。已有102保持最新KV进度,不再次导入9月24日旧PF档。
## 2. 已核查输入与初始发现
| 输入 | 已有证据与限制 |
|---|---|
| PF101,20260924T041802Z,55键 | 源hash `E6EB3E656B62A3535FDB8F0DC517321A4C3E32F3A8D95385A2B7D5C0AA8222EF`;两处仍被历史cdTime修复后诊断标为Malformed:M15、M22 |
| PF102,同批,45键 | 源hash `827F36084648449CEFAFB96B3CE62093DF70B8A87E33A526DA5B03A9C135A377`;同一诊断Valid;后已通过专用真实游戏闭环 |
| KV102,20260928T025514Z,45键 | 4C2结束态gold234004/energy383;是游戏已继续产生进度的目标样本,**不能用旧PF102覆盖** |
| Schema/Bindings/cfgData | 诊断依赖配置内容与UTC;必须冻结源码和cfgData指纹,记录采样时间;历史诊断不是当前配置下全量用户结论 |
| 历史审查合同 | 严格AD坏槽、未知鱼/错归属/缺配置/同卡冲突、core布局、数值与时间解释均在范围内,不只盯两个null |
源文件均在 `KVGameplayLoopTests/pf-source-backups/20260924T041802Z/`;历史报告 `pf-source-schema.json` / `cdtime-source-schema.json` 明确syntheticDescriptor/usesLocalUtc/sourceOnly,不是真实认证或加载许可。
本次只读源码核查:
- PF101的FishingChallengeData原字符串为JSON `null`;`PlayerKVSaveSchema.DecodeChallenge`在Object(Json(text))拒绝,而旧`FishingChallengeManager.InitChallengeData(string)`经JsonConvert可产生null对象。是否等价于“没有挑战”仍需逐读取入口确认,不直接归为可自动删键。
- PF101的GeneralEventPackData对象存在,selections为JSON null;当前DecodeBargain要求IntegerList,Apply构造新List。其余字段包含已激活历史礼包状态,**不能删除整键或默认重建以绕过拒绝**。
- Advert.cdTime=null单字段已获审查并修复,不重复开发;禁止把该批准泛化为所有null均可接受。
- 101/102为两份专用样本,没有代表性总体证明;不输出“全量兼容率”。
## 3. 执行白名单与数据流
**生产/测试源码改动白名单:空。** 允许只读现有源文件、原样本、历史报告;新增文档及结果限 `CodexOutput/upserver/P2AlphaAudit/` 与本方案/独立报告。若确需新诊断代码,先另列最小源码差异完整评审,本方案不授权。
流程:核源hash/身份→冻结源码与cfgData指纹→复用已有固定本地InspectPFBackup入口→按31模块及所有源key编目→逐差异追踪旧读取/写入与新Decode/Apply→分类、提出最小处置→自审并独立复核。
固定入口:`KVGameplayLoopSetup.InspectPFBackup`,已有脚本 `KVGameplayLoopTests/unity-source-inspection.cs.txt`。严格保留source=PlayFab/title=108EE8/customId101或102/指定本地目录限制,使用隔离容器和原Decode;不Open、不Apply、不发布句柄、不建运行permit。
入口要求Enabled=false、无validation/GContext、Editor未Play或将Play。目前上次run已closed但Enabled历史true,**不能清静态标记绕过准入**;如复跑,先确认无许可/排水,再正常重启编辑器,用Unity CLI Loop在全新空闲状态检查。不使用UnitySkills,不打包。
本单元不调用PFSourceBackup或任何网络备份/导入工具。只有本地样本,不能伪称获得新的服务器时间、真实账号描述符或其他用户存档。生成清单可用现有shell/哈希工具,不创建第二套Schema解析器来代替生产Decode。
## 4. 台账与分类规则
每条记录必须有:样本ID与源hash、key/模块/字段、旧格式类别、当前格式规则、旧消费读写位置、新Decode/Apply位置、诊断结果、数据是否有业务含义、候选处理、依据、未验证项。原值保留在原备份,台账尽量只列结构/字段和hash。
逐key与逐模块双向核对:现有55/45键包括非31模块直接消费项;未识别键单列保留,不因Schema没报错而宣称已支持,不删除或静默遗漏。
| 类别 | 候选规则(不是已批准产品政策) |
|---|---|
| 原字节可解码且消费语义一致 | 候选直接保留;还需真实身份、配置和目标前态门,不等于可以导入 |
| 旧业务可生成的等价空态 | 列精确字段兼容方案优先,不改存档绕过;null/缺键/空字符串/空集合分别判定 |
| 历史布局可明确转换 | 只提出每字段确定性映射及信息保留证明;不在本单元生成转换后真实档 |
| AD坏槽/未知配置/字段歧义/数值越界 | 阻止该档迁移资格,保留原值及定位;不能静默跳过/填默认/清空 |
| 空目标但有旧档/目标已有进度 | 分开处理。尤其102已非空,不作自动合并或旧PF覆盖;没有revision/CAS或排他写入窗口时不能承诺并发安全 |
| 模块外或未知key | 保留并列后续消费者;不得以“不参与当前玩法”推导可删除 |
## 5. 后续迁移、失败退出与人工恢复政策草案
本段满足专项方案讨论需要,**不授权执行任何远端写入或对真实玩家实施拒档政策**:
1. 只在来源身份与目标账号映射核实、源/目标分别备份、目标前态和写入窗口有证据时考虑迁移;具体账号、key集合、差异、恢复条件必须形成可审清单。
2. 不支持的档案保持源不动,停止该账号迁移/启用;是否继续保留旧PF入口或提供维护提示,属于用户产品确认事项,不能静默新建档。未进入KV前与KV提交结果不确定后必须区分,后者禁止自动切回PF继续双写。
3. Set/Delete结果Unknown或MayHaveCommitted:停止后续动作,只观察并独立读取核对,不重放业务、重发整档或自动回滚。新读一致仅为当时观察,不等同CAS保证。
4. 人工恢复另行列当前态与精确补偿范围。只有确认对应本次写入且之后无新增合法进度,才可讨论旧值恢复/删除新增key;发现其他进度或并发写即停止,不全库回退。PF源始终保留。
5. 用户明确确认真实档不兼容时的处理政策+独立专项评审+身份/4B3/4C/tickets/4D其他门全部满足,才可讨论正式启用;本单元不关闭整个P2-α。
## 6. 检查点与验收
每个检查点更新开发日志/入口/TODO。当前仅A0方案准备完成,未启动新诊断运行。
| 检查点 | 交付及完成条件 |
|---|---|
| A0(已完成) | 下一单元范围比较、原审批门核查、两样本来源与两个null实值核查、完整只读方案、送审hash |
| A1(完整方案评审后) | 主会话逐条裁决;冻结两个源文件、源码、cfgData指纹与环境时间;明确不发布玩法/不访问服务器 |
| A2 | 全新空闲Editor复用固定Inspect入口;原诊断输出与历史逐项对照,差异有原因;结束时无permit/Play/网络写;不能手动改静态态绕门 |
| A3 | 100个样本键出现项全部入账(55+45,不去重掩盖差异),31模块逐项覆盖;M15/M22、AD坏槽、鱼配置严格项、未知key有明确分类/证据边界 |
| A4 | 最小后续建议、迁移/失败/恢复政策草案、未决产品事项、自审、独立复核提示词与受审清单齐全;未决项不得写成已通过 |
A2产物是离线解码观察,A3才是消费语义盘点;只跑Decode不能自动关闭A。无需重跑整个4C2、无需收费动作、无需把101改到Valid才算本单元完成。
## 7. 作者自审与评审请求
brainstorming步骤按既有合作方式落实:上下文与用户最小改动约束已核;三路线比较并选只读首单元;不需视觉伴侣;完整设计一次性交独立评审,未写业务代码,不自动提交共享工作区。用户的下一方向选择仍可覆盖本推荐。
自审:区分历史样本与当前存档、合成描述符与真实身份;不重复导102;不把null一概放宽;无自动修档/删除/退款;31模块与额外key都入账;当前Enabled=true的诊断准入问题已明确要求新进程;正式拒档产品政策仍未确认。
请独立评审本方案是否足够小、复用入口是否确实无正式请求/Apply、覆盖与分类是否充分、后续迁移政策是否诚实、A的关闭条件是否误推全量兼容。报告路径:`P2-alpha-A已有存量档只读盘点方案独立审查-2026-09-28.md`。后续若需两处null兼容代码,须另交精确变更方案完整评审,不能凭本方案直接编码。