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

38 lines
5.1 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.
# 阶段4B2限定代码自审
日期2026-09-23。作者自审,不替代独立实施复核。设计依据为修订2主方案、正式版3合同及D1–D5裁决。D4/D5开工前23项hash核对全部一致。
## 范围和旧逻辑
最终对修订2的123项基线重算:85项不变、38项已批准修改、0项越界。D4唯一新增既有文件PartnerInfoManager纳入清单;新增生产文件均在已审目录和职责内。旧测试源码/csproj不改;依赖通过新宿主中的Dependencies.targets在命令行注入。相对HEAD仍有很多更早的修改,不将它们计为4B2新增。ClubService新增KV块去除后与开工副本逐字一致(统一换行后比较)。
D4的公开BuilderCapacity由字段变属性,非二进制兼容是已审接受的边界。实例表还影响ActiveFriendCountThreshold、机器人活跃时段/权重、两个推荐阈值;静态属性运行中随当前容器读取,实例数组容量保持创建时表值。预编译114文件:93托管无旧字段引用,18原生,3个非可读Burst工具文件。原始blocked=3保留;Unity273依赖引用和469个PluginImporter不含这三个文件,见D4依赖结论,未假称它们解析成功。
## 生命周期与失败语义
1. 公共Login先捕获backend再检查,AGG快捷Done不能越过检查。内部能力预检auth/KV/lease三类handler再允许认证;玩家条件编译不存在两个创建工厂。
2. Coordinator先取得有界登录锁、观察进程Registry,再建立epoch/context/guard。失败和取消撤销先于异步排水;主线程Reset与晚到网络完成分离。回调中重入取消会在Apply退栈后清空,不在中途递归Reset。
3. Apply固定31组全部Reset之后才能Replace;通知前再次检查最后一组的epoch/guard。任何失败清空;Reset失败Poisoned不可重试。
4. 关闭失败保留原阶段错误和Prepare证据;失败结果没有Data/Raw载荷。预检清理失败保留异常与失败handler引用,不能被再次Dispose成功抹去;进程guard/Registry保持阻挡。故障回归用独立进程,不提供生产清空屏障后门。
5. Quit先同步撤销,再等待旧Hub并作5秒观察。观察超时不等于排水完成,跨Root登记责任保留。当前401撤销、旧版本401丢弃,不做KV后台重新认证。
本轮边界测试发现并修正了同时获锁/超时的permit处理、清理失败留存、末次Replace撤销与通知之间的检查三项问题。各自测试覆盖后再形成最终清单。
## 纯加载调用链
VerifyBoundary.ps1逐块扫描65个实际Reset/Replace方法,未发现直接PlayerPrefs/PlayFab/TYSdk/GEvent/保存/发布/订阅/计时器/旧Init调用。这个有限扫描不声称是完备的跨程序集分析。
人工继续核对了这些块调用的纯辅助函数、数据构造及属性:集合拷贝/投影只分配本次对象;Module31的ReplaceKVLinked只复制列表;PartnerInfoManager构造只捕获同一容器表和按表分配数组,机器人构造不调用Init;Digging只new未初始化模型;Pinata使用同一容器预注册数据对象并直接赋三个自动属性;Shop券对象保留身份;各活动原始数据构造没有经由旧GetDataFromServer/Init/Save链。鱼派生只读已复制配置,幸运标量不激活。
动态证据分层:真实Unity模块使用私有容器/当前表/事件聚合器,31对象两个epoch的保存字段和运行空态显式验证;服务宿主直接链接生产源码,以SDK/Prefs/奖励/UI/Helper替身计数为0;PlayFabMgr实际12个入口在任何缓冲/SDK操作前拒绝。未启动PF组件和模块准入条件证明定时链未启动。没有宣称这个guard能拦截项目内所有任意调用,也没有把离线记录模块当作31真实模块测试。
## 保留的问题与限制
- 原KVSyncTests本轮首次85/86(Unknown write survives reopen/readback without unlocking v1,StorageError),单独重跑86/86。原生产与测试hash未变;根因尚未定位,不能断言与并行或环境有关,更不能称已修复。提交独立复核时须明确呈现。
- 旧NetworkTransport首次运行因本地50121代理未启动失败;查明代理将转发正式服后未启动,最终仅构建通过。崩溃测试进程锁住exe时,只终止已核对完整路径的本轮测试进程,再构建;失败日志保留。
- 新服务宿主未通过真实PF渠道/真实API完成公共登录;PF初始化和捷径分开验证,API故意用无效scheme阻断,已有账户合成回归另证。非Android旧空CustomId代码中的AndroidDeviceId DTO拼写由测试本地兼容DTO承载,生产旧代码未改;不声称完成Unity桌面玩家构建。
- Unity联合首轮扩展断言把ld的InitFishLuck/InitBotLuck槽顺序写反,按既定源码合同修正测试后最终83断言通过;生产幸运值解码没有为通过测试而改。早期舍入测试的Mono中间精度差异已用float位值比较,生产舍入未改。
- 270条Unity既有警告仍存在;新增KV文件0警告。没有真机、PlayMode或包验证。
作者认为可以交独立实施复核。B2-22未关闭;P2-α正式启用门、4B3未开始、G4未通过均保持。