# 4-53 WorkspacePath / ObjectIdentity 浏览器矩阵缺口

## 状态

- 状态：done
- Owner：04-tree-domain / 05-editor-mainline runtime identity
- 发现时间：2026-06-01
- 修复时间：2026-06-01

## 现象

P1 `WorkspacePath / ObjectIdentity` 已有底层协议与部分 smoke，但缺少一个单独覆盖 page `.md`、directory、raw file、mindmap、OnlyOffice 的浏览器矩阵。FileTree row、Resource Tab、OpenEditorsSnapshot、URL `resourceTab` 和 active tab identity 如果各自拼身份，后续 raw resource / mindmap / Office target 容易继续退化为“当前页”语义。

## 根因

已有 smoke 分散覆盖 copy-id、resource tab、mindmap 和 Office，但没有把统一 `ObjectWorkspacePath` 当作运行时消费合同统一断言。local folder 目录行还缺少 `local-dir:*` 的稳定 `documentId` fallback，resource tab 在部分本地资源打开路径下也缺少 `sourceKind` / `rootUri` fallback。

## 修复

- `rust/crates/mnote-web/browser/filetree-runtime.js`
  - `readWorkspacePathFromRow()` 为 folder / index 行合成 `local-dir:{relativePath}`。
  - `fileTreeRowDocumentId()` 允许读取 `data-owner-document-id`，用于资源行 owner page 对齐。
- `rust/crates/mnote-web/browser/document-resource-tab-runtime.js`
  - 在 URL 参数缺失时，从 body dataset 或 FileTree row workspacePath 兜底读取 `sourceKind` / `rootUri`。
- `scripts/task524-workspace-object-identity-matrix-smoke.js`
  - 新增 browser smoke，覆盖 page `.md`、directory、raw text、mindmap、OnlyOffice 的 FileTree row workspacePath、OpenEditorsSnapshot、URL `resourceTab`、active tab identity 对齐。

## 验收

- [x] `node --check rust/crates/mnote-web/browser/document-resource-tab-runtime.js`
- [x] `node --check rust/crates/mnote-web/browser/filetree-runtime.js`
- [x] `node --check scripts/task524-workspace-object-identity-matrix-smoke.js`
- [x] `MNOTE_UI_BASE_URL=http://127.0.0.1:3301 node scripts/task524-workspace-object-identity-matrix-smoke.js`
