# Checklist: Office Chinese Docx Upload Open Freeze

## 目标

上传并打开中文文件名 docx 时，浏览器不应卡死；Office 打开失败时必须是可见、非阻塞错误。

指定测试文件：

`/home/lix/Downloads/重庆发展特殊化妆品可行性报告_政府汇报版.docx`

## 允许修改

- `rust/crates/mnote-web/src/routes/local_folder_source.rs`
- `rust/crates/mnote-web/src/routes/onlyoffice.rs`
- `rust/crates/mnote-web/src/ssr/pages/layout.rs`
- 相关 browser smoke

## 禁止事项

- 不引入新外部服务。
- 不把 docx 只做下载兜底。
- 不清理用户真实下载文件。

## 待办

- [x] 用真实中文 docx 复现上传、插入附件、点击打开、OnlyOffice iframe 内错误。
- [x] 记录 console/network/iframe src/页面响应性。
- [x] 区分 DocumentServer `errorCode=-18` 与浏览器主页面卡死。
- [x] 上传完成后不得等待非关键 Office 初始化；上传链路必须释放 UI。
- [x] 对中文文件名/URL 编码和 OnlyOffice document key 安全化补测试。
- [x] 增加 Reasonix clean browser 测试流程，并用截图交叉验证。

## 验收命令

```bash
cd /mnt/Data1T/mnote/rust
cargo test -p mnote-web -- --test-threads=1
node scripts/task463-onlyoffice-resolver-smoke.js
```

## 验证记录

- `cargo test -p mnote-web onlyoffice -- --test-threads=1`：12 passed。
- `cargo test -p mnote-web -- --test-threads=1`：482 passed。
- Reasonix clean browser 测试输出：`/mnt/Data1T/mnote/tmp/reasonix-office-upload-open-clean-2026-05-21/result.json`，结论 `pass`。
- Reasonix 最终截图：`/mnt/Data1T/mnote/tmp/reasonix-office-upload-open-clean-2026-05-21/04-final-state.png`，可见 OnlyOffice 文档正文。
- Codex 自测输出：`/mnt/Data1T/mnote/tmp/codex-office-upload-open-clean-2026-05-21/result.json`。
- Codex 最终截图：`/mnt/Data1T/mnote/tmp/codex-office-upload-open-clean-2026-05-21/codex-office-final.png`，可见 OnlyOffice 文档正文。
- 已确认 WebSocket URL 使用安全 doc key，例如 `mnote_1258170954_1240121036`，不含 `/`、`:` 或中文字符；未出现 `errorCode=-18`。
