2.7 KiB
2.7 KiB
Reasonix Batch E / Worker B:3-20 document conflict diff DOM helper 候选
Project root:/mnt/Data1T/mnote-worktrees/0525-e-worker-b-3-20-conflict-diff-dom
目标
在独立 worktree 中产出候选 patch,把 document conflict panel 中 diff / merge 区域的纯 DOM 构建和按钮 wiring 从 web_shell.rs inline script 外置到 document-conflict-panel-runtime.js。web_shell.rs 仍负责读取磁盘版本、计算 plain text、状态切换和持久化业务逻辑。
优先新增 runtime helper:
populateSessionConflictDiffPanel(panel, context, deps)或等价命名
其中 context 至少包含:
currentTextdiskText- 可选 empty 文案
deps 注入:
onUseCurrentonUseDiskonSaveMerge
允许修改
rust/crates/mnote-web/browser/document-conflict-panel-runtime.jsrust/crates/mnote-web/src/routes/web_shell.rs
必要时只更新同文件内字符串断言测试。
禁止事项
- 不修改
rust/crates/mnote-web/browser/local-upload-runtime.js或layout.rs,避免和当前 3-20 local upload 候选冲突。 - 不修改 editor island / leptos-tiptap 代码。
- 不迁
acceptDiskVersion、keepCurrentEditorVersion、writeMergedConflictResult、fetchLatestSessionAggregate、fetchLatestResourceSnapshot等业务逻辑。 - 不改变按钮 data-testid、面板结构语义、错误处理和 fallback 行为。
- 不修改 AGENTS、design、bugs 或 git 状态。
- 不提交 git。
实现要求
openConflictDiffPanel(session, panel)仍负责:- 显示 loading。
- fetch 最新 session/resource snapshot。
- 计算
latestText与sessionPlainText(session)。 - 捕获错误并显示错误。
- runtime helper 只负责在已有
diffPanel中创建 current/disk/merge DOM,并绑定 use current / use disk / save merge 回调。 - runtime 不可直接访问 session fetch / persist / status 业务函数。
- inline fallback 必须完整保留;runtime 不存在时当前行为不变。
验收命令
node --check rust/crates/mnote-web/browser/document-conflict-panel-runtime.js
cargo fmt --manifest-path rust/Cargo.toml --all --check
cargo check --manifest-path rust/Cargo.toml -p mnote-web
cargo test --manifest-path rust/Cargo.toml -p mnote-web document_conflict_panel_runtime_contains_dom_helpers -- --test-threads=1
cargo test --manifest-path rust/Cargo.toml -p mnote-web mnote_browser_runtime_assets_are_explicitly_mounted -- --test-threads=1
如果能定位现有 secondary pane conflict smoke,可额外运行;不要新增大范围浏览器用例。
输出要求
handoff 必须列出:
- 修改文件。
- 外置 DOM helper 的职责和 deps 清单。
- fallback 是否保留。
- 验收命令和结果。
- 未覆盖风险。
git diff --stat。