67 lines
3.6 KiB
Markdown
67 lines
3.6 KiB
Markdown
# Worker A:7-27 归档性审查结果
|
||||
|
|
|
|||
|
|
> 审查时间:2026-05-20
|
|||
|
|
> 审查范围:`design/07-ai/process/7-27-online-markdown-writeback-final-content-truth-v2.md` × 当前 Rust 代码
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 1. 对照步骤 1-6 的完成状态
|
|||
|
|
|
|||
|
|
| 步骤 | 内容 | 状态 | 证据 |
|
|||
|
|
|------|------|------|------|
|
|||
|
|
| 步骤 1 | 增强 `blocks_to_markdown`:注释格式加 type/rev,复杂块用 raw marker | ✅ 已实现 | `doc.rs:1185-1215` — 输出 `<!-- block:id:type:level=N -->` 和 `[mnote-raw-block:id]` |
|
|||
|
|
| 步骤 2 | 实现 `parse_final_markdown_to_blocks` | ✅ 已实现 | `doc.rs:656-747` — 完整实现含正则提取、fuzzy 回退、复杂块保留 |
|
|||
|
|
| 步骤 3 | 实现 `build_page_content` | ✅ 已实现 | `doc.rs:850-913` — 含新块 ID 生成、复杂块保留、inline contentNodes 保护 |
|
|||
|
|
| 步骤 4 | 替换 `doc_markdown_edit` online 写回路径 | ✅ 已实现 | `doc.rs:1625-1700` — "// 7-27: 在线写回以最终 markdown 为真源" |
|
|||
|
|
| 步骤 5 | 更新 `full_content` 处理 | ✅ 已实现 | `doc.rs:1578-1585` — 转为 search=全文, replace=full,进新路径 |
|
|||
|
|
| 步骤 6 | 清理旧代码 | ✅ 已标记 | Line 1911: `// 退役:7-27 …直接写回` |
|
|||
|
|
|
|||
|
|
## 2. 测试矩阵覆盖
|
|||
|
|
|
|||
|
|
| 优先级 | 场景 | 测试函数 | 结果 |
|
|||
|
|
|--------|------|----------|------|
|
|||
|
|
| P0 | 单块精确 search/replace | `test_search_replace_exact` | ✅ |
|
|||
|
|
| P0 | 忽略空白 match | `test_search_replace_normalized_chinese_byte_boundaries` | ✅ |
|
|||
|
|
| P0 | 多 operation 命中同块 | `hermes_tools_markdown_edit_merges_same_block_operations` | ✅ |
|
|||
|
|
| P0 | full_content | `hermes_tools_markdown_edit_online_full_content_rejects_unsafe_block_mapping` | ✅ 注释明确:"7-27 修复后:full_content 不再被拒绝" |
|
|||
|
|
| P1 | heading 替换 | `test_blocks_to_markdown_heading` | ✅ |
|
|||
|
|
| P1 | 包含复杂块文档的替换 | `test_build_page_content_full_content_replaces_old_text_blocks_but_keeps_complex_blocks` | ✅ |
|
|||
|
|
| P1 | dryRun | `hermes_tools_markdown_edit_local_dry_run_does_not_write` | ✅ |
|
|||
|
|
| P1 | revision 过期检查 | `hermes_tools_markdown_edit_online_page_body_save_carries_revision_conflict_key` | ✅ |
|
|||
|
|
| P2 | 原始块 ID 消失保留 | `test_build_page_content_preserves_missing_original_text_block_when_some_ids_remain` | ✅ |
|
|||
|
|
| P2 | 空 operations | `hermes_tools_markdown_edit_rejects_no_applied_operations` | ✅ |
|
|||
|
|
|
|||
|
|
## 3. 开放问题状态
|
|||
|
|
|
|||
|
|
| 开放问题 | 当前状态 |
|
|||
|
|
|----------|----------|
|
|||
|
|
| OQ1:`<!-- block:id:type:rev -->` 被 search/replace 破坏 | `extract_block_comment` 在解析不完整注释时返回 `(None, None)`,标记为 `is_new=true`,安全降级 |
|
|||
|
|
| OQ2:full_content 块类型从 GFM 前缀推断 | `detect_block_type_from_prefix` 支持 heading/todo/paragraph,代码块等交由 fallback 处理 |
|
|||
|
|
| OQ3:行内格式保持 | `update_legacy_block_text_for_markdown_edit` + `replace_single_inline_text_value` 在文本不变时保留 marks,改变时更新 text 字段 |
|
|||
|
|
|
|||
|
|
## 4. 验证结果
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
$ cargo test -p mnote-web markdown_edit -- --test-threads=1
|
|||
|
|
16 passed; 0 failed
|
|||
|
|
|
|||
|
|
$ cargo test -p mnote-web hermes_tools_manifest_describes_markdown_edit_write_contract -- --test-threads=1
|
|||
|
|
1 passed; 0 failed
|
|||
|
|
|
|||
|
|
$ git diff --check
|
|||
|
|
无冲突标记
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 5. 结论:可归档
|
|||
|
|
|
|||
|
|
**归档条件全部满足:**
|
|||
|
|
- 步骤 1-6 全部实现 ✅
|
|||
|
|
- P0/P1 测试矩阵全部通过 ✅
|
|||
|
|
- 旧代码已标记退役 ✅
|
|||
|
|
- 命名管道的 reason 字段包含 `"mnote.doc.markdown_edit (7-27)"` ✅
|
|||
|
|
- 开放问题均为已知边界,不需要阻碍归档
|
|||
|
|
|
|||
|
|
## 6. 执行操作
|
|||
|
|
|
|||
|
|
将 `design/07-ai/process/7-27-online-markdown-writeback-final-content-truth-v2.md` 移动到 `design/07-ai/done/`。
|