Files
mnote/bugs/07-ai/done/7-58-mindmap-p2-apply-ops-and-ui-smoke-gap-v1.md
T

58 lines
3.3 KiB
Markdown
Raw Normal View History

2026-06-01 09:29:12 +08:00
# 7-58 Mindmap P2 apply_ops 与真实 UI smoke 缺口
## 状态
- 状态:done
- Owner07-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`