diff --git a/.codex/reasonix-tasks/2026-05-25-batch-a-worker-b-5-29-overlay-block-menu-audit.md b/.codex/reasonix-tasks/2026-05-25-batch-a-worker-b-5-29-overlay-block-menu-audit.md new file mode 100644 index 00000000..b8ac4d05 --- /dev/null +++ b/.codex/reasonix-tasks/2026-05-25-batch-a-worker-b-5-29-overlay-block-menu-audit.md @@ -0,0 +1,42 @@ +# Reasonix Batch A / Worker B:5-29 overlay / block menu 只读审计 + +Project root:由 runner 传入的独立 worktree。 + +## 目标 + +只读审计 `rust/spikes/leptos-tiptap-spike/src/lib.rs` 中 overlay / block menu 相关逻辑,为 `design/05-editor-mainline/process/5-29-editor-runtime-followup-checklist-v1.md` 提供下一刀最小实现建议。 + +## 只读范围 + +可以读取: + +- `rust/spikes/leptos-tiptap-spike/src/lib.rs` +- `rust/spikes/leptos-tiptap-spike/src/editor_runtime/*` +- `scripts/task488-local-attachment-link-delete-undo-smoke.js` +- `scripts/task489-block-menu-delete-undo-smoke.js` +- `scripts/task479-local-folder-markdown-resource-lifecycle-smoke.js` + +## 禁止事项 + +- 严格只读,禁止修改任何源码、文档、脚本、生成产物或 git 状态。 +- 不运行会写入源码的格式化、构建生成命令。 +- 不把 shell resource open / local upload 归入 editor runtime。 + +## 审计问题 + +请回答: + +1. 哪些 overlay / block menu 函数依赖 `ReadSignal` / `WriteSignal` / `NodeRef` / `Window` 等状态,暂不适合第一刀迁移? +2. 是否存在可先迁出的纯 helper?如果有,列出函数名、当前位置、建议目标模块。 +3. 是否应先引入小型 context struct,还是继续保持函数参数直传? +4. 哪些 smoke 能覆盖迁移后风险? +5. `apply_html_update` 迁出是否仍被 overlay / bridge event 耦合阻塞? + +## 输出要求 + +最终 handoff 必须包含: + +- 函数归属表。 +- 下一刀建议,按 P0/P1/P2 排序。 +- 明确不可迁项和原因。 +- 建议的验收命令 / smoke。 diff --git a/.codex/reasonix-tasks/2026-05-25-batch-a-worker-d-3-20-local-upload-filetree-audit.md b/.codex/reasonix-tasks/2026-05-25-batch-a-worker-d-3-20-local-upload-filetree-audit.md new file mode 100644 index 00000000..4442df0f --- /dev/null +++ b/.codex/reasonix-tasks/2026-05-25-batch-a-worker-d-3-20-local-upload-filetree-audit.md @@ -0,0 +1,44 @@ +# Reasonix Batch A / Worker D:3-20 local upload / filetree 下一刀只读审计 + +Project root:由 runner 传入的独立 worktree。 + +## 目标 + +只读审计 `3-20` 后续切片:local upload 主流程、filetree keyboard / clipboard / DND / context menu DOM。基于已落地的 `filetree-runtime.js`、`filetree-selection-runtime.js`、`filetree-context-menu-runtime.js` 和 `local-upload-runtime.js`,给出下一刀最小实现建议。 + +## 只读范围 + +可以读取: + +- `rust/crates/mnote-web/src/ssr/pages/layout.rs` +- `rust/crates/mnote-web/browser/filetree-runtime.js` +- `rust/crates/mnote-web/browser/filetree-selection-runtime.js` +- `rust/crates/mnote-web/browser/filetree-context-menu-runtime.js` +- `rust/crates/mnote-web/browser/local-upload-runtime.js` +- `scripts/task479-local-folder-markdown-resource-lifecycle-smoke.js` +- `scripts/task487-local-folder-tree-live-consumer-smoke.js` + +## 禁止事项 + +- 严格只读,禁止修改任何源码、文档、脚本、生成产物或 git 状态。 +- 不改变资源归属语义、tree command 语义或 upload API 合同。 +- 不把 editor internal selection / history 迁入 `mnote-web` browser runtime。 + +## 审计问题 + +请回答: + +1. local upload 剩余函数中,哪些可迁到 `local-upload-runtime.js`,哪些仍应留在 inline 直到 API / editor 插入边界更清楚? +2. filetree keyboard / clipboard / DND / context menu DOM 中,下一刀应优先迁纯 helper 还是 DOM listener? +3. 哪个实现切片风险最低,允许文件范围是什么? +4. 对应最小测试和浏览器 smoke 是什么? +5. 哪些现有 runtime helper 可复用,避免新增第二套 filetree selection 真相? + +## 输出要求 + +最终 handoff 必须包含: + +- local upload 函数归属表。 +- filetree 下一刀建议。 +- 明确禁止迁移项。 +- 推荐 Worker 实现任务书草案和验收命令。 diff --git a/design/03-rust-web/process/3-20-browser-runtime-followup-checklist-v1.md b/design/03-rust-web/process/3-20-browser-runtime-followup-checklist-v1.md new file mode 100644 index 00000000..4564199a --- /dev/null +++ b/design/03-rust-web/process/3-20-browser-runtime-followup-checklist-v1.md @@ -0,0 +1,67 @@ +# 3-20 Browser Runtime 后续收口 Checklist v1 + +> 创建时间:2026-05-25 +> 状态:`process` +> 来源:承接 `design/03-rust-web/done/3-19-rust-web-browser-runtime-module-extraction-v1.md` 的后续未专项完成项。 + +## 1. 目标 + +在 `3-19` 已归档的基础上,继续把仍留在 Rust inline / 主壳大 runtime 中的浏览器行为切成可审计模块。Codex 维护本文件作为事实源,Reasonix 只承接短批次审计、窄范围实现或浏览器 smoke;每批最多 2 个 worker。 + +## 2. 本轮边界 + +本轮优先处理: + +- 主壳 filetree keyboard / clipboard / DND / context menu DOM 后续切片。 +- document pane host adapter / document session / conflict panel runtime 只读审计。 +- 本地上传主流程剩余边界审计,包括 `uploadFileToMediaAsset`、`uploadFilesWithResolvedTarget`、`insertUploadedAssetIntoEditor`。 +- WS / SSE tree live 浏览器回归 smoke。 + +本轮不处理: + +- Tiptap 编辑器内部命令、history、selection overlay;这些归 `5-29`。 +- Rust kernel tree command 语义重写。 +- Page AI panel 外置化;需要另起 `07-ai` 设计。 + +## 3. Batch A 候选任务 + +- [ ] Worker A:只读审计 document pane host adapter。 + - 目标:列出 `web_shell.rs` 中 document pane host / session / conflict panel 可迁模块、风险和 smoke。 + - 输出:候选模块表、禁止迁入 editor runtime 的边界、下一刀建议。 +- [ ] Worker B:只读审计 local upload 主流程。 + - 目标:复核上传主流程剩余函数是否可从 `SIDEBAR_TREE_JS` 拆入 `local-upload-runtime.js`,不得改变资源归属语义。 + - 输出:函数归属表、不可迁项、必须保留的 smoke。 +- [ ] Worker C:只读审计 filetree keyboard / clipboard / DND。 + - 目标:基于已落地 `filetree-runtime.js` / `filetree-selection-runtime.js` / `filetree-context-menu-runtime.js`,给出下一刀最小实现范围。 + - 输出:建议只迁纯 helper 还是 DOM listener,列出冲突文件。 +- [ ] Worker D:浏览器 smoke 审计 WS / SSE tree live。 + - 目标:只读验证主壳 tree live 外置 runtime 在浏览器中仍加载,记录 WS 正常路径和 SSE fallback 的可测性。 + - 输出:截图、console/network、result.json;不修改源码。 + +## 4. 验收命令 + +按具体切片选择: + +```bash +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 filetree +cargo test --manifest-path rust/Cargo.toml -p mnote-web runtime +node scripts/task487-local-folder-tree-live-consumer-smoke.js +node scripts/task479-local-folder-markdown-resource-lifecycle-smoke.js +``` + +UI / 浏览器可见项必须有真实浏览器截图或结构化 smoke 证据。 + +## 5. 采纳规则 + +- Reasonix 结果必须先查 Hindsight `reasonix` recall,再读 `process-handoff.md/json`、`result.json`、diff 和验证证据。 +- 只采纳限定文件范围内的最小 diff;越界重构、回滚用户改动、修改 git 状态的一律拒绝。 +- browser smoke worker 必须 `modified_files=[]`。 +- 本文件只记录真实完成项;未验证项保持未勾选。 + +## 6. 本轮执行记录 + +- 2026-05-25:Codex 创建本续跑事实源。 +- 2026-05-25:修正执行约束:本文件遵循当前 goal 的“每批最多 2 个 worker”,不再沿用早期草稿中的 4 worker 并行方案。 +- 2026-05-25:下一批只派发 Worker B(local upload / filetree 下一刀只读审计);Worker A/C/D 暂缓。 diff --git a/design/05-editor-mainline/process/5-29-editor-runtime-followup-checklist-v1.md b/design/05-editor-mainline/process/5-29-editor-runtime-followup-checklist-v1.md new file mode 100644 index 00000000..9f89159c --- /dev/null +++ b/design/05-editor-mainline/process/5-29-editor-runtime-followup-checklist-v1.md @@ -0,0 +1,70 @@ +# 5-29 Editor Runtime 后续收口 Checklist v1 + +> 创建时间:2026-05-25 +> 状态:`process` +> 来源:承接 `design/05-editor-mainline/done/5-28-leptos-tiptap-editor-runtime-module-extraction-v1.md` 的后续未专项完成项。 + +## 1. 目标 + +在 `5-28` 已完成附件链接、history-safe delete、command sync、persistence、attachment upload intent 首批拆分后,继续把 editor runtime 的 selection / overlay / block menu / mindmap node view 切成可索引模块。Codex 维护本文件作为事实源,Reasonix 只做短批次审计、窄范围实现或浏览器 smoke。 + +## 2. 本轮边界 + +本轮优先处理: + +- `editor_runtime/dom_selection.rs` 第一刀。 +- overlay / block menu 后续切片的只读审计。 +- 仍使用 HTML 整文替换的用户编辑路径风险复核,例如块手柄拖拽重排和复制副本。 +- `task488` / `task489` / `task479` 作为回归基线。 + +本轮不处理: + +- shell host resource open / local upload 落盘语义;这些归 `3-20`。 +- Page AI 流式 apply / review session。 +- mindmap 事实源重构;本轮最多审计 node view 拆分边界。 + +## 3. Batch A 候选任务 + +- [x] Worker A:实现 `dom_selection.rs` 第一刀。 + - 允许修改:`rust/spikes/leptos-tiptap-spike/src/lib.rs`、`rust/spikes/leptos-tiptap-spike/src/editor_runtime/mod.rs`、新增 `rust/spikes/leptos-tiptap-spike/src/editor_runtime/dom_selection.rs`。 + - 目标函数:`active_editor_text_selection`、`selection_summary`、`has_active_text_selection`、`selection_has_rich_marks`,以及必要的 selection payload helper。 + - 禁止:迁出 block menu DOM、overlay state、host bridge、resource open。 +- [ ] Worker B:只读审计 overlay / block menu 拆分。 + - 目标:列出强依赖 Leptos signal 的函数,判断是否先抽 context struct 或先迁纯 helper。 + - 输出:下一刀最小实现范围和 smoke 建议。 +- [ ] Worker C:只读审计剩余 HTML 整文替换用户编辑路径。 + - 目标:查 `set_content`、`apply_html_update`、`apply_document_update` 的用户触发链路,列出可迁 Tiptap command/transaction 的候选。 + - 输出:风险表和建议 RED smoke。 +- [ ] Worker D:浏览器 smoke 审计 editor runtime 基线。 + - 目标:只读运行或复核 `task488`、`task489`、`task479`,截图/结果证明附件删除和块菜单删除 undo/redo 仍可用。 + - 输出:result.json、截图、console/network;不修改源码。 + +## 4. 验收命令 + +```bash +cargo fmt --manifest-path rust/Cargo.toml --all --check +cargo check --manifest-path rust/spikes/leptos-tiptap-spike/Cargo.toml +cargo build --manifest-path rust/spikes/leptos-tiptap-spike/Cargo.toml --target wasm32-unknown-unknown --release +wasm-bindgen rust/spikes/leptos-tiptap-spike/target/wasm32-unknown-unknown/release/mnote_leptos_tiptap_spike.wasm --target web --out-dir rust/spikes/leptos-tiptap-spike/generated/island --out-name mnote-leptos-tiptap-spike-island +node scripts/task488-local-attachment-link-delete-undo-smoke.js +node scripts/task489-block-menu-delete-undo-smoke.js +node scripts/task479-local-folder-markdown-resource-lifecycle-smoke.js +``` + +UI / 浏览器可见项必须有真实浏览器截图或结构化 smoke 证据。 + +## 5. 采纳规则 + +- Reasonix 结果必须先查 Hindsight `reasonix` recall,再读 `process-handoff.md/json`、`result.json`、diff 和验证证据。 +- 实现 worker 只能改允许范围;只读和 smoke worker 必须没有源码 diff。 +- `lib.rs` 不能新增附件/history/DOM bridge 大块逻辑。 +- 本文件只记录真实完成项;未验证项保持未勾选。 + +## 6. 本轮执行记录 + +- 2026-05-25:Codex 创建本续跑事实源。 +- 2026-05-25:Worker A 未继续派发;Codex 主控已在主工作区完成 `dom_selection.rs` 第一刀并提交 `c7ab4e56 refactor: extract editor dom selection runtime`。 + - 已迁函数:`node_is_within_root`、`active_editor_text_selection`、`has_active_text_selection`、`selection_summary`、`selection_has_rich_marks`。 + - 未迁:`SelectionPayload`、`selection_payload`、`send_selection_state*`、`selection_event_payload`,原因是仍依赖 bridge event、`HoveredBlockState` 和 runtime block id 边界。 + - 已验证:`cargo fmt --manifest-path rust/Cargo.toml --all --check`、`cargo check --manifest-path rust/spikes/leptos-tiptap-spike/Cargo.toml`、wasm release build、`wasm-bindgen`、`task488`、`task489`、CodeGraph pending 0。 +- 2026-05-25:下一批只派发 Worker B(overlay / block menu 只读审计);Worker C/D 暂缓,避免超过每批最多 2 个 worker 的 goal 约束。