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,41 @@
{
"version": "import101-fixed-20260928-v1",
"count": 7,
"items": [
{
"path": "cfgData/tbglobalconfig.json",
"sha256": "9AEE49D6041E2888798AEDB89ACD6503E6FB866EAAA1D148F2F5D0E13D2F5DA0",
"bytes": 6818
},
{
"path": "cfgData/tbroddata.json",
"sha256": "A1634FD01B03C23218D652B9944CAA7B08E38587CA89C41A5B7E2974A4DD74E6",
"bytes": 36327
},
{
"path": "cfgData/tbmapdata.json",
"sha256": "1B81E9F1727BC1F39DF68AA98BECEACB94601A818BC82667C29E92304EEE8646",
"bytes": 112619
},
{
"path": "cfgData/tbeventpackmanager.json",
"sha256": "FC9CEA913387D84824251358260BBDBAC98DEA37FBCEAD74ACFA0F833710D4BE",
"bytes": 663446
},
{
"path": "cfgData/tbfishingevent.json",
"sha256": "C8A4A9794E9390C94B9C8F1927B3E718B3EB9F784F0889508E1E576DD4B77A2D",
"bytes": 1000464
},
{
"path": "cfgData/tbfishdata.json",
"sha256": "846EEF5FF4139BBC5B9891686CCDD7AA8E836F1D1CBB6EAD546B14B60093C2E0",
"bytes": 1756698
},
{
"path": "cfgData/tbfishcard.json",
"sha256": "0E534C8AE67B77FA3FA295D73EE3CCED4C6B788F6FEED6DAE19ABF93D11839A0",
"bytes": 456977
}
]
}

View File

@@ -0,0 +1,124 @@
# P2-α-D:固定101历史档导入最小方案
2026-09-28,版本1,主会话。**方案完成,待独立评审;未编码、未导入。** 用户已确认固定历史备份与101映射;本方案不再请求重复确认该决定。真实写入前的停写窗口尚未建立。
## 1. 目标、产品决定和不做的事
将用户指定的历史PF101样本作为可丢弃专用账号101的固定测试起点,原样写入空的s101目标,再完整读回核对。这是一次测试导入,不代表所有历史用户、活动业务或身份系统已完成迁移。
- PF来源:`KVGameplayLoopTests/pf-source-backups/20260924T041802Z/101.json`,title108EE8/customId101,55键,SHA256=`E6EB3E656B62A3535FDB8F0DC517321A4C3E32F3A8D95385A2B7D5C0AA8222EF`。
- 用户确认其映射至s101 playerId101,接受固定历史测试起点;不要求重新访问PF,也不把其称为当前PF最新数据。
- API固定`http://s101.local:18080/`;目标非空、来源或候选校验失败则停止,不覆盖、不合并、不生成空白档。
- 102及其导入claim保持原状;不登录102、不复用/修改Import102,不运行PF、玩法、批量迁移、热换号、打包或新交易/CAS框架。
- C的070339Z目标空快照仅为历史参考;其at是本地UTC,本地钟与服务器钟偏差未校验。实际写前必须新Get,不把历史快照当锁或服务时间。
- 不合格时只停止101本次导入,不改变旧PF入口、路由或全体用户产品策略。26模块外键等保持原值,不声称业务消费者已迁移。
## 2. 选型与改动白名单
| 方案 | 结论 |
|---|---|
| 单独固定101辅助入口,沿用既有客户端/解码器 | 采用,便于约束一次测试,游戏逻辑零改动 |
| 把Import102改成通用账号迁移器 | 不采用,扩大原已验收路径和参数范围 |
| 直接HTTP脚本导入,省略候选校验/claim/替身测试 | 不采用,无法验证写前拒绝与Unknown路径 |
唯一允许的源码变更(均在`CodexOutput/upserver/KVGameplayLoopTests/Preflight/`):
1. **Program.cs**:增加两个严格单参数分支`--verify-import-101`和`--import-approved-101`。保留现有分支内容/默认拒绝逻辑不变,不添加任意账号/地址/路径参数。
2. **新增Import101.cs**:固定入口及一次导入流程;复用S101AccountSession、PlayerKVClient、PlayerKVSaveSchema.Decode。配置快照构造沿用Import102现有取值方式,复制所需短函数,不为共享函数改Import102。
3. **新增Import101Tests.cs**:固定离线验证组及替身handler;不新建通用测试/迁移框架。
csproj已有本目录C#默认包含规则,不修改项目文件。Client下C#、cfgData、场景、原备份、旧导入器及claims禁止改动。新编译产物只进入本目录D1-bin及原Preflight obj;无Unity编译必要。
数据/证据输出仅本目录:已冻结`D0-source-values.json`(55键名/hash/UTF8长度,不含整档值);D1/D2离线证据;D3停写记录;唯一`import-101.claimed`;`runs/<UTC+随机唯一后缀>/`的账号描述、before、候选报告、Set结果、after和核对。不得覆盖旧文件。
## 3. 固定输入与本地门
固定生产入口不接收外部覆盖参数,检查顺序:
1. 确认固定工作目录/源路径/API/101常量;现有claim存在即拒绝,禁止删除旧claim或换目录重试。
2. 校验原文件完整hash,再用DateParseHandling.None、拒绝重复属性/尾随内容读取。source=PlayFab/titleId108EE8/customId101、非空playFabId必须符合冻结源;data只能是55项唯一键/字符串值。
3. 逐项与受审D0-source-values的Ordinal键集合、UTF8长度/hash匹配;源原值保持在内存,不重新序列化值内JSON。未知键同样写入,不能按31模块过滤。
4. 配置固定读取7项:tbglobalconfig、tbroddata、tbmapdata、tbeventpackmanager、tbfishingevent、tbfishdata、tbfishcard;以及既有cfg.ConditionType。固定清单`D0-config-hashes.json`,版本`import101-fixed-20260928-v1`;送审hash不符停止,不自动更新、补配置或转默认值。两个D0数据清单本身的hash须在实现中锁定并随实施复核核验,不允许通过同时修改清单绕过来源/配置门。
5. 新证据目录必须不存在。目录或本地证据持久化失败时,写前直接停止;无正式请求也要保留可用错误输出。
源元数据检查和逐值清单是误操作防护,不是秘密/签名校验。来源及测试映射的产品依据是本轮用户明确答复。
## 4. 登录、候选和一次写入顺序
### 4.1 登录与写前数据
只登录101一次;使用原会话Cookie/禁止重定向/既有超时。成功且NewlyCreated=false,PlayerId101;记录InternalId、CreateTimeUtc、ServerTimeUtc及本地采集时刻,不记录Cookie。PlayerId是客户端请求ID,不把它冒充服务端回显或正式跨系统身份绑定。
登录可能产生会话/更新元数据;newCreate后置拒绝不能撤销服务器可能已创建的账号。失败/newCreate停止,不Get或清理账号,不自动重试。
随后第一次全量Get,必须成功,将完整before原值持久化后要求0键。非空立即停止,无Set/删除/合并。此Get不提供CAS,安全边界依赖已确认的专用账号停写窗口;不宣称消除了外部并发竞争。
构造与Import102同类的候选:本次真实账号描述符、固定epoch=1/专用ownerId、原PF playFabId身份快照、channel none、固定cfg快照及**本次ServerTimeUtc**。只Decode,不Apply/Open真实游戏会话。完整保存verdict/diagnostics,再要求Valid;未通过则保留原档并停止。A/B样本Valid只作依据,不跳过本次候选。
### 4.2 claim与Set
以上所有写前证据保存成功后,用CreateNew、Flush(true)持久化固定`import-101.claimed`:账号/API、源hash、键数、证据目录、配置版本、开始UTC和已确认停写记录标识。claim冲突/写盘失败则零Set;若已留下部分claim也不得自动删除。claim持久化之后、调用Set之前即认定“本次尝试已消耗”,即使进程此时崩溃也不自动重跑。
只调用一次SetAsync,载荷为全部55键原字符串。没有Set重试、PF双写、Delete或补偿。进入调用后本地/网络异常都按“可能已写”处理;不能因没有set-result文件就判定没写。
### 4.3 写后观察与本地落盘失败
Set调用正常返回或抛异常后,只要进程仍可运行且无并发/身份等新异常,均尝试**一次**同会话全量Get观察;Set结果文件保存失败不得短路此观察。实现用明确的try/catch/finally路径:单独记录网络结果/异常与本地保存异常,再走观察;Get失败不重试,保留claim。
观察结果若可用,尽力以CreateNew保存完整after及55项逐值矩阵(新增/缺失/额外键、UTF8长度/hash)。写后磁盘失败只能说明证据不完整,不反推KV没写;将错误送stderr/非零退出,仍不再Set。若进程/系统崩溃,无法保证finally运行,留到人工只读观察,不宣称总能获得after。
成功必须同时满足:Set明确Success、after成功且恰55键、全部原值相同、必需证据均持久化、停写边界未被破坏。任何一项不满足即“需人工核查”,即使Unknown后读值相同也不自动标成功。随后不Play、不补发;claim永久保留。
正常路径上限:1次登录+2次Get+1次Set,应用层4调用;失败按实际已到达阶段计数,不硬编码总是4。PF/102/Delete=0。观察Get读取原账户状态,不触发业务保存。
## 5. 狭窄测试接缝与离线验证
测试必须跑同一导入核心,不复制一套流程。允许在Import101内部提供仅测试使用的参数:输入副本/证据临时目录、CookieContainer→HttpMessageHandler工厂、候选校验回调、证据保存回调。固定CLI运行入口全部绑定真实固定实现;CLI不得传入这些参数,测试入口不得创建真实HttpClientHandler或用null回退联网。
接缝只用于:拒绝源变更的临时副本、有限mock序列、强制候选无效、模拟before/claim/set-result/after保存失败。候选真实实现仍调用既有完整Decode;成功组至少一次使用真实55键及真实配置的隔离候选解码,其他组可替身返回verdict。mock仅允许101登录/Get/Set固定URL,额外请求、102/PF/Delete或不符合顺序立即失败。测试Cookie由替身构造,不访问网络。
| 验证组 | 必须断言 |
|---|---|
| 源/配置/清单不符 | 错源hash、条目遗漏/重复或值变更、配置hash不符均不登录/不Set;原样55键可通过本地门 |
| 登录拒绝 | HTTP/协议失败、newCreate=true;Get/Set均0,不自动清理 |
| 目标非空/Get失败 | Set=0,非空before保留;无额外登录或重试 |
| 候选无效 | Set=0、claim未创建、诊断保存;记录这是故障注入,非真实样本不兼容 |
| before/候选保存失败 | Set=0,不跨过持久化门 |
| claim既有/写失败 | Set=0,旧claim字节保持;失败留下的claim不删除 |
| 正常成功 | 登录1/Get2/Set1,完整载荷55项逐值相同(含两种历史null字符串/未知键),结果与证据齐全 |
| Set返回Unknown/抛异常 | 仍Get一次,Set始终1,结果不标成功;无Delete/补偿/重试 |
| Set结果落盘失败 | 仍Get一次、非零结束,after可落则保留,不能静默成功 |
| after失败/缺键/多键/值变/落盘失败 | 非成功、claim保留、Set1;所有故障不触发第二次Set |
| 再执行 | 已有claim在网络前拒绝,原claim/快照保持,不通过删除claim复测 |
边界测试使用临时目录并保留摘要,不改原备份/生产claim。无意义的全量历史回归不重跑;既有Program分支内容和Import102全文件hash须保持(Program仅两处分支新增)。如实现必须超出三文件范围或增设通用服务,先停并修订方案。
## 6. 检查点与交接
- **D0**:本完整方案、产品决定、55项源指纹、依赖hash及自审送独立方案评审;主会话逐条裁决前不写C#。
- **D1**:通过后按三文件白名单实现。显式`dotnet build .../Preflight.csproj --no-restore -o CodexOutput/upserver/P2AlphaImport101/D1-bin`;不得隐式restore/运行正式分支。保存输入/产物hash、diff、构建结果。
- **D2**:只运行锁定DLL的`--verify-import-101`,完成上表替身验证;记录断言/请求计数及失败证据、确认源码范围。**交独立实施复核,主会话裁决前不运行正式导入分支。** 本步骤不要求用户开启停写窗口。
- **D3**:实施复核通过后,主会话向用户明确实际执行窗口:从确认101所有客户端/设备停用开始,至本次执行结束并报告;不声称已由当前来源确认建立。按Unity CLI Loop核本地空闲/无permit并冻结全部claimed;若编辑器已关闭只读进程与文件,不强启/强退。确认停写后记录D3窗口文件,仅运行锁定DLL的`--import-approved-101`一次。
- **D4**:前后状态/claimed核对、原源不变、真实账号/配置/候选、before/Set/after/对账和异常口径全部交付。新import-101.claimed为唯一预期新增,既有11 gameplay claimed不变;无Play。交独立执行复核后主会话逐条裁决关闭,只关闭此单账号测试导入。
每个检查点更新入口/状态/TODO/开发日志及机器todoItem。若任一阶段受阻,标明卡点和已发生的真实请求,不自动继续写入或修改原方案/证据掩盖差异。
## 7. 最终验收及恢复边界
| 项 | 成功条件 |
|---|---|
| 授权与基线 | 固定源/101映射已确认;方案和实施复核已裁决;执行时停写窗口明确 |
| 修改范围 | 仅Program两分支+两个新辅助C#;Client/配置/Import102与102 claim无变化 |
| 写前门 | 来源55项、配置、现有账号、空目标、候选Valid及持久化before/claim全部成功 |
| 至多一次 | 独立持久claim,最多一次Set;错误/Unknown/写盘失败均不重发 |
| 实际结果 | before空,after恰55原值且无额外键,Set明确成功,全部证据完整 |
| 边界 | 101独占窗口、无Play/permit/102/PF/Delete;新导入claim之外旧claims不变 |
| 交付口径 | 准确阶段请求计数、at本地钟限制、剩余迁移条件、无需回滚时不执行回滚 |
失败不是“恢复到空档”的授权:即使原before为空,也不得自动Delete所有键,因为Unknown/外部进度会使清空成为数据丢失。人工恢复另案需当时新鲜观察、差异和无新增进度证据;当前只保留源、claim及结果停止。本方案不承诺多键服务器事务或CAS,不为本专用测试引入新服务器能力。
## 8. 作者自审
已按真实Import102顺序检查并区别处理“set-result写盘失败会跳过观察”的缺口;明确claim在Set之前持久化、失败可能已写、崩溃不能保证观察、源码固定与测试接缝分离、真实导入前实施复核/停写两门。源的历史性、未知键保留、两种null原字符串、时间偏差及身份映射局限均已声明。未扩大游戏模块或通用迁移范围。
当前停在D0方案独立评审;用户来源决定已完成,不能再标为“待用户确认来源”。真实停写确认在D3发生,当前不打断用户进行无必要的提前停机。

