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

5.1 KiB
Raw Blame History

阶段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未通过均保持。