feat(bot-tier): M1 Bot侧高危建议创建通道+目标值直写收口 (P0-②分层授权)

- 新增 POST /api/cma/bot/ai/suggestions (bot_suggestions.py, X-BOT-KEY鉴权, L2)
  高危建议(kpi_target/budget_adjust/action_plan) status恒unapplied 等人审批
  source白名单(bot/rule)防冒充manual; entity多租户归属校验; 幂等防重
- risk_levels.py: API_RISK_MAP加新端点 + 文件头补写操作语义分级low/high说明
- 收口: bot/kpis/create-with-links 拒绝直写非零target_value(显式置0, 考核基准=人拍板)
- test_risk_levels: L2计数5→6; 新增test_bot_suggestion_channel 12条(鉴权/语义/多租户/幂等/审批闭环/审计)
This commit is contained in:
Hermes CI Fix
2026-09-03 18:08:27 +08:00
parent c45848bb34
commit 80fbc11cba
6 changed files with 422 additions and 6 deletions
+30 -1
View File
@@ -9,6 +9,34 @@ CMA Bot API 风险分级(L1-L4)与路由标注装饰器
L4 危险 — 不向Bot API开放(DROP/TRUNCATE/批量DELETE/生产结构修改)
安全底线: Bot API面不存在L4端点(0项开放 = 天然隔离)。
写操作语义分级(业务语义 low/high,2026-09-03 分层授权落地 P0-②)
============================================================
依据: CMA交互架构规范 v1 第5.1节 分层授权模型(任总拍板)——
考核基准类(KPI目标值/预算调整)→ Bot只能"建议",人拍板生效;
监测参数类(红黄绿阈值)→ Bot建议+人批量确认(P1待办,未开放Bot直写);
预算 = 三阶段分权(编制人定框架/执行Bot自动/调整人审批)。
low/high 与 L1-L4 是两套正交分级,勿混:
L1-L4 = 技术风险分级(操作面/写前校验/批量约束,本文件API_RISK_MAP)
low/high = 业务写语义分级(值是不是"考核基准/资源承诺")
关系: low 类 = 现有 L2/L3 直写端点行为不变(规则型数据写);
high 类 = Bot API面不提供直写端点,只提供建议通道端点(L2)。
端点归类清单(low=Bot直写+留痕 / high=建议通道人审批):
[low · 直写 KPI实际值/流水/验证记录](写库即生效,靠 audit_log/source_batch 留痕)
POST /api/cma/bot/kpi-value-with-check — 写KPI实际值+联动预警 (L2)
POST /api/cma/bot-bridge/kpi-result — 写KPI实际值 (source_batch) (L2)
POST /api/cma/bot-kpis/{kpi_id}/value — 写KPI当前值 (L2)
POST /api/cma/bot/import — Excel批量导入KPI实际值 (L3)
POST /api/cma/bot-bridge/mpm-result — MPM分析结果→KPI实际值 (L3)
POST /api/cma/bot-bridge/verify/{action_plan_id} — 验证ActionPlan执行 (L2, 轻量verify_log)
POST /api/cma/bot/okr/create — 创建OKR Objective (L2, 管理类业务写,保留评审: 2026-09-03 P1待办)
POST /api/cma/bot/kpis/create-with-links — 创建新KPI定义+因果链 (L3; 2026-09-03收口: 拒绝直写非零 target_value)
[high · 建议通道(端点只建 ai_suggestions, status=unapplied, 人 apply 后生效+apply_detail留痕)]
POST /api/cma/bot/ai/suggestions — Bot创建高危建议 (L2, 本任务新增)
说明: KPI目标值修改/预算调整 无任何Bot直写端点(grep实证)——
kpi_target/budget_adjust 的生效只经 /api/cma/ai/suggestions/{id}/apply(人token)。
"""
import functools
@@ -54,12 +82,13 @@ API_RISK_MAP = {
"GET /api/cma/bot-kpis": "L1",
# 本任务新增的只读端点
"GET /api/cma/bot/risk-levels": "L1",
# ── L2 业务写(4项方案清单 + okr/create单条业务写) ──
# ── L2 业务写(4项方案清单 + okr/create单条业务写 + bot建议通道) ──
"POST /api/cma/bot/kpi-value-with-check": "L2",
"POST /api/cma/bot-bridge/kpi-result": "L2",
"POST /api/cma/bot-kpis/{kpi_id}/value": "L2",
"POST /api/cma/bot-bridge/verify/{action_plan_id}": "L2",
"POST /api/cma/bot/okr/create": "L2", # 单条OKR创建(方案清单未列出,按单条业务写归类)
"POST /api/cma/bot/ai/suggestions": "L2", # Bot高危建议创建通道(写操作语义 high,见文件头注释;本身只建建议不直写考核基准)
# ── L3 批量写/创建(3项) ──
"POST /api/cma/bot/import": "L3",
"POST /api/cma/bot/kpis/create-with-links": "L3",