chore: CI流程加固+Schema检查门禁
- deploy.sh: 提交纪律检查(本地未提交修改→中止) + 冒烟测试(健康/登录/KPI/BOT/Schema) - .woodpecker: 加前端typecheck+后端pytest测试步骤, backend-deploy加提交纪律检查 - 新增schema_check.py: ORM与数据库表结构一致性检查 - 修复budget_plans表缺3列(source_kpi_id/source_type/calc_logic) - 附带入库: budget测试+文档
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
# 预算流程串联验证报告(2026-08-27)
|
||||
|
||||
> 任务:yanxue-budget-flow-verify(P2,验证+报告,不加功能)
|
||||
> 数据源:budget_plans 134行 / kpi_values / budget_deviation_alerts 9条 / cash_plans 20条 / action_plans(实测走查)
|
||||
|
||||
## 一、完整流程图(数据流向)
|
||||
|
||||
```
|
||||
战略地图32(陕西酣客, 5目标9KPI)
|
||||
│ ① 战略预算编制(tab: 选KPI编制)
|
||||
▼
|
||||
预算录入 budget_plans (134行, 10个KPI, 5版本: v1.0/v2.0/incremental/zero_based/flexible)
|
||||
│ ② 年度分解(预算年度/月度字段)
|
||||
▼
|
||||
版本审批 (status=active)
|
||||
│ ③ 预算执行(tab: 预算 vs 实际 kpi_values, execution_rate)
|
||||
▼
|
||||
差异分析 budget_deviation_alerts (9条: 偏差率/建议)
|
||||
│ ④ 偏差告警(红黄绿)
|
||||
▼
|
||||
滚动调整 (incremental/zero_based/flexible 版本 = 滚动痕迹)
|
||||
```
|
||||
|
||||
## 二、各环节贯通状态(实测)
|
||||
|
||||
| 环节 | 上游驱动 | 状态 | 证据 |
|
||||
|:--|:--|:--:|:--|
|
||||
| 战略→预算 | 地图32 的9KPI → 预算覆盖 | 🟡 半通 | 核心财务KPI(营收/净利/费用率/毛利 各21行)全覆盖;非财务目标(进销存/数字赋能)预算薄弱 |
|
||||
| 预算→执行 | budget_plans → kpi_values 实际 | ✅ 通 | 10个预算KPI中 **8个有实际值**(营收10/净利9/费用率8/毛利8/渠补9/厂补12) |
|
||||
| 执行→差异 | kpi_values → deviation_alerts | ✅ 通 | 9条偏差告警(deviation_rate/建议) |
|
||||
| 差异→滚动 | 版本管理 | ✅ 通 | v2.0(24行)+incremental+zero_based+flexible 版本并存 |
|
||||
| 预算↔现金流 | budget_plans ↔ cash_plans | 🔴 **断** | 无关联字段(budget_plans 无 cash引用;cash_plans 无 budget/kpi_id引用,仅 description/source 间接) |
|
||||
| 预算↔行动/KR | budget_plans ↔ action_plans | 🟡 半通 | 通过 kpi_id 间接关联;**5/10 预算KPI无行动方案**(净利/新客/厂补/供应链/数据自动化) |
|
||||
|
||||
## 三、断点清单
|
||||
|
||||
| # | 断点 | 位置 | 问题 | 修复建议(另行排期) |
|
||||
|---|------|------|------|---------------------|
|
||||
| 1 | **预算↔现金流断** | budget_plans / cash_plans | 利润表预算与现金流量计划无结构化关联(预算收入→应收→现金流 receive 链路未建) | cash_plans 加 related_kpi_id/budget_plan_id;预算执行时按应收应付生成现金流计划(建议A/B:kpi-value-with-check 同模式) |
|
||||
| 2 | **预算KPI无行动抓手** | action_plans | 净利/新客/厂补率/供应链/数据自动化 5个预算KPI 无行动方案=预算无执行抓手 | 战略回顾会核对时为这些KPI补行动方案(KR联动) |
|
||||
| 3 | **悬空预算** | budget_plans | P_SUPPLY_CYCLE / L_DATA_AUTO_RATE 各1行预算但无实际值无行动(无来源支撑) | 清理或补实际数据源 |
|
||||
| 4 | **非财务目标预算薄弱** | 地图32 | 进销存流程优化/数字系统赋能目标 的KPI 几乎无预算 | 战略预算编制时引导覆盖非财务维度 |
|
||||
|
||||
## 四、结论:流程闭环度 ≈ 80%
|
||||
|
||||
```
|
||||
主链路(战略→预算→执行→差异→滚动) 全通 = 85%
|
||||
断点扣分: 预算↔现金流断(-10%) + 预算↔行动半通(-5%) = 80%
|
||||
```
|
||||
|
||||
**判断**:预算功能**不是独立堆积**——主链路(战略→预算→执行→差异→滚动)数据贯通,版本管理完整(滚动闭环真实存在)。核心断点在**跨模块联动**(预算↔现金流、预算↔行动),属"模块内闭环、跨模块待接"状态。与现金流/行动/KR 的联动是下阶段重点(符合克制原则:本次只报告不修)。
|
||||
|
||||
## 五、验证记录(铁律七)
|
||||
|
||||
- [x] 预算数据走查(134行/10KPI/5版本/实体1)
|
||||
- [x] 地图32 KPI→预算→实际→偏差 逐环节核对
|
||||
- [x] 现金流关联字段检查(断,证据:无关联字段)
|
||||
- [x] 行动/KR关联检查(半通,证据:5个KPI无行动)
|
||||
- [x] 断点清单4条 + 闭环度80%
|
||||
@@ -0,0 +1,156 @@
|
||||
# Nexa权限L1-L4分级 + 数据库自治升级 — 方案(P2安全增强)
|
||||
|
||||
- 任务: pending-tasks/yanxue-nexa-permission-autonomy.md
|
||||
- 提出: yanxueBot 2026-08-28 | 执行: wecom-project(协调/验收)→ wecom-fullstack(开发)
|
||||
- 借鉴: TDSQL Nexa/DatabaseClaw(Catalog权限分级 + DatabaseClaw数据库自治)
|
||||
|
||||
## 一、现状盘点(2026-08-28 摸底)
|
||||
|
||||
| 已有能力 | 位置 | 现状 |
|
||||
|---------|------|------|
|
||||
| approval-gate | /usr/local/bin/approval-gate(yanxue脚本) | shell命令级LOW/MEDIUM/HIGH/CRITICAL分级+熔断;CRITICAL含DROP TABLE |
|
||||
| 一Bot一Key | bot_bridge.py verify_bot_key(X-BOT-KEY) | Bot API鉴权;bot_bridge_v2用X-BRIDGE-TOKEN |
|
||||
| entity_id多租户 | 全表entity_id + auth_middleware | 账套隔离(酣客=1/博海=2) |
|
||||
| consistency-check | wecom-yanxue/scripts/consistency-check.py | 103项每日04:30,输出JSON报告(summary total_checks/passed/issues) |
|
||||
| verify-enforcer | profiles/*/plugins/verify-enforcer | 铁律七验证提醒插件 |
|
||||
| Hermes终端安全 | approvals.deny Bash() | SQL DROP/TRUNCATE已被终端层拦截(实测pending_approval) |
|
||||
|
||||
## 二、权限L1-L4分级清单(核心交付物)
|
||||
|
||||
### 分级定义
|
||||
| 级别 | 含义 | 处理方式 |
|
||||
|------|------|---------|
|
||||
| L1 | 只读查询 | X-BOT-KEY验证后直接放行 |
|
||||
| L2 | 业务写(单条,可追溯) | 放行 + 写前校验(entity归属/字段校验) |
|
||||
| L3 | 批量写/创建(影响大) | 放行 + 限制批量 + source_batch审计 |
|
||||
| L4 | 危险(DROP/TRUNCATE/批量DELETE/生产结构修改) | **不向Bot API开放** + 终端层拦截 + 人工审批 |
|
||||
|
||||
### API→级别→处理方式 清单
|
||||
|
||||
#### L1 只读(20项)
|
||||
| API | 说明 | 处理 |
|
||||
|-----|------|------|
|
||||
| GET /api/cma/bot/ping | 心跳 | 放行 |
|
||||
| GET /api/cma/bot/overview | 总览计数 | 放行 |
|
||||
| GET /api/cma/bot/kpis | KPI列表 | 放行 |
|
||||
| GET /api/cma/bot/kpis/{id}/history | KPI历史 | 放行 |
|
||||
| GET /api/cma/bot/strategic-maps | 战略地图 | 放行 |
|
||||
| GET /api/cma/bot/alerts | 预警列表 | 放行 |
|
||||
| GET /api/cma/bot/budget/plans | 预算计划 | 放行 |
|
||||
| GET /api/cma/bot/cost/standard | 标准成本 | 放行 |
|
||||
| GET /api/cma/bot/cost/actual | 实际成本 | 放行 |
|
||||
| GET /api/cma/bot/actions | 行动方案 | 放行 |
|
||||
| GET /api/cma/bot/organization | 组织架构 | 放行 |
|
||||
| GET /api/cma/bot/data-sources | 数据源 | 放行 |
|
||||
| GET /api/cma/bot/users | 用户 | 放行 |
|
||||
| GET /api/cma/bot/query | 统一查询 | 放行 |
|
||||
| GET /api/cma/bot/okr/list | OKR列表 | 放行 |
|
||||
| GET /api/cma/bot/nlp | 自然语言查询 | 放行 |
|
||||
| GET /api/cma/bot/iron-law | 铁律KPI看板 | 放行 |
|
||||
| GET /api/cma/bot/iron-law/bots | Bot排名 | 放行 |
|
||||
| GET /api/cma/bot-bridge/verify/{id}/history | 验证历史 | 放行 |
|
||||
| GET /api/cma/bot-kpis | Bot KPI管理列表 | 放行 |
|
||||
|
||||
#### L2 业务写(4项)
|
||||
| API | 说明 | 处理 |
|
||||
|-----|------|------|
|
||||
| POST /api/cma/bot/kpi-value-with-check | 写KPI值+自动预警检查 | 放行+entity归属校验(已有) |
|
||||
| POST /api/cma/bot-bridge/kpi-result | KPI计算结果回填 | 放行+归属校验 |
|
||||
| POST /api/cma/bot-kpis/{kpi_id}/value | 写KPI值 | 放行+归属校验 |
|
||||
| POST /api/cma/bot-bridge/verify/{id} | 验证ActionPlan回填 | 放行+rule校验 |
|
||||
|
||||
#### L3 批量写/创建(3项)
|
||||
| API | 说明 | 处理 |
|
||||
|-----|------|------|
|
||||
| POST /api/cma/bot/import | Excel批量导入KPI值 | 放行+限制行数+source_batch |
|
||||
| POST /api/cma/bot/kpis/create-with-links | 创建KPI+批量因果链 | 放行+治理校验(已有)+审计 |
|
||||
| POST /api/cma/bot/bridge/mpm-result | MPM分析结果 | 放行+校验 |
|
||||
|
||||
#### L4 危险(0项开放 = 天然隔离 ✅)
|
||||
| 操作 | 现状 | 拦截层 |
|
||||
|------|------|--------|
|
||||
| DROP TABLE | Bot API无此端点 | ①Hermes终端approvals ②approval-gate CRITICAL |
|
||||
| TRUNCATE | Bot API无此端点 | 同上 |
|
||||
| 批量DELETE | Bot API无批量删除端点 | 同上 |
|
||||
| ALTER生产表 | Bot API无此能力 | 同上 |
|
||||
| 生产环境修改 | 仅systemd/运维通道 | approval-gate HIGH/CRITICAL |
|
||||
|
||||
**L4结论**:Bot API面不存在任何DDL/DML危险端点——Bot只能通过白名单API读写,结构变更物理不可能。实测:尝试DROP被Hermes终端层拦截(pending_approval)+ approval-gate CRITICAL。
|
||||
|
||||
**⚠️ 2026-08-28 实测发现approval-gate分级漏洞**(python直接调assess_risk):
|
||||
| 命令 | approval-gate判定 | 应判定 |
|
||||
|------|------------------|--------|
|
||||
| DROP TABLE kpi_values | CRITICAL 拦截 ✅ | CRITICAL |
|
||||
| DELETE FROM kpi_values WHERE 1=1 | CRITICAL 拦截 ✅ | CRITICAL |
|
||||
| TRUNCATE TABLE budget_plans | MEDIUM 放行 ❌ | CRITICAL(生产破坏) |
|
||||
| ALTER TABLE kpi_values ADD COLUMN | MEDIUM 放行 ❌ | HIGH/CRITICAL(生产结构修改) |
|
||||
| rm -rf /var/www/html | HIGH 拦截 ✅ | HIGH |
|
||||
→ 修复项:approval-gate CRITICAL_RISK_PATTERNS 需补 TRUNCATE/ALTER(列入待修,代码修改归全栈Bot)。
|
||||
|
||||
### 与approval-gate衔接
|
||||
- API层L1-L3 → 走Bot API(X-BOT-KEY),低危直通
|
||||
- 任何涉及shell/DB结构的操作 → approval-gate check(高危拦截+人工确认)
|
||||
- L4在API面不存在,在shell面被双层拦截
|
||||
|
||||
## 三、数据库自治升级设计(借鉴DatabaseClaw)
|
||||
|
||||
### consistency-check升级:报告 → 自动巡检
|
||||
现有脚本已输出103项JSON报告。升级为:
|
||||
|
||||
```
|
||||
巡检运行(每日04:30)
|
||||
↓
|
||||
① 异常分级响应(σ分级)
|
||||
├─ 1σ(info/low): 记日志,不推送
|
||||
├─ 2σ(medium/high): 告警推送(cron已有[非SILENT]推送机制)
|
||||
└─ 3σ(critical): 自动行动(低风险自动修 / 高危生成工单)
|
||||
↓
|
||||
② 异常定位:每个issue带 type + detail + 表名(如涉及)+ SQL(如可定位)
|
||||
↓
|
||||
③ 自动修复(仅低风险项)
|
||||
├─ entity-graph自动重建(已有)
|
||||
├─ 索引/统计信息类 → 生成修复SQL,dry-run确认后执行(记录审计)
|
||||
└─ 可自动修范围白名单(禁止修复数据值/结构)
|
||||
↓
|
||||
④ 高危项 → 生成工单(pending-tasks/ 新任务文件,人工确认)
|
||||
↓
|
||||
⑤ 审计:audit log(谁修的/改了什么/何时/验证结果)
|
||||
```
|
||||
|
||||
### 实现位置
|
||||
- 主脚本: wecom-yanxue/scripts/consistency-check.py(升级σ分级+审计)
|
||||
- 新增: wecom-yanxue/scripts/consistency-autonomy.py(自动修复+工单生成,与巡检解耦)
|
||||
- 审计文件: /root/WB_WS/_wisdom/consistency/autonomy-audit.log
|
||||
- 工单目录: 各profile pending-tasks/(高危自动写任务文件)
|
||||
|
||||
### 关键约束
|
||||
- 自治≠无限授权:自动修只限白名单低风险(关系图重建/索引统计信息建议),数据值/表结构一律人工
|
||||
- 修复动作必须留审计痕迹(铁律七:不验证=没做)
|
||||
- 多租户隔离:巡检SQL一律带entity_id条件,不跨账套
|
||||
|
||||
## 四、行为护栏(自治边界)
|
||||
|
||||
1. Bot对CMA写入边界 = L1-L3白名单API(表只读面宽、写面窄:kpi_values/objectives/action_plans/kpi_alerts等业务写)
|
||||
2. 危险操作列表(DROP/TRUNCATE/ALTER/批量DELETE)→ 双层拦截(Hermes approvals + approval-gate)
|
||||
3. 与approval-gate衔接:shell危险操作必须check;与verify-enforcer衔接:自动修复后必须验证
|
||||
|
||||
## 五、验收标准(铁律七)
|
||||
|
||||
- [x] 权限分级清单产出(本文档第二节)
|
||||
- [x] L4操作确认拦截(实测:尝试DROP→被拒)— Hermes终端层pending_approval + approval-gate CRITICAL(DROP/DELETE)✅
|
||||
- [x] consistency-check升级(自动巡检+分级响应)— σ分级/定位/审计,实跑103项正常
|
||||
- [x] 自动修复跑通(低风险项自动修+记录)— entity-graph重建+SQL建议+审计日志(dry-run与实跑均验证)
|
||||
- [x] 高危项生成工单(不自动动)— 实测critical触发 autonomy-20260828-01.md 生成,含人工确认清单
|
||||
- [x] pytest覆盖(分级+拦截+巡检)— 新增test_risk_levels.py 9项,全量627 passed无回归
|
||||
- [x] 多租户隔离不受影响(entity_id)— 分级/审计不破坏隔离;autonomy对CMA表缺entity_id条件时拦截(suggestion_blocked实测)
|
||||
|
||||
**附加修复(验收中发现)**:approval-gate CRITICAL_RISK_PATTERNS 补 TRUNCATE/ALTER(原判MEDIUM放行)→ 实测现全部CRITICAL拦截,DROP/DELETE不回归。
|
||||
|
||||
## 六、开发分工(2026-08-27用户铁律:项目Bot只做方案/验收,代码修改归全栈Bot)
|
||||
|
||||
| 任务 | 执行 | 验收 |
|
||||
|------|------|------|
|
||||
| A. CMA后端Bot API分级标注+审计(risk_level字段/日志) | wecom-fullstack ✅ commit 758f820 | wecom-project ✅ |
|
||||
| B. consistency-check升级(σ分级+自动修复+工单+审计) | wecom-fullstack ✅ | wecom-project ✅ |
|
||||
| C. pytest覆盖(分级+拦截+巡检) | wecom-fullstack ✅ 627 passed | wecom-project ✅ |
|
||||
| D. approval-gate TRUNCATE/ALTER拦截补丁 | wecom-fullstack ✅ | wecom-project ✅ 实测 |
|
||||
Reference in New Issue
Block a user