Files
mnote/.codex/reasonix-tasks/results/batch-a3-worker-b-markdown-lifecycle.md
T

3.6 KiB
Raw Blame History

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/commands with sourceKind: "local_folder"
  • 5 个步骤
    1. delete → 源 .md 消失,.mnote/trash 出现对应文件,trash-index.json 记录 local-md:* entry
    2. restore.md 回原路径(内容不变),trash 文件消失,index 清理
    3. 再次 delete → 同步骤 1,验证可重复
    4. purge → 源路径与 trash 路径均不存在,index 清理
    5. 重建后 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 响应包含 previousDocumentIdrelativePathdocumentId
  • purge_local_markdown_page 响应包含 ok: true

未覆盖:bundled Markdown

bundled Markdown(页面目录形式,含 Page.md + 资源文件)未在 smoke 中覆盖,原因:

  • trash_local_markdown_page 会将 bundle 目录整体移入 trashresourceKind: "markdown_bundle"),涉及目录遍历和子文件处理
  • restore_local_markdown_bundle 路径还原有额外逻辑(同名冲突处理等)
  • Rust 单测已覆盖:
    • local_tree_command_manages_loose_markdown_like_regular_fileloose rename/copy/delete/restore
    • local_tree_command_delete_page_bundle_directory_uses_page_trashbundle delete/restore
    • local_tree_command_delete_local_file_id_uses_trash_indexlocal 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 包装层变动需同步更新。