Files
mnote/design/04-tree-domain/done/4-26-filetree-bulk-delete-selection-smoke-v1.md
T
lix-2026 47e224d419 chore: align sqlite control plane architecture
- 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
2026-05-22 17:45:22 +08:00

3.7 KiB
Raw Blame History

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

  • 选择 rootchild、外部普通附件、mindmap、table。
  • 预期 preflight plan 去重:root 保留,child 被父页面覆盖,外部资源保留。
  • 确认文案应包含:
    • 1 个页面
    • 1 个附件
    • 1 个思维导图
    • 1 个在线表格
  • 确认后:
    • rootchild、外部普通附件、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 失败,验证页面成功进垃圾箱、失败附件仍保留,并出现“部分对象删除失败”摘要。