View File

@@ -0,0 +1,41 @@
# 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-α整体关闭。

View File

@@ -0,0 +1,17 @@
# 独立评审AI:P2-α-D固定101导入方案
请在`C:/projects/ft`只读评审本目录`D0-固定101历史档导入最小方案-待评审.md`,先核`design-review-hashes.json`所有SHA256/长度及`expectedAbsent`的新源码路径不存在。读上一级产品决定文档及P2AlphaTargetCheck/C5关闭裁决。A/B/C和4C2已限定关闭,不重复复审。
用户已明确选择固定20260924T041802Z PF101历史备份和101映射、目标非空/校验失败停止、不覆盖/合并/建空档。不要误判来源政策尚待确认;实际停写窗口尚未建立,安排在D3。
重点逐项给出裁决:
1. 是否确为最小范围:游戏源码零修改、Program两固定分支+Import101/Import101Tests两个辅助文件;是否有不必要抽象或遗漏必要依赖。
2. 固定源55键原值/元数据/配置hash、来源历史性与映射、真实服务器时间候选Decode、空目标门是否闭合;D0源清单请独立核对,未知键及历史null不得转值。
3. claim持久化与Set顺序、目标Get后并发窗口、专用账号停写约束是否足够;不得要求本轮直接做全体用户迁移或CAS工程,但应明确不能承诺什么。
4. 最多一次Set、Unknown/异常后一次观察、set-result写盘失败不短路观察、after失败和进程崩溃的口径是否自洽;有没有隐含重发或自动清空。
5. 测试接缝仅internal且正式CLI绑定固定真实实现、替身明确零网络、关键故障覆盖是否可实施且不过度设计;测试“故障注入”和实际源验收能否区分。
6. D0—D4的独立方案评审→实现/离线→独立实施复核→停写/一次真实导入→执行复核是否完整;当前只允许方案批准,不越过后续门。
7. 请求计数、登录可能新建副作用、PlayerId非回显、本地钟未校验、身份/业务覆盖限制是否完整。
只写本目录`D0-独立方案评审.md`,禁止修改共享文档/源码/备份/claim、构建、跑工具、访问正式或PF接口、操作Unity。报告给出hash核对数、通过/有条件通过/不通过、逐项结论和P1/P2/P3最小修订建议。主会话负责逐条裁决;需要方案变更应指出,不替主会话编码。

View File

@@ -0,0 +1,23 @@
# D1:方案裁决与限定实施批准
2026-09-28,主会话。独立方案评审通过,无P1/P2。更新状态及源码前主会话重算60/60项SHA256/长度一致,3个expectedAbsent均不存在;完整核验存D1-design-verification.json。批准D1三文件实施与D2隔离验证,**不批准运行正式导入命令**。
| 审查项 | 裁决 |
|---|---|
| 1 最小范围 | 接受,Program两分支+Import101/Import101Tests,Client/Import102/csproj不改 |
| 2 输入/候选 | 接受,55原值、7配置、两个清单hash常量、服务时间完整Decode;不删未知键 |
| 3 claim/窗口 | 接受,CreateNew持久claim在Set之前;无CAS声明保持,实际窗口留D3 |
| 4 一次写/观察 | 接受,异常/Unknown/Set日志失败均不重发,正常进程继续一次观察;全部持久证据才可成功 |
| 5 隔离验证 | 接受,internal狭窄接缝、固定正式绑定;替身禁止联网、成功组真实源/配置Decode |
| 6 流程 | 接受,D2实施复核是实际导入前必经门,之后再确认当次窗口 |
| 7 限制 | 接受,准确请求阶段、登录副作用、本地钟/身份/业务覆盖限制 |
## 三条P3
- P3-1采纳。D3-window.json记录windowId、operator、startUtc、expiresUtc、verificationMethods(至少用户声明所有客户端停用)、noOtherClientsDeclared、implementationReviewApproved;实际endUtc在运行结束记录,不冒充提前知道。记录不证明服务端无连接。正式入口校验固定账号/API及当前处在本地UTC窗口,写前和结束再核窗口有效性;D2使用清楚标识的模拟记录。
- P3-2采纳。配置版本常量`import101-fixed-20260928-v1`与文件hash同时匹配;两个清单均固定路径读取、常量hash验证,缺失/移动失败关闭,不回退。
- P3-3限定采纳。保存after.Data.Keys未排序枚举数组为`adapterKeyOrder`,并注明来自客户端字典枚举,**不是HTTP原始字节或并发证明**。不为获取原始JSON次序修改已验收PlayerKVClient;正式对账继续Ordinal集合/原值。
实现细节收敛:本地文件先读取一次bytes,再hash/parse同一份内容;配置解析结果保存在本次输入对象,避免校验后重读另一个版本。测试替身必须显式提供handler工厂,不得null回退真实网络。以上均落于原白名单和既有合同,不新增通用框架。
D1构建及D2通过后交独立实施复核;本轮无正式账号请求、无Unity操作/Play/permit或正式导入claim,不提前建立真实停写窗口。

