修复+重构: 全库走查真bug+架构+P1/P2 后端 crate

- df-nodes: schema required 对齐 + docker POSIX 注入防御 + HumanNode timeout 1800 + parse_review_json(verdict规范/score clamp/正则兜底)
- df-mcp: update 实体校验(防跨实体 B-260801-01)
- df-storage: keyring 迁移失败达阈值清除明文
- df-ai: router estimated_context+tier tiebreak+DataReadOnly 兜底 + sanitize step4 显式不制造 orphan
- df-ideas: adversarial tier:None 对齐
This commit is contained in:
lxy
2026-08-02 10:44:09 +08:00
parent f1773dde4f
commit ea309c607b
11 changed files with 1512 additions and 96 deletions
+13 -1
View File
@@ -13,6 +13,10 @@ use df_types::events::{SelectType, WorkflowEvent};
#[allow(unused_imports)]
use crate::human_node_helpers::{contains_reject, is_reject_decision};
/// 默认审批超时(秒)。
/// 1800s = 30min,合理审批窗口。原 3600s(1h)过长,用户忘关致任务挂 1h。
const DEFAULT_TIMEOUT_SECS: u64 = 1800;
/// 人工审批节点(阻塞节点)
pub struct HumanNode;
@@ -36,9 +40,10 @@ impl Node for HumanNode {
.collect())
.unwrap_or_else(|| vec!["同意".into(), "拒绝".into()]);
// 默认 1800s(30min):合理审批窗口。原 3600s(1h)过长,用户忘关致任务挂 1h。
let timeout_secs = config.get("timeout_secs")
.and_then(|v| v.as_u64())
.unwrap_or(3600);
.unwrap_or(DEFAULT_TIMEOUT_SECS);
// 解析 select_type(缺省 Single,向后兼容)。非 "multiple" 一律按 Single 处理。
let select_type = match config.get("select_type").and_then(|v| v.as_str()) {
@@ -830,4 +835,11 @@ mod tests {
assert!(contains_reject(&["同意".into()]) == false);
assert!(contains_reject(&["同意".into(), "拒绝".into()]) == true);
}
/// 默认审批超时 1800s(30min)。
/// 回归保护:防止有人无意改回 3600s(1h 过长,用户忘关致任务挂 1h)。
#[test]
fn default_timeout_is_1800_secs() {
assert_eq!(DEFAULT_TIMEOUT_SECS, 1800, "默认审批超时应为 1800s(30min)");
}
}