4.0 KiB
4.0 KiB
4-38 File Tree Resource Lifecycle 与 Open Target 收口 Checklist v1
状态:done
日期:2026-05-20
Owner:File Tree / local_folder executor / resource lifecycle
归档时间:2026-05-21
归档说明:本文的原始未完成项已被后续
4-39/4-40/4-41/4-44/4-45拆分并完成。本文保留为资源 lifecycle 与 open target 收口的追认记录,不再作为活跃 process 入口。
1. 目标
对齐 Sidex Explorer 的“资源模型 + open target + lifecycle command”闭环,先修 MNote 当前最影响 local-first 的缺口:raw local file / directory / resource open target 表达不足、local-file: 删除进入垃圾箱不稳定、资源生命周期多入口分散。
2. 允许修改范围
rust/crates/mnote-web/src/tree_shell/filetree_runtime.rsrust/crates/mnote-web/src/routes/tree.rsrust/crates/mnote-web/src/routes/local_folder_source.rsrust/crates/mnote-web/src/routes/resource_trash.rsrust/crates/mnote-web/src/ssr/pages/layout.rs- 相关 Rust 单测与本地文件夹 smoke
3. Checklist
- 扩展或补强 File Tree open target,能表达 local raw file、directory、asset folder、mindmap/table/office/image 等资源身份。
- 统一 local resource identity:
- 支持
local-file:<relativePath>。 - 保留
local:asset:/local:node:兼容。 - 规范化 root-relative UTF-8 path,不允许 root escape。
- 支持
resolve_local_raw_file_id支持真实 projection 暴露的local-file:,并补 restore/purge 查找兼容测试。- 本地单独删除 mindmap / office / 普通附件资源时必须进入
.mnote/trash-index.json,不绕过 local trash。 - 前端 delete/bulk delete 对 local resource 优先走
/api/tree/commands的统一 archive/purge/restore 语义,旧 resource URL 只作为兼容 fallback。 - local_folder move 若传入
sortOrder,不得静默丢弃;至少返回明确 unsupported,或实现稳定排序记录。
4. 验收
- Rust 测试覆盖
local-file:Page/资源.extdelete / restore / purge。 - Rust 测试覆盖本地 mindmap 文件单独删除进入 trash index。
- 浏览器 smoke 覆盖本地文件夹资源行单独删除后垃圾箱可见、恢复回原路径、永久删除清理索引。
- 现有
task437-local-folder-asset-trash-lifecycle-smoke.js继续通过。 cargo test -p mnote-web local_folder相关测试通过。
4.1 本轮执行记录
- 已合入:
local-file:<relativePath>中文路径资源 delete / restore / purge 覆盖,local movesortOrder返回_unsupportedFields.sortOrder,避免静默吞字段。 - 已验证:相关 Rust targeted tests 与完整
cargo test -p mnote-web -- --test-threads=1通过。 - 后续覆盖:
4-39完成 FileTree open target 与 Resource Identity 收口。4-40完成 Resource Lifecycle Command Cutover 与 trash smoke 收口。4-41完成 FileTree bulk resource command cutover。4-44/4-45完成 action layer 与 open editors lifecycle link 收口。
- 2026-05-21 复核:
node --check scripts/task437-local-folder-asset-trash-lifecycle-smoke.js && node scripts/task437-local-folder-asset-trash-lifecycle-smoke.js通过。node --check scripts/task464-local-folder-resource-trash-ui-smoke.js && node scripts/task464-local-folder-resource-trash-ui-smoke.js通过。node --check scripts/task473-local-folder-trash-restore-no-refresh-focus-gap-smoke.js && node scripts/task473-local-folder-trash-restore-no-refresh-focus-gap-smoke.js通过。node --check scripts/task474-local-folder-empty-trash-ui-smoke.js && node scripts/task474-local-folder-empty-trash-ui-smoke.js通过。
- 未完成项:无。本文不再作为活跃入口;若后续发现新的 resource lifecycle bug,应在
bugs/04-tree-domain/process/新建缺陷,而不是重开本文。
5. 非目标
- 不做 Convex 云端完整文件系统 parity。
- 不实现完整 undo/redo。
- 不实现复杂 paste / drop 二进制上传矩阵。