View File

@@ -0,0 +1,42 @@
[
{
"path": "CodexOutput/upserver/P2AlphaImport101/D1-bin/Newtonsoft.Json.dll",
"sha256": "7292D3EB508652D14726749DD27094F2D481AECCF2DB6427B62F68A71460897E",
"bytes": 696320
},
{
"path": "CodexOutput/upserver/P2AlphaImport101/D1-bin/Newtonsoft.Json.pdb",
"sha256": "EEBB075CE7B6530268DA0FB24854B085B10BE7FD6492FE74F3E5608061291741",
"bytes": 2186752
},
{
"path": "CodexOutput/upserver/P2AlphaImport101/D1-bin/Newtonsoft.Json.xml",
"sha256": "E0FED73A98ED4DB5A2BDE3DC53836CC1FAC24E34EAEAB2007E1CFAB81ADB71B0",
"bytes": 702415
},
{
"path": "CodexOutput/upserver/P2AlphaImport101/D1-bin/Preflight.deps.json",
"sha256": "50DBE40646847BBD9D5DDB1A1B8834901232881C5EFAE38E44F2C163D8B9317B",
"bytes": 831
},
{
"path": "CodexOutput/upserver/P2AlphaImport101/D1-bin/Preflight.dll",
"sha256": "AAA1276630E8633C131072DDF638639B92F60134A0425E17616A4A5A2A436607",
"bytes": 355328
},
{
"path": "CodexOutput/upserver/P2AlphaImport101/D1-bin/Preflight.exe",
"sha256": "B950DA7A97A2710B6B5D6919316DE96B22E46B0E8A80453029D4A6C7A31C4CF2",
"bytes": 156160
},
{
"path": "CodexOutput/upserver/P2AlphaImport101/D1-bin/Preflight.pdb",
"sha256": "AEA0D31C9F058E000AB1F86822DD04F8246BD323316FABA11B047795EA07F53E",
"bytes": 100904
},
{
"path": "CodexOutput/upserver/P2AlphaImport101/D1-bin/Preflight.runtimeconfig.json",
"sha256": "A45057885F807F4A337FDEA3CCDFA64E1675D22A6D6A6FC7C7394FD44BA9EEBE",
"bytes": 268
}
]

View File

@@ -0,0 +1,48 @@
# P2-α-D1/D2实施交付与离线验收
2026-09-28,主会话。**三文件实施和离线验证完成,待独立实施复核;101尚未导入。** 当前不申请提前停写,不运行正式导入命令。
## 改动及理由
| 文件 | 最终改动 |
|---|---|
| Preflight/Program.cs | 精确插入2行:固定验证和固定101导入分支;移除这两行后与备份字节hash相同,其他分支不变 |
| Preflight/Import101.cs | 新增225行固定101辅助工具;冻结源/清单/配置、真实时间候选、空目标、持久claim、一次Set与一次观察、错误停写;无通用账号参数 |
| Preflight/Import101Tests.cs | 新增231行固定隔离测试;mock transport及持久化/候选故障注入,明确禁止真实请求 |
Client下生产源码、cfgData、csproj、Import102、源PF101及旧102 claim均未修改。原60项受审文件中54项不变,6项预期更新为Program及5份共享状态;新增2源码另列。见D2-scope-verification。未观察或操作Unity,不引用C的旧空闲状态冒充本轮观测。
## 最终验证
- `D1-build-final.log`/result:构建退出0,0警告、0错误。
- 最终`D1-bin/Preflight.dll`:SHA256 `AAA1276630E8633C131072DDF638639B92F60134A0425E17616A4A5A2A436607`,355328字节;与`D2-run-artifact.json`实跑记录相同。
- 明确运行`dotnet .../D1-bin/Preflight.dll --verify-import-101`,退出0,**37组、1141断言**,完整结果见`D2-tests/20260928T072727Z-d72e733005eb4d1c8fc805fceb6f0504/result.json`。
- 正式请求0。成功组使用真实冻结55键、7配置和完整Decode一次;服务描述符/时间来自内存mock,**不称真实服务器候选通过**。其余候选是故障/Valid替身;不会用合成结果代替D3实时校验。
- 未创建正式`import-101.claimed`或`D3-window.json`。测试claim仅位于D2-tests各隔离案例内;旧102 claim保持。
| 方案验收组 | 最终证据 |
|---|---|
| 来源/清单/配置 | 源hash、条目遗漏/重复/值变、配置清单版本、配置字节变更均零登录/Set;严格JSON重复属性/尾随内容拒绝 |
| 运行门 | 未批准/过期模拟窗口、null handler拒绝;测试不得回退真实网络 |
| 登录/目标 | HTTP/协议/newCreate失败零Get/Set;before失败或非空零Set,账号证据保存失败零Get |
| 候选/持久化 | 候选无效及before/候选保存失败零Set;记录故障注入,不称真实源缺陷 |
| claim | 既有、写失败、部分写、竞争CreateNew均零Set;已有/部分/竞争claim保留;claim后窗口过期零Set |
| 成功 | 真实源/配置隔离Decode为Valid,55原值全部送入替身,登录1/Get2/Set1、完整对账及未排序adapterKeyOrder一致 |
| 不确定写入 | 503不确定和未被adapter捕获的异常均只Set1并Get观察一次;即使值相同也失败,保持claim |
| 写后本地失败 | set-result写盘失败仍保存after;after/verification写盘失败非成功,不再Set |
| 观察不合格 | Get失败/异常、缺键/多键/值变、窗口结束均非成功且不补偿 |
| 禁止重放 | 所有已Set案例再次调用核心均在网络前被claim拒绝,原claimhash保持 |
## 作者自审及过程偏差
1. 在首轮构建后、首次测试前补了claim落盘后的窗口复查,并修正严格解析负例不能“自己抛异常后被当作预期拒绝”。
2. 首次34组1075断言通过后,继续补竞争claim、claim后窗口过期、账号证据保存失败三例,并给所有mock断言加失败记录,避免预期异常路径吞掉真正的断言失败。最终37组结果才用于交付。
3. 第二次构建超过首轮工具等待时间,命令返回仍运行session时,主会话误提前启动了一次旧DLL验证(仍34组)。`during-build-*`输出和artifact记录保留;不把它当新源码验证。之后明确等待构建session退出0、重新冻结最终DLL并执行37组,满足最终源码/产物/结果一致。没有正式接口操作或删除失败证据。
4. 新辅助工具的配置输入从同一份bytes校验并解析,候选使用已解析表,不校验后再读取变更文件。两个清单hash及版本常量同时固定。
5. P3窗口字段落实,正式入口拒绝testOnly窗口;adapterKeyOrder只说明客户端字典枚举,不能用顺序推断并发。无CAS,跨设备停写仍依赖当次用户声明及可核实手段。
## 留给D3的实际条件
独立实施复核通过并主会话裁决后,才可安排用户101所有客户端停用的实际窗口,生成D3-window.json。正式入口固定读取该文件,缺失/过期/未标实施复核通过即不登录。D3仍须CLI只读核本地状态及现有claims,明确窗口记录不证明服务器无连接;真实候选/空目标/一次Set/after结果另作交付。
已有测试映射授权不变;无需再确认来源。102不登录、不覆盖。整体P2-α和实际101导入尚未关闭;保持不Play、不打包。

View File

