# Checklist: OnlyOffice Docx Upload Open Freeze

## 目标

上传 docx 后点击打开不应卡死；本地 docx 应能在主编辑器 resource tab 中打开 OnlyOffice，失败时显示非阻塞错误。

## 允许修改

- `rust/crates/mnote-web/src/routes/onlyoffice.rs`
- `rust/crates/mnote-web/src/routes/local_folder_source.rs`
- `rust/crates/mnote-web/src/routes/web_shell.rs`
- `rust/crates/mnote-web/src/ssr/pages/layout.rs`
- OnlyOffice / local upload 相关测试

## 禁止事项

- 不绕开 local-first rootUri 授权。
- 不把 docx 改成浏览器下载兜底作为唯一行为。
- 不引入新外部服务。

## 待办

- [x] 复现并定位上传后卡死发生在上传、插入附件 UI、resource tab iframe、OnlyOffice DocumentServer 回源哪一层。
- [x] 确保 local docx 打开 URL 走 `/api/local-folder/files/open` 且 content-type 正确。
- [x] 主 tab iframe 打开 OnlyOffice 时设置清晰 loading/error 状态，超时不阻塞主页面。
- [x] Convex / local office 行为尽量统一到 resource tab；新窗口只作为“在新窗口打开”动作。
- [x] 补充 docx 上传/打开 targeted smoke 或 Rust 字符串测试。

## 本轮执行记录

- 代码：`onlyoffice.rs` 为 API 加载和初始化增加超时错误；`layout.rs` 让 office 资源优先进入主 resource tab。
- 浏览器验证：使用真实文件 `/mnt/Data1T/research/DHA_cosmetics/progress/DHA美黑化妆品监管综述_2026-05-16.docx` 上传并打开，结果在 `tmp/bug-20260521-workbench-browser-verify/result-title-docx-menu.json`，截图 `02-real-docx-resource-tab.png`。
- Smoke：`node scripts/task463-onlyoffice-resolver-smoke.js` 已通过。

## 验收命令

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