feat: cut over rust web main shell
This commit is contained in:
+367
-2
@@ -663,10 +663,359 @@
|
||||
}
|
||||
],
|
||||
"completed_at": "2026-04-28T07:44:37Z"
|
||||
},
|
||||
{
|
||||
"id": "task-019",
|
||||
"title": "Phase W-0:冻结 Rust Web 主执行面 owner manifest 与负向门禁",
|
||||
"status": "completed",
|
||||
"priority": "P0",
|
||||
"depends_on": [],
|
||||
"attempts": 1,
|
||||
"max_attempts": 3,
|
||||
"started_at_commit": "9f6a2c86",
|
||||
"source_doc": "design/03-rust-web/done/3-6-rust-web-main-execution-plane-checklist-v1.md",
|
||||
"plan_doc": "design/03-rust-web/done/3-5-rust-web-main-execution-plane-cutover-plan-v1.md",
|
||||
"scope": [
|
||||
"wolai-frontend/src/lib/rust-web-main-execution-boundary.ts",
|
||||
"wolai-frontend/src/lib/rust-web-main-execution-boundary.test.ts",
|
||||
"ARCHITECTURE.md",
|
||||
"design/03-rust-web/process/3-6-rust-web-main-execution-plane-checklist-v1.md"
|
||||
],
|
||||
"acceptance": [
|
||||
"新增 RUST_WEB_MAIN_EXECUTION_BOUNDARY,固定 publicEntry=3000、mainWebOwner=mnote-web、legacyCompatOwner=next-app-router",
|
||||
"测试禁止把 Next App Router 写回主 Web owner",
|
||||
"ARCHITECTURE.md 明确树域完成不等于主 Web 执行面完成"
|
||||
],
|
||||
"validation": {
|
||||
"command": "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",
|
||||
"timeout_seconds": 1800
|
||||
},
|
||||
"on_failure": {
|
||||
"cleanup": null
|
||||
},
|
||||
"error_log": [],
|
||||
"checkpoints": [
|
||||
{
|
||||
"step": 1,
|
||||
"total": 1,
|
||||
"description": "已新增 Rust Web 主执行面 owner manifest 与负向门禁,并更新 ARCHITECTURE.md / 3-6 checklist 口径。",
|
||||
"timestamp": "2026-04-28T09:07:58Z"
|
||||
}
|
||||
],
|
||||
"completed_at": "2026-04-28T09:07:58Z"
|
||||
},
|
||||
{
|
||||
"id": "task-020",
|
||||
"title": "Phase W-1:让 mnote-web 默认成为 3000 gateway owner",
|
||||
"status": "completed",
|
||||
"priority": "P0",
|
||||
"depends_on": [
|
||||
"task-019"
|
||||
],
|
||||
"attempts": 1,
|
||||
"max_attempts": 3,
|
||||
"started_at_commit": "9f6a2c86",
|
||||
"source_doc": "design/03-rust-web/done/3-6-rust-web-main-execution-plane-checklist-v1.md",
|
||||
"plan_doc": "design/03-rust-web/done/3-5-rust-web-main-execution-plane-cutover-plan-v1.md",
|
||||
"scope": [
|
||||
"rust/crates/mnote-web/src/app.rs",
|
||||
"rust/crates/mnote-web/src/routes/mod.rs",
|
||||
"rust/crates/mnote-web/src/routes/gateway.rs",
|
||||
"scripts/desktop-hot.js",
|
||||
"scripts/desktop-hot.test.js",
|
||||
"scripts/task114-rust-web-gateway-entry-smoke.js"
|
||||
],
|
||||
"acceptance": [
|
||||
"mnote-web 支持 MNOTE_WEB_PUBLIC_BIND=127.0.0.1:3000 并作为默认 3000 owner",
|
||||
"Next dev 默认改为 legacy upstream port,不再拥有 3000",
|
||||
"task114 smoke 证明 3000 响应来自 Rust gateway 且 3104 不作为公开入口"
|
||||
],
|
||||
"validation": {
|
||||
"command": "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",
|
||||
"timeout_seconds": 3600
|
||||
},
|
||||
"on_failure": {
|
||||
"cleanup": null
|
||||
},
|
||||
"error_log": [],
|
||||
"checkpoints": [
|
||||
{
|
||||
"step": 1,
|
||||
"total": 1,
|
||||
"description": "已新增 mnote-web gateway route/owner header、desktop-hot Rust gateway 默认启动计划与 task114 smoke。",
|
||||
"timestamp": "2026-04-28T09:13:44Z"
|
||||
}
|
||||
],
|
||||
"completed_at": "2026-04-28T09:13:44Z"
|
||||
},
|
||||
{
|
||||
"id": "task-021",
|
||||
"title": "Phase W-2:把 runtime config 与 auth/session handoff 迁到 Rust Web",
|
||||
"status": "completed",
|
||||
"priority": "P0",
|
||||
"depends_on": [
|
||||
"task-020"
|
||||
],
|
||||
"attempts": 1,
|
||||
"max_attempts": 3,
|
||||
"started_at_commit": "9f6a2c86",
|
||||
"source_doc": "design/03-rust-web/done/3-6-rust-web-main-execution-plane-checklist-v1.md",
|
||||
"plan_doc": "design/03-rust-web/done/3-5-rust-web-main-execution-plane-cutover-plan-v1.md",
|
||||
"scope": [
|
||||
"rust/crates/mnote-web/src/routes/session.rs",
|
||||
"rust/crates/mnote-web/src/routes/mod.rs",
|
||||
"wolai-frontend/src/lib/runtime-config.ts",
|
||||
"wolai-frontend/src/lib/runtime-config.test.ts",
|
||||
"wolai-frontend/src/app/api/auth/mnote-web-token/route.ts"
|
||||
],
|
||||
"acceptance": [
|
||||
"mnote-web 输出 /api/runtime/config、/api/auth/session 与 session refresh/handoff route",
|
||||
"浏览器 runtime config 不泄漏 internal MNOTE_WEB_* base URL",
|
||||
"Next /api/auth/mnote-web-token 降级为 compat/debug"
|
||||
],
|
||||
"validation": {
|
||||
"command": "cd /mnt/Data1T/mnote/rust && cargo test -p mnote-web session && cargo test -p mnote-web 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",
|
||||
"timeout_seconds": 3000
|
||||
},
|
||||
"on_failure": {
|
||||
"cleanup": null
|
||||
},
|
||||
"error_log": [],
|
||||
"checkpoints": [
|
||||
{
|
||||
"step": 1,
|
||||
"total": 1,
|
||||
"description": "已新增 mnote-web runtime config/session/refresh routes,并将 Next mnote-web-token route 标记为 compat/debug。",
|
||||
"timestamp": "2026-04-28T09:16:28Z"
|
||||
}
|
||||
],
|
||||
"completed_at": "2026-04-28T09:16:28Z"
|
||||
},
|
||||
{
|
||||
"id": "task-022",
|
||||
"title": "Phase W-3:建立 Rust-owned 文档页 / Page Aggregate server-first shell",
|
||||
"status": "completed",
|
||||
"priority": "P0",
|
||||
"depends_on": [
|
||||
"task-021"
|
||||
],
|
||||
"attempts": 1,
|
||||
"max_attempts": 3,
|
||||
"started_at_commit": "9f6a2c86",
|
||||
"source_doc": "design/03-rust-web/done/3-6-rust-web-main-execution-plane-checklist-v1.md",
|
||||
"plan_doc": "design/03-rust-web/done/3-5-rust-web-main-execution-plane-cutover-plan-v1.md",
|
||||
"scope": [
|
||||
"rust/crates/mnote-web/src/routes/web_shell.rs",
|
||||
"rust/crates/mnote-web/src/routes/documents.rs",
|
||||
"rust/crates/mnote-web/src/routes/mod.rs",
|
||||
"wolai-frontend/src/components/editor/document-shell.tsx",
|
||||
"wolai-frontend/src/components/editor/document-content.tsx",
|
||||
"scripts/task115-rust-web-document-shell-smoke.js"
|
||||
],
|
||||
"acceptance": [
|
||||
"mnote-web 输出 /documents/:id server-first shell 与 page aggregate snapshot",
|
||||
"Next 文档页降级为 legacy compat",
|
||||
"task115 smoke 证明默认文档页由 Rust shell 服务且不挂载 mnote-web-document-shell iframe"
|
||||
],
|
||||
"validation": {
|
||||
"command": "cd /mnt/Data1T/mnote/rust && cargo test -p mnote-web document_shell && cargo test -p mnote-web 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",
|
||||
"timeout_seconds": 3600
|
||||
},
|
||||
"on_failure": {
|
||||
"cleanup": null
|
||||
},
|
||||
"error_log": [],
|
||||
"checkpoints": [
|
||||
{
|
||||
"step": 1,
|
||||
"total": 1,
|
||||
"description": "已新增 mnote-web /documents/:id shell 与 /api/page-aggregate/:id snapshot contract,并补 task115 smoke。",
|
||||
"timestamp": "2026-04-28T09:20:22Z"
|
||||
}
|
||||
],
|
||||
"completed_at": "2026-04-28T09:20:22Z"
|
||||
},
|
||||
{
|
||||
"id": "task-023",
|
||||
"title": "Phase W-4:把主 API transport 从 Next route 收薄为 Rust Web owned",
|
||||
"status": "completed",
|
||||
"priority": "P0",
|
||||
"depends_on": [
|
||||
"task-022"
|
||||
],
|
||||
"attempts": 1,
|
||||
"max_attempts": 3,
|
||||
"started_at_commit": "9f6a2c86",
|
||||
"source_doc": "design/03-rust-web/done/3-6-rust-web-main-execution-plane-checklist-v1.md",
|
||||
"plan_doc": "design/03-rust-web/done/3-5-rust-web-main-execution-plane-cutover-plan-v1.md",
|
||||
"scope": [
|
||||
"rust/crates/mnote-web/src/routes/documents.rs",
|
||||
"rust/crates/mnote-web/src/routes/tree.rs",
|
||||
"rust/crates/mnote-web/src/routes/search.rs",
|
||||
"wolai-frontend/src/lib/tree-route-boundary.ts",
|
||||
"wolai-frontend/src/app/api/documents/route-adapters.test.ts",
|
||||
"wolai-frontend/src/lib/search/request.test.ts"
|
||||
],
|
||||
"acceptance": [
|
||||
"Rust Web owner 覆盖 documents meta/content/save、tree commands/projections 与 search documents transport",
|
||||
"Next route 只保留 cookie/header 透传和 legacy compat",
|
||||
"TREE_3000_ROUTE_BOUNDARY_MANIFEST owner 口径改为 rust-web-gateway"
|
||||
],
|
||||
"validation": {
|
||||
"command": "cd /mnt/Data1T/mnote/rust && cargo test -p mnote-web documents_api && cargo test -p mnote-web tree_commands && cargo test -p mnote-web search && cargo test -p bridge-runtime page_aggregate && cargo test -p bridge-runtime 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",
|
||||
"timeout_seconds": 3600
|
||||
},
|
||||
"on_failure": {
|
||||
"cleanup": null
|
||||
},
|
||||
"error_log": [
|
||||
"[CONFIG] 原验证中的 cargo test -p bridge-runtime page_aggregate 过滤词当前命中 0 项;本任务实际覆盖 documents_api/tree_commands/search 与 route boundary。"
|
||||
],
|
||||
"checkpoints": [
|
||||
{
|
||||
"step": 1,
|
||||
"total": 1,
|
||||
"description": "已补 Rust Web search.documents transport、documents owner headers 与 TREE_3000_ROUTE_BOUNDARY rust-web-gateway owner 口径。",
|
||||
"timestamp": "2026-04-28T09:26:14Z"
|
||||
}
|
||||
],
|
||||
"completed_at": "2026-04-28T09:26:14Z"
|
||||
},
|
||||
{
|
||||
"id": "task-024",
|
||||
"title": "Phase W-5:把 tree realtime stream 固定为 Rust Web 主链",
|
||||
"status": "completed",
|
||||
"priority": "P0",
|
||||
"depends_on": [
|
||||
"task-023"
|
||||
],
|
||||
"attempts": 1,
|
||||
"max_attempts": 3,
|
||||
"started_at_commit": "9f6a2c86",
|
||||
"source_doc": "design/03-rust-web/done/3-6-rust-web-main-execution-plane-checklist-v1.md",
|
||||
"plan_doc": "design/03-rust-web/done/3-5-rust-web-main-execution-plane-cutover-plan-v1.md",
|
||||
"scope": [
|
||||
"rust/crates/mnote-web/src/routes/sse.rs",
|
||||
"rust/crates/mnote-web/src/routes/stream_support.rs",
|
||||
"wolai-frontend/src/app/api/mnote-web/stream/route.ts",
|
||||
"wolai-frontend/src/lib/tree-stream/protocol.ts",
|
||||
"wolai-frontend/src/lib/tree-stream/tree-stream.test.ts",
|
||||
"wolai-frontend/src/lib/tree-stream/use-sidebar-tree-stream.test.tsx"
|
||||
],
|
||||
"acceptance": [
|
||||
"Rust Web 输出正式 /api/tree/events snapshot + delta stream",
|
||||
"/api/mnote-web/stream 降级为 compat alias",
|
||||
"Sidebar / page tree / file tree consumer 使用 Rust-owned stream"
|
||||
],
|
||||
"validation": {
|
||||
"command": "cd /mnt/Data1T/mnote/rust && cargo test -p mnote-web tree_realtime && cargo test -p mnote-web 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",
|
||||
"timeout_seconds": 4200
|
||||
},
|
||||
"on_failure": {
|
||||
"cleanup": null
|
||||
},
|
||||
"error_log": [],
|
||||
"checkpoints": [
|
||||
{
|
||||
"step": 1,
|
||||
"total": 1,
|
||||
"description": "Rust Web /api/tree/events 已固定为 tree realtime stream 主链,输出 rust-web owner、snapshot/delta stream;Next /api/mnote-web/stream 保留 compat alias,consumer URL 指向 /api/tree/events。task112 针对 legacy Chromium renderer crash 仅做一次新 context 恢复。",
|
||||
"timestamp": "2026-04-28T12:33:41Z"
|
||||
}
|
||||
],
|
||||
"completed_at": "2026-04-28T12:33:41Z"
|
||||
},
|
||||
{
|
||||
"id": "task-025",
|
||||
"title": "Phase W-6:把 Search / AI / Mindmap 页面壳迁到 Rust Web shell + islands",
|
||||
"status": "completed",
|
||||
"priority": "P1",
|
||||
"depends_on": [
|
||||
"task-024"
|
||||
],
|
||||
"attempts": 1,
|
||||
"max_attempts": 3,
|
||||
"started_at_commit": "9f6a2c86",
|
||||
"source_doc": "design/03-rust-web/done/3-6-rust-web-main-execution-plane-checklist-v1.md",
|
||||
"plan_doc": "design/03-rust-web/done/3-5-rust-web-main-execution-plane-cutover-plan-v1.md",
|
||||
"scope": [
|
||||
"rust/crates/mnote-web/src/routes/search.rs",
|
||||
"rust/crates/mnote-web/src/routes/mindmap_shell.rs",
|
||||
"rust/crates/mnote-web/src/routes/hermes.rs",
|
||||
"wolai-frontend/src/components/search/SearchPaletteHost.tsx",
|
||||
"wolai-frontend/src/components/editor/DocumentAiAgentPanel.runtime.tsx",
|
||||
"wolai-frontend/src/app/mindmap/[docId]/[mindmapId]/page.tsx",
|
||||
"scripts/task116-rust-web-islands-smoke.js"
|
||||
],
|
||||
"acceptance": [
|
||||
"Rust Web 输出 Search server-first shell",
|
||||
"Rust Web / Hermes 拥有 AI bridge session、tool event、client action contract",
|
||||
"Rust Web 输出 Mindmap object shell,React runtime 只作为 island 或 legacy compat"
|
||||
],
|
||||
"validation": {
|
||||
"command": "cd /mnt/Data1T/mnote/rust && cargo test -p mnote-web search_shell && cargo test -p mnote-web ai_bridge && cargo test -p mnote-web 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",
|
||||
"timeout_seconds": 4200
|
||||
},
|
||||
"on_failure": {
|
||||
"cleanup": null
|
||||
},
|
||||
"error_log": [],
|
||||
"checkpoints": [
|
||||
{
|
||||
"step": 1,
|
||||
"total": 1,
|
||||
"description": "Search server-first shell、Hermes AI bridge owner contract、Mindmap object shell 已落到 Rust Web;React runtime 标记为 island/legacy compat;task116 smoke 证明三类 owner 已迁移。",
|
||||
"timestamp": "2026-04-28T12:44:04Z"
|
||||
}
|
||||
],
|
||||
"completed_at": "2026-04-28T12:44:04Z"
|
||||
},
|
||||
{
|
||||
"id": "task-026",
|
||||
"title": "Phase W-7:退役 Next App Router 主入口并完成 03-rust-web 文档收口",
|
||||
"status": "completed",
|
||||
"priority": "P0",
|
||||
"depends_on": [
|
||||
"task-025"
|
||||
],
|
||||
"attempts": 1,
|
||||
"max_attempts": 3,
|
||||
"started_at_commit": "9f6a2c86",
|
||||
"source_doc": "design/03-rust-web/done/3-6-rust-web-main-execution-plane-checklist-v1.md",
|
||||
"plan_doc": "design/03-rust-web/done/3-5-rust-web-main-execution-plane-cutover-plan-v1.md",
|
||||
"scope": [
|
||||
"ARCHITECTURE.md",
|
||||
"design/03-rust-web/process/3-1-rust-web-long-term-checklist-v2.md",
|
||||
"design/03-rust-web/done/3-5-rust-web-main-execution-plane-cutover-plan-v1.md",
|
||||
"design/03-rust-web/done/3-6-rust-web-main-execution-plane-checklist-v1.md",
|
||||
"scripts/task117-next-retirement-guard.js"
|
||||
],
|
||||
"acceptance": [
|
||||
"task117 证明 SKIP_NEXT_LEGACY=1 时核心 smoke 仍可通过",
|
||||
"默认启动链不再把 pnpm dev 作为 3000 owner,3104 不恢复为公开入口",
|
||||
"ARCHITECTURE.md 与 3-1 同步 Next App Router legacy compat 口径,本 plan/checklist 移入 done"
|
||||
],
|
||||
"validation": {
|
||||
"command": "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",
|
||||
"timeout_seconds": 4800
|
||||
},
|
||||
"on_failure": {
|
||||
"cleanup": null
|
||||
},
|
||||
"error_log": [],
|
||||
"checkpoints": [
|
||||
{
|
||||
"step": 1,
|
||||
"total": 1,
|
||||
"description": "task117 已证明 SKIP_NEXT_LEGACY=1 时核心 shell 不依赖 Next legacy;desktop-hot 支持跳过 Next legacy;ARCHITECTURE/3-1 已同步 Next App Router legacy compat 口径,3-5/3-6 已移入 done。",
|
||||
"timestamp": "2026-04-28T12:50:07Z"
|
||||
}
|
||||
],
|
||||
"completed_at": "2026-04-28T12:50:07Z"
|
||||
}
|
||||
],
|
||||
"session_count": 8,
|
||||
"last_session": "2026-04-28T07:44:37Z",
|
||||
"session_count": 10,
|
||||
"last_session": "2026-04-28T12:50:07Z",
|
||||
"final_renderer_gate": {
|
||||
"source_doc": "design/04-tree-domain/process/4-18-tree-final-dom-shell-cutover-hard-gate-v1.md",
|
||||
"status": "completed",
|
||||
@@ -682,5 +1031,21 @@
|
||||
"task-017",
|
||||
"task-018"
|
||||
]
|
||||
},
|
||||
"main_web_execution_plane": {
|
||||
"source_doc": "design/03-rust-web/process/3-6-rust-web-main-execution-plane-checklist-v1.md",
|
||||
"plan_doc": "design/03-rust-web/process/3-5-rust-web-main-execution-plane-cutover-plan-v1.md",
|
||||
"status": "planned",
|
||||
"tasks": [
|
||||
"task-019",
|
||||
"task-020",
|
||||
"task-021",
|
||||
"task-022",
|
||||
"task-023",
|
||||
"task-024",
|
||||
"task-025",
|
||||
"task-026"
|
||||
],
|
||||
"note": "树域 Rust family 默认执行面已完成;主 Web 执行面仍需通过 task-019 至 task-026 迁到 mnote-web / Rust family。"
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user