@@ -0,0 +1,39 @@
# P2AlphaImport101 D2-固定101导入器实施独立复核
日期:2026-09-28。审查者:ZCode会话。独立性声明:未参与D1/D2实施;此前参与为D0方案评审(三条P3为本轮核对项)。本轮**只读+hash重算+源码/证据核对**(按提示词边界未构建/未跑DLL/未操作Unity/未请求正式接口)。
## 受审hash核对
| 项 | 结果 |
|---|---|
| `implementation-review-hashes.json`(268项) | **268/268重算全部一致** |
| `expectedAbsent`:`import-101.claimed`+`D3-window.json` | **均确认不存在** ✓(正式导入/窗口未发生) |
## 总结论
**通过(限定接受实施)。** 允许主会话准备D3实际停写窗口。无P1/P2;P3两条。
## 七项逐条
**1. 范围精确:确认。** `Program.cs`核实:**恰两行插入**(:7 `--verify-import-101`→Import101Tests、:8 `--import-approved-101`→Import101.Run),原三分支与默认拒绝逻辑原样(:9–:12);Import101/Import101Tests两新文件均在固定101辅助范围内;268项清单中Client/配置/Import102等hash保持。
**2. 固定门实现完整:确认(抽查)。** Import101.cs:54–55 claim `CreateNew+Flush(true)`;D0两清单hash在268项受审清单内锁定(P3-2建议的版本串比对经`import101-fixed-20260928-v1`常量落实);55原值/未知键保留经"同一输入副本→本地门→真实候选"路径覆盖(测试组含原样55键通过本地门断言)。
**3. 窗口与claim顺序:确认。** `CheckWindow`(103–117):playerId/api固定+`noOtherClientsDeclared`+`implementationReviewApproved`+windowId/operator非空——D0方案P3-1的窗口记录模板**已落实为强制字段**;testOnly入口拒绝窗口(testOnly出现在Import101中恰1处,测试路径不得携带窗口);claim在Set前持久化(:137→:182顺序),claim后不可自动重放("已消耗"语义,再执行组断言旧claim字节保持)。
**4. 一次Set与失败口径:确认。** :182 `try { set = await kv.SetAsync(input.Raw); }`单次调用、无循环;11个验证组覆盖Unknown/异常/日志失败→一次观察→不标成功;无Delete/补偿/重试(grep无相关调用);成功五条件与D0§7一致。
**5. 测试有效性:确认。** 同一导入核心+隔离handler替身(`formalRequests:0`);37组**恰好37个PASS行、0 FAIL**(本审查grep独立计数);`realDecodes:1`——一次真实55键/7配置隔离Decode Valid(成功组),其余36组替身注入——"故障注入≠真实样本不兼容"的区分成立。测试能证明:本地门/顺序/一次Set/失败分支/claim重放的**实现正确性**;不能证明:真实网络下s101行为、跨设备并发、D3窗口期间的实际停写——交付未夸大此边界。
**6. 构建与结果对应:确认。** 锁定DLL hash在artifact清单内;最终37组/1141断言/exitCode 0(D2-run-result `07:27:32Z`与D2-tests.log末行suite目录`072727Z`吻合);**during-build误跑旧34组四件证据透明留底**(during-build-*)且明示"不作最终验收依据"——过程诚实。
**7. D0三P3/条件落实+可进D3:确认。** P3-1窗口模板→CheckWindow强制字段✓;P3-2版本串→常量✓;P3-3键序留证→after矩阵含原始顺序(save-verification组覆盖)✓。D1–D2条件(专用构建/离线验证/独立复核停在正式导入前)全部满足。**通过≠101已导入**——正式claim/窗口仍不存在(absent已证)。
## P3清单(不阻塞)
- **P3-1**:`Import101.cs`仅1处testOnly——建议D3执行前由主会话以只读diff再确认"窗口检查在正式路径不可绕过"(当前实现正确,此为执行前最后核查项,零成本)。
- **P3-2**:D3窗口文件的operator字段建议预填主会话会话标识(当前为空模板),避免执行时临时决定格式。
## 结论
**限定接受D1/D2实施。** 主会话核hash(已代验268/268+absent 2/2)裁决后准备D3:向你确认101停写窗口(所有101客户端停用→执行→报告),然后一次真实导入(1登录+2Get+1Set上限)。D4执行复核后限定关闭本单账号测试导入。**本通过不等于101已导入或P2-α整体关闭。**

View File

@@ -0,0 +1,17 @@
# 独立AI:固定101导入器D1/D2实施复核
工作目录C:/projects/ft。先核本目录`implementation-review-hashes.json`全部SHA256/bytes;`expectedAbsent`中的正式import-101.claimed与D3-window.json仍须不存在。再读D0方案/评审、D1裁决、D2交付及三源码。
请逐项审查:
1. Program是否严格只有两行插入,原102/PF/备份分支保持;新两文件是否超出固定101辅助范围;Client/配置/Import102等hash保持。
2. 两清单hash常量/配置版本、同份bytes校验解析、55原值/未知键保留、真实候选时间/账号及现有账号/目标空门是否实现完整。
3. 窗口字段及testOnly拒绝、claim CreateNew/Flush(true)与Set顺序、竞争/部分写/过期是否真正零Set;claim之后不可自动重放。
4. Set最多一次、Unknown/异常/日志失败均走一次观察,不因本地证据失败标成功;读回55值/额外键/持久化/窗口条件是否齐全;有无隐含Delete/补偿/重试。
5. 测试是否使用同一核心及真正隔离的handler、异常路径是否会吞掉mock断言;37组1141断言及一次真实源/配置Decode能证明什么、不能证明什么。
6. 最终构建、DLL hash/字节与最终37组结果能否对应;旧34组及during-build误跑已透明保留,不能误认为最后版本通过依据。检查最终SHA及0错误0警告。
7. 三P3/原方案D1—D2条件是否落实;是否可限定接受实施、允许主会话准备D3实际停写窗口;不能把通过写成101已导入或整体迁移已完成。
本轮**只读文件/hash/离线对账**,优先核已有证据。不要构建,不跑正式或验证DLL,不操作Unity,不请求正式/PF接口,不改代码/共享状态或claim。这样避免重建交付DLL及新增不必要测试证据。若认为必须复跑,说明需要而不自行突破本轮边界。
只写`CodexOutput/upserver/P2AlphaImport101/D2-独立实施复核.md`,给hash计数、通过/有条件通过/不通过、P1/P2/P3和最小整改依据。主会话核hash逐条裁决及更新共享文档,随后才安排D3。

View File

@@ -0,0 +1,172 @@
{
"utc": "2026-09-28T07:34:52.6933656Z",
"count": 33,
"claimedCount": 11,
"items": [
{
"path": "cfgData/tbeventpackmanager.json",
"sha256": "FC9CEA913387D84824251358260BBDBAC98DEA37FBCEAD74ACFA0F833710D4BE",
"bytes": 663446
},
{
"path": "cfgData/tbfishcard.json",
"sha256": "0E534C8AE67B77FA3FA295D73EE3CCED4C6B788F6FEED6DAE19ABF93D11839A0",
"bytes": 456977
},
{
"path": "cfgData/tbfishdata.json",
"sha256": "846EEF5FF4139BBC5B9891686CCDD7AA8E836F1D1CBB6EAD546B14B60093C2E0",
"bytes": 1756698
},
{
"path": "cfgData/tbfishingevent.json",
"sha256": "C8A4A9794E9390C94B9C8F1927B3E718B3EB9F784F0889508E1E576DD4B77A2D",
"bytes": 1000464
},
{
"path": "cfgData/tbglobalconfig.json",
"sha256": "9AEE49D6041E2888798AEDB89ACD6503E6FB866EAAA1D148F2F5D0E13D2F5DA0",
"bytes": 6818
},
{
"path": "cfgData/tbmapdata.json",
"sha256": "1B81E9F1727BC1F39DF68AA98BECEACB94601A818BC82667C29E92304EEE8646",
"bytes": 112619
},
{
"path": "cfgData/tbroddata.json",
"sha256": "A1634FD01B03C23218D652B9944CAA7B08E38587CA89C41A5B7E2974A4DD74E6",
"bytes": 36327
},
{
"path": "CodexOutput/upserver/KVGameplayLoopTests/import-102.claimed",
"sha256": "0D38AD57B8BFF916837F8E276FB91330E9D20C13BFB8446417D2F0819BD56A20",
"bytes": 1281
},
{
"path": "CodexOutput/upserver/KVGameplayLoopTests/pf-source-backups/20260924T041802Z/101.json",
"sha256": "E6EB3E656B62A3535FDB8F0DC517321A4C3E32F3A8D95385A2B7D5C0AA8222EF",
"bytes": 22144
},
{
"path": "CodexOutput/upserver/KVGameplayLoopTests/Preflight/Import101.cs",
"sha256": "F3986E80D58A0A2F46F0E61AC4C97D07539CC6576D504B45D38AE4555B673B1C",
"bytes": 16225
},
{
"path": "CodexOutput/upserver/KVGameplayLoopTests/Preflight/Import101Tests.cs",
"sha256": "53A2D96B00B8A08023885F38516229DD0D1E7D18ACB09917C6EC4E7F799A7899",
"bytes": 16475
},
{
"path": "CodexOutput/upserver/KVGameplayLoopTests/Preflight/Program.cs",
"sha256": "57A44158B84B864B5E853EE74BFA4CBA07801E3231AA8F78398543230F984910",
"bytes": 2349
},
{
"path": "CodexOutput/upserver/KVGameplayLoopTests/run-control/101820_639258292892095408.claimed",
"sha256": "FC9B8E102F6D7299867A6AE0FB28C3E9DCB6DC603D32C8B15530FA0DAD64EA2B",
"bytes": 28
},
{
"path": "CodexOutput/upserver/KVGameplayLoopTests/run-control/103828_639261606481142886.claimed",
"sha256": "56CBBAC6B984414BA9AF8FF621697D71A6AE824E68BC9ADAE0BC7A0386E3C28B",
"bytes": 28
},
{
"path": "CodexOutput/upserver/KVGameplayLoopTests/run-control/120896_639258276377220393.claimed",
"sha256": "431D38D388C5A29E291A87C00D99087CBFDBCDA15F2BCF792D524B1DE0E09D1F",
"bytes": 28
},
{
"path": "CodexOutput/upserver/KVGameplayLoopTests/run-control/129848_639258318484354090.claimed",
"sha256": "B0034AD4EB83467225E3EA34563C7CC88F8F91EE4A5542A863B018F5B9A467C4",
"bytes": 28
},
{
"path": "CodexOutput/upserver/KVGameplayLoopTests/run-control/29520_639258498367875839.claimed",
"sha256": "12A20D9184C3BC90D40924290AE08EA0C4D9C69263B28E71B83C3532A31D4289",
"bytes": 28
},
{
"path": "CodexOutput/upserver/KVGameplayLoopTests/run-control/41828_639258336171434448.claimed",
"sha256": "0BAD4A962A80EEB5903F2E2C5D7E2F2A583E83345AE72E0971F373D4C338BD0E",
"bytes": 28
},
{
"path": "CodexOutput/upserver/KVGameplayLoopTests/run-control/42620_639258392922105429.claimed",
"sha256": "0313C5AECA556DD472C468EC16066F3826902F7C8F0869A3CB18E72B11DE05F4",
"bytes": 28
},
{
"path": "CodexOutput/upserver/KVGameplayLoopTests/run-control/44848_639261601944579366.claimed",
"sha256": "B638A9CF4563F3D3825462F7559ED9C8DF799C8C5ACB51C2444E23DAB6A4752F",
"bytes": 28
},
{
"path": "CodexOutput/upserver/KVGameplayLoopTests/run-control/54200_639258133649707870.claimed",
"sha256": "0FE7D1230895114DB307A6C7F2E0E100CE6C39A69757221CD082CB68EFB45B8D",
"bytes": 28
},
{
"path": "CodexOutput/upserver/KVGameplayLoopTests/run-control/62216_639258472117601499.claimed",
"sha256": "5E84064FA3CFBD12A0239A31A0AE23AD1F9A1C702BF2A156E498EE808E63AA6B",
"bytes": 28
},
{
"path": "CodexOutput/upserver/KVGameplayLoopTests/run-control/69744_639261599226683685.claimed",
"sha256": "05385F43DDC763B3745D3F0410E4EB4B7A4623BDC84C37BEF0C36EE8BA5C4FAC",
"bytes": 28
},
{
"path": "CodexOutput/upserver/P2AlphaImport101/D0-config-hashes.json",
"sha256": "3D39D21E49D7A0F25A71624FC3B222AAED1F8505E9D2AD2B177EEDE658241CE6",
"bytes": 1252
},
{
"path": "CodexOutput/upserver/P2AlphaImport101/D0-source-values.json",
"sha256": "9A36C8A0EC16DE8ECD0DDC797CC763AB990411F9AAE4061CC61A9DA0A971DB68",
"bytes": 9329
},
{
"path": "CodexOutput/upserver/P2AlphaImport101/D1-bin/Newtonsoft.Json.dll",
"sha256": "7292D3EB508652D14726749DD27094F2D481AECCF2DB6427B62F68A71460897E",
"bytes": 696320
},
{
"path": "CodexOutput/upserver/P2AlphaImport101/D1-bin/Newtonsoft.Json.pdb",
"sha256": "EEBB075CE7B6530268DA0FB24854B085B10BE7FD6492FE74F3E5608061291741",
"bytes": 2186752
},
{
"path": "CodexOutput/upserver/P2AlphaImport101/D1-bin/Newtonsoft.Json.xml",
"sha256": "E0FED73A98ED4DB5A2BDE3DC53836CC1FAC24E34EAEAB2007E1CFAB81ADB71B0",
"bytes": 702415
},
{
"path": "CodexOutput/upserver/P2AlphaImport101/D1-bin/Preflight.deps.json",
"sha256": "50DBE40646847BBD9D5DDB1A1B8834901232881C5EFAE38E44F2C163D8B9317B",
"bytes": 831
},
{
"path": "CodexOutput/upserver/P2AlphaImport101/D1-bin/Preflight.dll",
"sha256": "AAA1276630E8633C131072DDF638639B92F60134A0425E17616A4A5A2A436607",
"bytes": 355328
},
{
"path": "CodexOutput/upserver/P2AlphaImport101/D1-bin/Preflight.exe",
"sha256": "B950DA7A97A2710B6B5D6919316DE96B22E46B0E8A80453029D4A6C7A31C4CF2",
"bytes": 156160
},
{
"path": "CodexOutput/upserver/P2AlphaImport101/D1-bin/Preflight.pdb",
"sha256": "AEA0D31C9F058E000AB1F86822DD04F8246BD323316FABA11B047795EA07F53E",
"bytes": 100904
},
{
"path": "CodexOutput/upserver/P2AlphaImport101/D1-bin/Preflight.runtimeconfig.json",
"sha256": "A45057885F807F4A337FDEA3CCDFA64E1675D22A6D6A6FC7C7394FD44BA9EEBE",
"bytes": 268
}
]
}

