8.8 KiB
8.8 KiB
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.mdHarness 拆分:
task-019到task-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.md、design/03-rust-web/done/3-14-rust-web-tree-realtime-ws-push-v1.md、design/03-rust-web/done/3-18-local-folder-tree-live-consumer-convergence-checklist-v1.md、design/03-rust-web/done/3-19-rust-web-browser-runtime-module-extraction-v1.md和AGENTS.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 Web,React 只保留交互 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=3000、mainWebOwner=mnote-web、legacyCompatOwner=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/:idserver-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。 - 事件覆盖
snapshot、delta、resync、heartbeat。 /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-019到task-026。