chore: 收口 review 执行清单与 runtime 验证

- 补齐 design/10-review 执行清单、验收标准与相关设计治理记录

- 迁移已完成的 tree、mindmap、runtime fallback、AI kernel 等设计和缺陷条目

- 推进 Rust Web runtime、tree/sidebar、page aggregate、mindmap 与 OnlyOffice 路由侧验证支撑

- 增加 task177-task180 smoke/audit 脚本及前端相关测试覆盖
This commit is contained in:
lix-2026
2026-05-14 05:52:08 +08:00
parent b4a452a8b7
commit 96e03645f7
69 changed files with 4780 additions and 979 deletions
+108 -12
View File
@@ -376,17 +376,27 @@ pub async fn execute_convex_query_by_name(
fn convex_command_args_for_plan(plan: &RuntimeCommandExecutionPlan) -> Value {
let mut args = plan.args_json.clone();
if matches!(
plan.command_name.as_str(),
"tree.node.create"
| "tree.node.rename"
| "tree.node.archive"
| "tree.node.restore"
| "tree.subtree.move"
| "documents.create"
| "documents.title.update"
| "documents.delete"
| "documents.restore"
| "documents.move"
) {
strip_tree_artifact_fields(&mut args);
}
if matches!(plan.command_name.as_str(), "mindmaps.put")
|| matches!(plan.function_name.as_str(), "mindmaps:put")
{
if let Value::Object(map) = &mut args {
// Rust plan 保留 tree domain event / stream hint 作为正式契约;
// Convex mindmaps.put legacy validator 仍只接收真实写入字段。
map.remove("streamDeltaHint");
map.remove("domainEventHint");
map.remove("domainEventPlan");
map.remove("domainEventPlans");
}
// Rust plan 保留 tree domain event / stream hint 作为正式契约;
// Convex mindmaps.put legacy validator 仍只接收真实写入字段。
strip_tree_artifact_fields(&mut args);
}
if matches!(
plan.command_name.as_str(),
@@ -397,11 +407,16 @@ fn convex_command_args_for_plan(plan: &RuntimeCommandExecutionPlan) -> Value {
// Rust plan 保留正式事件契约,但发送给 legacy mutation 时只传它实际接受的字段。
map.remove("editorDocument");
map.remove("tiptapDocument");
map.remove("streamDeltaHint");
map.remove("domainEventHint");
map.remove("domainEventPlan");
map.remove("domainEventPlans");
}
strip_tree_artifact_fields(&mut args);
}
if matches!(
plan.command_name.as_str(),
"documents.options.update" | "page.layout.updateOptions"
) {
// documents:updateOptions 仍只接收页面设置字段;
// tree stream hint 留在 Rust artifact plan 中持久化。
strip_tree_artifact_fields(&mut args);
}
if plan.command_name == "mindmap.command.apply" {
if let Value::Object(map) = &mut args {
@@ -418,6 +433,15 @@ fn convex_command_args_for_plan(plan: &RuntimeCommandExecutionPlan) -> Value {
args
}
fn strip_tree_artifact_fields(args: &mut Value) {
if let Value::Object(map) = args {
map.remove("streamDeltaHint");
map.remove("domainEventHint");
map.remove("domainEventPlan");
map.remove("domainEventPlans");
}
}
pub async fn execute_convex_command_plan(
config: &AppConfig,
context: &RequestContext,
@@ -900,6 +924,78 @@ mod tests {
);
}
#[test]
fn convex_command_args_strips_page_options_artifacts_for_legacy_mutation() {
let plan = RuntimeCommandExecutionPlan {
command_name: "page.layout.updateOptions".into(),
command_id: "cmd_options_1".into(),
function_name: "documents:updateOptions".into(),
workspace_id: Some("ws_1".into()),
request_id: "req_1".into(),
trace_id: "trace_1".into(),
actor_id: "actor_1".into(),
idempotency_key: None,
source: json!({}),
payload_json: "{}".into(),
args_json: json!({
"id": "doc_1",
"options": {
"showToc": false,
"layoutDensity": "compact",
},
"streamDeltaHint": {"family": "tree"},
"domainEventHint": {"eventType": "page.layout.options_updated"},
"domainEventPlan": {"eventType": "page.layout.options_updated"},
"domainEventPlans": [{"eventType": "page.layout.options_updated"}],
}),
};
let args = convex_command_args_for_plan(&plan);
assert_eq!(
args,
json!({
"id": "doc_1",
"options": {
"showToc": false,
"layoutDensity": "compact",
},
})
);
}
#[test]
fn convex_command_args_strips_tree_archive_artifacts_for_legacy_mutation() {
let plan = RuntimeCommandExecutionPlan {
command_name: "tree.node.archive".into(),
command_id: "cmd_archive_1".into(),
function_name: "documents:softDelete".into(),
workspace_id: Some("ws_1".into()),
request_id: "req_1".into(),
trace_id: "trace_1".into(),
actor_id: "actor_1".into(),
idempotency_key: None,
source: json!({}),
payload_json: "{}".into(),
args_json: json!({
"id": "doc_1",
"streamDeltaHint": {"family": "tree", "kind": "remove_document"},
"domainEventHint": {"eventType": "tree.node.archived"},
"domainEventPlan": {"eventType": "tree.node.archived"},
"domainEventPlans": [{"eventType": "tree.node.archived"}],
}),
};
let args = convex_command_args_for_plan(&plan);
assert_eq!(
args,
json!({
"id": "doc_1",
})
);
}
#[test]
fn convex_command_args_adapts_mindmap_command_apply_for_legacy_mutation() {
let plan = RuntimeCommandExecutionPlan {