View File

@@ -0,0 +1,39 @@
# D3:实施复核裁决与运行准备
2026-09-28,主会话。**接受D1/D2限定实施,进入D3准备;尚未执行导入。** 更新共享状态前268/268项SHA256/长度一致,两项expectedAbsent均不存在。证据D3-review-verification.json。最终DLL仍为AAA1276630E8633C131072DDF638639B92F60134A0425E17616A4A5A2A436607、355328字节。
## 七项逐条裁决
| 项 | 主会话裁决 |
|---|---|
| 1 范围 | 接受,两行分支与两新增辅助文件;无Client/配置/Import102改动 |
| 2 固定门 | 接受冻结hash/版本、55原值、同份bytes校验解析及候选门;源码与交付一致 |
| 3 窗口/claim | 接受固定正式入口和CreateNew/Flush;缺失/过期窗口不登录,claim后窗口复查不通过不Set |
| 4 写/观察 | 接受一次Set、失败一次观察及证据失败不静默成功;不重发/删除/补偿 |
| 5 测试 | 接受最终37组1141断言和一次真实源/配置隔离Decode;mock时间/账号不冒充正式服验证 |
| 6 追溯 | 接受最终DLL/hash/结果对应及旧34组误跑透明留底;不再构建或重跑以免改变交付版本 |
| 7 D3准备 | 接受实施,可准备当次停写窗口;该结论不是实际101导入成功 |
## 两P3裁决与文字澄清
- P3-1采纳并完成:只读核正式Program单参数分支→Import101.Run(),Run固定读取D3-window.json、拒绝testOnly,再进入RunCore无条件CheckWindow;之后candidate/claim前后及结束再核窗口。无命令行覆盖账号/窗口/handler参数,不靠计数testOnly出现次数代替控制流检查。此次仅静态核对,没有运行正式命令。
- P3-2采纳:操作者固定为`Codex主会话/01a0cd52-a877-7200-b065-b1a033af1ab6`,写入未激活模板;实际windowId和起止窗口UTC在用户确认之后生成。
- 报告“测试路径不得携带窗口”按实际边界澄清:正式Run拒绝testOnly;隔离RunCore测试正是使用testOnly=true的模拟窗口,不能将这描述成测试没有窗口。
- 报告“原始顺序”按D1裁决理解为adapterKeyOrder客户端字典枚举,不等于原始HTTP字节或并发证据;37组中有未触达候选的本地门测试,不能将“其余36组替身”理解成36次都调用候选回调。
以上不需要修改代码或再次复审实施。
## 已完成的执行准备
- Unity CLI Loop新读结果:工程C:/projects/ft/Client,playing/enabled/ready=false、run=null、error=null、无permit;切换Play/编译/刷新均false。证据D3-preparation-unity-state.json及D3-preparation-idle.json。
- 锁定上述交付DLL;固定源/配置/旧claimed等运行输入清单另存D3-preparation-input-hashes.json。未生成正式窗口或import-101.claimed。
- 实际命令已明确:在C:/projects/ft运行`dotnet CodexOutput/upserver/P2AlphaImport101/D1-bin/Preflight.dll --import-approved-101`一次;1登录+2Get+1Set上限,只101;非空/不兼容立即停止。
- 源为用户已确认的历史55键,不再重新请求来源授权。102不访问,Unity不Play;完成后保留claim并交D4证据,异常不重试、不清空。
## 唯一待确认条件:当次停写窗口
需用户确认:从答复起至本次执行结果报告期间,101在所有游戏客户端/设备均停止使用。此要求来自已审主方案§6 D3及实施复核结论;本地空闲不能证明其他设备停写,因此先前的来源授权或“继续”不能代替这一运行事实。
收到确认后设本地UTC起点,expiresUtc为起点后15分钟,操作者固定如上;verificationMethods明确分别记录“用户声明所有101客户端停用”和“CLI本地空闲观测”,不声称服务端连接列表已核。实际endUtc按完成时记录。若15分钟内不能开始则不执行,窗口到期不能自行延长。
真正执行前再次核交付DLL及源/配置hash、当前Unity空闲及无permit、旧claims保持,再创建正式D3-window.json并仅运行一次。只写D3-window.template.json不能启用导入;当前仍无正式账号请求。

View File

