Files
mnote/design/05-editor-mainline/done/5-16-editor-group-resource-tab-safety-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

2.9 KiB
Raw Blame History

5-16 Editor Group 与 Resource Tab 安全收口 Checklist v1

状态:done

归档说明(2026-05-21):本文件核心安全收口已完成;正式 tab state 与错误占位剩余项已由 5-18 覆盖并归档。

日期:2026-05-20

Ownermnote-web 主编辑区 runtime / resource tab

1. 目标

把当前浏览器内存版 resource tab 收口为轻量 editor group 模型的第一阶段:不引入完整 VSCode 多 group,不改变 Page Aggregate 事实源,只解决打开、激活、关闭和脏资源防护的最小闭环。

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
  • 可新增一个聚焦 smoke,例如 scripts/task460-resource-tab-close-dirty-smoke.js

3. Checklist

  • 定义轻量 MainEditorTabEntry / mainEditorTabRegistry 语义,至少包含 idkindtitledirtysavinghasExternalConflictlastActiveAt。(由 5-18 的主 tab state 收口覆盖)
  • 保持 page tab 为固定 tab,但 resource tab 激活/关闭应走同一套 registry 状态更新。
  • closeResourceTab 关闭前检查 resource session
    • saving=true 时禁止直接关闭或等待保存完成。
    • hasExternalConflict=true 时禁止静默关闭。
    • dirty=true 时触发保存或确认流程;不得直接释放 session。
  • 关闭 active resource tab 后按 MRU 回到上一个 resource tab;没有可用 resource tab 时才回到 page tab。
  • resource tab 激活时更新稳定 aria-selectedtabindex 和 panel hidden 状态。
  • 打开失败时保留 error placeholder tab,允许用户关闭或重试,不要留下半注册状态。(由 5-18 覆盖)

4. 验收

  • 打开两个 resource tab,切到第二个并关闭后,应回到第一个,而不是无条件回 page tab。
  • 编辑 resource markdown 后立即点关闭,不应静默丢弃未保存内容。
  • 保存中关闭不会释放 editor session。
  • 打开失败的 resource tab 有明确错误占位,并可关闭。(由 5-18 覆盖)
  • 现有 task457-main-editor-resource-tab-smoke.js 继续通过。
  • 新增 close dirty / MRU smoke 通过。

4.1 本轮执行记录

  • 已合入:resource tab MRU、关闭 guard、aria-selected / tabindex 同步、关闭后回退到上一个 resource tab。
  • 已新增:scripts/task460-resource-tab-close-dirty-smoke.js 覆盖近期本地输入后的关闭阻止。
  • 后续覆盖:正式 MainEditorTabEntry 模型与打开失败 placeholder tab 已由 5-18 收口。

5. 非目标

  • 不实现完整 VSCode preview / pinned / sticky / drag reorder。
  • 不实现 tab 持久化恢复。
  • 不改变 secondary pane 布局。
  • 不把 resourceTabRegistry 移到后端持久状态。