# 5-38 [done][bug] 第二视图 Markdown 附件上传后主编辑区点击失效 v1

> 发现时间：2026-05-23
>
> 状态：`[done]`
>
> 关联主线：`05-editor-mainline`

## 1. 用户可见症状

打开第一视图和第二视图后，在第二视图上传 Markdown 附件会出现一组连续问题：

- 第一次点击第二视图上传后的文件时，第一视图菜单会短暂弹出后消失。
- 上传第二个 Markdown 文件后，页面会卡住或主编辑区附件点击无反应。
- 刷新后上传的 `.md` 附件曾退化成普通链接，只能新窗口打开。
- 修复退化为链接后，仍存在“上传第二个文件后，之前所有附件都不能从主编辑器点击在 tab 打开”的问题。
- 同时点击左侧文件树会把焦点跳到当前文件夹最上方文件，但文件树直接打开文件仍可工作。

## 2. 根因

问题不是第二视图和主视图是否应完全隔离这么简单，而是附件打开、上传插入、刷新重建三条链路没有共享同一个 pane-aware 资源 tab 合同：

- 编辑器内上传后的本地 `.md` 附件在 Markdown 回写 / 重新解析时没有稳定保留为 `data-mnote-attachment-link` 语义，刷新后容易回退成普通链接。
- 资源 openTarget=side 和 document secondary pane 的 URL / DOM 状态边界不完整，导致 secondary 资源 tab 打开时可能污染 primary 的 slash menu / active tab。
- 主编辑器内附件点击只识别部分增强后的链接形态，第二次上传后 DOM 重建路径会让既有附件链接失去可点击的 tab 打开行为。
- 文件树 active/reveal 逻辑和编辑器附件打开逻辑共享了一部分全局焦点状态，导致点击文件树时出现跳到顶部文件的伴随现象。

## 3. 修复

本轮修复把上传、解析、回写、点击打开统一到附件资源 tab 语义：

- 本地 Markdown 页面和 Markdown 资源读取时，根据 `.mnote` 元数据把属于当前文档的上传附件路径传给 Markdown parser，恢复附件链接语义。
- Markdown 回写时支持把 `/api/local-folder/files/open?...` 这类本地打开 URL 改写成相对路径，避免刷新后退化为不可识别的普通链接。
- 编辑器附件增强逻辑扩大到 `.ProseMirror a[href*="/api/local-folder/files/open"]`，即使 DOM 重建后仍能恢复 `data-mnote-attachment-link`、附件样式和 tab 打开行为。
- 上传插入使用当前编辑器 root / pane role 作为目标上下文，secondary 上传只插入 secondary 资源编辑器，不污染 primary。
- 资源 `openTarget=side` 与 `secondaryDocumentId` 分离：资源 tab 可在 secondary 打开，但不冒充 secondary 文档页。
- smoke 覆盖连续上传两个真实 `.md` 附件、刷新后点击两个附件、再次上传第二个资源并确认都在对应 pane 的 tab 内打开。

## 4. 验证

已执行过的关键验证：

```bash
cargo check -p mnote-web
node scripts/task459-local-markdown-attachment-tab-smoke.js
node scripts/task472-side-target-secondary-pane-smoke.js
```

本次提交前已重新执行：

```bash
cargo check -p mnote-web
node scripts/task459-local-markdown-attachment-tab-smoke.js
node scripts/task472-side-target-secondary-pane-smoke.js
```

结果：全部通过。

## 5. 剩余边界

本记录只覆盖本地文件夹 Markdown 附件在主编辑器 / secondary pane / resource tab 中的上传和打开链路。OnlyOffice 编辑保存、Office 插件噪声和远端 cloud source 附件合同仍由对应 Office / Rust Web 缺陷记录继续跟踪。
