Files
mnote/design/05-editor-mainline/done/5-18-main-editor-tab-state-and-error-placeholder-checklist-v1.md
T
lix-2026 1956a8a21a chore: align mvp design governance
- 统一 local-first MVP 后阶段架构口径,补充 process 执行总序和 Reasonix 协作记录

- 归档已完成的 design checklist,标注参考型 process,更新 AGENTS/REASONIX/架构文档

- 补充文件树/主编辑器下载与上下文菜单相关实现、bug 记录和 smoke 脚本

验证:git diff --check;codegraph sync .;cargo test -p mnote-web;node --check scripts/task476-filetree-editor-context-menu-download-smoke.js
2026-05-21 09:04:13 +08:00

3.1 KiB
Raw Blame History

5-18 Main Editor Tab State 与错误占位 Checklist v1

状态:done

归档说明(2026-05-21):主编辑器 tab state 与错误占位已完成并验证。

日期: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

  • 定义轻量 main editor tab 状态,至少能表达 idkindtitledirtysavinghasExternalConflictlastActiveAtstatus
  • page tab 与 resource tab 激活统一通过同一状态更新入口。
  • resource tab close guard 读取同一状态入口,避免散落检查。
  • 打开 resource 失败时创建或保留 error placeholder tab。
  • error placeholder tab 有明确错误 UI,可关闭,不留下半注册 panel/session。
  • 更新 Rust 字符串 contract test,确保关键 runtime marker 存在。

5. 验收

  • node --check scripts/task462-resource-tab-error-placeholder-smoke.js
  • node scripts/task462-resource-tab-error-placeholder-smoke.js
  • node scripts/task457-main-editor-resource-tab-smoke.js
  • cargo test -p mnote-web web_shell -- --test-threads=1

6. 本轮执行记录

  • 已完成:
    • createResourceSession 已补 lastActiveAtresource 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.rsstyles.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。