@@ -0,0 +1,39 @@
# P2AlphaImport101 D4-固定101历史档真实导入执行独立复核
日期:2026-09-28。审查者:ZCode会话。独立性声明:未参与D3真实导入执行;此前参与为D0方案评审与D2实施复核。本轮只读+hash重算+**独立离线对账**(未构建/跑DLL/登录/请求/操作Unity/修改任何原证据)。
## 受审hash核对
`execution-review-hashes.json`:**313/313重算全部一致**。D3窗口与`import-101.claimed`为**本阶段合法创建**(非漂移),与原D2清单的expectedAbsent阶段差异已由清单版本说明。
## 总结论
**通过。本单账号测试导入(P2-α-D)可限定关闭**(主会话裁决后)。无P1/P2;P3两条。
## 七项逐条
**1. 前置链完整可追溯:确认。** 源策略/101映射(用户确认)→D0方案评审→D1裁决→D2实施复核(限定接受)→当次用户停写确认→D3窗口记录(windowId `101-20260928T073606Z`、endUtc 07:37:46Z、completed=true、claimRetained=true);11旧gameplay claim+旧102 claim在313项清单中保持。
**2. 唯一执行且窗口内:确认。** 唯一D3-invocation、锁定DLL与唯一参数`--import-approved-101`、exit0、run目录八件证据(start/account/before/candidate-schema/set-result/after/verification+目录本身);执行时刻07:36:31–07:36:33(account/before的at)落于窗口内;窗口结束记录不延长、claim阻断重放。
**3. 成功链支持:确认。** `account.json`:Success/200/**NewlyCreated=false**/PlayerId101/InternalId2/ServerTimeUtc 07:36:31(真实服务时间→候选);`before.json`:**data={}(写前空)**;`candidate-schema.json`:实时候选Valid/0诊断;`set-result.json`:**Success=true/200/MayHaveCommitted=false**;证据顺序before→claim→Set→after与D0§4一致。
**4. 独立离线对账(本审查亲自执行):完全一致。**
- 源55键 vs 实际after:**键集一致=True、UTF8 hash一致 55/55、字节长度一致 55/55、额外键=无**;
- Ordinal键名/原样字符串(含空字符串、两种历史null原值、未知键)逐项通过;
- 作者独立对账(D4-independent-local-reconciliation)与脚本修正说明(D4-reconciliation-script-correction)核对为**离线更正**、无新请求/改档。
**5. 请求口径准确:确认。** 应用层恰1登录+2Get+1Set(before+after两Get)、Delete/PF/102=0;未为证明102未访问而再登录(正确);登录元数据副作用如实保留(account.json记录InternalId/CreateTime/ServerTime)。
**6. 运行边界:守住。** 前后CLI空闲核验、无permit、未Play/消费/打包;11旧claim+旧102 claim保持;唯一新`import-101.claimed`保留阻断重放;窗口本地时间/跨设备不可证明性限制在窗口记录与交付中明示。
**7. 可限定关闭:可以。** 关闭范围=101单账号测试导入(空目标→55键历史档原值落库);**101真实游戏、26模块外键消费者、其余用户迁移、整体P2-α/G4均未完成**——交付未夸大;不批准自动Play或新玩法。
## P3清单(不阻塞)
- **P3-1**:`verification.json`的逐值矩阵建议后续引用时附"与D4-independent-local-reconciliation双跑一致"的交叉引用行(当前两份对账独立存在,显式互引更利于未来审计)。
- **P3-2**:101后续首次真实游戏验证(未来单元)应引用本次`account.json`的CreateTimeUtc(2026-09-16)作为账号既有性佐证,防误判为导入时新建。
## 结论
**通过D4执行交付;建议主会话核hash(已代验313/313+独立对账55/55)裁决后限定关闭P2-α-D。** 至此P2-α取证/兼容/核验/导入四单元(A/B/C/D)全部完成——**101已携带完整历史档,102持续进度不变**。下一步候选:101首次真实游戏验证(需新方案+你的运行授权)、4B3B/C全量迁移、或P2-α剩余政策项(全体用户迁移策略——真正的产品决策)。

View File

@@ -0,0 +1,17 @@
# 独立AI:101固定历史档真实导入执行复核
在C:/projects/ft先核本目录`execution-review-hashes.json`全部SHA256及长度。读D0方案、D1/D3裁决、D2交付、D4真实交付。当前不是原D2的expectedAbsent阶段:D3窗口和唯一import-101.claimed已在用户明确停写确认后合法创建,不能把它们误报成审查前漂移;原实施清单保持不重写。
只读核hash、源码/证据及原JSON离线对账,不构建、不跑任何DLL、不登录/请求服务器、不操作Unity、不修改原备份/源码/窗口/claim或共享文档。只写本目录`D4-独立执行复核.md`。
逐项回答:
1. 源策略/101映射、D2实施接受、当次用户停写声明与窗口、前置输入/状态/旧claims是否完整可追溯。
2. 锁定DLL与唯一参数、唯一D3-invocation、exit0与run目录是否一致,是否在窗口内;后置状态及结束记录是否符合方案。
3. 实际账号NewlyCreated=false、before空、服务时间候选Valid/0、持久claim→Set→after顺序及结果能否支持成功。
4. 请独立离线核源55键与实际after:Ordinal键集合/字符串、原样UTF8 hash及长度(含空字符串),恰55值一致、无额外键;核作者独立对账及脚本修正说明,不将它当新请求/改档。
5. 应用层1登录+2Get+1Set、Delete/PF/102为0的证据及限度是否准确;不要求为证明102未访问而再登录它。登录元数据副作用是否如实保留。
6. 前后CLI空闲、无permit、11旧gameplay claim及旧102 claim保持、唯一新import-101.claimed保留是否成立;未Play/消费/打包;窗口与本地时间/跨设备不可证明性限制是否充分。
7. 可否限定关闭此单账号测试导入;101真实游戏、26模块外键和整体迁移未完成是否明确,不批准自动Play或新玩法。
报告给出通过/有条件通过/不通过、hash计数、七项结果和P1/P2/P3最小建议。主会话负责收到报告后的核hash逐条裁决和关闭,审核侧不代改入口/TODO。

View File

@@ -0,0 +1,55 @@
# D4:101固定历史档真实导入交付与验收
2026-09-28,主会话。**本次101导入执行成功,独立本地对账通过,停写窗口已结束;待独立执行复核及主会话关闭裁决。** 不宣称整体P2-α或101完整游戏迁移完成。
## 授权、版本及执行
- 用户已明确采用历史PF101固定备份与101映射;D0/D2两轮独立审查分别60/60、268/268 hash一致后逐条裁决。
- 用户当次明确“已全部停用101,可以执行这一次导入”。记录起点UTC07:35:57.4701956,计划到期07:50:57.4701956;实际执行及对账完成时间见D3-window-completed.json,不延长窗口。operator为主会话实际标识01a0cd52-a877-7200-b065-b1a033af1ab6。
- 执行前33项输入与旧claims指纹一致;CLI前后均空闲、无run/permit,11个既有gameplay claimed路径/hash/长度不变。
- 固定DLL为实施交付的AAA1276630E8633C131072DDF638639B92F60134A0425E17616A4A5A2A436607、355328字节;没有重建、改源码或重跑离线测试。
- 唯一命令:`dotnet CodexOutput/upserver/P2AlphaImport101/D1-bin/Preflight.dll --import-approved-101`,工作目录C:/projects/ft;UTC07:36:29.7937212开始、07:36:33.1464838结束,exit0。原命令及stdout/stderr完整保留。
## 数据结果
真实证据目录:`runs/20260928T073630Z-345b3ee1f47a419abf876bf5b5506d89/`。
| 项 | 结果 |
|---|---|
| 账号 | 登录成功,NewlyCreated=false,仅101;未读取或保存Cookie |
| before | 新鲜全量Get为0键,完整before已持久化 |
| 候选 | 以本次登录的ServerTimeUtc、真实账号描述和冻结7配置完整Decode,Valid/0诊断;没有Apply/Open游戏 |
| 写入 | 一次持久化claim后Set,明确Success;未知键与历史null字符串原样保留 |
| after | 恰55键;与批准源Ordinal原字符串、UTF8长度/hash全部一致,无多键/少键/值变化 |
| 本地证据 | set-result、after和verification均已保存,localErrors空、windowActive=true |
| 对账 | 主会话用独立临时离线命令重算55/55一致,见D4-independent-local-reconciliation.json |
源文件仍为E6EB3E656B62A3535FDB8F0DC517321A4C3E32F3A8D95385A2B7D5C0AA8222EF。after.json完整文件SHA256为**A6CB8A3A0FA3080150FA91D7E2EEBA1D25D7BC59001BFA1641D742B713CE3A2C**。不以源/after外层封装文件hash相同作为值相等要求,二者时间/元数据本来不同。
## 请求与运行边界
应用层计数:**login=1、Get=2、Set=1、Delete=0、PF=0、102=0**。依据冻结源码单次执行、工具阶段计数和落盘结果,不冒充抓包或服务端所有请求统计。登录可能更新会话/元数据,不能称系统只写了55个KV以外再无副作用。
本轮没有Unity Play、业务消费/奖励、热换号、打包、重新读取PF或覆盖102。102“不访问”有固定命令/源码及执行路径支持;本轮没有额外登录102来证明其远端值再次不变。新import-101.claimed永久保留,旧102 claim及11 gameplay claims不动;原窗口文件作为历史证据保留,D3-window-completed记录结束,一次性claim阻止命令重放。
用户声明全部客户端停用,加本地CLI空闲是本次并发边界;未查询服务端连接清单、未引入CAS,不能证明不存在未声明的外部写者。备份at及窗口时间为本地UTC,本地钟与服务器钟未校验偏差。工具候选明确使用ServerTimeUtc,这不等于已校准两个时钟。
## 原方案最终验收
| 验收项 | 作者结论 | 依据 |
|---|---|---|
| 授权/基线 | 通过 | 来源决定、两轮裁决、D3确认/窗口、33项写前核验 |
| 修改范围 | 通过 | 锁定交付源码/DLL,运行期间未改;游戏和102入口保持 |
| 写前门 | 通过 | 源/配置hash、NewlyCreated=false、before空、候选Valid、持久claim |
| 至多一次 | 通过 | 唯一invocation,工具计数Set1,无循环/补偿;新claim保留 |
| 真实结果 | 通过 | Set明确Success,after55原值及全部必需文件完整;独立本地对账 |
| 执行边界 | 通过(已声明限制内) | 用户停写、前后CLI状态、旧claims不变,无Play/PF/102/Delete |
| 口径与恢复 | 通过 | 不确定/失败路径未实际触发,不伪造故障实测;没有回滚/重发 |
## 过程说明
首次独立本地对账命令遇到PowerShell空字节数组经if管道展开为null,ComputeHash重载歧义,尚未生成最终对账JSON。改为分支内直接赋值byte[]后完成55项核验,空字符串也正确保留。记录D4-reconciliation-script-correction.json;未改任何源码、原运行文件或存档,没有新服务器请求。工具自身原verification在此之前已成功。
## 下一步
交[D4独立执行复核](D4-独立执行复核提示词.md),仅hash/源码及现有JSON离线对账,不再运行导入。主会话收到报告后核hash逐条裁决,才限定关闭此测试导入。101真实游戏登录/玩法、26模块外键、完整身份/并发/故障及4B3B/C、4D/G4继续开放;导入成功不是自动进入Play的批准。

