mirror of
https://github.com/Shu-Ying/main_plugin_farm.git
synced 2026-10-28 05:00:01 +08:00
6.4 KiB
6.4 KiB
源码审查
日期:2026-10-15。范围:旧 Beta 迁移基线的关键用例、数据层、 玩家缓存、初始化、资源请求和未完成的活动模块。 结论:有功能拆分基础,但交易边界、状态权威、错误传播和分层不足, 不建议直接在此结构上继续扩展跨框架玩法。
证据与限制
代码图提供符号和调用线索,覆盖检查报告 metadata_changed; 以下结论均回到源码核对,不以图的缺边证明代码不存在。 链接指向复制基线,通常与源行号一致;request.py 已移除令牌。 本轮语法检查和两个模块隔离加载见 baseline-checks.json。 没有启动真实宿主、执行完整插件导入、联网访问旧服务或开展并发压测。
P1:数据、资产或主要功能错误,应在新核心实施前处理。 P2:功能契约或维护可靠性问题。风险项与已证实缺陷分别标识。
已确认缺陷
| 编号 | 等级 | 证据 | 触发与影响 | 修复方向 |
|---|---|---|---|---|
| F01 | P1 | shop.py:241、player.py:62 | 出售把原余额加收入传给增量接口;100+20 得到 220 | 收益只加一次;交易内更新 |
| F02 | P1 | farm.py:327、player.py:119 | 收获把原经验再次传给增量接口,重复累计 | 清晰区分增量与新值 |
| F03 | P1 | farm.py:262 | 循环中对累计经验应用当前土地加成,前面经验被再次放大 | 各地块独立计算后相加;交换地块顺序测试 |
| F04 | P1 | user.py:102 | updatePoint 丢弃底层失败结果,直接 True,内存可能领先落库 | 原样传播失败,提交后失效缓存 |
| F05 | P1 | player.py:27、tool.py:25、command.py:53 | 未注册玩家被缓存为空 dict,创建数据库记录后不刷新,后续判断仍未注册 | 不缓存无效玩家;注册提交后刷新 |
| F06 | P1 | shop.py:161 | 扣款与发种分离,忽略扣款结果,发种失败不回滚 | 应用层一个事务覆盖交易 |
| F07 | P1 | userSign.py:158、userSign.py:229 | 签到记录先提交,奖励在其后发放,中断会已签到未到账 | 唯一签到与奖励在同一事务,返回原操作结果 |
| F08 | P2 | shop.py:194 | 只在全部出售检查锁定,指定作物分支绕开检查 | 统一可消耗库存规则 |
| F09 | P2 | activity.py:46、effect.py:46 | 隔离加载分别因 ActivityType、Player 未定义而失败 | 标为未完成功能,不进入首版;不能仅以语法判断可用 |
| F10 | P1 | request.py:22 | 源代码有硬编码服务令牌,任意持有源码者可取得该值 | 本轮副本已改环境变量;服务端轮换仍未完成 |
| F11 | P2 | config.py:90、shop.py:243 | 批量出售选择带 name 占位符的文案却未传 name,资产更新后可能格式化失败 | 统一结果模型,先验证模板参数并用例覆盖 |
F01/F02 的例子来自源码算式,不是完整机器人运行结果。 F06/F07 的失败后果是条件性推断,尚未做数据库故障注入。 F09 已做不依赖宿主的模块定义加载,不能据此声称主插件必然启动失败。 F10 不在报告或代码中重复原令牌。
设计问题与待验证风险
| 编号 | 类别 | 证据与判断 | 建议验证/整改 |
|---|---|---|---|
| R01 | 并发风险 | database.py:125 的 BEGIN/COMMIT 无业务事务协调;player.py:62 从内存读改写 | 同一用户并发购买/收获、不同用户共享连接、任务取消测试 |
| R02 | 分层 | userSoil.py:412 决定星级;userSign.py:257 绘图 | 规则上移领域/应用,绘图独立 |
| R03 | 生命周期 | dbService.py:51 并发安排 init/initDB,不检查 bool 便标记 ready | 明确启动顺序和失败条件;数据库不可用时不得就绪 |
| R04 | 缓存 | playerPool.py:67 的线程锁只保护字典,不保护返回玩家对象的异步操作 | 数据库为权威,先移除余额写缓存,再按性能需要缓存查询 |
| R05 | 可维护性 | CDBService 和 CDBServiceLocator 两套服务入口,工具层反向加载业务对象 | 保留一个启动组装位置,明确依赖,不机械保留全局单例 |
| R06 | 外部资源 | request.py:65 下载直接覆盖,未验证固定版本和内容哈希 | HTTPS、大小/路径校验、暂存验证、原子切换和最后有效版本 |
| R07 | 扩展机制 | event.py:60 事件槽吞异常后继续 | 必需状态更新不依赖这种可失败通知;事件限定提交后副作用 |
“农场下阶段”虽未见入口管理员检查,但 nextPhase 有调试开关且当前 默认 False;本轮不将其认定为默认可利用的权限漏洞。 未来调试功能应显式授权且不进入普通用户命令集。
复核与测试优先级
先写行为级回归:出售余额、收获经验、首次注册立即使用、 交易失败不改变任一资产、签到不重复发奖、指定与批量出售锁定一致。 再补并发、时间、迁移和三宿主加载测试。 本轮没有修复 F01–F09/F11,也没有宣布审查通过可发布。 迁移副本唯一安全修正为 F10,旧项目仍保持原样。