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,分两类:
- SCSAI 原生 method 型(引擎不承接,本属 SCSAI 职责):
sequence(7)、auto_create(6) — action_type=auto - 业务建议型(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),而是明确退役。
修复动作
server/core/rule-engine.jsL281 合并循环:跳过is_active=0规则,不再灌入引擎运行库。server/core/rule-engine.jsL1344_checkRuleContract:契约校验加WHERE is_active = 1,只校验活跃规则。- 退役脚本对
sciot_import.db与rule_engine.db两库统一执行:27 条is_active=0,source标记为aras-native-method(13) 或business-suggestion-deprecated(14)。 - 清理 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 单例缓解但未彻底统一)仍属独立技术债。
BossAgents