Hermes CI Fix
ac645a56ee
fix(security): ai_analysis多租户隔离缺口 + dashboard预警计数 + bot_kpis归属 + cost账套过滤 + kpis create白名单 (OpenCode审查20260907)
- ai_analysis: generate_rule_suggestions pending预警按entity过滤; kpi_analysis归属校验404;
dashboard-analysis-stream/ask/review-plans 补 get_entity_id + KPI/ActionPlan/KPIAlert 全按账套过滤;
stream cache key 含 entity_id (原跨企业串缓存)
- dashboard: summary alert_count 补 KPIAlert.entity_id 过滤 (kpi_total 已有)
- bot_kpis: update_bot_kpi_value 归属校验 404 (原任意登录可改他企 bot KPI)
- cost: ActualCost/StandardCost 确认多企业共用 → cost_overview/variance/breakdown/dashboard
补 entity 过滤(engine 函数加 entity_id 透传); dashboard total_cost 既有 KeyError 修复
- kpis: create_kpi 字段白名单 (仿 UPDATE_KPI_WHITELIST+kpi_code), 拦截 status/important_flag 注入
- tests: 新增 test_multitenant_ai_20260907.py 11条越权用例 (跨entity 404/空返回断言)
- 全量 pytest: 745 passed / 10 failed(与基线 HEAD 一致, 存量问题非本次引入) / 1 xfailed
2026-09-07 10:22:24 +08:00
..
2026-05-28 17:32:22 +08:00
2026-08-31 07:44:00 +08:00
2026-09-07 10:22:24 +08:00
2026-08-31 09:07:54 +08:00
2026-08-31 10:14:22 +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-30 19:16:19 +08:00
2026-09-03 18:08:27 +08:00
2026-08-28 00:31:31 +08:00
2026-09-07 10:22:24 +08:00
2026-09-03 18:08:27 +08:00
2026-08-11 11:29:39 +08:00
2026-07-12 17:46:08 +08:00
2026-08-31 18:28:11 +08:00
2026-08-28 18:03:47 +08:00
2026-09-06 16:47:25 +08:00
2026-09-06 16:57:03 +08:00
2026-09-03 01:34:13 +08:00
2026-09-07 10:22:24 +08:00
2026-07-12 17:46:08 +08:00
2026-09-07 10:22:24 +08:00
2026-08-26 07:51:39 +08:00
2026-08-31 10:14:22 +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-09-03 23:09:58 +08:00
2026-09-03 23:00:15 +08:00
2026-08-27 15:51:19 +08:00
2026-08-21 16:28:23 +08:00
2026-09-07 10:22:24 +08:00
2026-07-22 18:22:48 +08:00
2026-08-31 10:14:22 +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-31 10:14:22 +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-30 19:16:19 +08:00
2026-08-26 23:25:44 +08:00
2026-08-28 18:03:47 +08:00