7.9 KiB
阶段3C补修复独立实施复核
日期:2026-09-23。复核者:用户指定外部AI(ZCode会话)。范围:对3C补修复(R1–R5)做只读代码审查+证据核验+独立复跑。本轮未修改任何测试或生产代码,未访问正式服,未创建新正式run(最终正式run已对应最终源码,无新正式验证必要)。
受审版本
| 对象 | SHA256 |
|---|---|
KVStage3CTests/Program.cs |
66C41B8B0A8E0CD4FF13A3BED8212B3F61BF95E4707F5C6373B2104…(完整值与提示词一致:66C41B8B0A8E0CD4FF13A3BED8212B3F61BF95E4707F5C6373B235E21B20492A) |
KVStage3CTests.csproj |
27CC1AF41AC658EA9B8DE1ACB35E37058C294A93D30E232D42B9AFCBDD95A1E6(未改) |
| 八份链接生产源码 | 与repair-final-source-hashes.json逐项重算一致(7个KV文件有3B历史基线;账号类按修复前基线核对)——生产源码零改动 |
复核结论
接受本轮3C补修复。R1–R5全部修复并经源码级核验与本复核独立复跑证实;未发现新P1/P2。建议主会话据此恢复3C(并按其流程恢复G3)通过;本报告不自动授权4A编码,4A按其任务书前置门另行批准。
R1–R5逐项裁决(全部通过)
R1:通过。 源码:DrainBounded(行416–438)超时后先control.Timeout()持久化失败/不确定状态并取消Lifetime,随后必然await operation——body及其Owner.CloseAsync finally永不脱离;LiveAccount/VerifyOwner将control.Lifetime.Token传入CreateAsync(行522/575),孤儿传输被确定性取消(A-S1落实);RestrictedHandler在转发前EnsureRunning、变更请求经BeginWrite/EndWrite把InFlight在入网前持久化、非200/异常按不确定落盘(行757–767);自动清理门(行497)要求!HadUnknownWrite && !TimedOut && !InFlight。替身证据(LifecycleGuards行887–930):忽略取消闸门下,超时后运行未完成、无任何Delete、竞争cleanup被拒(0登录);释放后drain完成、无后续账号登录、Owner缓存锁已释放;超时run显式补清理后原始result/log字节不变。失败批次未完成票据不阻塞Close(Confirm仅对成功Flush等待票据;"later-batch-unknown"替身断言无死锁,行945–952)。
R2:通过。 源码:schema2严格解析(StrictJson拒绝重复属性与尾随JSON,行1125–1130);LoadManifest(行1054–1078)字段集合必须与模板精确一致(未知/缺失字段拒绝)+逐字段类型校验+32KB上限;ValidateManifest(行1080–1105):RunId正则、Prefix必须等于RunId的精确派生(空前缀/任意前缀在数学上不可能通过)、Keys必须精确等于prefix+_a/_b/_deleted、manifest路径与RunId绑定同run、CheckPath拒绝..、多冒号盘符与逐级重解析点/链接(行1113–1123);cleanup授权要求CollisionPreflight && !Running && !InFlight且模式限定。负例证据(行824–879):22个篡改manifest+3个原始JSON畸形+3个路径变体+真实junction全部在登录前拒绝(0登录0网络)。--cleanup互斥run.lock(行440–444;并发拒绝替身行985–990)、只输出key哈希(行614,A-S3)。
R3:通过。 源码:WriteNew用FileMode.CreateNew(行1172–1177)——原result/log/diagnostic不可覆盖;CleanupWith(行607–639)保留原ExecutionStatus/AssertionStatus/LastError,Completed = originalComplete && ok && …不可升级,补救写入独立cleanup-<guid>.json;Completed不变式在加载时也强制(行1101–1102,篡改Completed=true会被拒绝)。替身证据:断言失败+清理成功仍Failed("acknowledged-noop-write"行960–967);补清理自身Unknown不重试且原判保持失败(行939–942);finally清理失败持久化(行969–979)。
R4:通过。 源码与L run证据:删除目标先种值并经DirectGet确认存在且值精确(行531–535);两账号写不同精确值;VerifyOwner以新登录/新Cookie/新Owner打开同缓存,经真实Get达Ready、精确值断言(a==value、b==value+"-b"、删除键缺席,行581–585)、关闭后持久快照pending/unknown/active/localOnly全0且baseline精确(行588–596);L2后重读101(行481);EnvironmentIO.Jars强制每次登录Cookie互异(行357–364)。L run日志:L1/L2/L3+双账号双新会话清理全部PASS。
R5:通过。 源码与O run证据:C子进程新Owner真实Get后断言Ready+基线精确值+持久清洁,观察文件记录真实重开状态(NotLoaded,行181–201);Unknown场景新旧handler共享mutationCount、重开后主动Flush且计数保持1(不重发跨handler证实,行275–308);缺主档+bak/tmp遗留均RecoveryRequired(行336–346);诊断全部来自真实状态/票据(SnapshotDto传入实际Status;ownerObservations含playerId/epoch/ownerInstanceId/statusBeforeClose/ticketStatuses);产物脱敏扫描覆盖fixture值、Cookie/Token头、用户路径(行1161–1165,repair-artifact-scan.json覆盖4个run)。
矩阵逐行核对(S0–F2)
交付文档§4的逐行映射与源码/产物一一核对属实;关键项独立验证:S0(repair-cli-guards.json+Main分派在任何登录前退出)、S1/S3(负例库)、O1–O8(本复核复跑8/8)、D1–D3(diagnostic实查+扫描)、H1–H3(含Owner级越界本地接受后零外发且冻结Unknown,行83–96)、L0–L6(L run产物逐项)、L7(合成,非正式服制造)、R1–R3回归、U1、F1。**F2(外部实施复核)由本报告完成。**未发现矩阵条目与证据不符。
本复核独立复跑(不沿用实施者结果)
| 命令 | 结果 |
|---|---|
dotnet run --no-restore --project KVStage3CTests -- --offline |
8/8通过(含L7),退出码0 |
KVContractTests |
42/42,退出码0 |
KVSyncTests |
86/86,退出码0 |
KVSyncCoordinatorTests |
29/29,退出码0 |
正式run盘点(runs/全量manifest扫描):3个无写入的预检失败run(CleanupAllowed=false,无可清数据)+5个Completed且双账号CleanedAccounts的run(含最终L 20260923073720_199d4e8a…与首次L 20260923073436_93b96817…)——无遗留正式fixture,无需新正式验证或再次cleanup。
提示词专项裁决
- **"最后一次测试宿主失败分支补强后未复跑生产回归/Unity是否可接受":可接受。**理由:(a) 三个回归项目的csproj为显式文件清单,不编译
KVStage3CTests/Program.cs——本复核已在最终源码状态下亲自复跑42/86/29全过;(b) Unity工程只编译Client/Assets,CodexOutput不在其中,八份生产源码hash未变,repair-unity-compile.json(Success=true、0错误/0警告)对其有效;(c) 最终正式run L与最终源码hash对应(交付§3明确为对应最终源码重跑)。 - 限定自审的保守限制符合已批准范围:忽略取消传输保持等待不伪报收尾、崩溃遗留Running/InFlight拒绝补cleanup需人工核查、schema1不自动升级——均为保守方向,未扩大授权。
非阻塞观察(P3,仅记录,不需返工)
WriteArtifacts的File.Copy会覆盖项目级Latest-*.log汇总副本;per-run产物仍不可变。仅提示后续工具不要把Latest-*当作不可变证据。- runs/目录含故意损坏的负例manifest(如trailing-json);自动化扫描需跳过simulation负例fixtures,否则解析报错(本复核扫描时已遇到,属预期测试数据)。
Confirm在成功Flush后逐票等待无token——因CompleteBatch已同步完成对应票据,实际不会悬挂;仅备忘。
结论与下一步
- R1–R5全部通过;矩阵S0–F2逐行核验通过(F2闭环);无新P1/P2。
- 建议:主会话据此裁决恢复3C通过(并按其流程恢复G3关闭表述),随后按4A任务书前置门批准4A编码。本报告不自动授权4A。