# Reasonix Batch D Worker A：资源打开 resolver 小收敛

Project root: `/mnt/Data1T/mnote`

## 背景

P1 阶段仍有 `5-26 Resource Open Resolver Convergence Checklist` 未完成。当前重点不是重写 resolver，而是最小化收敛 `layout.rs` 中正文附件与 FileTree local Office 打开的重复分支。

事实源：

- `design/01-tree-first-graph-kernel/process/1-8-mvp-post-process-execution-order-v1.md`
- `design/01-tree-first-graph-kernel/process/1-11-batch-d-p1-small-tail-execution-checklist-v1.md`
- `design/05-editor-mainline/process/5-26-resource-open-resolver-convergence-checklist-v1.md`

## Ownership

你可以修改：

- `rust/crates/mnote-web/src/ssr/pages/layout.rs`
- `scripts/task463-onlyoffice-resolver-smoke.js`
- `design/05-editor-mainline/process/5-26-resource-open-resolver-convergence-checklist-v1.md`

不要修改：

- `rust/crates/mnote-web/src/routes/web_shell.rs`
- `rust/crates/mnote-web/src/routes/onlyoffice.rs`
- ACP / Hermes 相关文件
- Markdown parser / local_folder_source

你不是独自在代码库中工作。不要回滚、覆盖、格式化或清理其他 worker 的改动。不要提交 git。

## 任务

1. 审查这些函数的重复判断：
   - `buildLocalOnlyOfficeOpenUrl`
   - `openConvexAssetFromFileTree`
   - `openEditorAttachmentDetail`
   - `openEditorAttachmentNewWindow`
   - `openEditorAttachmentEditTab`
2. 如果可以安全实现，提炼一个最小 helper，例如 `openLocalOfficeFileInActiveTab(detail, mode)` 或等价命名，用于正文附件 `弹窗编辑` 和 FileTree edit-mode active tab 的 local Office 打开。
3. 保持当前已验证行为：
   - 正文附件 `弹窗编辑` 进入 main resource tab，不弹新浏览器窗口。
   - 正文附件 `新窗口编辑` 进入浏览器新窗口。
   - FileTree edit-mode active tab 继续可用。
   - `md/text/code` 继续走 tiptap / 内建编辑器，不改成 OnlyOffice。
4. 更新 `5-26` 执行记录。只有真实代码和验证完成的项才打勾。
5. 如现有 `task463` 不能覆盖分流，请补最小断言。

## 验证

至少运行：

```bash
cd /mnt/Data1T/mnote/rust
cargo test -p mnote-web sidebar_tree_runtime_opens_office_assets_through_resource_shell -- --test-threads=1
```

以及：

```bash
cd /mnt/Data1T/mnote
node scripts/task463-onlyoffice-resolver-smoke.js
```

## 最终回复格式

- 修改文件列表
- 收敛了哪些重复分支
- 运行过的命令和结果
- 未完成项/风险
