# 5-43 大 JSON 资源 tab 打开后卡死且无法关闭

## 状态

- 状态：done
- owner：05-editor-mainline
- 发现时间：2026-06-04
- 修复时间：2026-06-04

## 现象

在 local-folder 文件树中打开 OCR sidecar 的 source-map JSON，例如：

- `/mnt/Data1T/research/DHA_cosmetics/literature/SCCS_1612_19_DHA.ocr/SCCS_1612_19_DHA.pdf.source-map.json`

页面会把 JSON 当作可编辑 code 资源加载进 Tiptap resource tab。大 JSON 打开后主线程明显卡顿，标签页关闭按钮无响应或被资源编辑 session 的关闭保护阻止；其它普通资源 tab 仍可关闭。

## 根因

`document-resource-tab-runtime.js` 将 `.json` 归类为 `code`，并且 `markdown/text/code` 统一走 `openTiptapResourceTab`。这会为 JSON 创建完整 Tiptap 编辑 session、序列化大文档、挂本地文件事件 channel，并把 code 资源纳入 dirty close guard。

OCR source-map JSON 是机器生成的只读索引文件，不适合作为页面编辑器文档打开；大文件走 Tiptap 会放大渲染和关闭保护成本。

## 修复

- `code` 资源不再声明为 editable。
- `.json` 等 code 资源改走轻量只读 `<pre><code>` 预览，不创建 Tiptap editor session。
- 只读预览显示文件大小，超过预览上限时截断提示。
- Markdown 和普通 text resource tab 仍保留原可编辑 Tiptap 路径。

## 验证

- `node --check rust/crates/mnote-web/browser/document-resource-tab-runtime.js`
- `cargo build -p mnote-web --manifest-path rust/Cargo.toml`
- 临时启动 `127.0.0.1:3023` 后用 Playwright 打开真实页面：
  - `rootUri=file:///mnt/Data1T/research/DHA_cosmetics`
  - 页面：`literature/dha_computational_modeling_literature.md`
  - 资源：`literature/SCCS_1612_19_DHA.ocr/SCCS_1612_19_DHA.pdf.source-map.json`
- 浏览器验证结果：
  - resource tab 成功打开只读 code preview。
  - 当前 panel 不存在 `mnote-leptos-tiptap-island-editor-root`，证明没有挂 Tiptap 编辑器。
  - 预览加载 `970708` 字符，meta 显示 `只读预览 · 971,098 bytes`。
  - 点击 tab close 后 `openResourcePanels=0`，主页面 tab 恢复选中。

## 备注

`task505-resource-tab-watch-contract-smoke.js` 在本次临时 standalone 服务上未通过，失败点是 Markdown resource 外部文件变更 watcher 未把写盘更新同步回 resource editor；该路径与本次 JSON 只读预览不同，未作为本 bug 验收条件。
