# 7-32 [done][bug] markdown_edit 直接 page.body.save 时丢失 revision / conflictDetectionKey v1

> 发现时间：2026-05-18
>
> 状态：`[done]`
>
> 关联主线：`07-ai`

## 1. 问题定义

7-27 后，在线 `mnote.doc.markdown_edit` 不再通过空 `block_ops` 写回，而是以最终 Markdown 生成 `content` 后直接执行 `page.body.save`。

旧实现构造的写入 payload 只包含：

- `documentId`
- `workspaceId`
- `content`
- `mode`

没有携带当前 Page Aggregate 的 `revision` 与 `conflictDetectionKey`。

## 2. 影响

AI markdown 主路径可能基于旧快照覆盖用户并发编辑，绕过 7-22 已补到 `apply_block_ops` 的写前置条件。

## 3. 修复

- 在线 `markdown_edit` 写回前读取当前 Page Aggregate。
- 构造 `page.body.save` payload 时带入：
  - `/body/revision`
  - `/body/conflictDetectionKey`
- 新增回归测试检查 command artifact payload 中真实携带这两个字段。

## 4. 验证

RED：

```bash
cargo test --manifest-path rust/Cargo.toml -p mnote-web hermes_tools_markdown_edit_online_page_body_save_carries_revision_conflict_key -- --nocapture
```

旧实现失败，artifact payload 中 `revision` 为 `Null`。

GREEN：

```bash
cargo test --manifest-path rust/Cargo.toml -p mnote-web hermes_tools_markdown_edit_online_page_body_save_carries_revision_conflict_key -- --nocapture
```

结果：`1 passed`。
