Files
mnote/design/03-rust-web/done/3-8-rust-web-3000-wolai-ui-parity-checklist-v1.md
T

9.8 KiB
Raw Blame History

3-8 [done] Rust Web 3000 Wolai UI Parity Checklist v1

更新时间:2026-04-29

对应计划:

  • /mnt/Data1T/mnote/design/03-rust-web/process/3-7-rust-web-3000-wolai-ui-parity-plan-v1.md

参考输入:

  • 当前 3000 截图:/mnt/Data1T/mnote/tmp/image copy 30.png
  • 当前 3100 legacy/Next 对照截图:/mnt/Data1T/mnote/tmp/image copy 31.png
  • 目标 UI/mnt/Data1T/mnote/design/design/html/image.png
  • 目标 HTML/mnt/Data1T/mnote/design/design/html/个人.html

1. 当前结论

当前已经完成的是:

  • 3000 默认由 mnote-web 监听。
  • GET / 返回 x-mnote-web-owner: mnote-web
  • 3100 已降为 legacy/Next 对照链,不是公开主入口 owner。
  • harness-tasks.jsontask-001task-026 全部为 completed

当前没有完成的是:

  • 3000 首屏恢复到 3100 的 workspace/document 产品壳。
  • 3000 首屏达到目标 Wolai UI 的结构与视觉效果。
  • 3000 文档页在当前真实运行态下稳定打开,不返回 未登录 502。
  • smoke 验收从“owner header 通过”升级为“产品壳 UI parity 通过”。

一句话判断:

Rust Web owner cutover 已完成;本轮已把 3000 恢复为 Rust Web 持有的 Wolai workspace/document 产品壳,并用 task114/task115/task118/task119 固化验收。

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

  • 只看到 x-mnote-web-owner: mnote-web,不算 UI parity 完成。
  • 只看到极简 MNOTE 欢迎页,不算工作区 shell 完成。
  • 只在 MNOTE_WEB_ALLOW_DEV_FIXTURES=1 下通过,不算当前真实 3000 完成。
  • 只把 3000 proxy 回 3100,不算 Rust Web 产品壳完成。
  • 只恢复 3100 legacy UI,不算 Rust Web 3000 UI 完成。
  • 只补 CSS 像截图,但 session/document shell 仍 502,不算完成。

3. Phase U-0:冻结 UI parity smoke

目标:先让当前差距可自动失败,避免继续靠人工看截图判断。

  • 新增 scripts/task118-rust-web-wolai-ui-parity-smoke.js
  • smoke 断言 GET /data-mnote-shell="workspace"
  • smoke 断言根页包含账号/工作区身份。
  • smoke 断言根页包含 星标置顶
  • smoke 断言根页包含 我的页面
  • smoke 断言根页包含 垃圾箱
  • smoke 断言根页包含 模板中心
  • smoke 断言根页包含 data-testid="wolai-topbar"
  • smoke 断言根页包含 data-testid="wolai-floating-ai"
  • smoke 负向断言根页不再包含 欢迎使用 MNOTE 知识管理平台
  • task114-rust-web-gateway-entry-smoke.js 不再检查 Rust Web gateway 调试文案。
  • task115-rust-web-document-shell-smoke.js 在 502 时输出 body,能看见 未登录 根因。

验证命令:

cd /mnt/Data1T/mnote
MNOTE_UI_BASE_URL=http://127.0.0.1:3000 node scripts/task118-rust-web-wolai-ui-parity-smoke.js
MNOTE_UI_BASE_URL=http://127.0.0.1:3000 node scripts/task114-rust-web-gateway-entry-smoke.js
MNOTE_UI_BASE_URL=http://127.0.0.1:3000 node scripts/task115-rust-web-document-shell-smoke.js

4. Phase U-1:修复真实 session / document shell 基线

目标:当前 3000 文档页不能继续因为 Rust Web 到 Convex 的 session/handoff 问题返回 未登录 502。

  • 确认当前 3000 进程环境和浏览器请求中的 auth/session 来源。
  • 固定 Rust Web session handoff 优先级:浏览器 cookie / session handoff token > mnote_web_convex_token > 显式开发态 fallback。
  • transport/convex.rs 能把必要 cookie/header/token 传到 Convex。
  • /documents/:id 在当前登录态或开发态下不返回 convex_upstream_error: 未登录
  • 文档页仍返回 x-mnote-web-owner: mnote-web
  • 文档页仍返回 x-mnote-web-shell: document
  • 文档页仍嵌入 __MNOTE_PAGE_AGGREGATE__
  • 文档页仍标记默认 data-editor-host="leptos_tiptap_island"

验证命令:

cd /mnt/Data1T/mnote/rust
cargo test -p mnote-web document_shell session
cd /mnt/Data1T/mnote
MNOTE_UI_BASE_URL=http://127.0.0.1:3000 node scripts/task115-rust-web-document-shell-smoke.js

5. Phase U-2:建立 workspace shell projection

目标:Rust Web 根页不再手写欢迎页,而是消费稳定 workspace/sidebar/page projection。

  • 新增 WorkspaceShellProjection 或等价 Rust 类型。
  • projection 包含 workspaceId
  • projection 包含 workspaceName
  • projection 包含 activePageId / activePageTitle
  • projection 包含 starredItems
  • projection 包含 myPageItems
  • projection 包含 bottomEntries,至少覆盖 垃圾箱模板中心
  • projection 从 sidebar.dataset.list 或 Rust kernel sidebar projection 构建,不在 UI 层另造树真相。
  • 空数据时输出空 workspace shell,不回到极简营销欢迎页。

