- 统一 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
2.8 KiB
2.8 KiB
5-25 Editor Tab Keyboard and MRU Checklist v1
状态:done
归档说明(2026-05-21):editor tab keyboard 与 MRU 行为已完成。
日期:2026-05-21
Owner:main editor tab keyboard / MRU behavior
1. 目标
参考 Sidex / VSCode MultiEditorTabsControl,补 MNote main tab 的基础键盘和 MRU 行为。当前只做轻量交互,不照搬完整 tab control。
2. 允许修改范围
rust/crates/mnote-web/src/routes/web_shell.rsrust/crates/mnote-web/src/ssr/styles.rs- 可新增聚焦 smoke
3. 禁止事项
- 不新增全局快捷键与浏览器默认冲突。
- 不实现完整 tab overflow 复杂布局。
- 不改变 resource tab identity。
4. Checklist
- tab strip 支持左右箭头 roving focus。
Enter/Space激活当前 focused tab。- 关闭 active resource tab 后回到 MRU 或 page tab,行为稳定。
- tab 上保留可测试 DOM 状态。
- 补测试或 smoke。
5. 验收
cargo test -p mnote-web web_shell -- --test-threads=1- 如新增 smoke:
node scripts/task47*-editor-tab-keyboard-*.js
6. 执行记录
引用 proposal:
.codex/reasonix-proposals/2026-05-21-tab-keyboard-mru-proposal.md
已确认
resourceTabMru数组 +touchResourceTabMru/lastActiveResourceTabKey/removeFromResourceTabMru逻辑完整,MRU 核心逻辑无需改动。activateMainEditorTab已正确维护 roving tabindex(active →tabindex="0", others →tabindex="-1")。createResourceTabDom中 resource tab 初始tabindex="-1"符合预期。
已实现
- 新增
bindMainEditorTabStrip()函数(keydown 事件委托 + collectTabs + 箭头/Home/End/Enter/Space)。 - 修改
closeResourceTab()末尾,关闭后 focus 迁移到新激活的 tab。 - 在
styles.rs补充:focus-visible样式。 - 更新 Rust contract test 断言。
cargo test -p mnote-web web_shell -- --test-threads=1通过。
后续可选
- 如后续需要浏览器级回归,可新增
scripts/task475-editor-tab-keyboard-mru-smoke.js,覆盖多 tab 键盘切换与关闭后 focus。
非预期发现
closeResourceTab在 activate 后未显式调用focus(),导致 keyboard focus 丢失。需修复。- tab strip 无
:focus-visible样式,键盘用户在箭头导航后看不到 focus 环。
Codex 实施记录
- 2026-05-21:Reasonix Worker B 按要求只输出 proposal,未直接改源码。
- 2026-05-21:Codex 按 proposal 的最小安全集实现键盘 roving focus、Enter/Space 激活、关闭后 MRU/page tab focus 迁移。
- 2026-05-21:未新增全局快捷键;事件只绑定在
[data-mnote-main-tab-strip]内。
7. 非目标
- 不做拖拽 tab 排序。
- 不做 close others / close saved 复杂菜单。