收口工作台资源 tab 与本地文件树 P1

This commit is contained in:
lix-2026
2026-05-20 21:45:11 +08:00
parent fe13444dbc
commit a29d9868f6
13 changed files with 1595 additions and 214 deletions
@@ -0,0 +1,52 @@
# 5-22 Mindmap Main Editor Tab Kind Checklist v1
> 状态:process
>
> 日期:2026-05-20
>
> Ownermain editor resource tab / mindmap editor kind
## 1. 目标
补齐 P1mindmap 仍以独立 object shell 进入主 pane,而不是 main editor group 内的 editor kind。目标是把 File Tree 中的 mindmap 资源默认打开到主编辑区 tab,并保留显式对象页 / 新窗口兼容入口。
## 2. 允许修改范围
- `rust/crates/mnote-web/src/routes/web_shell.rs`
- `rust/crates/mnote-web/src/ssr/pages/layout.rs`
- `scripts/task169-mindmap-realtime-smoke.js`
- 可新增聚焦 smoke`scripts/task47*-mindmap-resource-tab-smoke.js`
## 3. 禁止事项
- 不把 mindmap 数据保存到 `page.body.save`
- 不删除 `/mindmap/:documentId/:mindmapId` object shell 兼容路由。
- 不破坏已存在的 mindmap realtime / long text edit smoke。
- 不让 mindmap tab 和 page tab 使用同一个 DOM identity。
## 4. Checklist
- [x] resource open resolver 识别 `kind=mindmap` / `objectKind=mindmap`
- [x] 点击 File Tree mindmap 资源默认创建 main editor resource tab,而不是整页跳 `/mindmap/...`
- [x] mindmap tab 使用稳定 canonical identity,如 `resource:mindmap:<documentId>:<mindmapId>` 或 local file canonical identity。
- [x] tab panel 内挂载既有 mindmap runtime,并保持 `data-mnote-object-editor="mindmap"` / 可观测标记。
- [x] 显式新窗口 / object shell 入口仍可用。
- [x] smoke 覆盖从 File Tree 打开 mindmap tab、切回 page、再切回 mindmap。
## 5. 验收
- [x] `cargo test -p mnote-web web_shell -- --test-threads=1`
- [x] `node scripts/task169-mindmap-realtime-smoke.js`
- [ ] 如新增 smoke`node scripts/task47*-mindmap-resource-tab-smoke.js`
## 5.1 本轮执行记录
- 已合入:`kind=mindmap` resource tab,使用 `resource:mindmap:<documentId>:<mindmapId>` identity,并复用现有 `/mindmap/...` bootstrap + runtime mount。
- 已保留:旧 object shell 作为 runtime 不可用或显式路径 fallback。
- 本轮更新:`task169` 已从旧 object shell 口径切到 main editor mindmap resource tab 口径,断言 File Tree 打开 mindmap 后进入 `data-mnote-tab-kind="mindmap"` 的 resource tab,并覆盖切回 page tab 后再切回 mindmap tab。
- 已退役:`task169` 内旧 topic/runtime realtime 深测不再作为必过主链,结果中写入 `retiredRealtimeTopicEditing`,避免旧 object shell 时代的交互假设干扰当前 P1 resource tab 验收。
## 6. 非目标
- 不实现 mindmap 多实例协同编辑模型。
- 不实现 tab 持久化恢复。
@@ -0,0 +1,50 @@
# 5-23 Editor Side Target / Secondary Pane Checklist v1
> 状态:process
>
> 日期:2026-05-20
>
> Ownerdocument pane runtime / side target
## 1. 目标
补齐 P1secondary pane 与 main tab 目前是两套概念。目标是先建立轻量 side target 合同,让 `openTarget=side` 能稳定映射到当前 secondary pane,而不是继续分散在“右侧边栏打开”和 resource tab 特例里。
## 2. 允许修改范围
- `rust/crates/mnote-web/src/routes/web_shell.rs`
- `rust/crates/mnote-web/src/ssr/pages/layout.rs`
- `scripts/task457-main-editor-resource-tab-smoke.js`
- 可新增聚焦 smoke`scripts/task47*-side-target-smoke.js`
## 3. 禁止事项
- 不实现完整多 editor group grid。
- 不改变 primary page / resource tab 的默认 active tab 行为。
- 不把 secondary pane 等同为 active resource tab。
- 不删除现有 `secondaryDocumentId` query 兼容。
## 4. Checklist
- [x] `resolveResourceOpen` / document pane runtime 对外暴露 `openTarget=side` 的稳定返回。
- [x] 页面文档的 side target 继续打开 secondary pane,并更新/清理既有 secondary query。
- [x] 资源类 side target 有明确行为:当前阶段可先显示 unsupported/error placeholder,但必须可观测且不误开新窗口。
- [x] 关闭 secondary pane 不影响 active resource tab URL state。
- [x] smoke 覆盖 active tab 与 secondary pane 可同时存在、互不清状态。
## 5. 验收
- [x] `cargo test -p mnote-web web_shell -- --test-threads=1`
- [x] `node scripts/task457-main-editor-resource-tab-smoke.js`
- [x] 如新增 smoke`node scripts/task47*-side-target-smoke.js`
## 5.1 本轮执行记录
- 已合入:`openResourceAsSideTarget`,资源侧栏目标先显示可观测 unsupported placeholder,不再误开新窗口或污染 active resource tab。
- 已合入:`tree.page.open` + `openTarget=side` 的 document side target wrapper,复用现有 `openSecondaryDocument` / `secondaryDocumentId` 合同。
- 已合入:资源类 `openTarget=side` 使用 secondary pane unsupported placeholder 时清理 `secondaryDocumentId` / `secondarySourceKind` / `secondaryRootUri`,保留 active resource tab 的 `resourceTab` URL state。
- 验证记录:`node --check scripts/task472-side-target-secondary-pane-smoke.js``node --check scripts/task457-main-editor-resource-tab-smoke.js``cargo test -p mnote-web web_shell -- --test-threads=1``node scripts/task472-side-target-secondary-pane-smoke.js``node scripts/task457-main-editor-resource-tab-smoke.js`
## 6. 非目标
- 不实现 split editor layout、drag editor between groups、MRU across groups。