9.4 KiB
Batch I Worker C:7-15 / 7-12 后续拆分审查
创建时间:2026-06-15
审查依据:
7-15步骤 15-17、7-12Phase B-F 的已完成度
1. 7-15 Steps 15-17 状态判断
当前完成度
| Step | 名称 | 状态 | 说明 |
|---|---|---|---|
| 1-14 | ACP 核心实现 | ✅ 全部完成 | acp_client.rs、acp_session_manager.rs、acp_runtime.rs、acp_bridge.rs、reasonix-acp-wrapper.mjs、profile 扩展、前端下拉、e2e 验证 |
| 15 | 压力测试 | ❌ 未开始 | 多会话并发稳定性 |
| 16 | 退役旧 HTTP proxy | 🟡 部分开始 | 默认已切 ACP,但 hermes_client.rs 内的 HTTP proxy 兼容分支仍存在 |
| 17 | 基准测试 | ❌ 未开始 | Reasonix 缓存收益量化 |
结论:Steps 15-17 应拆分为独立 checklist
理由:
-
性质不同 — Step 15(压力测试)和 Step 17(基准测试)是验证/度量任务,不是架构实现。Step 16(清理)是维护性工作。它们与 7-15 的核心目标(ACP 抽象层实现)没有结构性依赖。
-
完成标准不同 — 压力测试可能需要多轮迭代(发现瓶颈→修复→再测),基准测试可能发现需要缓存策略调整,退役清理需要确认所有 profile 都 migrate 完。这些都不是"一个 step done 就进入下一步"的线性模式。
-
已开始的部分 Step 16 不够干净 — 代码中
configured_upstream_for_profile()的#[deprecated]因 warning 太多被移除,表明清理依赖范围广、风险高,需要独立计划。 -
当前 7-15 文档混杂实现 + 验证 — 读文档的人会觉得 7-15 处于"未完成"状态,但实际上架构核心已经完成并在生产运行。
建议拆分方案
将 Steps 15-17 独立为新文件 7-28-acp-runtime-stabilization-and-cleanup-v1.md,在 design/07-ai/process/ 下:
- P0:Step 16 残余 — 完成
configured_upstream_for_profile()HTTP proxy 分支的退役 - P1:Step 15 — 压力测试,重点是 ACP 子进程生命周期管理
- P2:Step 17 — 基准测试,缓存命中率对比表格
2. 7-12 Phase B-F 被覆盖状态
Phase B:Manifest 合同收口
| 条目 | 7-12 描述 | 当前代码状态 | 覆盖评估 |
|---|---|---|---|
| B-1 | manifest 输出完整 inputSchema/outputSchema/annotations/availability |
✅ manifest.rs 已有完整 annotations、inputSchema、parameters |
已覆盖。每个工具包含 annotations.readonly/destructive/idempotent/requiresApproval/approvalMode/runtimeOwner/writeOwner/selectionEffect |
| B-2 | profile toggle、capability、scope 共同影响 manifest | 🟡 部分 | capabilityScope 已在 manifest 中,但 profile-level toggle 未动态反映到 availability.enabled 字段 |
| B-3 | manifest 可直接转换为 Hermes/model tools | ✅ 前端 SSR 直接消费 manifest 作为工具列表 | 已覆盖。manifest 结构已与 Hermes 兼容 |
| B-4 | 禁用工具在 manifest、UI、执行拦截三处一致 | 🟡 部分 | 执行拦截通过 capabilityScope + 后端 ensure_markdown_changed_blocks_within_allowed 存在,但 UI 侧 toggle 反映需验证 |
结论: Phase B 大部分被当前代码覆盖。B-2 和 B-4 的核心缺口是 profile-level dynamic availability,而不是 manifest 内容。
Phase C:block-edit-workflow 改造成 router
| 条目 | 7-12 描述 | 当前代码状态 | 覆盖评估 |
|---|---|---|---|
| C-1 | route 命名和返回 schema 改为 mnote.page_ai_command_route.v1 |
❌ 未实施 | page_ai_workflow.rs 仍在用内部 MarkdownPlan 对象,没有公开的 PageAICommandRouter route |
| C-2 | 本地规则只输出 recommendedToolCall |
🟡 间接覆盖 | page_ai_workflow.rs 中的 direct_block_edit_operations 已退役,改走 model → search/replace → doc_markdown_edit 路径 |
| C-3 | 低风险 yolo shortcut 走共享 mnote tool executor | ✅ 当前路径 | doc_markdown_edit 直接调用 Rust tool executor |
| C-4 | 非低风险任务发起 Hermes run with tool hint | ✅ ACP integration | acp_runtime.rs + acp_session_manager.rs 提供完整的 Hermes/Reasonix run 路径 |
| C-5 | 删除"模型 fallback 后再 Hermes agent run"重复链路 | 🟡 需确认 | page_ai_workflow.rs 中的 call_block_edit_model → extract_markdown_plan 链路仍然存在,但已改为直接走 doc_markdown_edit 不回落 |
结论: Phase C 的架构目标(agent-native 编辑 > mnote block ops)已通过 ACP + local-first 口径实现,但正式的 PageAICommandRouter 模块从未实现。不需要再实现它——当前架构已满足 7-12 的安全合同目标。
Phase D:Review Session
| 条目 | 7-12 描述 | 当前代码状态 | 覆盖评估 |
|---|---|---|---|
| D-1 | schema 和状态机边界 | ✅ 文档已定义 | 设计文档 §5.5 已完成 |
| D-2 | plan_update/apply_block_ops dryRun=true 返回 review-compatible draft |
🟡 部分 | dryRun 支持存在且返回 diff/warnings/risk/blocked,但输出格式不是 review session schema |
| D-3 | UI 展示 diff/warnings/risk/blocked | ❌ 冻结 | Phase C 仍冻结,不实施 |
| D-4 | accept/reject/retry/abort | ❌ 冻结 | 同上 |
| D-5 | stale revision 阻断 | ✅ 部分 | ensure_markdown_changed_blocks_within_allowed + revision 检查 |
结论: 符合 7-12 §0 的指示——"Phase C UI 仍冻结,不实施流式 apply 或新的审阅 UI"。本报告不建议本轮实现。
Phase E:状态与事件统一
| 条目 | 7-12 描述 | 覆盖评估 |
|---|---|---|
| E-1 | direct shortcut 和 Hermes run 统一 tool event 形态 | ✅ ACP session/update 作为统一事件源 |
| E-2 | 页面 AI 面板按 runId/toolCallId/reviewSessionId 聚合 |
🟡 前端已支持 runId/toolCallId,reviewSessionId 未用 |
| E-3 | abort 不留下半写入正文 | ✅ ACP session/cancel + 本地回滚 |
| E-4 | 刷新后未提交 review session 不自动写入 | ✅ 不适用(review session 未实现) |
Phase F:验收 Smoke
| 条目 | 7-12 描述 | 覆盖评估 |
|---|---|---|
| F-1 | 低歧义替换 <1s 且 tool audit | 🟡 功能存在,具体延迟需要基准测试(Step 17) |
| F-2 | 复杂改写进 Hermes run,先 dry-run/review | ✅ ACP 路径支持 |
| F-3 | selection 外写入 blocked | ✅ hermes_tools_markdown_edit_rejects_selection_out_of_scope 测试 pass |
| F-4 | 禁用工具一致 | 🟡 后端拦截存在,manifest 动态 toggle 待完善 |
| F-5 | 旧 revision accept → stale | ❌ review session 未实现,此场景不存在 |
3. Phase C Review Mode 冻结确认
确认冻结。 符合 7-12 §0 的 2026-05-18 更新:
PageAIReviewSession只定义 Phase C 的安全合同和状态机边界;当前 Phase C 仍冻结,不实施流式 apply 或新的审阅 UI
由于 review mode UI 涉及:
- 新的前端组件(diff 面板、accept/reject/retry/abort 按钮)
- 新的后端 session 持久化路径
- 与 ACP session 的生命周期整合(review session 超时、刷新恢复)
thought.delta/usage.updated的可视化渲染
这些都不在本轮范围内。所有 review-compatible 的后端数据结构(dryRun、changedBlocks、audit)已准备就绪,仅差 UI 整合。
4. 下一批 P0/P1/P2 优先级
P0(本轮必须完成)
| 编号 | 工作 | 对应 | 风险 |
|---|---|---|---|
| P0-1 | 完成 configured_upstream_for_profile() 的 HTTP proxy 清理 |
7-15 Step 16 残余 | 低。当前默认已切 ACP,但 hermes_client.rs 中 ~500 行 HTTP proxy 路径仍有调用者确认 |
| P0-2 | 确认 page_ai_workflow.rs 在所有 profile 下不走 block_edit fallback |
7-12 C-5 | 中。当前 workflow 调 call_block_edit_model → extract_markdown_plan → doc_markdown_edit,但少部分 code path 可能还有残留的 apply_block_ops |
| P0-3 | 7-15 拆分为「核心实现」(done) + 「稳定化清单」(new) |
本审查结论 | 低。只改设计文档 |
P1(紧接 P0 后)
| 编号 | 工作 | 对应 | 风险 |
|---|---|---|---|
| P1-1 | 压力测试:多会话并发、ACP 子进程异常恢复 | 7-15 Step 15 | 中。需要同时管理 3+ 会话时 Hermes/Reasonix 子进程状态 |
| P1-2 | 动态 tool availability per profile(manifest 的 enabled 字段) |
7-12 B-2/B-4 | 中低。影响 tool toggle/audit 一致性 |
| P1-3 | plan_update dryRun 输出适配 review session schema |
7-12 D-2 | 低。后端数据结构对齐 |
P2(可并行但非阻塞)
| 编号 | 工作 | 对应 | 风险 |
|---|---|---|---|
| P2-1 | 基准测试:Reasonix cache hit rate vs Hermes | 7-15 Step 17 | 低。纯度量,不涉及代码变更 |
| P2-2 | 7-12 更新状态:标记 Phase B 已完成项、更新口径 |
设计治理 | 低 |
| P2-3 | 复杂块 GFM 解析 fallback 覆盖(list/code block/blockquote) | 7-27 §5.3 | 低。影响 full_content 块类型推断 |
| P2-4 | 页面 AI thought.delta 可视化 |
7-15 Step 11 note | 低。当前预期行为是不显示 thought |
5. 验收证据
cargo test -p mnote-web markdown_edit -- --test-threads=1→ 16 passcargo test -p mnote-web hermes_tools_manifest_describes_markdown_edit_write_contract -- --test-threads=1→ 1 passgit diff --check→ 无 whitespace 错误- 本文件已写入
.codex/reasonix-tasks/results/batch-i-worker-c-acp-review-tail.md