Files
mnote/design/03-rust-web/done/3-6-rust-web-main-execution-plane-checklist-v1.md
T

8.8 KiB
Raw Blame History

3-6 [done] Rust Web 主 Web 执行面迁移 checklist v1

更新时间:2026-04-28

对应计划:

  • /mnt/Data1T/mnote/design/03-rust-web/process/3-5-rust-web-main-execution-plane-cutover-plan-v1.md

Harness 拆分:

  • task-019task-026

2026-06-06 历史快照说明:本文件记录 2026-04-28 迁移期 checklist,正文中的未完成项不再代表当前 active process。主 Web 执行面后续状态已被 design/03-rust-web/done/3-10-rust-web-3000-tree-editor-runtime-integration-checklist-v1.mddesign/03-rust-web/done/3-14-rust-web-tree-realtime-ws-push-v1.mddesign/03-rust-web/done/3-18-local-folder-tree-live-consumer-convergence-checklist-v1.mddesign/03-rust-web/done/3-19-rust-web-browser-runtime-module-extraction-v1.mdAGENTS.md 当前主线覆盖。后续 worker 不应从本文件的 [ ] 项继续派活。

1. 目标

本 checklist 只检查一个长期目标:

主 Web 执行面最终迁到 Rust family,而不只是“Rust 拥有 kernel 语义”。

当前树域 Sidebar / 页面树 / 文件树 / picker 已完成 Rust family 默认执行面切换,但这只是树域执行面收口。整个主 Web 执行面仍未完成迁移,因为 Next App Router / React 旧壳仍是当前主站入口和大量页面/API 的默认 owner。

2. 完成口径

完成时必须同时成立:

  • 3000 仍是唯一公开入口。
  • mnote-web 默认拥有 3000 背后的 gateway / shell / transport。
  • Next App Router 从主入口降级为 legacy compat / island bundle source / debug。
  • 文档页默认 shell 由 Rust Web 输出,并消费 Page Aggregate snapshot。
  • tree realtime 正式主链由 Rust Web 输出 snapshot + delta。
  • Search / AI / Mindmap 的页面壳 owner 迁到 Rust WebReact 只保留交互 island。
  • SKIP_NEXT_LEGACY=1 下核心 smoke 仍可通过。
  • design/03-rust-web/process 中本 checklist 和 plan 移入 done/

3. 当前未完成项

W-0:冻结主执行面 owner manifest 与负向门禁

  • 新增 RUST_WEB_MAIN_EXECUTION_BOUNDARY
  • manifest 明确 publicEntry=3000mainWebOwner=mnote-weblegacyCompatOwner=next-app-router
  • 测试禁止把 Next App Router 写回主 Web owner。
  • ARCHITECTURE.md 明确当前主 Web 执行面仍处于迁移阶段,树域完成不等于全 Web 完成。
  • 验证命令:
cd /mnt/Data1T/mnote/wolai-frontend
pnpm vitest run src/lib/rust-web-main-execution-boundary.test.ts src/lib/runtime-config.test.ts
cd /mnt/Data1T/mnote
git diff --check -- ARCHITECTURE.md design/03-rust-web wolai-frontend/src/lib

W-1:让 mnote-web 默认成为 3000 gateway owner

  • mnote-web 支持 MNOTE_WEB_PUBLIC_BIND=127.0.0.1:3000
  • Next dev 默认改到 legacy upstream port,例如 127.0.0.1:3100
  • scripts/desktop-hot.js 默认启动 Rust Web gateway 作为 3000 owner。
  • MNOTE_WEB_SKIP_GATEWAY=1 仅作为紧急回退。
  • task114-rust-web-gateway-entry-smoke.js 证明 3000 响应来自 Rust gateway。
  • 验证命令:
node --test /mnt/Data1T/mnote/scripts/desktop-hot.test.js
cd /mnt/Data1T/mnote/rust
cargo test -p mnote-web gateway
cd /mnt/Data1T/mnote
node scripts/task114-rust-web-gateway-entry-smoke.js

W-2:把 runtime config 与 auth/session handoff 迁到 Rust Web

  • mnote-web 新增 /api/runtime/config
  • mnote-web 新增 /api/auth/session 与 session refresh/handoff route。
  • 浏览器 runtime config 不泄漏 internal MNOTE_WEB_* base URL。
  • Next /api/auth/mnote-web-token 降级为 compat/debug。
  • 验证命令:
cd /mnt/Data1T/mnote/rust
cargo test -p mnote-web session runtime_config
cd /mnt/Data1T/mnote/wolai-frontend
pnpm vitest run src/lib/runtime-config.test.ts src/app/api/auth/mnote-web-token/route.test.ts

W-3:建立 Rust-owned 文档页 / Page Aggregate server-first shell

  • mnote-web 新增 /documents/:id server-first shell。
  • mnote-web 新增或固定 /api/page-aggregate/:id
  • 文档页首屏 HTML 包含 Page Aggregate snapshot / island mount 信息。
  • Next 文档页降级为 legacy compat。
  • task115-rust-web-document-shell-smoke.js 证明默认文档页由 Rust shell 服务。
  • 验证命令:
