Files
ft/CodexOutput/upserver/阶段4A限定代码自审-2026-09-23.md

31 lines
2.8 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.
# 阶段4A限定代码自审
日期:2026-09-23。主会话实施后自审;不能替代用户指定外部AI复核。
## 结论
本轮限定范围自审未发现待修复P1/P2;代码、18组合成测试、既有回归及Unity编译已完成,交付外部实施复核。4B尚未启动。
## 逐项检查
- Owner读接口:复用操作租约及现有State,未开第二份缓存;Ready合并视图复制成独立ReadOnlyDictionary。失败Data=null。读后与NotReady异常分支再核归属,StaleOrClosing优先。归属回调可能重入Close,最终条件先调用归属检查再检查closing,A8专门验证不能在Close后发布快照。
- 固定句柄:保存唯一Slot/Owner,不查询“当前账号”;注销、换Cookie、epoch变化、桥接Close均使旧句柄失效。Update/Delete/Flush仍保留3B语义;Wait不会借新账号票据。
- 串行生命周期:tail链记录每项真实完成;同一桥接至多一个Owner。新Open先关闭旧Owner;Close同步撤销当前槽并使此前排队Open失效;后来的Open排在Close之后。
- 排队取消:仅立即完成该请求的失败结果,内部排队项仍等前一收尾再退出,不提前释放tail。已经进入Create的取消等待真实Create/失败Close结束。
- 异常保守处理:正常Create失败才清空槽位;异常Create或Close失败保留Slot、Creation/Closing任务、已得到的Owner,后续Open返回CloseFailed。不会把文件锁未释放伪装成可重开。
- CTS竞争:独立锁串行取消和释放;不持有bridge gate执行取消回调。关闭中的引用保留到实际完成。
- 生产默认传输:固定CookieContainer、UseCookies=true、AllowAutoRedirect=false;任意Handler注入仅internal供合成测试,无公共替身入口。
- 边界:Owner去除新增读取方法及辅助后重算hash与原版完全一致;三个csproj按原换行各仅加一行Compile;原测试Program及其他基线生产文件hash不变。
## 测试发现与已修正项
1. 首轮测试宿主未使用的FailWrite字段警告:增加Unknown票据语义用例后消除。
2. 只读最终校验中回调重入Close:采用先核归属、后查closing的顺序,并实际验证Close等待读租约、读返回StaleOrClosing。
3. 初始Create收尾可能与桥接取消同时发生:同步CTS Cancel/Dispose,保留取消失败以阻塞不确定重开。
4. 项目引用插入最初出现混合换行;已按原文件换行重建插入,三份差异校验全部只有一行新增,无语义改变。
## 尚未包含
游戏初始化、存档后端切换、消费路径、PlayFab删除、真机与最终包;Close失败后的人工恢复也不在4A。isCurrent应是轻量归属判定,调用方不可同步等待自己的Close形成循环依赖。保守CloseFailed不自动解锁。
完整运行和hash见《阶段4A交付与验收矩阵-2026-09-23.md》。