View File

@@ -0,0 +1,28 @@
# 101历史档导入:执行复核裁决与限定关闭
2026-09-28,主会话。受审报告:[D4独立执行复核](D4-独立执行复核.md)。结论:接受,P2-α-D限定关闭;无需重复开发或复审。
## 基线与逐条裁决
主会话在修改共享状态文档前,于2026-09-28T07:46:52.0803689Z重新核对 `execution-review-hashes.json`:313/313文件SHA256及长度一致,缺失/漂移0。清单自身SHA256为 `5416F2E4E6903E4EA071CC5D92FC6C25469D25FC5E626A4FDF3FD038D66AEA91`。本次关闭后的共享状态文档变化属于合法后续更新,不回写受审清单。
| 报告项 | 主会话裁决 |
|---|---|
| 1 前置链 | 接受;源策略、映射、方案和实施裁决、当次停写确认均齐全。 |
| 2 唯一执行与窗口 | 接受;唯一锁定DLL调用成功,处于当次窗口内;保留claim阻止重放。报告“八件证据”指7文件加目录,不是8个文件。 |
| 3 成功链 | 接受;既有101账号、写前0键、候选Valid/0、Set明确Success/200、写后55键。 |
| 4 原值对账 | 接受;源与after键集及Ordinal原值55/55一致,含空字符串、历史null和未知键;独立审查的离线复算一致。 |
| 5 请求口径 | 接受;应用路径1登录、2Get、1Set,Delete/PF/102为0。不是服务端全流量计数。 |
| 6 执行边界 | 接受;前后Unity空闲、无permit、无Play;旧claim保持,新101导入claim保留;窗口已结束。 |
| 7 限定关闭 | 接受;仅关闭101空目标的55键历史测试档导入,不关闭整体P2-α、全量迁移或G4。 |
## 两条P3落实
- P3-1:接受。实际run的 [verification.json](runs/20260928T073630Z-345b3ee1f47a419abf876bf5b5506d89/verification.json) 与 [D4-independent-local-reconciliation.json](D4-independent-local-reconciliation.json) 为独立两次对账且结果一致;审查者另行离线复算亦一致。本裁决集中交叉引用,不改原始执行证据。
- P3-2:接受。后续101首次游戏方案引用 [account.json](runs/20260928T073630Z-345b3ee1f47a419abf876bf5b5506d89/account.json):NewlyCreated=false、InternalId=2、CreateTimeUtc=`2026-09-16T12:58:05.860603Z`。这是账号既有性的佐证,不冒充跨系统身份绑定证明。
报告“102持续进度不变”限定为本次未操作102;最近102实际读取仍是C阶段070339Z,不宣称D结束时再次观测102服务器。历史导入许可已经消费、窗口已经结束,不能用于重导或下一次游戏运行。
## 后续
A/B/C/D均限定关闭。按用户要求,下一步合并为一个完整业务包:101首次游戏登录→一次普通钓鱼奖励保存→正常退出→新进程恢复。方案一次完整评审,裁决后在批准运行范围内连续执行,内部检查点只更新日志,最后统一交付复核。本轮仅文档和本地hash核对,无代码修改、正式请求或Unity运行。

View File