cd /mnt/Data1T/mnote/rust
cargo test -p mnote-web document_shell page_aggregate
cd /mnt/Data1T/mnote/wolai-frontend
pnpm vitest run src/components/editor/document-content.test.ts src/lib/documents/page-aggregate-builder.test.ts
cd /mnt/Data1T/mnote
node scripts/task115-rust-web-document-shell-smoke.js

W-4:把主 API transport 从 Next route 收薄为 Rust Web owned

  • Rust Web owner 覆盖 documents meta/content/save。
  • Rust Web owner 覆盖 tree commands 与 tree projections。
  • Rust Web owner 覆盖 search documents transport。
  • Next route 只保留 cookie/header 透传和 legacy compat。
  • TREE_3000_ROUTE_BOUNDARY_MANIFEST 的 owner 口径从 next-3000 改成 rust-web-gateway
  • 验证命令:
cd /mnt/Data1T/mnote/rust
cargo test -p mnote-web documents_api tree_commands search
cargo test -p bridge-runtime page_aggregate tree_subtree_move_command
cd /mnt/Data1T/mnote/wolai-frontend
pnpm vitest run src/lib/tree-route-boundary.test.ts src/app/api/documents/route-adapters.test.ts src/lib/search/request.test.ts

W-5:把 tree realtime stream 固定为 Rust Web 主链

  • Rust Web 输出正式 /api/tree/events
  • 事件覆盖 snapshotdeltaresyncheartbeat
  • /api/mnote-web/stream 降级为 compat alias。
  • Sidebar / page tree / file tree consumer 使用 Rust-owned stream。
  • Preferred snapshot 只保留 fallback,不再作为实时事实 owner。
  • 验证命令:
cd /mnt/Data1T/mnote/rust
cargo test -p mnote-web tree_realtime stream
cd /mnt/Data1T/mnote/wolai-frontend
pnpm vitest run src/app/api/mnote-web/stream/route.test.ts src/lib/tree-stream/tree-stream.test.ts src/lib/tree-stream/use-sidebar-tree-stream.test.tsx
cd /mnt/Data1T/mnote
node scripts/task112-tree-rust-family-regression-smoke.js

W-6:把 Search / AI / Mindmap 页面壳迁到 Rust Web shell + islands

  • GET /search 由 Rust Web 输出 server-first shell。
  • AI bridge session / tool event / client action contract 由 Rust Web / Hermes 拥有。
  • GET /mindmap/:docId/:mindmapId 由 Rust Web 输出对象页 shell。
  • React Search / AI / Mindmap runtime 只作为 island 或 legacy compat。
  • task116-rust-web-islands-smoke.js 证明三类壳 owner 已迁移。
  • 验证命令:
cd /mnt/Data1T/mnote/rust
cargo test -p mnote-web search_shell ai_bridge mindmap_shell
cd /mnt/Data1T/mnote/wolai-frontend
pnpm vitest run src/components/editor/DocumentAiAgentPanel.runtime.test.tsx src/lib/ai-agent/runtime/runAgent.test.ts src/lib/search/request.test.ts
cd /mnt/Data1T/mnote
node scripts/task116-rust-web-islands-smoke.js

W-7:退役 Next App Router 主入口,完成文档收口

  • task117-next-retirement-guard.js 证明 SKIP_NEXT_LEGACY=1 时核心 smoke 仍可通过。
  • 默认启动链不再把 pnpm dev 作为 3000 owner。
  • 3104 不恢复为公开入口。
  • ARCHITECTURE.md 把 Next App Router 改为 legacy compat,而不是当前主入口。
  • 3-1-rust-web-long-term-checklist-v2.md 同步 Phase 8 状态。
  • 本 plan/checklist 移到 design/03-rust-web/done/
  • 验证命令:
cd /mnt/Data1T/mnote
node scripts/task097-homepage-entry-smoke.js
node scripts/task114-rust-web-gateway-entry-smoke.js
node scripts/task115-rust-web-document-shell-smoke.js
node scripts/task116-rust-web-islands-smoke.js
node scripts/task117-next-retirement-guard.js
git diff --check -- ARCHITECTURE.md design/03-rust-web scripts wolai-frontend rust/crates/mnote-web

4. Harness task 映射

Checklist Harness task 状态
W-0 task-019 completed
W-1 task-020 completed
W-2 task-021 completed
W-3 task-022 completed
W-4 task-023 completed
W-5 task-024 completed
W-6 task-025 completed
W-7 task-026 completed

5. 不可误判为完成的情况

  • 只完成树域 DOM shell,不算主 Web 执行面完成。
  • 只让 Rust kernel 拥有 tree / page 语义,不算主 Web 执行面完成。
  • 只在 3000 Next route 中 thin proxy 到 Rust,不算主 Web gateway owner 完成。
  • 恢复 3104 作为公开入口,不算完成。
  • React components 仍作为 island 存在可以接受;但 React / Next 继续拥有页面事实源不可接受。

6. 当前结论

截至本文件创建时:

  • 树域 Rust family 默认执行面:已完成。
  • 主 Web 执行面 Rust family 切换:未完成,已拆为 task-019task-026