Files
mnote/.codex/reasonix-tasks/2026-05-21-batch-a2-worker-b-restore-focus.md
T

2.3 KiB
Raw Blame History

Reasonix Batch A2 Worker Blocal folder restore 后 FileTree focus/reveal

Project root: /mnt/Data1T/mnote

目标

修复 task473-local-folder-trash-restore-no-refresh-focus-gap-smoke.js 记录的缺口:local folder 非 md 资源从 trash workbench restore 后,FileTree 恢复行应有 data-selected="true"data-active="true"data-focused="true",且不触发页面 reload。

Ownership

允许修改:

  • rust/crates/mnote-web/src/ssr/pages/layout.rs
  • rust/crates/mnote-web/src/routes/gateway.rs
  • scripts/task473-local-folder-trash-restore-no-refresh-focus-gap-smoke.js
  • design/04-tree-domain/process/4-28-trash-restore-location-reveal-focus-v1.md
  • design/04-tree-domain/process/4-46-batch-a-filetree-action-trash-smoke-execution-checklist-v1.md
  • .codex/reasonix-tasks/results/batch-a2-worker-b-restore-focus.md

禁止:

  • 不改 delete 默认进入 trash 的语义。
  • 不把 browser reload 当成 no-refresh。
  • 不引入跨窗口 postMessage 或复杂新服务。
  • 不提交 git。

推荐实现方向

短路径即可:

  1. trash workbench local restore 成功后,把恢复对象的 filetree row-id 写入 sessionStorage
    • 对非 md local resourcerow-id 是 local:asset:${original_relative_path}
    • 当前 row HTML 有 data-trash-entry-id,通常是 local-file:${relative_path};可在 HTML 中新增 data-filetree-row-id,避免前端猜。
  2. refreshLocalFolderSidebarSnapshot() 渲染后消费这个 pending row-id,选择/聚焦对应 filetree row。
  3. 复用现有 selectSidebarFileTreeRow(row, {}) 或新增小 helper,不要只改 DOM 属性导致 selection store 不一致。

验收命令

cargo test --manifest-path rust/Cargo.toml -p mnote-web layout -- --test-threads=1
cargo test --manifest-path rust/Cargo.toml -p mnote-web gateway -- --test-threads=1
node --check scripts/task473-local-folder-trash-restore-no-refresh-focus-gap-smoke.js

如本机 3000 可用,运行:

PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH=/usr/bin/google-chrome-stable node scripts/task473-local-folder-trash-restore-no-refresh-focus-gap-smoke.js

最终输出

写入 .codex/reasonix-tasks/results/batch-a2-worker-b-restore-focus.md,包含:

  • 修改文件
  • 实现策略
  • 验证命令和结果
  • 未完成项/风险