Files
ft/CodexOutput/upserver/阶段3C实施记录-2026-09-23.md

53 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 阶段3C实施记录
> 最新终审:用户指定外部AI复核接受,无新P1/P2;主会话核对版本并裁决R1–R5/F2关闭,3C/G3通过。见[终审裁决](3C补修复终审裁决与4A准入-2026-09-23.md)。下方“待外部复核”等表述为当时状态,最新结论以本注为准。
> 2026-09-23补修复更新:R1–R5已修复并完成本轮技术验证;外部实施复核待完成。最新证据见[补修复交付与逐项证据](阶段3C补修复交付与逐项证据-2026-09-23.md),源码hash见KVStage3CTests/repair-final-source-hashes.json。下方为修复前历史记录(含旧final-source-hashes.json),不能替代新证据,也不代表3C/G3已经重新最终通过。
> 更正(同日后续核对):下方为历史交付记录。7/7、3/3通过不代表矩阵完整;“运行时key集合不可扩大”“任一Unknown退出路径已安全闭环”等强保证需按《阶段3C复核更正与补验收-2026-09-23.md》R1–R5补修复和证据。本次复核未重新执行或修改历史run。
日期:2026-09-23。实施范围:独立`KVStage3CTests`测试宿主、运行证据和本记录。生产源码未修改,未接游戏入口,未删除PlayFab SDK,未打包。
## 1. 实现内容
- 新增显式`--offline`、`--live-s101`、`--cleanup <manifest>`模式;无参数/非法参数不访问网络并返回非0。
- manifest在请求前原子落盘,固定API为`http://s101.local:18080/`、账号为101/102、缓存根为本次run目录。
- 测试专用受限Handler把Owner无keys Get改写为manifest keys;Set/Delete越界在网络前整体拒绝;Set空data不转发。
- 离线组合覆盖Owner/3A/3B、真实子进程pending恢复、账号/API隔离、Busy锁、Unknown在服务端观察基线和目标两种情况下均不自动解除/重发、损坏主档与有效主档+坏bak。
- 测试宿主在Owner关闭前累计票据结果,关闭后通过`Inspect()`构建专用脱敏DTO;manifest以外产物不含完整fixture key和值。
- 正式服仅走正常路径;碰撞预检后才允许写,任一Unknown立即停止后续账号写入;Owner异常路径保证Close。
## 2. 最终执行证据
| 门 | 命令/结果 |
|---|---|
| 构建 | `dotnet build .../KVStage3CTests.csproj --nologo`:0错误、0警告 |
| 参数门 | 无参数及`--bad-mode`:非0,未访问网络 |
| 离线 | `dotnet run ... -- --offline`:7/7分组通过,退出0 |
| 正式服 | `dotnet run ... -- --live-s101`:3/3分组通过,退出0 |
| 阶段2回归 | `KVContractTests`:42/42通过 |
| 3A回归 | `KVSyncTests`:86/86通过 |
| 3B回归 | `KVSyncCoordinatorTests`:29/29通过 |
| Unity | `uloop compile --project-path C:/projects/ft/Client --wait-for-domain-reload true`:Success=true,0错误、0警告 |
最终正式run:`20260923064047_9bdd12b8c3c64a6b855887bd91e2d33d`。账号101/102均登录匹配且不是新建账号;`CollisionPreflight=true`、`HadUnknownWrite=false`、`Completed=true`,两账号均进入`CleanedAccounts`。清理后每个账号由两个新登录会话分别过滤Get确认manifest keys不存在。
正式联调前曾有三次运行在`login-preflight-101`阶段因受限执行环境返回Network;这些manifest均为`CollisionPreflight=false`、`CleanupAllowed=false`、`HadUnknownWrite=false`,没有KV写入。解除网络沙箱后正式执行通过。
## 3. 脱敏与哈希
- 最新正式产物扫描:完整fixture key命中0;`Cookie|Token|fixture-|C:\\Users\\`命中0。
- 完整fixture key只存在manifest和离线合成远端文件;result、diagnostic、log只保存摘要、数量、状态和错误类别。
- 生产7个KV文件的SHA256与阶段2/3A/3B既有正式基线完全一致;`S101AccountSession.cs`本阶段未修改,当前SHA256为`EDEE0803B13B2A33B0F6E9DDE1365031653AC37CAB35C90B8046F207B7AE0476`。
- 最终完整hash见`KVStage3CTests/final-source-hashes.json`。
## 4. 偏离与修正
- 首轮离线预检暴露测试宿主run根目录少一层、普通manifest读取误用cleanup校验;修正后重新执行7/7。
- 实施自审发现正式账号失败后可能继续下一账号,以及Owner异常路径缺少强制Close;终验前已收紧并重新执行离线、正式服与Unity编译。
- Unity首次因Editor/uLoop Server未就绪无法连接;启动匹配的Unity 2022.3.62f2c1并完成域重载后,最终CLI编译通过。
## 5. 未进入范围
未执行真机断电/平台文件系统、游戏存档入口接线、PlayFab读写替换、SDK删除、SignalR新改动或最终打包。这些不得由本记录推断为已完成。