# 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` — 输出 `` 和 `[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:`` 被 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/`。