27 条死规则根因定位与清理(2026-07-15)

27 条死规则根因定位与清理(2026-07-15)

目标

解决用户反馈"系统反复出问题、月余未根治",聚焦规则引擎契约校验中 27 条"死规则"(unsupported condition type) 的根因与闭环处理。

根因结论(非系统坏,而是数据分类错误)

sciot_rules_v2 无 type 列,规则类型存于 condition 字段的 JSON({"type":"xxx"})中。引擎 supportedTypes 白名单声明 47 种、_evaluateCondition 实际实现 76 个 case。

经精确比对,2413 条规则中:

  • 1539 field_check + 695 relationship + 其余已支持类型 → 全部为活规则(引擎认识)
  • 仅 27 条使用引擎不承载的 type,分两类:
  1. SCSAI 原生 method 型(引擎不承接,本属 SCSAI 职责):sequence(7)、auto_create(6) — action_type=auto
  2. 业务建议型(LLM/SCSAI 能力,引擎 condition 层不承载):compare(3)、optimize(1)、score_check(1)、completeness_check(1)、trend_compare(1)、profit_check(1)、stock_level(1)、date_check(1)、credit_check(1)、budget_check(1)、consolidation_check(1)、aging_analysis(1) — action_type=suggest/validate

这 27 条此前以 is_active=1 挂着却永远无法被引擎 evaluate,被契约校验误判为"系统坏"。正确做法不是硬塞进引擎(会成假活/永远 true),而是明确退役。

修复动作

  1. server/core/rule-engine.js L281 合并循环:跳过 is_active=0 规则,不再灌入引擎运行库。
  2. server/core/rule-engine.js L1344 _checkRuleContract:契约校验加 WHERE is_active = 1,只校验活跃规则。
  3. 退役脚本对 sciot_import.db 与 rule_engine.db 两库统一执行:27 条 is_active=0,source 标记为 SCSAI-native-method(13) 或 business-suggestion-deprecated(14)。
  4. 清理 11 个临时诊断脚本(_q_.js / _retire_.js)。

验证结果

  • 引擎 initialize 日志:无 unsupported type 告警、无"发现 N 条死规则"。
  • GET /api/health → 200 {"ok":true}。
  • GET /api/rule-engine/stats → total=2413, active=2386(2386 = 2413−27 退役,数字闭环正确),dead 字段消失。

遗留(诚实标注,非本次范围)

  • 27 条退役规则的业务能力(供应商比价、信用预警、库存低位等)目前实际无引擎承载,依赖 SCSAI / LLM 侧实现,不属于 BossAgents 本地规则引擎职责。若未来需本地化,应在引擎新增对应 handler 后恢复其 is_active,而非保持现状。
  • DB 架构病根(14 个 .db 文件未合并、驱动混用已通过 better-sqlite3 单例缓解但未彻底统一)仍属独立技术债。
← 返回案例列表

Try 左帮右臂 Industrial Agent — your digital workforce

Available as a WeChat mini program, web app (ylxt.chat) and desktop client. Start from whichever fits your workflow.

🌐 Web App 💻 Desktop Download 📞 Call 189-8606-6876
WeChat mini program QR
Scan for the WeChat mini program
Share:
🤖 Try Now →
🤖
🎁