3.6 KiB
3.6 KiB
Batch A3 Worker B — Local folder Markdown trash lifecycle smoke
修改文件
| 文件 | 操作 | 说明 |
|---|---|---|
scripts/task475-local-folder-markdown-trash-lifecycle-smoke.js |
新增 | loose Markdown 页面的 delete/restore/delete+purge 完整生命周期 smoke |
design/04-tree-domain/process/4-34-filetree-trash-dual-browser-no-refresh-v1.md |
修改 | 更新验收矩阵、审计结论、执行记录、边界和完成标准 |
Smoke 覆盖内容
- 测试对象:loose Markdown 页面(非 bundle 目录形式),
docs/test-page.md - documentId 格式:
local-md:docs~2Ftest-page.md - API 路径:
POST /api/tree/commandswithsourceKind: "local_folder" - 5 个步骤:
delete→ 源.md消失,.mnote/trash出现对应文件,trash-index.json记录local-md:*entryrestore→.md回原路径(内容不变),trash 文件消失,index 清理- 再次
delete→ 同步骤 1,验证可重复 purge→ 源路径与 trash 路径均不存在,index 清理- 重建后 delete+purge 周期 →
trash-index.json仍为合法 JSON
当前实现观察
trash_local_markdown_page响应不包含canonicalCommand字段(与trash_local_raw_file/trash_local_directory不同,后两者返回"canonicalCommand": "tree.resource.archive")restore_local_markdown_page响应包含previousDocumentId、relativePath、documentIdpurge_local_markdown_page响应包含ok: true
未覆盖:bundled Markdown
bundled Markdown(页面目录形式,含 Page.md + 资源文件)未在 smoke 中覆盖,原因:
trash_local_markdown_page会将 bundle 目录整体移入 trash(resourceKind: "markdown_bundle"),涉及目录遍历和子文件处理restore_local_markdown_bundle路径还原有额外逻辑(同名冲突处理等)- Rust 单测已覆盖:
local_tree_command_manages_loose_markdown_like_regular_file(loose rename/copy/delete/restore)local_tree_command_delete_page_bundle_directory_uses_page_trash(bundle delete/restore)local_tree_command_delete_local_file_id_uses_trash_index(local file trash/restore/purge)local_tree_command_delete_chinese_named_asset_in_subdir_uses_trash_index(中文资源名 trash 周期)
bundled Markdown case 可在后续独立编写——需构造含 Page.md 和附件的页面目录,验证 bundle 整体移入/移出 trash。
验证命令和结果
# 语法检查
node --check scripts/task475-local-folder-markdown-trash-lifecycle-smoke.js # exit 0
# 运行 smoke(需要 mnote-web 在 3000 运行)
node scripts/task475-local-folder-markdown-trash-lifecycle-smoke.js
# 输出: task475 local folder Markdown trash lifecycle smoke passed
# result: tmp/task475-local-folder-markdown-trash-lifecycle-smoke/result.json
风险
| 风险 | 说明 |
|---|---|
| canonicalCommand 缺失 | loose Markdown 的 delete/restore/purge 响应不含 canonicalCommand,与非 md 资源 lifecycle 响应不一致。如果未来统一添加,smoke 需同步更新。 |
| trash 文件名冲突 | next_available_path 使用 file_stem_title 生成文件名,同名文件会附加序号(如 test-page 2.md)。smoke 中的路径 trash/test-page.md 在当前实现下恰好是单文件场景,若后续并行场景新增同名文件会冲突——但 smoke 每次使用独立 temp dir,不受影响。 |
| API 响应结构变动 | smoke 依赖 result.result?.execution 的 JSON 路径,若 json_response 包装层变动需同步更新。 |