diff --git a/design/03-rust-web/process/3-19-rust-web-browser-runtime-module-extraction-v1.md b/design/03-rust-web/process/3-19-rust-web-browser-runtime-module-extraction-v1.md index 1b7beb63..6d4ee294 100644 --- a/design/03-rust-web/process/3-19-rust-web-browser-runtime-module-extraction-v1.md +++ b/design/03-rust-web/process/3-19-rust-web-browser-runtime-module-extraction-v1.md @@ -367,6 +367,56 @@ node --check rust/crates/mnote-web/browser/resource-open-runtime.js 全部通过。 +### 9.3 Batch 2 执行记录(2026-05-24) + +Reasonix implementation run: + +- run id: `reasonix-2026-05-24T13-14-25-162Z-f98927dc` +- worktree: `/mnt/Data1T/mnote-wt-3-19-tree-live-b2` +- handoff: `/home/lix/.codex/runtime/reasonix-coding-worker/reasonix-2026-05-24T13-14-25-162Z-f98927dc/process-handoff.md` +- Codex 采纳方式:读取 Hindsight recall 和 handoff 后,从隔离 worktree 选择性合入主工作区;未提交 worker branch。 + +已落地的切片: + +- 新增 `rust/crates/mnote-web/browser/tree-live-controller.js`。 +- 新增固定 asset route:`GET /api/mnote-browser-runtime/tree-live-controller.js`。 +- `PageLayout` 将原 inline `TREE_LIVE_CONTROLLER_JS` 替换为 `type="module"` 外置脚本。 +- `layout.rs` 不再保留大块 `TREE_LIVE_CONTROLLER_JS` raw string;测试改为 `include_str!` 外置文件内容。 + +采纳边界: + +- 本批次只做同构搬迁,不改 tree live 语义。 +- WS 优先、SSE fallback、local-folder events、snapshot/delta/resync/block.delta 分发保持原逻辑。 +- 后端 `/api/realtime/ws`、`/api/tree/events`、`/api/local-folder/events` 未修改。 + +验证: + +```bash +cargo fmt --manifest-path rust/Cargo.toml --all --check +cargo test -p mnote-web tree_live_controller_marks_transport_and_closes_source_on_pagehide +node --check rust/crates/mnote-web/browser/tree-live-controller.js +``` + +全部通过。 + +浏览器轻量验收: + +- dev server: `npm run dev:hot` +- 页面:`http://127.0.0.1:3000/`,测试账号快速登录后进入主壳。 +- `/api/mnote-browser-runtime/tree-live-controller.js` 返回 `200`,`content-type=application/javascript; charset=utf-8`。 +- `document.scripts` 中存在 1 个 tree live module script。 +- `window.__mnoteTreeLiveControllerStarted === true`。 +- `` 上出现 `data-mnote-tree-live-transport="disabled"` 和 `data-mnote-tree-live-status="disabled"`,证明外置 module 已执行。 +- 控制台仍出现 `/api/local-folder/events` 500,这是既有 local folder event stream 问题,不属于本批次 route/module 加载回归。 + +CodeGraph 复核: + +- 初始外置文件仍包在 IIFE 内,CodeGraph 只能识别外层匿名符号,不能定位 `startWithWebSocket`。 +- Codex 将外置 module 调整为模块级函数声明,并把启动 guard 放到底部。 +- 复核结果: + - `codegraph_search startWithWebSocket` -> `rust/crates/mnote-web/browser/tree-live-controller.js` + - `codegraph_search startWithSseFallback` -> `rust/crates/mnote-web/browser/tree-live-controller.js` + ## 10. 分阶段执行清单 ### P0:定位辅助与基线保护 @@ -405,14 +455,15 @@ node --check rust/crates/mnote-web/browser/resource-open-runtime.js ### P2:外置 `TREE_LIVE_CONTROLLER_JS` -- [ ] 新增 `rust/crates/mnote-web/browser/tree-live-controller.js`。 -- [ ] `layout.rs` 只注入 `__MNOTE_TREE_LIVE_BOOTSTRAP__` 和 ` - +