Hermes CI Fix
ad68471b29
feat: 路线图R1决策建议一键落地+R2机会推送+R5预算闭环
R1(P0): AI建议一键应用到KPI/预算/行动方案
- 新表 ai_suggestions + AISuggestion 模型(init_db自动建)
- /api/cma/ai/suggestions CRUD + /{id}/apply(复用kpis/budget/action_plans) + dismiss
- 应用写 OperationLog(action=ai_suggestion_apply, detail含suggestion_id/before/after)
- 规则驱动建议生成 generate_rule_suggestions(低执行率/高执行率/预算超支/pending预警)
- 幂等: 同entity+type+target_id+title+unapplied不重复建; applied后拒绝重复应用
- 前端: Dashboard AI面板建议卡(应用到/忽略) + 建议中心页 /ai-suggestions
R2(P1): 数据找人扩大-机会类推送
- scripts/opportunity_detector.py: KPI向好(执行率>110%)/预算余量(<70%且actual>0)/预测上行
- scripts/daily_push.py: 异常+机会 每日9:15推企微(8800/send, --dry-run调试)
- crontab: 15 9 * * * (alert_generator 9:00之后)
R5(P0): 预算闭环加固
- auto-decompose批量幂等: 只取年度行(period=YYYY-00)+同KPI多版本取一行
- scripts/closed_loop_check.py: 预算执行率异常→检查现金流/行动同步→缺失提示+报告
- scripts/verify_decompose_idempotent.py: 幂等验证脚本
测试: test_ai_suggestions(10例)+test_roadmap_r2r5(14例); 修test_budget幂等契约适配年度行
全量: 673 passed
2026-08-30 12:05:36 +08:00
..
2026-05-28 17:32:22 +08:00
2026-08-27 12:50:30 +08:00
2026-08-30 12:05:36 +08:00
2026-08-30 12:05:36 +08:00
2026-08-25 00:55:50 +08:00
2026-08-23 17:43:39 +08:00
2026-05-28 17:32:22 +08:00
2026-07-29 18:25:08 +08:00
2026-08-28 00:31:31 +08:00
2026-08-11 11:34:14 +08:00
2026-08-23 18:20:29 +08:00
2026-08-28 00:31:31 +08:00
2026-08-28 00:31:31 +08:00
2026-08-28 00:31:31 +08:00
2026-08-28 00:31:31 +08:00
2026-08-11 11:29:39 +08:00
2026-07-12 17:46:08 +08:00
2026-08-30 10:27:01 +08:00
2026-08-28 18:03:47 +08:00
2026-08-28 09:59:07 +08:00
2026-08-23 18:20:29 +08:00
2026-07-12 17:46:08 +08:00
2026-08-26 21:40:00 +08:00
2026-07-12 17:46:08 +08:00
2026-08-26 07:51:39 +08:00
2026-08-30 07:33:20 +08:00
2026-08-23 17:53:37 +08:00
2026-08-28 18:03:47 +08:00
2026-07-12 17:46:08 +08:00
2026-07-22 12:58:04 +08:00
2026-07-19 10:07:46 +08:00
2026-08-23 18:20:29 +08:00
2026-08-11 11:29:39 +08:00
2026-07-12 17:46:08 +08:00
2026-07-16 17:30:35 +08:00
2026-08-27 15:51:19 +08:00
2026-08-21 16:28:23 +08:00
2026-08-28 18:03:47 +08:00
2026-07-22 18:22:48 +08:00
2026-08-27 15:59:55 +08:00
2026-05-28 17:32:22 +08:00
2026-08-26 23:45:20 +08:00
2026-08-21 16:49:11 +08:00
2026-08-27 12:50:30 +08:00
2026-08-27 10:59:56 +08:00
2026-05-28 17:32:22 +08:00
2026-05-28 17:32:22 +08:00
2026-08-26 22:38:37 +08:00
2026-08-25 00:25:11 +08:00
2026-08-18 09:54:56 +08:00
2026-07-12 17:46:08 +08:00
2026-07-21 23:41:40 +08:00
2026-08-11 11:32:30 +08:00
2026-08-10 23:40:31 +08:00
2026-08-07 17:42:26 +08:00
2026-05-28 17:32:22 +08:00
2026-05-28 17:32:22 +08:00
2026-08-28 18:03:47 +08:00
2026-08-10 23:15:19 +08:00
2026-08-26 23:25:44 +08:00
2026-08-28 18:03:47 +08:00