- replace default Convex control-plane wording with Rust SQLite control-plane across architecture, AGENTS, Reasonix, and design docs - retire root Convex functions source and deploy script into recycle while keeping explicit cloud/compat/sync-replica boundaries - add control-plane migration guard/docs and keep CodeGraph refreshed after the SQLite control-plane cutover
3.7 KiB
3.7 KiB
4-26 FileTree 批量删除与选择矩阵 Smoke
状态:done 创建时间:2026-05-15 所属主线:04-tree-domain / VSCode Explorer 文件树与垃圾箱闭环 来源:
design/10-review/07-vscode-explorer-filetree-trash-gap-review.md阶段 4
1. 目标
补齐 Convex filetree 下的真实浏览器验收,避免只用 reducer、local-folder smoke 或 API seed 证明“文件树多选删除已完成”。
本设计只覆盖阶段 4 的最小闭环:
- 隔离用户 / 隔离 workspace seed 3 个页面、2 个普通附件、1 个 mindmap、1 个 table。
- 在 3000 主入口打开 filetree UI。
- 验证 Ctrl/Cmd 多选、Shift 范围、右键已选项保持 selection、右键未选项切换 action target。
- 验证 Delete / Backspace 触发混合 doc + asset 批量删除。
- 验证确认文案按页面、附件、mindmap、table 计数。
- 验证删除后无需浏览器刷新,filetree 中目标行立即消失,并能在 trash dataset 或
/trash中看到。
2. 安全边界
- 不在默认测试账号既有 workspace 上执行批量删除。
- 不对默认 workspace 执行
emptyTrashByWorkspace。 - 使用一次性 SQLite control-plane Auth 用户注册后自动获得的默认 workspace;旧 Convex Auth 只作为历史 compat 对照。
- 清理仅针对本轮创建对象;如清理失败,只记录对象 ID,不扩大删除范围。
3. 建议脚本
新增:
scripts/task428-filetree-bulk-delete-selection-smoke.js
脚本输入:
MNOTE_UI_BASE_URL:默认http://127.0.0.1:3001,便于复用FRONTEND_PORT=3001 npm run desktop:hot。NEXT_PUBLIC_CONVEX_URL/CONVEX_SELF_HOSTED_URL:默认http://127.0.0.1:3210。
脚本输出:
tmp/task428-filetree-bulk-delete-selection-smoke/result.json- 包含本轮 email、workspaceId、docIds、assetIds、captured confirm 文案、tree command / resource request 摘要、trash 验证结果。
4. 验收矩阵
4.1 Seed
- 创建父页面
root。 - 创建子页面
child。 - 创建兄弟页面
sibling。 - 创建资源页面
resources,用于挂载:- 普通附件 2 个。
- mindmap 1 个。
- table 1 个。
4.2 Selection
- Ctrl/Cmd 点击:选中
root与一个外部普通附件。 - Shift 点击:在可见行上形成范围选区,至少包含 2 行。
- 右键已选项:selection 数量保持不变。
- 右键未选项:selection 切换为该项。
4.3 Delete / Backspace
第一轮 Delete:
- 选择
root、child、外部普通附件、mindmap、table。 - 预期 preflight plan 去重:
root保留,child被父页面覆盖,外部资源保留。 - 确认文案应包含:
1 个页面1 个附件1 个思维导图1 个在线表格
- 确认后:
root、child、外部普通附件、mindmap、table 对应行无需刷新消失。- Convex trash / sidebar dataset 可查询到对应 deleted / archived 状态。
第二轮 Backspace:
- 选择
sibling与第二个普通附件。 - 触发 Backspace,确认后无需刷新消失。
- 作为 Delete 入口的键盘等价验证。
5. 执行结果
scripts/task428-filetree-bulk-delete-selection-smoke.js 已落地并通过真实浏览器验证:
- 创建一次性用户和隔离 workspace。
- seed 页面、附件、mindmap、table。
- 验证 Ctrl/Cmd 多选、Shift 范围、右键已选保持、右键未选切换。
- 验证 Delete 混合删除页面 + 附件 + mindmap + table。
- 验证 Backspace 混合删除页面 + 附件。
- 验证确认文案计数、filetree 行无需刷新消失、Convex 垃圾箱状态。
- 通过 route interception 强制
/api/media/batch失败,验证页面成功进垃圾箱、失败附件仍保留,并出现“部分对象删除失败”摘要。