Files
mnote/design/05-editor-mainline/done/5-18-main-editor-tab-state-and-error-placeholder-checklist-v1.md
T

63 lines
3.1 KiB
Markdown
Raw Normal View History

2026-05-20 20:13:24 +08:00
# 5-18 Main Editor Tab State 与错误占位 Checklist v1
2026-05-21 09:04:13 +08:00
> 状态:done
>
> 归档说明(2026-05-21):主编辑器 tab state 与错误占位已完成并验证。
2026-05-20 20:13:24 +08:00
>
> 日期:2026-05-20
>
> Owner:主编辑区 tab runtime / `web_shell.rs`
## 1. 目标
补齐 P0-1 的最小轻量 editor group 状态:在不引入完整 VSCode 多 group 的前提下,让 page/resource tab 共享一个明确的浏览器内存状态模型,并补上 resource 打开失败时的错误占位 tab。
## 2. 允许修改范围
- `rust/crates/mnote-web/src/routes/web_shell.rs`
- `rust/crates/mnote-web/src/ssr/pages/document.rs`
- `rust/crates/mnote-web/src/ssr/styles.rs`
- `scripts/task457-main-editor-resource-tab-smoke.js`
- 可新增 `scripts/task462-resource-tab-error-placeholder-smoke.js`
## 3. 禁止事项
- 不引入完整 VSCode DI、多 editor group grid、preview/sticky 持久化。
- 不改变 Page Aggregate 或 local Markdown 事实源。
- 不修改 resource resolver、OnlyOffice、File Tree lifecycle;这些由其它 checklist 处理。
## 4. Checklist
- [x] 定义轻量 main editor tab 状态,至少能表达 `id``kind``title``dirty``saving``hasExternalConflict``lastActiveAt``status`
- [x] page tab 与 resource tab 激活统一通过同一状态更新入口。
- [x] resource tab close guard 读取同一状态入口,避免散落检查。
- [x] 打开 resource 失败时创建或保留 error placeholder tab。
- [x] error placeholder tab 有明确错误 UI,可关闭,不留下半注册 panel/session。
- [x] 更新 Rust 字符串 contract test,确保关键 runtime marker 存在。
## 5. 验收
- [x] `node --check scripts/task462-resource-tab-error-placeholder-smoke.js`
- [x] `node scripts/task462-resource-tab-error-placeholder-smoke.js`
- [x] `node scripts/task457-main-editor-resource-tab-smoke.js`
- [x] `cargo test -p mnote-web web_shell -- --test-threads=1`
## 6. 本轮执行记录
- 已完成:
- `createResourceSession` 已补 `lastActiveAt`resource session 继续持有 `dirty` / `saving` / `hasExternalConflict` / `status` 等关闭保护状态。
- page tab 与 resource tab 继续统一通过 `activateMainEditorTab` 激活,并在激活 resource tab 时更新 MRU 与 `lastActiveAt`
- `closeResourceTab` 继续通过 `resourceTabCloseGuardReason` 读取关闭保护状态。
- `openResourceInActiveTab` 失败时保留 resource tab,并通过 `.mnote-resource-tab-error` 渲染可见错误占位。
- 新增 `scripts/task462-resource-tab-error-placeholder-smoke.js`,已验证失败资源会出现错误占位、可关闭、连续失败不会产生失控 tab。
- `web_shell.rs``styles.rs` 已补关键 runtime / CSS contract。
- 未完成:
- `lastActiveAt` 时间戳尚未用于 tab 排序(当前 MRU 队列 `resourceTabMru` 控制切换顺序)。
- `dirty`/`saving`/`hasExternalConflict` 状态在 resource tab close guard 中读出但无 UI 确认弹窗(仅 console.warn + 禁止关闭)。
- 风险:无
## 7. 非目标
- 不做 tab 持久化恢复。
- 不做 tab 拖拽排序、context menu 或 close others。