Files
mnote/design/old/03-rust-web/done/3-8-rust-web-3000-wolai-ui-parity-checklist-v1.md
T
Agent Board b798f628ee chore: land tree view-state, vault, Pi module split, and repo hygiene
Persist PageTree expand state via control-plane view-state and align
chevron/DOM with restored expansion; keep Sidex-style shallow page-tree
scan and drop the unused recursive scanner that only added cargo noise.

Add password vault workbench routes/runtime/skill/CLI, split page_ai_pi
into a module package, and retire Hermes/ACP/OpenHub recycle + root
harness evidence from the index while gitignoring recycle and local
diag dumps.

Archive superseded design/bugs docs under old/, point architecture at
ARCHITECTURE.md, and refresh smokes for Pi S1–S7, vault, and editor
regressions so the working tree can stay clean.
2026-07-21 05:13:05 +08:00

223 lines
9.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# [recycle] 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. 当前结论
当前已经完成的是:
- [x] `3000` 默认由 `mnote-web` 监听。
- [x] `GET /` 返回 `x-mnote-web-owner: mnote-web`
- [x] `3100` 已降为 legacy/Next 对照链,不是公开主入口 owner。
- [x] `harness-tasks.json``task-001``task-026` 全部为 `completed`
当前没有完成的是:
- [x] `3000` 首屏恢复到 3100 的 workspace/document 产品壳。
- [x] `3000` 首屏达到目标 Wolai UI 的结构与视觉效果。
- [x] `3000` 文档页在当前真实运行态下稳定打开,不返回 `未登录` 502。
- [x] smoke 验收从“owner header 通过”升级为“产品壳 UI parity 通过”。
一句话判断:
> **Rust Web owner cutover 已完成;本轮已把 3000 恢复为 Rust Web 持有的 Wolai workspace/document 产品壳,并用 task114/task115/task118/task119 固化验收。**
## 2. 不可误判为完成的情况
- [x] 只看到 `x-mnote-web-owner: mnote-web`,不算 UI parity 完成。
- [x] 只看到极简 `MNOTE` 欢迎页,不算工作区 shell 完成。
- [x] 只在 `MNOTE_WEB_ALLOW_DEV_FIXTURES=1` 下通过,不算当前真实 3000 完成。
- [x] 只把 3000 proxy 回 3100,不算 Rust Web 产品壳完成。
- [x] 只恢复 3100 legacy UI,不算 Rust Web 3000 UI 完成。
- [x] 只补 CSS 像截图,但 session/document shell 仍 502,不算完成。
## 3. Phase U-0:冻结 UI parity smoke
目标:先让当前差距可自动失败,避免继续靠人工看截图判断。
- [x] 新增 `scripts/task118-rust-web-wolai-ui-parity-smoke.js`
- [x] smoke 断言 `GET /``data-mnote-shell="workspace"`
- [x] smoke 断言根页包含账号/工作区身份。
- [x] smoke 断言根页包含 `星标置顶`
- [x] smoke 断言根页包含 `我的页面`
- [x] smoke 断言根页包含 `垃圾箱`
- [x] smoke 断言根页包含 `模板中心`
- [x] smoke 断言根页包含 `data-testid="wolai-topbar"`
- [x] smoke 断言根页包含 `data-testid="wolai-floating-ai"`
- [x] smoke 负向断言根页不再包含 `欢迎使用 MNOTE 知识管理平台`
- [x] `task114-rust-web-gateway-entry-smoke.js` 不再检查 `Rust Web gateway` 调试文案。
- [x] `task115-rust-web-document-shell-smoke.js` 在 502 时输出 body,能看见 `未登录` 根因。
验证命令:
```bash
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。
- [x] 确认当前 3000 进程环境和浏览器请求中的 auth/session 来源。
- [x] 固定 Rust Web session handoff 优先级:浏览器 cookie / session handoff token > `mnote_web_convex_token` > 显式开发态 fallback。
- [x] `transport/convex.rs` 能把必要 cookie/header/token 传到 Convex。
- [x] `/documents/:id` 在当前登录态或开发态下不返回 `convex_upstream_error: 未登录`
- [x] 文档页仍返回 `x-mnote-web-owner: mnote-web`
- [x] 文档页仍返回 `x-mnote-web-shell: document`
- [x] 文档页仍嵌入 `__MNOTE_PAGE_AGGREGATE__`
- [x] 文档页仍标记默认 `data-editor-host="leptos_tiptap_island"`
验证命令:
```bash
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。
- [x] 新增 `WorkspaceShellProjection` 或等价 Rust 类型。
- [x] projection 包含 `workspaceId`
- [x] projection 包含 `workspaceName`
- [x] projection 包含 `activePageId` / `activePageTitle`
- [x] projection 包含 `starredItems`
- [x] projection 包含 `myPageItems`
- [x] projection 包含 `bottomEntries`,至少覆盖 `垃圾箱``模板中心`
- [x] projection 从 `sidebar.dataset.list` 或 Rust kernel sidebar projection 构建,不在 UI 层另造树真相。
- [x] 空数据时输出空 workspace shell,不回到极简营销欢迎页。
验证命令:
```bash
cd /mnt/Data1T/mnote/rust
cargo test -p mnote-web workspace_shell
```
## 6. Phase U-3:替换极简 PageLayout 为 Wolai workspace shell
目标:`mnote-web` SSR 输出与目标 UI 同级的产品壳结构。
- [x] SSR layout 根节点标记 `data-mnote-shell="workspace"`
- [x] 左侧栏标记 `data-testid="wolai-sidebar"`
- [x] 左侧栏顶部包含头像/首字母块与工作区名称。
- [x] 左侧栏快捷操作区包含搜索、图谱/关系、快捷动作、收纳/文件、更多等 slot。
- [x] 左侧栏包含 `星标置顶` section。
- [x] 左侧栏包含 `我的页面` section。
- [x] 左侧栏 page row 支持 active/selected 视觉状态。
- [x] 左侧栏底部包含 `垃圾箱``模板中心`
- [x] 主区顶部包含 `data-testid="wolai-topbar"`
- [x] 主区右上包含收藏、演示/评论/关系/成员/历史/更多等 action slot。
- [x] 右下包含 `data-testid="wolai-floating-ai"`
- [x] 右下包含 `data-testid="wolai-floating-help"`
- [x] CSS 左栏宽度、浅灰背景、选中行浅红背景、主内容居中宽度与目标图接近。
验证命令:
```bash
cd /mnt/Data1T/mnote/rust
cargo test -p mnote-web wolai_workspace_layout
```
## 7. Phase U-4:恢复 3000 根路径产品首屏
目标:`GET /` 是真实 workspace/document 入口,而不是极简欢迎页。
- [x] `gateway.rs::root_entry` 不再直接渲染 `HomePage` 欢迎页。
- [x] 根路径选择 active page 的顺序固定:URL `pageId` > session 最近页面 > projection active page > 第一个我的页面 > 空 workspace。
- [x] 根路径返回 HTML 包含 `data-mnote-shell="workspace"`
- [x] 根路径返回 HTML 不包含 `欢迎使用 MNOTE 知识管理平台`
- [x] 根路径返回 HTML 不包含旧三项导航壳 `首页 / 搜索 / 文档` 作为主 UI。
- [x] `MNOTE_WEB_ENABLE_LEGACY_NEXT_COMPAT=0` 时根路径仍可打开核心 shell。
验证命令:
```bash
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` 主链。
- [x] 文档页包含 workspace sidebar。
- [x] 文档页包含 topbar / breadcrumb。
- [x] 文档页包含收藏/更多/AI action slot。
- [x] 文档页标题来自 Page Aggregate。
- [x] 文档页正文 mount 保持 `leptos_tiptap_island`
- [x] 文档页不重新把 BlockNote 设为默认主编辑器。
- [x] 文档页在真实 3000 下通过 smoke,不返回 502。
验证命令:
```bash
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”变成可回归指标。
- [x] 新增 `scripts/task119-rust-web-wolai-visual-regression-smoke.js`
- [x] 检查左栏存在且宽度稳定。
- [x] 检查 topbar 存在且不遮挡正文。
- [x] 检查主内容区未被侧栏覆盖。
- [x] 检查右下浮动按钮存在且不遮挡正文。
- [x] 检查根页没有极简欢迎页。
- [x] 输出截图到 `/mnt/Data1T/mnote/test-results/`
验证命令:
```bash
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.json``task-001``task-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. 完成判定
- [x] `GET http://127.0.0.1:3000/` 返回 `x-mnote-web-owner: mnote-web`
- [x] 根页 body 标记 `data-mnote-shell="workspace"`
- [x] 根页不再出现极简欢迎页文案。
- [x] 根页包含目标 UI 的核心结构区。
- [x] `/documents/:id` 不返回 `未登录` 502。
- [x] 文档页继续消费 Page Aggregate snapshot。
- [x] 文档页默认编辑 host 仍是 `leptos_tiptap_island`
- [x] `3100` 只作为 legacy/reference/debug。
- [x] `task114``task115``task118` 和可选 `task119` 在当前 3000 上通过。
- [x] 本 checklist 才能移动到 `design/03-rust-web/done/`