修复: 消息溯源P2切读确认完成 + 走查报告高优项
- P2 切读方案文档更新(确认批次B已上线) - query LIKE 通配符转义(project/idea/task/knowledge 4 repo) - dag.rs deep_merge null 覆盖全局配置 - dag.rs 通配 match 展开显式变体 - INDEX.md 补漏 10 个文档索引 - ARCHITECTURE.md 删除与新文档逐字重复 - coordinator.rs 加 #[deprecated] 编译守卫 - AiChat.vue 空值传播加 console.warn
This commit is contained in:
@@ -165,9 +165,10 @@ impl Default for Dag {
|
||||
///
|
||||
/// 规则:
|
||||
/// - 两端均为 Object:递归合并(同 key 时节点级覆盖全局级,新增 key 各自保留)。
|
||||
/// - 非两端 Object:节点级直接覆盖全局级(包括 `Null`,符合 JSON 显式空语义)。
|
||||
/// - 节点级为 `Null` 的语义是「显式置空」,按非 Object 规则覆盖(直接返回 Null);
|
||||
/// 若调用方希望「跳过节点配置」,应在构造 Dag 时不写入该 key(node_configs 缺失即用全局)。
|
||||
/// - 非 Object/Null 两端:节点级直接覆盖全局级。
|
||||
/// - 节点级为 `Null` 时跳过(保留全局配置),对应语义「节点未指定该配置」。
|
||||
/// 若调用方希望「显式置空」,应在构造 Dag 时不写入该 key(node_configs 缺失即用全局),
|
||||
/// 而非传 JSON null。
|
||||
///
|
||||
/// 用途:DagExecutor 构造 NodeContext 时 `deep_merge(initial_config, node_config)`,
|
||||
/// 让节点定义里写的 NodeDef.config 优先于 run_workflow 传入的全局 config。
|
||||
@@ -187,8 +188,15 @@ pub fn deep_merge(global: &serde_json::Value, node: &serde_json::Value) -> serde
|
||||
}
|
||||
Value::Object(merged)
|
||||
}
|
||||
// 非两端 Object:节点级覆盖全局级(含 Null、标量、数组)
|
||||
_ => node.clone(),
|
||||
// 节点级为 Null → 保留全局配置(不覆盖)
|
||||
(_, Value::Null) => global.clone(),
|
||||
// 显式覆盖剩余变体,防止新变体被 _ 吞没
|
||||
(Value::Number(_), _)
|
||||
| (Value::String(_), _)
|
||||
| (Value::Array(_), _)
|
||||
| (Value::Bool(_), _)
|
||||
| (Value::Null, _)
|
||||
| (Value::Object(_), _) => node.clone(),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -226,11 +234,10 @@ mod deep_merge_tests {
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn missing_node_config_treated_as_noop() {
|
||||
// DagExecutor 对缺失 key 的节点不调 deep_merge(直接用 global),此处覆盖语义对照:
|
||||
// 若强行把缺失视作 Null,应覆盖(显式空语义),与「缺失」不同(缺失走 if let Some 分支)。
|
||||
fn null_node_config_keeps_global() {
|
||||
// 节点级为 Null → 保留全局(不覆盖),区别于「缺失 key 不调 deep_merge」。
|
||||
let global = json!({"a": 1});
|
||||
assert_eq!(deep_merge(&global, &json!(null)), json!(null));
|
||||
assert_eq!(deep_merge(&global, &json!(null)), global);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
Reference in New Issue
Block a user