验证命令:

cd /mnt/Data1T/mnote/rust
cargo test -p mnote-web workspace_shell

6. Phase U-3:替换极简 PageLayout 为 Wolai workspace shell

目标:mnote-web SSR 输出与目标 UI 同级的产品壳结构。

  • SSR layout 根节点标记 data-mnote-shell="workspace"
  • 左侧栏标记 data-testid="wolai-sidebar"
  • 左侧栏顶部包含头像/首字母块与工作区名称。
  • 左侧栏快捷操作区包含搜索、图谱/关系、快捷动作、收纳/文件、更多等 slot。
  • 左侧栏包含 星标置顶 section。
  • 左侧栏包含 我的页面 section。
  • 左侧栏 page row 支持 active/selected 视觉状态。
  • 左侧栏底部包含 垃圾箱模板中心
  • 主区顶部包含 data-testid="wolai-topbar"
  • 主区右上包含收藏、演示/评论/关系/成员/历史/更多等 action slot。
  • 右下包含 data-testid="wolai-floating-ai"
  • 右下包含 data-testid="wolai-floating-help"
  • CSS 左栏宽度、浅灰背景、选中行浅红背景、主内容居中宽度与目标图接近。

验证命令:

cd /mnt/Data1T/mnote/rust
cargo test -p mnote-web wolai_workspace_layout

7. Phase U-4:恢复 3000 根路径产品首屏

目标:GET / 是真实 workspace/document 入口,而不是极简欢迎页。

  • gateway.rs::root_entry 不再直接渲染 HomePage 欢迎页。
  • 根路径选择 active page 的顺序固定:URL pageId > session 最近页面 > projection active page > 第一个我的页面 > 空 workspace。
  • 根路径返回 HTML 包含 data-mnote-shell="workspace"
  • 根路径返回 HTML 不包含 欢迎使用 MNOTE 知识管理平台
  • 根路径返回 HTML 不包含旧三项导航壳 首页 / 搜索 / 文档 作为主 UI。
  • MNOTE_WEB_ENABLE_LEGACY_NEXT_COMPAT=0 时根路径仍可打开核心 shell。

验证命令:

cd /mnt/Data1T/mnote
MNOTE_UI_BASE_URL=http://127.0.0.1:3000 node scripts/task118-rust-web-wolai-ui-parity-smoke.js

8. Phase U-5:文档页内容区对齐

目标:/documents/:id 恢复 workspace/document 产品壳,同时继续保持 Page Aggregate 与 leptos-tiptap 主链。

  • 文档页包含 workspace sidebar。
  • 文档页包含 topbar / breadcrumb。
  • 文档页包含收藏/更多/AI action slot。
  • 文档页标题来自 Page Aggregate。
  • 文档页正文 mount 保持 leptos_tiptap_island
  • 文档页不重新把 BlockNote 设为默认主编辑器。
  • 文档页在真实 3000 下通过 smoke,不返回 502。

验证命令:

cd /mnt/Data1T/mnote/rust
cargo test -p mnote-web document_shell page_aggregate
cd /mnt/Data1T/mnote
MNOTE_UI_BASE_URL=http://127.0.0.1:3000 node scripts/task115-rust-web-document-shell-smoke.js

9. Phase U-6:补视觉回归 smoke

目标:用浏览器自动化把“看起来像目标 UI”变成可回归指标。

  • 新增 scripts/task119-rust-web-wolai-visual-regression-smoke.js
  • 检查左栏存在且宽度稳定。
  • 检查 topbar 存在且不遮挡正文。
  • 检查主内容区未被侧栏覆盖。
  • 检查右下浮动按钮存在且不遮挡正文。
  • 检查根页没有极简欢迎页。
  • 输出截图到 /mnt/Data1T/mnote/test-results/

验证命令:

cd /mnt/Data1T/mnote
MNOTE_UI_BASE_URL=http://127.0.0.1:3000 node scripts/task119-rust-web-wolai-visual-regression-smoke.js

10. Harness 映射建议

当前 harness-tasks.jsontask-001task-026 已全部 completed。若进入执行,建议追加新任务,不修改旧任务状态:

新任务 Phase 标题 优先级
task-027 U-0 冻结 Rust Web 3000 Wolai UI parity smoke P0
task-028 U-1 修复 Rust Web session/document shell 当前 502 基线 P0
task-029 U-2 建立 workspace shell projection 聚合器 P0
task-030 U-3 替换极简 PageLayout 为 Wolai workspace shell P0
task-031 U-4 恢复 3000 根路径 workspace/document 产品首屏 P0
task-032 U-5 对齐文档页 topbar/content/Page Aggregate shell P1
task-033 U-6 补 Wolai UI visual regression smoke P1

说明:本 checklist 建立阶段不直接修改 harness-tasks.json,避免把分析结果误登记为已排队执行任务。

11. 完成判定

  • GET http://127.0.0.1:3000/ 返回 x-mnote-web-owner: mnote-web
  • 根页 body 标记 data-mnote-shell="workspace"
  • 根页不再出现极简欢迎页文案。
  • 根页包含目标 UI 的核心结构区。
  • /documents/:id 不返回 未登录 502。
  • 文档页继续消费 Page Aggregate snapshot。
  • 文档页默认编辑 host 仍是 leptos_tiptap_island
  • 3100 只作为 legacy/reference/debug。
  • task114task115task118 和可选 task119 在当前 3000 上通过。
  • 本 checklist 才能移动到 design/03-rust-web/done/