双 DB 分裂修复记录(2026-07-11)

双 DB 分裂修复记录(2026-07-11)

问题根因

项目存在两个 rule_engine.db

  • D:\openclaw\bossagents\data\rule_engine.db(旧库,471KB):298 类型 / 2821 属性 / 431 关系 / 298 模板 / 无 sciot_rules_v2 表
  • D:\openclaw\bossagents\server\data\rule_engine.db(新库,765KB):616 类型 / 2821 属性 / 431 关系 / 306 模板 / 76 规则

核心代码分裂为两套:

  • server/utils/aras-tools.jsgetSciotDb()'../../data'(从 server/utils 出发)= 指向旧库,被 unified-create.jsaml.jsrelationship-capability.jsitemtype.router.jscapability-pipeline.js 等核心创建/读取链路使用。
  • server/core/capability-runtime.js_initRuleEngine()'../data'(从 server/core 出发)= 指向新库,被六能力使用。

这正是此前「validate/repair 偶尔行为不一致、规则数忽多忽少」的隐患根源——两套路径读不同库。

修复

  1. server/utils/aras-tools.js 第 41 行:dbPath 由

path.join(__dirname, '..', '..', 'data', 'rule_engine.db')

改为

path.join(__dirname, '..', '..', 'server', 'data', 'rule_engine.db')

→ 统一指向新库。

  1. 删除孤立旧库:经 tmp_audit_paths.js 全树审计,server/ 内无任何文件运行时解析到旧库(原以为有,实测所有 ../dataserver/coreserver/routes 等出发均落到 server/data/consistency-check.js'../../data'server/boss-scheduler/lib 出发也是 server/data/)。

data/rule_engine.db 无任何运行时代码引用,确认为纯历史残留。

未直接 rm,移动至 data/_deprecated_rule_engine_db_20260711-184656/ 保留可恢复。

验证(删除旧库 + 重启后)

  • server 重启正常(pid 33584),/api/health 返回 ok。
  • POST /api/unified/create(走 aras-tools.getSciotDb 路径)Part 创建成功落库,server.err 无 rule_engine.db 不可用 报错。
  • 六能力全部通过(不回退):
  • VALIDATE(既有有 name 对象 50066E...):executed=true blocked=false rules=6 source=rule_engine
  • OPTIMIZE:found=4 source=rule_engine
  • REPAIR:executed=true issues=1 applied=2 aras=true(真实回写)
  • IDENTIFY:executed=true matched=true
  • COMPARE:executed=true
  • GENERATE:executed=true src=fallback
  • 关系型创建(Model + sourceId)仍 success=500 修复仍生效;Model 无 sourceId 返回 400 边界正确。

备注

  • 刚创建的测试对象 80761D7343DC4F7BAB2371822DA13FFB(name='POST_DEL_CHECK_PART')validate 报 blocked=true「name 不能为空」——属 CREATE 的 name 字段映射历史问题(SCSAI 端 name 未正确落库),非本次删除旧库引入的回退(同法测既有对象 blocked=false 正常)。
  • 临时探针脚本(tmp_*.js)已全部清理。
← 返回案例列表
分享:
🤖 Try Now →
🤖
🎁