@@ -0,0 +1,312 @@
{
"phase": "P2-alpha-D-design-v1",
"createdUtc": "2026-09-28T07:17:26.8604060Z",
"count": 60,
"expectedAbsent": [
"CodexOutput/upserver/KVGameplayLoopTests/Preflight/Import101.cs",
"CodexOutput/upserver/KVGameplayLoopTests/Preflight/Import101Tests.cs",
"CodexOutput/upserver/P2AlphaImport101/import-101.claimed"
],
"items": [
{
"path": "cfgData/tbeventpackmanager.json",
"sha256": "FC9CEA913387D84824251358260BBDBAC98DEA37FBCEAD74ACFA0F833710D4BE",
"bytes": 663446
},
{
"path": "cfgData/tbfishcard.json",
"sha256": "0E534C8AE67B77FA3FA295D73EE3CCED4C6B788F6FEED6DAE19ABF93D11839A0",
"bytes": 456977
},
{
"path": "cfgData/tbfishdata.json",
"sha256": "846EEF5FF4139BBC5B9891686CCDD7AA8E836F1D1CBB6EAD546B14B60093C2E0",
"bytes": 1756698
},
{
"path": "cfgData/tbfishingevent.json",
"sha256": "C8A4A9794E9390C94B9C8F1927B3E718B3EB9F784F0889508E1E576DD4B77A2D",
"bytes": 1000464
},
{
"path": "cfgData/tbglobalconfig.json",
"sha256": "9AEE49D6041E2888798AEDB89ACD6503E6FB866EAAA1D148F2F5D0E13D2F5DA0",
"bytes": 6818
},
{
"path": "cfgData/tbmapdata.json",
"sha256": "1B81E9F1727BC1F39DF68AA98BECEACB94601A818BC82667C29E92304EEE8646",
"bytes": 112619
},
{
"path": "cfgData/tbroddata.json",
"sha256": "A1634FD01B03C23218D652B9944CAA7B08E38587CA89C41A5B7E2974A4DD74E6",
"bytes": 36327
},
{
"path": "Client/Assets/Scripts/Services/Account/S101AccountSession.cs",
"sha256": "EDEE0803B13B2A33B0F6E9DDE1365031653AC37CAB35C90B8046F207B7AE0476",
"bytes": 10626
},
{
"path": "Client/Assets/Scripts/Services/PlayerData/PlayerKVCacheStore.cs",
"sha256": "A08DAB00F51A28CB5AA9A26D66CB3EB9349216535E92F4DC4E77EE8DDEBA28B1",
"bytes": 4808
},
{
"path": "Client/Assets/Scripts/Services/PlayerData/PlayerKVClient.cs",
"sha256": "9D2D9FC38A0EE48F2CB0B926BB733621045FE179C5B20E7717B0F975D415D2FE",
"bytes": 6765
},
{
"path": "Client/Assets/Scripts/Services/PlayerData/PlayerKVControlledLoadCapability.cs",
"sha256": "D3C9179594392FC0E624266CFBB5020EEC76D4E00B110B36D99457373F914C5C",
"bytes": 6293
},
{
"path": "Client/Assets/Scripts/Services/PlayerData/PlayerKVDecodedSave.cs",
"sha256": "35859243346DFB5A7E1ABC504CBCDDE3818F0793233FCEC8435A74C84D721C03",
"bytes": 57059
},
{
"path": "Client/Assets/Scripts/Services/PlayerData/PlayerKVEditorValidationHost.cs",
"sha256": "EAFDF80AC93B4726FDDCAEB359C6A1E0B0F26A3154FAEC8F8A48EA1840C94FE6",
"bytes": 140805
},
{
"path": "Client/Assets/Scripts/Services/PlayerData/PlayerKVGameLoadCoordinator.cs",
"sha256": "C22524279905407EF64957BFC6B853A4B24F9B1B15A2B55A1038558DB5649AB9",
"bytes": 13913
},
{
"path": "Client/Assets/Scripts/Services/PlayerData/PlayerKVGameLoadGuard.cs",
"sha256": "18ABD846BE9FA9F1A0828ADD8B31CFED1EBD1A0F3114ACBA17B65ABC2AC87B10",
"bytes": 1834
},
{
"path": "Client/Assets/Scripts/Services/PlayerData/PlayerKVGameLoadTransaction.cs",
"sha256": "C7EB34DB6FB42A44E9D930592D2928CC96CEC4D1D532A66A3207E82F263C02DB",
"bytes": 4635
},
{
"path": "Client/Assets/Scripts/Services/PlayerData/PlayerKVGameplayBindings.cs",
"sha256": "710A0050277BE07AC781F976945D8D2DDF7704EA616D0BF83797ABA2FA6530EA",
"bytes": 6874
},
{
"path": "Client/Assets/Scripts/Services/PlayerData/PlayerKVGameSessionBridge.cs",
"sha256": "DD888351BFA4BBA03E953F39E11362AF8EA9F76FB56AC1CB77D9053C81227363",
"bytes": 13612
},
{
"path": "Client/Assets/Scripts/Services/PlayerData/PlayerKVInitializationIntents.cs",
"sha256": "4C7D49032229B2CB85DCA0ED5D711181239DD22DCACB4B0624D2A96AF99A691D",
"bytes": 1574
},
{
"path": "Client/Assets/Scripts/Services/PlayerData/PlayerKVKeyReadResult.cs",
"sha256": "C9C76A16F61CBC3CC748A0F44B581508B4178E7F322C43C8F05E2FC8707345DC",
"bytes": 1471
},
{
"path": "Client/Assets/Scripts/Services/PlayerData/PlayerKVLocalReadResult.cs",
"sha256": "9A00AA0ECEA286FC4474729A1BFABDD3D5A1453182B5FCB91D11CD81724481AF",
"bytes": 1312
},
{
"path": "Client/Assets/Scripts/Services/PlayerData/PlayerKVLoginContext.cs",
"sha256": "3E7435F4BE79A9D92FB044C4D1ECB3E53A08EAA65A7634F1FF63E396E59C742C",
"bytes": 24188
},
{
"path": "Client/Assets/Scripts/Services/PlayerData/PlayerKVLoginPrepareResult.cs",
"sha256": "108CA361C7153D19A08CD348B8325538019A86C426BDD80B907528399F22B290",
"bytes": 2993
},
{
"path": "Client/Assets/Scripts/Services/PlayerData/PlayerKVModels.cs",
"sha256": "836B1A20F0510D48E74AD8D25AEA4E0DAAB3B6E6887374FDEBFDC0ADA688FE4D",
"bytes": 1192
},
{
"path": "Client/Assets/Scripts/Services/PlayerData/PlayerKVSaveRouteEditorValidationHost.cs",
"sha256": "9FE2066CDB2BA74F8C515B82844E96C3A336220CEC7C3622E6B134DAB81BB8BF",
"bytes": 7755
},
{
"path": "Client/Assets/Scripts/Services/PlayerData/PlayerKVSaveSchema.cs",
"sha256": "FBDB253D3415E35D7D30F867DA057A84E91EAA7DE2FE74094707C517CB8B51A1",
"bytes": 76183
},
{
"path": "Client/Assets/Scripts/Services/PlayerData/PlayerKVSessionOwner.cs",
"sha256": "BFB5AC0DF38BCACC341646292ACAA71606F2DC5FECF91535785D222EAFACF7B5",
"bytes": 16751
},
{
"path": "Client/Assets/Scripts/Services/PlayerData/PlayerKVShutdownRegistry.cs",
"sha256": "4CA9538F432F4FAA7029E2A5A22B0F4D45C3B39E1E676B60058B87928B559483",
"bytes": 3989
},
{
"path": "Client/Assets/Scripts/Services/PlayerData/PlayerKVSyncCoordinator.cs",
"sha256": "026210CA2722FEC2FB8DCCE9D24D74A62B250E6A50EC6EAD811C59920875443C",
"bytes": 16384
},
{
"path": "Client/Assets/Scripts/Services/PlayerData/PlayerKVSyncModels.cs",
"sha256": "49143F3A6DAD9A570C522288B471D5C4CE5812F73E0EB7B8E6081453C97990D4",
"bytes": 14440
},
{
"path": "Client/Assets/Scripts/Services/PlayerData/PlayerKVSyncState.cs",
"sha256": "B0BF9EBAA24C8ACB4761B7C09331B81A414E62CDBBF143B106B7F466E334A198",
"bytes": 10925
},
{
"path": "Client/Assets/Scripts/Tables/ConditionType.cs",
"sha256": "E27E770B82C5F3922E7D23A9340E2DC32AE114D65259AE959B34E806A886059C",
"bytes": 6025
},
{
"path": "Client/Library/PackageCache/com.unity.nuget.newtonsoft-json@3.2.1/Runtime/Newtonsoft.Json.dll",
"sha256": "7292D3EB508652D14726749DD27094F2D481AECCF2DB6427B62F68A71460897E",
"bytes": 696320
},
{
"path": "CodexOutput/upserver/阶段4B3当前TodoItem-2026-09-24.json",
"sha256": "B9038A5448D84082C24DF135B85CF4849D7C22407DDC356AB4C86C49A61ACCC4",
"bytes": 20904
},
{
"path": "CodexOutput/upserver/接手入口.md",
"sha256": "7BAF8C486C9957F73540D0487772A18B6A67AF4DAFA3C3FFB23F14DF5297650D",
"bytes": 65525
},
{
"path": "CodexOutput/upserver/开发日志.md",
"sha256": "72E8180D3D12B74BE9D7F4F1EE78C602EAEB89636B328BB728F7B59FBC33DA6C",
"bytes": 193642
},
{
"path": "CodexOutput/upserver/开发状态.md",
"sha256": "FCA59A2A39DDC8ED54E84F92FA38C860CB9BB2DA56C69A474656849FFB8CBC15",
"bytes": 69233
},
{
"path": "CodexOutput/upserver/KVGameplayLoopTests/import-102.claimed",
"sha256": "0D38AD57B8BFF916837F8E276FB91330E9D20C13BFB8446417D2F0819BD56A20",
"bytes": 1281
},
{
"path": "CodexOutput/upserver/KVGameplayLoopTests/pf-source-backups/20260924T041802Z/101.json",
"sha256": "E6EB3E656B62A3535FDB8F0DC517321A4C3E32F3A8D95385A2B7D5C0AA8222EF",
"bytes": 22144
},
{
"path": "CodexOutput/upserver/KVGameplayLoopTests/Preflight/AdvertCompatibilityTests.cs",
"sha256": "1C770DF03A3D91327131A45EBD16E480D554CDC7371B323906B61FE9B109F117",
"bytes": 2543
},
{
"path": "CodexOutput/upserver/KVGameplayLoopTests/Preflight/Import102.cs",
"sha256": "CED9C553ECD79275B3771A90CD52C94EB5A3B5D593643F59660A1D28A65987E1",
"bytes": 7819
},
{
"path": "CodexOutput/upserver/KVGameplayLoopTests/Preflight/obj/project.assets.json",
"sha256": "765A197F531F062AE656F81FA7BD66740C26FD1686122F462D6A659DA68E9A4D",
"bytes": 1988
},
{
"path": "CodexOutput/upserver/KVGameplayLoopTests/Preflight/PFSourceBackup.cs",
"sha256": "93D5F00F4F8E466801ED7C7BBB7EE0CDEFEB3CE52DAA1EFB58BE9ADA6FF385C6",
"bytes": 3143
},
{
"path": "CodexOutput/upserver/KVGameplayLoopTests/Preflight/Preflight.csproj",
"sha256": "CD3638FE8DAE92ED8CF13159CC1D6D4A157D9CB4FF2EC4D86E8E5BE73E836540",
"bytes": 812
},
{
"path": "CodexOutput/upserver/KVGameplayLoopTests/Preflight/Program.cs",
"sha256": "B3D88FE4B225CC5F1D1F0C37B2B8289A323A5F4064E1B0379B36B4267C313F42",
"bytes": 2164
},
{
"path": "CodexOutput/upserver/MinimalLoginTests/NuGet.Config",
"sha256": "9508CAE5F76364F56E80EB97CB16493977243CF38E5CCA6284E3D74F83B20A2C",
"bytes": 74
},
{
"path": "CodexOutput/upserver/P2-alpha-D单账号101导入范围与产品决策-2026-09-28.md",
"sha256": "DAC4A660FA6E05B3D4BA24FDACC81C3F0ACC58D2464B67875A9F7651FBC8E373",
"bytes": 5289
},
{
"path": "CodexOutput/upserver/P2-alpha剩余迁移条件与下一步清单-2026-09-28.md",
"sha256": "0B8D9E460C4F21B61F8E1DCEA878142EA93BC3E1D1B286641F9EE994C7967FE2",
"bytes": 4518
},
{
"path": "CodexOutput/upserver/P2AlphaImport101/D0-独立方案评审提示词.md",
"sha256": "42827638872A2CBE3F3C4512AE5E835FCFFFDF54696BF802D191DF33D6520496",
"bytes": 2230
},
{
"path": "CodexOutput/upserver/P2AlphaImport101/D0-固定101历史档导入最小方案-待评审.md",
"sha256": "CEFDF4E9FD2E16B99EB1A14AC731212B55A15B557A5692155F58D49F5A4BFD86",
"bytes": 13502
},
{
"path": "CodexOutput/upserver/P2AlphaImport101/D0-config-hashes.json",
"sha256": "3D39D21E49D7A0F25A71624FC3B222AAED1F8505E9D2AD2B177EEDE658241CE6",
"bytes": 1252
},
{
"path": "CodexOutput/upserver/P2AlphaImport101/D0-source-values.json",
"sha256": "9A36C8A0EC16DE8ECD0DDC797CC763AB990411F9AAE4061CC61A9DA0A971DB68",
"bytes": 9329
},
{
"path": "CodexOutput/upserver/P2AlphaNullCompatibility/B5-实施复核裁决与关闭.md",
"sha256": "C4AA2C3B239B0CA753CB1C422ED487973343544C9F07FDD0E9BCB9BAAF80DC6D",
"bytes": 3745
},
{
"path": "CodexOutput/upserver/P2AlphaTargetCheck/C3-目标状态与迁移前置结论.md",
"sha256": "7CEB71EF071EB56F76317BCB41A887296A2228F96435C32A0C4D05C1F6EFB989",
"bytes": 3507
},
{
"path": "CodexOutput/upserver/P2AlphaTargetCheck/C4-独立执行复核.md",
"sha256": "0D6EFE22D35D6360EA365DB4F91C4390CA7415AC1FA20BC9F0ECE240CA15A198",
"bytes": 3768
},
{
"path": "CodexOutput/upserver/P2AlphaTargetCheck/C4-执行交付与验收.md",
"sha256": "B6DA1611B9C5B7667B2E37FAB5483797AC7BDBAFA7952362CF42EA603CEACB42",
"bytes": 3381
},
{
"path": "CodexOutput/upserver/P2AlphaTargetCheck/C5-执行复核裁决与关闭.md",
"sha256": "6E4E1DCF5264A9089FEA1852FFF0142B132613A1FD703861BA4C1B908EF501EC",
"bytes": 2999
},
{
"path": "CodexOutput/upserver/P2AlphaTargetCheck/C5-closure-delta-hashes.json",
"sha256": "C46F947717BAC3551CCF99E8EF0BD7990D9D0EE2ED0EC40DEC95DC6CBAADAD10",
"bytes": 1880
},
{
"path": "CodexOutput/upserver/P2AlphaTargetCheck/C5-closure-verification.json",
"sha256": "18AB5FA297B9858828B0FFCC0F1A12CDA062C1B66ECCB97FC40579A97DDB67E7",
"bytes": 25677
},
{
"path": "CodexOutput/upserver/TODO.md",
"sha256": "6A529F4DF5A71AEA24FDED5F6AB005C67092E5FC7348BF326E7B15EA1AF04F19",
"bytes": 73810
}
]
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff