chore: 保存当前架构收口与 bug 修复快照
归档本轮 P0/P1 bug 修复、设计审查迁移、AI selection scope 收口与 stream contract 调整,并保留当前 05 主线迁移起点。
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
# 4-36 [process][bug] 本地文件夹切回云空间后进入空白 workspace v1
|
||||
# 4-36 [done][bug] 本地文件夹切回云空间后进入空白 workspace v1
|
||||
|
||||
> 更新时间:2026-05-15
|
||||
>
|
||||
> 分类归属:
|
||||
> - `04-tree-domain/process`
|
||||
> - `04-tree-domain/done`
|
||||
> - 涉及边界:workspace source switch、本地文件夹入口、Convex workspace 恢复、Sidebar File Tree/Page Tree projection
|
||||
>
|
||||
> 用户反馈:
|
||||
|
||||
@@ -0,0 +1,61 @@
|
||||
# 4-46 [done][bug] FileTree 资源行被当成页面命令对象处理 v1
|
||||
|
||||
> 发现时间:2026-05-17
|
||||
>
|
||||
> 更新时间:2026-05-17
|
||||
>
|
||||
> 状态:`[done]`
|
||||
>
|
||||
> 关联主线:`04-tree-domain`
|
||||
|
||||
## 1. 问题定义
|
||||
|
||||
FileTree asset row 的 `resourceMeta` 同时带 `documentId` 和 `assetId`,但 tree shell 的部分交互会优先读取 `documentId`,从而把资源行当成页面行执行删除、复制、移动、重命名等页面命令。
|
||||
|
||||
这直接违反 Resource Tree / File Tree / Page Tree 的分层边界。
|
||||
|
||||
## 2. 证据
|
||||
|
||||
- [bridge-runtime/src/lib.rs](/mnt/Data1T/mnote/rust/crates/bridge-runtime/src/lib.rs:8499) 附近构造 asset row resource meta。
|
||||
- [tree.rs](/mnt/Data1T/mnote/rust/crates/mnote-web/src/routes/tree.rs:2019) `getFileTreeRowDocumentId()` 优先返回资源行中的 `documentId`。
|
||||
- [tree.rs](/mnt/Data1T/mnote/rust/crates/mnote-web/src/routes/tree.rs:2881) 键盘删除路径使用 documentId。
|
||||
- [tree.rs](/mnt/Data1T/mnote/rust/crates/mnote-web/src/routes/tree.rs:2962) 剪贴板路径使用 documentId。
|
||||
- [tree.rs](/mnt/Data1T/mnote/rust/crates/mnote-web/src/routes/tree.rs:4630) F2 重命名路径使用 documentId。
|
||||
|
||||
## 3. 影响
|
||||
|
||||
- 选中 mindmap / table / media asset 行后,可能误删或误重命名所属页面。
|
||||
- 资源归属与页面结构命令混淆。
|
||||
- `tree.resource.*` 的正式命令面无法成为资源操作唯一入口。
|
||||
|
||||
## 4. 建议修复
|
||||
|
||||
- FileTree row model 必须区分 `document row` 与 `resource row`,不要对 resource row 暴露页面 document command。
|
||||
- Delete / F2 / copy / move 对资源行应走 `tree.resource.*`,或在未实现时显式禁用。
|
||||
- 增加浏览器 smoke:资源行上 Delete、F2、Ctrl+C/X/V 不得触发页面命令。
|
||||
|
||||
## 5. 状态
|
||||
|
||||
已修复。
|
||||
|
||||
## 6. 修复内容
|
||||
|
||||
- `getFileTreeRowDocumentId()` 不再从 `resourceMeta.documentId` 读取资源 owner,只返回真正可作为页面命令目标的 document / markdown / index 行 ID。
|
||||
- 新增 `getFileTreeRowOwnerDocumentId()`,资源打开与 owner 上下文继续使用 owner document ID。
|
||||
- FileTree 资源行不再通过 F2 或行内编辑按钮进入页面重命名。
|
||||
- 动态 filetree row DOM 增加 `data-owner-document-id`,`data-document-id` 仅表达页面命令目标。
|
||||
- 初始 SSR filetree HTML 同步区分 `data-document-id` 与 `data-owner-document-id`,asset row 的 `data-document-id` / `data-doc-id` 保持为空。
|
||||
|
||||
## 7. 验证
|
||||
|
||||
```bash
|
||||
cargo test --manifest-path rust/Cargo.toml -p mnote-web tree_shell::filetree_renderer::tests::tree_shell_filetree_renderer_outputs_initial_nested_html_contract -- --nocapture
|
||||
```
|
||||
|
||||
结果:`1 passed`。
|
||||
|
||||
```bash
|
||||
cargo test --manifest-path rust/Cargo.toml -p mnote-web routes::tree::tests::tree_shell_filetree_mode_embeds_asset_state -- --nocapture
|
||||
```
|
||||
|
||||
结果:`1 passed`。
|
||||
@@ -0,0 +1,43 @@
|
||||
# 4-47 [done][bug] stream_support 回归样例仍保留退役 tree.resource.delete 命名
|
||||
|
||||
> 发现时间:2026-05-18
|
||||
>
|
||||
> 状态:`[done]`
|
||||
>
|
||||
> 关联主线:`04-tree-domain`
|
||||
|
||||
## 1. 问题定义
|
||||
|
||||
当前资源生命周期正式命令面使用 `tree.resource.archive / restore / purge / rename`,删除到垃圾箱语义应表达为 `tree.resource.archive`。但 `stream_support` 的 remove asset delta 回归样例仍保留 `tree.resource.delete`。
|
||||
|
||||
该残留不在 runtime command dispatcher 中,但会让 stream 合同样例继续暗示退役命名合法,增加后续实现和测试口径漂移风险。
|
||||
|
||||
## 2. 证据
|
||||
|
||||
- [stream_support.rs](/mnt/Data1T/mnote/rust/crates/mnote-web/src/routes/stream_support.rs:1057) 测试样例仍写 `"command_name": "tree.resource.delete"`。
|
||||
- [tree.rs](/mnt/Data1T/mnote/rust/crates/mnote-web/src/routes/tree.rs:714) 当前 tree shell dispatcher 已公开 `tree.resource.archive`。
|
||||
- [mapping.rs](/mnt/Data1T/mnote/rust/crates/storage-convex-bridge/src/mapping.rs:47) storage bridge 已映射 `tree.resource.archive`,没有 `tree.resource.delete`。
|
||||
|
||||
## 3. 影响
|
||||
|
||||
- 回归样例与当前资源命令面不一致。
|
||||
- 后续维护者可能继续按 `delete` 扩写 stream / resource lifecycle 合同。
|
||||
- 与 `design/04-tree-domain/process/4-27-resource-lifecycle-command-cutover-v1.md` 中“delete 改为 archive”的口径冲突。
|
||||
|
||||
## 4. 修复结果
|
||||
|
||||
- [stream_support.rs](/mnt/Data1T/mnote/rust/crates/mnote-web/src/routes/stream_support.rs) 的 remove asset delta 回归样例已把 `tree.resource.delete` 改为 `tree.resource.archive`。
|
||||
- `rg` 已确认 Rust route / storage bridge 中不再残留 `tree.resource.delete`。
|
||||
- 对应 `stream_change_preserves_remove_asset_delta_fields` 回归测试已通过。
|
||||
|
||||
## 5. 验证证据
|
||||
|
||||
```bash
|
||||
rg -n "tree\\.resource\\.delete" rust/crates/mnote-web/src/routes
|
||||
cargo test --manifest-path rust/Cargo.toml -p mnote-web stream_change_preserves_remove_asset_delta_fields -- --nocapture
|
||||
```
|
||||
|
||||
验证结果:
|
||||
|
||||
- `rg` 无输出。
|
||||
- `stream_change_preserves_remove_asset_delta_fields` 通过:`1 passed`。
|
||||
Reference in New Issue
Block a user