Files
noname-shuying/docs/reviews/mengsan-20261013.md
T
2026-10-13 10:50:58 +08:00

78 lines
4.3 KiB
Markdown

# 梦三独立代码审查
日期:2026-10-13。基线:28f7096及工作区未提交的受保护技能结算兼容修改。
审查为只读,不修复业务代码,不提交或发布。
## 流程状态
用户调用Comet,项目解析为Native,用户选择当前目录包含未提交修复。
正式任务初始化未成功:new被旧任务shuying-skill-tianshu-review缺失
docs/comet/changes/shuying-skill-tianshu-review/comet-state.yaml阻塞。
status/doctor后执行Runtime给出的doctor --repair命令仍返回ENOENT。
Git历史中未找到该状态文件。旧任务现场保留,未手工重建或删除状态。
本报告是可以独立进行的源码审查,不是Comet正式验收报告。
## 已确认问题
### P2:整角色清理漏掉装备技能登记
位置:mengsan/battle/skill-teardown.js:124-128。
清理候选只包含skills/hiddenSkills/invisibleSkills/tempSkills/additionalSkills。
引擎装备技能通过addSkillTrigger登记到initedSkills与lib.hook,可能不在这些列表中。
梦三起始牌库包含八卦。装备八卦后获胜,清理不能解除其触发登记;随后
mengsan/mode.js:773-779仅删除角色索引和节点,不能清理旧lib.hook条目。
连续对局会积累旧角色的触发登记。
最小复现使用本地player.js原生addSkillTrigger/removeSkillTrigger与当前
createPlayerTeardown:八卦注册前后测试的两个键为
oldBattlePlayer_player_chooseToRespondBegin和
oldBattlePlayer_player_chooseToUseBegin。清理前2个、清理完成后仍2个;
调用原生removeSkillTrigger后0个,initedSkills也从[bagua_skill]清空。
这是最小依赖桩复现,未执行完整游戏对局。
建议:区分角色技能与装备登记的释放来源,补齐装备/已初始化登记的卸载,
并覆盖连续对局及共享全局技能归属,避免直接清空公共hook表。
### P2:引擎吞错时战斗控制器永久等待
位置:mengsan/mode.js:900-905。
战斗准备内容没有自己的异常边界;只有root.start()拒绝时才记录engineError
并调用finished()。启用引擎ignore_error后,GameEvent.loop可吞掉准备异常,
root.start()最终成功返回,外部await signal没有人唤醒。
缺失支援角色或准备期间的适配错误可触发此路径,异常退出提示不会出现。
复现使用本地原生GameEvent、ArrayCompiler和ContentCompilerBase,外围服务
为最小桩。准备内容主动抛错,ignore_error=true,结果为rootFinished=true、
engineError=null、finishSignal=false、eventStack=0。根代理已独立重复复现。
建议:在战斗准备内容的边界捕获、记录并向外部协调者传递异常;不依赖
引擎是否将错误重新抛出。补充ignore_error开关两种情况下的退出验证。
## 验证缺口
扩大执行10套相关测试,Node结果为54项、38通过、16失败、0跳过。
记录见.planning/mengsan-review/tests.txt(本机诊断产物,不参与发布)。
失败不能视为16个游戏缺陷:
- test_bonds.mjs依赖原生入口,仓库直接执行解析到不存在的D:/noname.js。
- test_mengsan_cards.mjs:14-15将每条import替换为const _status声明,当前多条
import导致重复声明,测试尚未进入业务断言。
- 遗物、奖励与奖励包测试存在接口桩和旧预期失配;例如永恒牌不可强化的
测试预期与当前upgrades.js明确允许强化的规则相反。
现有通过结果不足以证明羁绊、卡牌、遗物和奖励完整链路正确。应修复测试
接入和同步有效规则后,建立能在仓库中重复运行的回归入口;本轮未修改夹具。
## 未发现高置信问题的检查范围
检查图鉴/虚拟列表、手牌输入与布局、敌人意图刷新、通用牌运行时及个人牌堆。
当前看到有限缓存、取消帧回调、解除监听和清理观察器的路径;没有将潜在风险
或描述歧义当作确定缺陷。未实测PC或安卓整局,不能由源码证明实机无残留。
存档事务提交与奖励去重路径未发现新的高置信问题。
## 交付限制
使用GPT-6.1 Sol高推理进行独立只读复核,根代理重新核对两项产品问题。
未恢复Comet正式状态、未进入Shape确认/正式Verify;不能标为Comet通过。
恢复旧任务正式状态文件后,才能继续正式Comet工作流。