Files
mtgodot-poc/docs/REVIEW-f39a55fd.md

2.9 KiB

f39a55fd 审查与修复

审查对象:f39a55fdd5f14cb2d14d67929cf45f438f572a06。修复基于该提交,位于本地分支 fix/playable-f39a55fd

已确认的问题

优先级 问题与触发条件 影响 修复
P1 PlayableProbe._connections 用强引用保存 EffectRegistry;重连或切图重建注册器 旧注册器及其解析缓存一直保留,观察器自身污染长跑内存结果 弱引用订阅源;重新绑定和统计时移除失效订阅
P1 终止联网/地图运行器或批量入口时,没有完整的子进程清理 客户端可能继续联网执行操作,代理、日志处理器、采样器可能残留 共用进程清理模块;保留信号退出码,仅对仍持有的子 PID 执行 TERM、有界等待、KILL 和 wait;批量入口转发终止
P1 外部 RSS 检查尚未写回时,已有干净退出的中间 report.json;之后直接聚合 缺失 STB-MEMORY-01 的 soak 仍可被发布汇总判 PASS 汇总 soak PASS 时必须同时存在唯一的内存 PASS 用例和 PASS verdict
P2 客户端报告、事件行或发布清单包含合法 JSON null 等错误类型 校验器抛出异常,无法生成应有的失败报告 校验 JSON 根类型、事件类型和单调时间字段;错误输入写出 FAIL 报告

复现证据与回归入口

  • 注册器释放用例:模拟 30 次注册器替换。原实现出现 59 项断言失败;修复后 playable_harness_test: failures=0
  • 取消运行用例:原联网和地图运行器均在收到 TERM 后留下客户端;回归检查终止入口后客户端已被回收,入口退出码为 143,并覆盖普通批量与 soak 入口。
  • 发布汇总用例:node script/playable_release_test.mjs --baseline 读取原提交的校验器,复现缺少内存检查仍然 PASS(该命令预期断言失败)。正常命令使用修复后的校验器。
  • 异常 JSON 用例:检查返回失败码的同时,要求实际生成失败报告,避免只根据异常退出码误判测试通过。

可重复运行:

godot --headless --path project --script playable_harness_test.gd
bash script/playable_gate_test.sh
node script/playable_release_test.mjs
node script/playable_fault_proxy_test.mjs
node script/playable_soak_metrics_test.mjs
node script/audit_playable_maps_test.mjs
bash script/rendering_batch_test.sh
git diff --check

本轮修复后结果:门禁夹具 126 项检查通过;渲染批处理 53 项通过、failures=0;注册器/联网状态机、发布汇总、故障代理、内存指标、地图资源审计测试通过;Shell/Node 语法检查及 git diff --check 通过。

渲染批处理日志:build/rendering/batch-20260911-211958-82865/

这些是离线、回环代理和假签名客户端测试。实网战斗、真实两小时长跑、最终新包与人工画面对照仍需独立验收;本次审查不会将其改成已通过。