Files
mnote/bugs/07-ai/process/7-21-markdown-edit-local-write-contract-bypass-v1.md
T

34 lines
1.3 KiB
Markdown
Raw Normal View History

# 7-21 [process][bug] mnote.doc.markdown_edit 本地文件写入绕过 dryRun / idempotency v1
> 发现时间:2026-05-17
>
> 状态:`[process]`
>
> 关联主线:`07-ai`
## 1. 问题定义
`mnote.doc.markdown_edit` 的本地文件分支没有调用统一写入合同校验,也没有检查 `dryRun``idempotencyKey`,在匹配成功后直接 `fs::write`
## 2. 证据
- [doc.rs](/mnt/Data1T/mnote/rust/crates/mnote-web/src/hermes_tools/doc.rs:714) 进入 `doc_markdown_edit` 后没有先调用 `ensure_write_contract`
- [doc.rs](/mnt/Data1T/mnote/rust/crates/mnote-web/src/hermes_tools/doc.rs:842) 注释说明本地文件直接写回。
- [doc.rs](/mnt/Data1T/mnote/rust/crates/mnote-web/src/hermes_tools/doc.rs:845) 对本地路径执行 `fs::write`
## 3. 影响
- `dryRun=true` 时也可能落盘,违反工具预览语义。
- 缺少幂等键会让重试请求重复写入,尤其是 ACP / Hermes 断线重试场景。
- 本地 `.md` 与在线 Convex 文档的写入安全级别不一致。
## 4. 建议修复
-`doc_markdown_edit` 写入前统一调用 `ensure_write_contract`
-`dryRun=true` 返回 diff / preview,不落盘。
- 增加本地 `.md` dryRun 单测,断言文件内容不变。
## 5. 状态
已确认源码层缺陷,尚未修复。