你是浏览器测试员，不是代码修改员。
禁止修改源码、禁止 git commit、禁止回滚文件。
使用真实浏览器或 Playwright 验证。
所有截图和 result.json 写入指定输出目录。
失败时保留 console/network 摘要。
最终只汇报测试证据，不提出未经验证的代码结论。

# Reasonix 浏览器测试任务：Office 中文 docx 上传并打开

## 输出目录

`/mnt/Data1T/mnote/tmp/reasonix-office-upload-open-clean-2026-05-21/`

## 测试入口

- URL: `http://127.0.0.1:3000`
- 登录：访问 `/auth`，点击“测试账号快速登录”
- 必须使用全新 isolated browser context / userDataDir。
- 测试开始前清空 cookies、localStorage、sessionStorage、IndexedDB、Cache Storage。

## 测试文件

上传真实文件：

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

## 测试步骤

1. 创建临时 local-first workspace，至少包含 `Alpha.md` 和 `.mnote/workspace.json`。
2. 打开 `Alpha.md` 页面。
3. 上传上述 docx 到当前页面，记录上传 API 状态、耗时、返回 asset。
4. 点击或派发真实 UI 等价操作打开该 docx 附件到主编辑器资源 tab。
5. 等待 OnlyOffice iframe 内部进入稳定状态，最长 90 秒。
6. 截图最终打开效果，截图必须显示以下之一：
   - Office 文档内容区 / 编辑器 UI 已可见。
   - 明确的 OnlyOffice 错误面板或连接失败信息。
7. 记录 console errors、failed requests、OnlyOffice WebSocket / polling URL。
8. 检查 WebSocket / polling URL 的 doc key 是否为安全 key，不包含 `/`、`:`、中文字符。

## 判定规则

- `PASS` 不能只因为 upload 200、resource tab active 或 iframe 存在。
- 如果出现 `errorCode=-18`、`连接失败`、WebSocket handshake failed、polling failed，标记为 `FAIL` 或 `BLOCKED`，并截图。
- 如果页面上传后卡死、刷新后无法恢复、需要重新登录，标记为 `FAIL`。
- 如果 DocumentServer 未运行或代理不可达，标记为 `BLOCKED`，并记录服务状态和网络错误。

## 输出要求

- `result.json`：
  - `overallStatus`: `pass` / `fail` / `blocked`
  - `freshContext`: 是否使用全新上下文并清空缓存
  - `upload`: status、elapsedMs、asset
  - `open`: tabKind、iframeSrc、officeReady、visibleTextOrError
  - `onlyofficeNetwork`: websocketUrls、pollingUrls、failedRequests
  - `docKeySafety`: safe、observedKeys、unsafeReasons
  - `screenshots`: 最终截图路径
- `final.md`：简要步骤、观察、结论、截图路径。
