# 7-58 Mindmap P2 apply_ops 与真实 UI smoke 缺口 ## 状态 - 状态:done - Owner:07-ai / mindmap resource skill / Page AI target runtime - 发现时间:2026-06-01 ## 现象 Mindmap skill 和资源 target 已有最小闭环:`fetch`、`create_from_outline`、`apply_ops` 基础工具、`mnote-mindmap` skill 注册、`task503` 和 `task525` smoke 已覆盖 API/target 绑定。但 P2 第二批仍缺 apply_ops 操作白名单文档化、长文本节点策略和真实 UI 交互 smoke。 ## 证据 - `rust/crates/mnote-web/src/hermes_tools/resource.rs` 已有 mindmap `fetch/apply_ops/create_from_outline` 入口。 - `scripts/task503-mindmap-skill-capability-smoke.js` 覆盖 skill、create_from_outline、fetch、embed。 - `scripts/task525-page-ai-mindmap-resource-target-smoke.js` 覆盖 mindmap resource tab / Page AI targetPackage。 - 当前缺口未在独立 bugs/process 中跟踪;历史相关 bug `7-48/7-51/7-52` 已作为各自窄问题归档。 ## 影响 - agent 可以调用 mindmap 工具,但不清楚 `apply_ops` 的稳定操作白名单和限制。 - 长文本节点可能破坏 mindmap 渲染或 agent 输出可读性。 - 现有 smoke 偏 API/target 合同,未覆盖用户真实 UI 交互,例如节点编辑、拖拽、导出等。 ## 下一步 1. 已文档化 `apply_ops` 支持的操作白名单、payload schema、dry-run/revision 规则和失败形态。 2. 已为关键 ops 增加 Rust 单测,覆盖成功、别名、delete、dry-run、revision mismatch、越权/只读拒绝、unsupported op、invalid ops payload、禁止删除 root。 3. 已在 skill prompt 中明确长文本节点压缩策略:短语化、避免长段落,拆成 child nodes。 4. 已用真实 mindmap UI smoke 覆盖打开、插入、渲染、样式抽屉默认状态、slash 菜单层级和 resize 基础交互。 ## 验收 - [x] `apply_ops` 白名单与限制写入 design / skill。 - [x] `hermes_tools_mindmap_apply_ops_*` targeted tests 覆盖核心操作。 - [x] 长文本节点策略有测试或明确降级说明。 - [x] 至少一条真实 mindmap UI browser smoke 通过并登记到 `scripts/TESTING_REFERENCE.md`。 ## 2026-06-01 修复记录 - `skills/mnote-mindmap/SKILL.md` 已新增 `Current apply_ops contract`,明确支持 `updateText/updateNode`、`insertChild/addChild`、`deleteNode`,记录 `nodeId/id`、`text/title`、`parentId/nodeId` 等 payload schema、未知 op 拒绝、禁止删除 root、长文本短语化/拆子节点、`dryRun` 与 revision checks。 - `rust/crates/mnote-web/src/routes/hermes_tools.rs` 已补齐 apply_ops targeted tests: - `hermes_tools_mindmap_apply_ops_accepts_common_aliases` - `hermes_tools_mindmap_apply_ops_deletes_child_node` - `hermes_tools_mindmap_apply_ops_dry_run_returns_diff_without_writing` - `hermes_tools_mindmap_apply_ops_rejects_invalid_ops_payload` - `hermes_tools_mindmap_apply_ops_rejects_root_delete` - `hermes_tools_mindmap_apply_ops_rejects_unsupported_op` - 已通过: - `cargo test --manifest-path rust/Cargo.toml -p mnote-web hermes_tools_mindmap_apply_ops -- --test-threads=1` - `node --check scripts/task455-local-folder-mindmap-clean-smoke.js` - `MNOTE_WEB_SMOKE_BASE_URL=http://127.0.0.1:3303 node scripts/task455-local-folder-mindmap-clean-smoke.js` 真实 UI smoke 结果: - `tmp/task455-local-folder-mindmap-clean-smoke/result.json`