2026-04-30 16:18:54 +08:00
|
|
|
|
# 5-9 [process] Wolai-aline 连续执行 checklist v1
|
|
|
|
|
|
|
|
|
|
|
|
> 更新时间:2026-04-30
|
|
|
|
|
|
>
|
|
|
|
|
|
> 本清单拆自 `5-7-wolai-page-tree-main-editor-experience-restoration-v1.md`。它不是新的测试方案;执行口径统一服从 `/home/lix/.codex/skills/wolai-aline` 与 `/mnt/Data1T/mnote/design/08-wolai-aline-test-flow/process/wolai-aline-test-flow-v1.md`。
|
|
|
|
|
|
|
|
|
|
|
|
## 1. 使用方式
|
|
|
|
|
|
|
|
|
|
|
|
每次只领取一个最小可对标任务,按下面固定闭环推进:
|
|
|
|
|
|
|
|
|
|
|
|
1. 用一句话定义行为,例如“侧栏搜索入口打开全局搜索 modal 且 URL 不变”。
|
|
|
|
|
|
2. 派 subagent 对 Wolai Hermes 取基线,必要时进入 Hermes editable-test mode。
|
|
|
|
|
|
3. 主线程查看 Wolai 截图,填写差异矩阵,不接受只有文字的结论。
|
|
|
|
|
|
4. 写或更新本地 `scripts/task*-smoke.js`,先让当前 `3000` 暴露差异。
|
|
|
|
|
|
5. 小范围实现,不新增第二套页面树、标题、正文或排序真相。
|
|
|
|
|
|
6. 运行本地 smoke 和改动范围内单测。
|
|
|
|
|
|
7. 再派 subagent 同链路复测 Wolai 与 `3000`。
|
|
|
|
|
|
8. 主线程复核最终截图;若肉眼仍有差异,先补 smoke 或 checklist 断言,再继续修。
|
|
|
|
|
|
9. 更新本清单状态和截图路径。
|
|
|
|
|
|
|
|
|
|
|
|
状态标记:`TODO` 未开始,`BASELINE` 已取 Wolai 基线,`RED` 已有本地失败 smoke,`GREEN` 本地实现和 smoke 通过,`PARITY` subagent 复测与主线程截图复核通过,`BLOCKED` 有阻塞。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 2. 当前基线证据
|
|
|
|
|
|
|
|
|
|
|
|
2026-04-30 已由 subagent 使用 Playwright 同时操作 Wolai Hermes 与本地 `3000`,主线程已复核关键截图。后续任务可沿用这些基线,但每个具体小任务仍需重新截同动作链证据。
|
|
|
|
|
|
|
|
|
|
|
|
| 项 | Wolai 证据 | 本地证据 | 当前结论 |
|
|
|
|
|
|
| --- | --- | --- | --- |
|
|
|
|
|
|
| 首屏 | `/mnt/Data1T/mnote/tmp/wolai-editor-parity/doc-baseline-mini/wolai-initial.png` | `/mnt/Data1T/mnote/tmp/wolai-editor-parity/doc-baseline-mini/local-initial.png` | 本地首屏仍是聚合/预览壳,需点击 `打开当前页面` 才进入正文,和 Wolai 直接正文页不一致 |
|
|
|
|
|
|
| 搜索 modal | `/mnt/Data1T/mnote/tmp/wolai-editor-parity/baseline-20260430/wolai-03-search-modal-controls-filled.png` | `/mnt/Data1T/mnote/tmp/wolai-editor-parity/baseline-20260430/local-03-search-modal-controls-filled.png` | 容器接近;结果态、数据、入口矩阵仍需拆开验;switch 状态必须截图 + `aria-checked` 双证据 |
|
|
|
|
|
|
| 块 hover | `/mnt/Data1T/mnote/tmp/wolai-editor-parity/baseline-20260430/wolai-08-block-hover-insert-entry.png` | `/mnt/Data1T/mnote/tmp/wolai-editor-parity/baseline-20260430/local-14-block-hover-insert-entry.png` | 本地已有 `+` 与手柄入口,但位置、密度、页面状态不同,不可判定已对齐 |
|
|
|
|
|
|
| 编辑清理 | `/mnt/Data1T/mnote/tmp/wolai-editor-parity/baseline-20260430/wolai-14-title-suffix-after.png` | `/mnt/Data1T/mnote/tmp/wolai-editor-parity/baseline-20260430/local-16-editor-after-undo-cleanup.png` | Wolai 标题和正文都可编辑,editable-test 前必须先确认焦点 block 类型 |
|
|
|
|
|
|
|
|
|
|
|
|
当前必须优先拆解的差异:
|
|
|
|
|
|
|
|
|
|
|
|
1. 普通文档首屏入口语义:Wolai 直接显示正文页,本地仍需点击 `打开当前页面`。
|
|
|
|
|
|
2. 搜索入口矩阵:Wolai 左侧搜索可打开,`Ctrl+K` 本轮未稳定;本地顶栏搜索可打开,侧栏入口和快捷键要继续按 smoke 验证。
|
|
|
|
|
|
3. 搜索结果数据:Wolai 对 `Hermes` 有真实结果,本地依赖当前工作区示例数据;后续需要固定 fixture 或种子。
|
|
|
|
|
|
4. 编辑器测试焦点:写入前必须确认当前焦点在正文测试块,不在标题或 breadcrumb 渲染副本。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 2.1 task129 Phase A 执行记录
|
|
|
|
|
|
|
|
|
|
|
|
2026-04-30 已新增并执行 `scripts/task129-wolai-aline-baseline-smoke.js`,用于固化 Phase A 的只读基线取证入口。该脚本不编辑 Wolai,只做双端首屏取证、DOM 摘要和差异矩阵输出。
|
|
|
|
|
|
|
|
|
|
|
|
主线程验证:
|
|
|
|
|
|
|
|
|
|
|
|
- 命令:`WOLAI_ALINE_RUN_ID=main-20260430-122309 node scripts/task129-wolai-aline-baseline-smoke.js`
|
|
|
|
|
|
- 结果:通过,`ok: true`,确认 `simultaneous: true`
|
|
|
|
|
|
- 矩阵:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task129-baseline/main-20260430-122309/comparison-matrix.md`
|
|
|
|
|
|
- Wolai 截图:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task129-baseline/main-20260430-122309/wolai-1392x1213-first-screen.png`
|
|
|
|
|
|
- 本地截图:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task129-baseline/main-20260430-122309/local-1392x1213-first-screen.png`
|
|
|
|
|
|
|
|
|
|
|
|
主线程多视口验证:
|
|
|
|
|
|
|
|
|
|
|
|
- 命令:`WOLAI_ALINE_RUN_ID=main-viewports-20260430-122418 WOLAI_ALINE_VIEWPORTS=1392x1213,1440x900,390x844 node scripts/task129-wolai-aline-baseline-smoke.js`
|
|
|
|
|
|
- 结果:通过,生成 `1392x1213`、`1440x900`、`390x844` 三组 Wolai / 本地截图
|
|
|
|
|
|
- 矩阵:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task129-baseline/main-viewports-20260430-122418/comparison-matrix.md`
|
|
|
|
|
|
|
|
|
|
|
|
subagent 复测:
|
|
|
|
|
|
|
|
|
|
|
|
- 命令:`WOLAI_ALINE_RUN_ID=subagent-20260430-122359 node scripts/task129-wolai-aline-baseline-smoke.js`
|
|
|
|
|
|
- 结果:通过,`ok: true`,确认 `simultaneous: true`,本次不需要 `xvfb-run`
|
|
|
|
|
|
- 矩阵:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task129-baseline/subagent-20260430-122359/comparison-matrix.md`
|
|
|
|
|
|
- Wolai 截图:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task129-baseline/subagent-20260430-122359/wolai-1392x1213-first-screen.png`
|
|
|
|
|
|
- 本地截图:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task129-baseline/subagent-20260430-122359/local-1392x1213-first-screen.png`
|
|
|
|
|
|
|
|
|
|
|
|
主线程截图复核结论:
|
|
|
|
|
|
|
|
|
|
|
|
- Wolai Hermes 为 owner 登录态,直接显示正文页和 `全网公开` 状态。
|
|
|
|
|
|
- 本地 `3000` 工作区可见,但首屏仍停留在聚合 / 预览入口,需要点击 `打开当前页面` 才进入正文。
|
|
|
|
|
|
- `task129` 只证明取证工具链可用,不证明 UI 已对齐;后续首个实现任务应优先处理 `D9 普通文档首屏入口语义`。
|
|
|
|
|
|
|
|
|
|
|
|
### 2.2 task130 D9 执行记录
|
|
|
|
|
|
|
|
|
|
|
|
2026-04-30 已新增并执行 `scripts/task130-wolai-aline-root-document-entry-smoke.js`,用于固化 `D9 普通文档首屏入口语义`。该脚本启动临时 `mnote-web` 端口验证新代码路径,不修改现有 `3000` 进程。
|
|
|
|
|
|
|
|
|
|
|
|
RED:
|
|
|
|
|
|
|
|
|
|
|
|
- 初次运行失败:`AssertionError: 根页不应停在需要点击“打开当前页面”的聚合入口`
|
|
|
|
|
|
- 失败原因:Rust Web root route 在有 active page 时只渲染 workspace entry 和 `打开当前页面` 链接,没有内嵌 Page Aggregate、editor bootstrap 和 `leptos-tiptap` island。
|
|
|
|
|
|
|
|
|
|
|
|
GREEN:
|
|
|
|
|
|
|
|
|
|
|
|
- 命令:`node scripts/task130-wolai-aline-root-document-entry-smoke.js`
|
|
|
|
|
|
- 结果:通过
|
|
|
|
|
|
- 本地截图:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task130-root-document-entry/local-root-document-entry.png`
|
|
|
|
|
|
- smoke 断言:根页不再出现 `打开当前页面`;存在 `document-shell[data-editor-host="leptos_tiptap_island"]`;存在 `__MNOTE_PAGE_AGGREGATE__`、`__MNOTE_EDITOR_BOOTSTRAP__`;存在 `.ProseMirror[contenteditable="true"]`。
|
|
|
|
|
|
|
|
|
|
|
|
实现摘要:
|
|
|
|
|
|
|
|
|
|
|
|
- root route 在 active page 可加载 Page Aggregate 时,直接复用 `DocumentPage`、Page Aggregate snapshot、editor bootstrap、title controller 和 island adapter。
|
|
|
|
|
|
- 若 active page 不能加载 Page Aggregate,回退旧 workspace entry,避免 recent cookie 指向失效页面时 root 直接 400。
|
|
|
|
|
|
- 现有 `3000` 进程仍是旧实例;需要重启 `mnote-web` 后,`3000` 才会体现该改动。
|
|
|
|
|
|
|
|
|
|
|
|
验证:
|
|
|
|
|
|
|
|
|
|
|
|
- `cargo fmt -p mnote-web --check`
|
|
|
|
|
|
- `cargo check -p mnote-web`
|
|
|
|
|
|
- `cargo test -p mnote-web root_entry -- --nocapture`
|
|
|
|
|
|
- `node scripts/task130-wolai-aline-root-document-entry-smoke.js`
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
最终对标复核:
|
|
|
|
|
|
|
|
|
|
|
|
- subagent 命令:`node scripts/task130-wolai-aline-root-document-entry-smoke.js`
|
|
|
|
|
|
- 结果:通过
|
|
|
|
|
|
- Wolai 基线:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task129-baseline/main-20260430-122309/wolai-1392x1213-first-screen.png`
|
|
|
|
|
|
- 本地截图:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task130-root-document-entry/local-root-document-entry.png`
|
|
|
|
|
|
- 结论:D9 目标行为一致;剩余侧栏数据、图标细节、具体字号属于后续 Sidebar / visual token checklist。
|
|
|
|
|
|
## 3. 通用证据矩阵
|
|
|
|
|
|
|
|
|
|
|
|
每个 checklist 项都必须保留以下字段:
|
|
|
|
|
|
|
|
|
|
|
|
| 字段 | 要求 |
|
|
|
|
|
|
| --- | --- |
|
|
|
|
|
|
| Wolai 截图 | 绝对路径,保存在 `/mnt/Data1T/mnote/tmp/wolai-editor-parity/<task>/` |
|
|
|
|
|
|
| 本地截图 | 同视口、同动作链截图 |
|
|
|
|
|
|
| 入口 | 按钮、快捷键、菜单或 hover 区域 |
|
|
|
|
|
|
| 关闭路径 | Esc、再次快捷键、遮罩、关闭按钮、入口 toggle |
|
|
|
|
|
|
| URL | 操作前后是否变化 |
|
|
|
|
|
|
| 控件类型 | switch、button、dropdown、menu、input、panel、modal |
|
|
|
|
|
|
| 控件状态 | checked、selected、disabled、focused、hover、active |
|
|
|
|
|
|
| 视觉形态 | 尺寸、位置、间距、阴影、颜色、图标、遮罩 |
|
|
|
|
|
|
| DOM/ARIA | role、aria、data-testid、可聚焦性 |
|
|
|
|
|
|
| smoke | 对应 `scripts/task*-smoke.js` 或测试文件 |
|
|
|
|
|
|
| 剩余差异 | 不允许空泛写“基本一致” |
|
|
|
|
|
|
|
|
|
|
|
|
## 4. Phase A:基线和全局 token
|
|
|
|
|
|
|
|
|
|
|
|
| ID | 状态 | 任务 | 验收要点 |
|
|
|
|
|
|
| --- | --- | --- | --- |
|
|
|
|
|
|
| A1 | GREEN | 固定基线视口与截图目录 | `task129` 已支持 `WOLAI_ALINE_VIEWPORTS`;主线程已生成 `1392x1213`、`1440x900`、`390x844` 三组截图;subagent 已复测默认视口 |
|
|
|
|
|
|
| A2 | PARITY | Wolai owner 首屏基线 | `task129` 主线程与 subagent 均确认 Wolai owner 登录态,截图见 2.1 执行记录 |
|
|
|
|
|
|
| A3 | PARITY | 本地 `3000` 首屏基线 | `task129` 主线程与 subagent 均确认本地 3000 可打开,截图见 2.1 执行记录 |
|
|
|
|
|
|
| A4 | TODO | 字体栈与基础 token | smoke 或 DOM 断言全局字体、标题字号、正文行高、sidebar 行高;截图确认中文字宽接近 Wolai |
|
|
|
|
|
|
| A5 | PARITY | 截图差异表模板落地 | `task129` 自动输出 `comparison-matrix.md`,主线程已复核截图,subagent 已独立复测 |
|
|
|
|
|
|
| A6 | PARITY | 同时操作工具链固化 | `task129` 固定 `Playwright + Chrome persistent profile`;主线程与 subagent 均确认可同时操作两个目标,本次 subagent 不需要 `xvfb-run` |
|
|
|
|
|
|
|
|
|
|
|
|
## 5. Phase B:Sidebar / 页面树
|
|
|
|
|
|
|
|
|
|
|
|
| ID | 状态 | 任务 | 验收要点 |
|
|
|
|
|
|
| --- | --- | --- | --- |
|
|
|
|
|
|
| B1 | PARITY | 侧栏宽度与背景 | `task131` 覆盖宽 `248px`、背景 `rgb(245,245,245)`、无右侧 inset、topbar.x=sidebar.right;subagent post-fix2 复核通过 |
|
|
|
|
|
|
| B2 | PARITY | workspace header | `task132` 覆盖 header `40px`、avatar `24x24`、字号 `16px`;Wolai DOM 锚点弱,主线程与 subagent 以截图复核通过 |
|
|
|
|
|
|
| B3 | PARITY | 快捷入口行 | `task132` 覆盖 6 个快捷入口、30px 容器、约 10.4px 间距;截图复核通过 |
|
|
|
|
|
|
| B4 | PARITY | 页面树行密度 | `task132` 覆盖行高 `32px`、字号 `16px`、无额外行 margin;截图复核通过 |
|
|
|
|
|
|
| B5 | PARITY | 当前页选中态 | `task132` 覆盖淡红底 `rgba(255,71,71,.1)`、红字、`aria-current=page` / `aria-selected=true`;截图复核通过 |
|
|
|
|
|
|
| B6 | PARITY | 层级缩进 | `task132` 使用父子页面 fixture 覆盖行 x 不变、一级子行内部缩进 `20px`;服务端和运行时均补齐 depth 语义 |
|
|
|
|
|
|
| B7 | PARITY | 页面树 hover action | `task132` 覆盖 hover 仅出现“更多操作 / 新建子页面”两个 24px action;subagent post-fix2 复核通过 |
|
|
|
|
|
|
| B8 | PARITY | 页面树上下文菜单 | `task132` 覆盖宽约 `220px`、9 项命令、分组间距和 `Alt+` / `Del` 提示;高风险删除仍经确认 |
|
|
|
|
|
|
| B9 | PARITY | 底部垃圾桶/模板中心 | `task132` 覆盖 footer `44px`、无顶部分隔线、垃圾箱/模板中心固定底部;截图复核通过 |
|
|
|
|
|
|
| B10 | PARITY | 文件树创新入口 | 保留 Explorer tab;`task132` 复核主路径仍是“我的页面”,footer 与行高体系不被破坏;与 Wolai 无 Explorer 的差异按本地创新入口保留 |
|
|
|
|
|
|
| B11 | PARITY | 页面树图标与展开箭头 | `task133` 覆盖 Wolai 每行不同私有 glyph、本地无真实 icon 数据时不得用统一房子图标,也不保留空 icon slot;展开箭头使用 20x20 SVG chevron |
|
|
|
|
|
|
|
|
|
|
|
|
### 5.1 task131 / task132 / task133 Phase B 执行记录
|
|
|
|
|
|
|
|
|
|
|
|
2026-04-30 已完成 Phase B:Sidebar / 页面树。执行口径按 `wolai-aline` skill:先由 subagent 取 Wolai 基线,主线程查看截图并写 RED smoke,再最小实现,最后本地与 subagent 复测。用户复核指出 `task132` 漏掉页面树图标/箭头差异后,补充 `task133` 将该类肉眼差异固化为 smoke。
|
|
|
|
|
|
|
|
|
|
|
|
RED / GREEN:
|
|
|
|
|
|
|
|
|
|
|
|
- `scripts/task131-wolai-aline-sidebar-b1-smoke.js`:固化 B1,初始失败于本地侧栏 `240px`,GREEN 后覆盖 `248px`、`rgb(245,245,245)`、无 right inset、topbar 贴合。
|
|
|
|
|
|
- `scripts/task132-wolai-aline-sidebar-phase-b-smoke.js`:固化 B2-B10,使用父子页面 fixture 覆盖 header、快捷入口、行密度、选中态、层级缩进、hover action、上下文菜单、footer。
|
|
|
|
|
|
- `scripts/task133-wolai-aline-sidebar-tree-icons-arrows-smoke.js`:固化 B11,RED 失败于页面树统一房子 glyph;二次 GREEN 后断言 page 模式不渲染通用房子/伪 icon、不保留空 icon 槽,标题贴近箭头/占位,toggle 使用 20x20 SVG chevron。
|
|
|
|
|
|
|
|
|
|
|
|
实现摘要:
|
|
|
|
|
|
|
|
|
|
|
|
- `rust/crates/mnote-web/src/ssr/styles.rs`:侧栏宽度/背景、header、quick actions、tree row、选中态、context menu、footer 的 Wolai 对齐样式;page 模式无真实 icon 数据时不显示统一房子 glyph,也不保留空 icon 槽。
|
|
|
|
|
|
- `rust/crates/mnote-web/src/ssr/pages/layout.rs`:页面树运行时渲染补 `aria-current` / `aria-selected`,hover action 收敛为“更多/新建”,上下文菜单命令与 Wolai 对齐,运行时递归 depth;page tree 展开箭头改为 20x20 SVG chevron,page 行不渲染空 icon 节点。
|
|
|
|
|
|
- `rust/crates/mnote-web/src/tree_shell/page_renderer.rs` / `routes/tree.rs`:SSR 页面树补父子层级 depth / aria-level 语义,兼容 `parentId` 与 `parentNodeId`;SSR page tree 展开箭头同样使用 20x20 SVG chevron,page 行不渲染空 icon 节点。
|
|
|
|
|
|
|
|
|
|
|
|
验证命令:
|
|
|
|
|
|
|
|
|
|
|
|
- `cargo fmt -p mnote-web --check`
|
|
|
|
|
|
- `cargo check -p mnote-web`
|
|
|
|
|
|
- `MNOTE_UI_BASE_URL=http://127.0.0.1:3000 node scripts/task131-wolai-aline-sidebar-b1-smoke.js`
|
|
|
|
|
|
- `MNOTE_UI_BASE_URL=http://127.0.0.1:3000 node scripts/task132-wolai-aline-sidebar-phase-b-smoke.js`
|
|
|
|
|
|
- `MNOTE_UI_BASE_URL=http://127.0.0.1:3000 node scripts/task133-wolai-aline-sidebar-tree-icons-arrows-smoke.js`
|
|
|
|
|
|
- `node scripts/task119-rust-web-wolai-visual-regression-smoke.js`
|
|
|
|
|
|
|
|
|
|
|
|
证据路径:
|
|
|
|
|
|
|
|
|
|
|
|
- B1 Wolai 基线:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task131-sidebar-b1-baseline/wolai-sidebar-b1-open-1392x1213.png`
|
|
|
|
|
|
- B1 本地最终:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task131-sidebar-b1-postfix/local-sidebar-b1-postfix-1392x1213.png`
|
|
|
|
|
|
- Phase B Wolai 基线矩阵:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task132-sidebar-phase-b-baseline/comparison-matrix.md`
|
|
|
|
|
|
- Phase B 本地主线程最终:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task132-sidebar-phase-b/local-sidebar-phase-b-1392x1213.png`
|
|
|
|
|
|
- Phase B 本地菜单最终:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task132-sidebar-phase-b/local-sidebar-phase-b-menu-1392x1213.png`
|
|
|
|
|
|
- Phase B subagent post-fix2 JSON:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task132-sidebar-phase-b-postfix2/sidebar-phase-b-postfix2-measurements.json`
|
|
|
|
|
|
- Phase B subagent Wolai 菜单:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task132-sidebar-phase-b-postfix2/wolai-sidebar-context-menu-1392x1213.png`
|
|
|
|
|
|
- Phase B subagent 本地菜单:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task132-sidebar-phase-b-postfix2/local-sidebar-context-menu-1392x1213.png`
|
|
|
|
|
|
- B11 用户指出差异截图:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task132-sidebar-phase-b-baseline/wolai-03-page-tree.png` / `/mnt/Data1T/mnote/tmp/wolai-editor-parity/task132-sidebar-phase-b-baseline/local-03-page-tree.png`
|
|
|
|
|
|
- B11 subagent 基线矩阵:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task133-sidebar-tree-icons-arrows-baseline/comparison-matrix.md`
|
|
|
|
|
|
- B11 subagent Wolai / 本地复核截图:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task133-sidebar-tree-icons-arrows-baseline/wolai-sidebar-tree-icons-arrows.png` / `/mnt/Data1T/mnote/tmp/wolai-editor-parity/task133-sidebar-tree-icons-arrows-baseline/local-sidebar-tree-icons-arrows.png`
|
|
|
|
|
|
- B11 本地主线程最终截图:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task133-sidebar-tree-icons-arrows/local-sidebar-tree-icons-arrows-1392x1213.png`
|
|
|
|
|
|
- B11 二次复核矩阵:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task134-sidebar-arrow-no-empty-slot-baseline/comparison-matrix.md`
|
|
|
|
|
|
- B11 二次复核截图:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task134-sidebar-arrow-no-empty-slot-baseline/wolai-sidebar-tree.png` / `/mnt/Data1T/mnote/tmp/wolai-editor-parity/task134-sidebar-arrow-no-empty-slot-baseline/local-sidebar-tree.png`
|
|
|
|
|
|
|
|
|
|
|
|
主线程复核结论:
|
|
|
|
|
|
|
|
|
|
|
|
- B1-B11 可量测项已对齐或按 checklist 明确保留本地差异。
|
|
|
|
|
|
- Wolai header/avatar DOM 选择器不稳定,最终以截图 + 本地稳定锚点复核。
|
|
|
|
|
|
- `Explorer` 是 mnote 本地创新入口,按 B10 保留;视觉不抢“我的页面”主路径。
|
|
|
|
|
|
- 菜单位置因页面树数据不同而不同;尺寸、项目、分组高度已对齐。
|
|
|
|
|
|
- Wolai 页面树图标是每行不同的私有 glyph;当前本地 projection 没有真实 per-page icon 数据,因此不硬编码类似图标,也不保留空白 icon 列。二次复核确认:保留空列会让标题 x 更接近 Wolai,但视觉上是明显缺失;当前按用户确认的产品判断去空列,残留差异是标题比 Wolai 真实图标+标题组合更靠左。后续若树投影提供真实 icon 字段,再按行渲染。
|
|
|
|
|
|
|
|
|
|
|
|
## 6. Phase C:顶栏、breadcrumb、搜索
|
|
|
|
|
|
|
|
|
|
|
|
| ID | 状态 | 任务 | 验收要点 |
|
|
|
|
|
|
| --- | --- | --- | --- |
|
2026-04-30 18:36:50 +08:00
|
|
|
|
| C1 | PARITY | 顶栏高度与按钮密度 | `task135` 覆盖顶栏约 40px、右侧按钮组无搜索入口、icon 不再渲染成黑色方块;`task119` 复核 topbarHeight=40 |
|
|
|
|
|
|
| C2 | PARITY | breadcrumb | `task135` 覆盖 breadcrumb 当前标题绑定、弱色分隔符改为 Wolai chevron;真实父路径数据仍依赖后续 Page Aggregate / tree projection |
|
|
|
|
|
|
| C3 | PARITY | owner/published 按钮分型 | `task135` 覆盖 owner 顶栏绿色 `全网公开`,右侧按钮组从本地 AI/搜索收敛为 Wolai owner 态常见按钮序列 |
|
|
|
|
|
|
| C4 | PARITY | 顶栏搜索入口基线纠偏 | 2026-04-30 Wolai owner 当前 viewport 顶栏无搜索入口;本地已移除顶栏搜索按钮,搜索统一走侧栏入口 / `Ctrl+P` |
|
|
|
|
|
|
| C5 | PARITY | 侧栏搜索入口 | `task135` 覆盖侧栏左上搜索打开同一个全局搜索 modal,URL 不变;modal 打开时再次点击侧栏搜索会关闭 |
|
|
|
|
|
|
| C6 | PARITY | 搜索 modal 默认状态 | `task135` 按最新 Wolai 实测修正:空 query 先显示最近浏览,不直接显示筛选;输入后 switch 出现,`仅匹配标题` / `页面内搜索` 为 switch 且默认关闭 |
|
|
|
|
|
|
| C7 | PARITY | 搜索 modal 关闭路径 | `task135` 覆盖 Esc、主区域遮罩、再次 `Ctrl+P`、侧栏入口 toggle;URL 均不变 |
|
|
|
|
|
|
| C8 | PARITY | 搜索结果行 | `task135` 覆盖后台 API 结果、匹配数量、红色命中高亮、快捷键提示、结果 icon、结果 owner 标记 |
|
|
|
|
|
|
| C9 | PARITY | 搜索空态/加载态 | `task135` 覆盖空 query 最近浏览、输入后 loading、无结果 `没有搜索结果`,DOM 可断言 `data-search-loading` / `data-search-empty` |
|
|
|
|
|
|
| C10 | PARITY | 搜索入口/快捷键矩阵 | `task135` 和 subagent baseline 确认:侧栏搜索 / `Ctrl+P` 是搜索入口;`Ctrl+K` 按当前 Wolai 实测不打开搜索 |
|
|
|
|
|
|
| C11 | PARITY | 搜索结果 fixture | `task135` 固定本地 `Rust` / `Hermes` fallback fixture,并断言 modal 调用 `/api/search/documents` 而不是 DOM 前端过滤 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 6.1 task135 Phase C 执行记录
|
|
|
|
|
|
|
|
|
|
|
|
2026-04-30 已完成 Phase C:顶栏、breadcrumb、owner/published、搜索入口与搜索 modal。执行口径按 `wolai-aline` skill:subagent 先取 Wolai / 本地基线,主线程复核截图后补 RED smoke;实现后本地 smoke 通过,并已派 subagent 做 post-fix 复测。
|
|
|
|
|
|
|
|
|
|
|
|
RED:
|
|
|
|
|
|
|
|
|
|
|
|
- 新增 `scripts/task135-wolai-aline-phase-c-smoke.js`,初始失败于顶栏高度 `44px`、公开态文案 `Public`、顶栏多搜索入口、搜索 modal 未调用 `/api/search/documents`。
|
|
|
|
|
|
- subagent 基线纠偏:当前 Wolai `Ctrl+K` 不打开搜索;空 query 不直接显示筛选控件;输入后 `仅匹配标题` / `页面内搜索` switch 本次实测为关闭态。
|
|
|
|
|
|
|
|
|
|
|
|
GREEN:
|
|
|
|
|
|
|
|
|
|
|
|
- `rust/crates/mnote-web/src/ssr/pages/layout.rs`:顶栏公开态改为 `全网公开`,移除顶栏搜索入口,右侧按钮组对齐 owner 态;侧栏搜索入口改为 toggle;搜索 modal 输入改为 `type=search`,空 query 显示最近浏览,输入后调用 `/api/search/documents`,结果区标记 `data-search-results-owner="rust-kernel"`。
|
|
|
|
|
|
- `rust/crates/mnote-web/src/ssr/styles.rs`:顶栏高度收敛到 40px;搜索遮罩支持侧栏入口穿透 toggle,同时保留主区域遮罩关闭;补齐右侧按钮与结果图标 mask,避免黑色方块;搜索高亮统一红色弱底。
|
|
|
|
|
|
- `rust/crates/mnote-web/src/routes/search.rs`:fallback 搜索数据补 `Hermes` / `技能知识图谱开发` fixture,避免本地结果态依赖随机工作区数据。
|
|
|
|
|
|
- `scripts/task128-rust-web-wolai-search-modal-smoke.js`:同步当前 Wolai 基线,改为侧栏 / `Ctrl+P` 入口和 switch 默认关闭。
|
|
|
|
|
|
|
|
|
|
|
|
验证命令:
|
|
|
|
|
|
|
|
|
|
|
|
- `cargo fmt -p mnote-web --check`
|
|
|
|
|
|
- `cargo check -p mnote-web`
|
|
|
|
|
|
- `cargo build -p mnote-web --bin mnote-web`
|
|
|
|
|
|
- `MNOTE_UI_BASE_URL=http://127.0.0.1:3000 node scripts/task135-wolai-aline-phase-c-smoke.js`
|
|
|
|
|
|
- `MNOTE_UI_BASE_URL=http://127.0.0.1:3000 node scripts/task128-rust-web-wolai-search-modal-smoke.js`
|
|
|
|
|
|
- `MNOTE_UI_BASE_URL=http://127.0.0.1:3000 node scripts/task125-rust-web-search-server-first-smoke.js`
|
|
|
|
|
|
- `node scripts/task119-rust-web-wolai-visual-regression-smoke.js`
|
|
|
|
|
|
|
|
|
|
|
|
证据路径:
|
|
|
|
|
|
|
|
|
|
|
|
- Phase C subagent 基线矩阵:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task135-phase-c-baseline/comparison-matrix.md`
|
|
|
|
|
|
- Wolai Hermes 搜索基线:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task135-phase-c-baseline/wolai-search-hermes.png`
|
|
|
|
|
|
- 本地 Phase C 最终截图:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task135-phase-c/local-phase-c-search.png`;post-fix subagent 本地复核:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task135-phase-c-postfix/local-10-query-hermes.png`
|
|
|
|
|
|
- 本地搜索 modal smoke 截图:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/local-search-modal/local-3000-search-modal.png`
|
|
|
|
|
|
|
|
|
|
|
|
主线程复核结论:
|
|
|
|
|
|
|
|
|
|
|
|
- 搜索不再只是 UI 壳:modal 输入会调用 `/api/search/documents`,请求体包含 query 和 switch filter,结果区有 `data-search-results-owner="rust-kernel"`。
|
|
|
|
|
|
- 当前 Wolai 基线推翻了旧 checklist 的两个假设:`Ctrl+K` 不是搜索入口;`仅匹配标题` / `页面内搜索` 在本次输入态实测为关闭态。
|
|
|
|
|
|
- 本地 `Hermes` fixture 只能证明结果态结构、后台链路和高亮;不代表本地已经有 Wolai 真实空间数据。
|
|
|
|
|
|
- 顶栏/breadcrumb 的父路径层级仍受本地 Page Aggregate / tree projection 数据限制;本阶段只完成控件、入口、状态和同步锚点的对标。
|
|
|
|
|
|
- post-fix subagent 复测矩阵:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task135-phase-c-postfix/comparison-matrix.md`;复核确认本地右上角不再有黑色方块,侧栏搜索 toggle、`Ctrl+P` toggle、`Ctrl+K` 不打开、空 query 最近浏览、后台搜索 API、结果 icon/高亮均通过。
|
2026-04-30 16:18:54 +08:00
|
|
|
|
|
|
|
|
|
|
## 7. Phase D:文档画布与阅读态
|
|
|
|
|
|
|
|
|
|
|
|
| ID | 状态 | 任务 | 验收要点 |
|
|
|
|
|
|
| --- | --- | --- | --- |
|
2026-04-30 18:36:50 +08:00
|
|
|
|
| D1 | PARITY | 主内容列宽 | `task136` 覆盖普通文档主列 `760px`,大屏居中不贴左;移动端沿既有 media query 保持不溢出 |
|
|
|
|
|
|
| D2 | PARITY | 标题位置与样式 | `task136` 按 Wolai 基线收敛到 y≈108、`34px / 44px / 600`、颜色接近 Wolai |
|
|
|
|
|
|
| D3 | PARITY | 默认隐藏 meta/debug 行 | `task136` 断言普通文档默认不显示 workspace/已同步 meta、大号页面 icon、debug 文案和横线 |
|
|
|
|
|
|
| D4 | PARITY | 正文段落 | `task136` 覆盖正文 `16px / 24px`,标题到正文间距按 Wolai 基线加大 |
|
|
|
|
|
|
| D5 | PARITY | 任务块 | `task136` 固定 Tiptap fixture 并断言渲染后存在 `input[type=checkbox]`,尺寸 16px;补齐 kernel `todo` 类型到 Tiptap taskList 的转换 |
|
|
|
|
|
|
| D6 | PARITY | 引用/列表/标题块 | `task136` 覆盖 heading、blockquote、bulletList;补齐 `bullet_list_item` / `numbered_list_item` 映射避免降级段落 |
|
|
|
|
|
|
| D7 | PARITY | 右下角浮动入口 | `task136` 覆盖 AI / 帮助入口 40px、AI 在上、间距约 16px、底部留白约 44px,不遮挡正文 |
|
|
|
|
|
|
| D8 | PARITY | 阅读态和编辑态切换 | `task136` 覆盖标题 focus、编辑器 focus 后标题 y/x 不跳动;subagent baseline 同样确认点击后布局稳定 |
|
2026-04-30 16:18:54 +08:00
|
|
|
|
| D9 | PARITY | 普通文档首屏入口语义 | `task130` 已覆盖 RED/GREEN,subagent 最终对标复核通过:根页不再停在“打开当前页面”入口,直接出现 document shell + editor island |
|
|
|
|
|
|
|
2026-04-30 18:36:50 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 7.1 task136 Phase D 执行记录
|
|
|
|
|
|
|
|
|
|
|
|
2026-04-30 已完成 Phase D:文档画布与阅读态。执行口径按 `wolai-aline` skill:subagent 先取 Wolai / 本地只读基线,主线程复核截图后补 RED smoke;实现后本地 smoke 与相关回归通过,并已派 subagent 做 post-fix 复测。
|
|
|
|
|
|
|
|
|
|
|
|
RED:
|
|
|
|
|
|
|
|
|
|
|
|
- 新增 `scripts/task136-wolai-aline-phase-d-smoke.js`,初始失败于本地文档主列 `880px`,后续增强断言捕获标题 y 偏低、标题到正文间距偏小、右下浮动入口间距/底部位置旧基线。
|
|
|
|
|
|
- 基线截图确认 Wolai 标题为 y≈108、`34px / 44px / 600`;普通文档无 workspace/已同步 meta 行和大号页面 icon;右下入口为 40px,AI 在帮助上方,按钮间距约 16px,底部留白约 44px。
|
|
|
|
|
|
- smoke 还暴露后台链路差异:保存 Tiptap fixture 后,`/api/documents/content` 返回 `todo` / `bullet_list_item` 等 kernel 规范化类型,但浏览器 bootstrap 只识别旧类型,导致任务块和列表降级为普通段落。
|
|
|
|
|
|
|
|
|
|
|
|
GREEN:
|
|
|
|
|
|
|
|
|
|
|
|
- `rust/crates/mnote-web/src/ssr/styles.rs`:文档主列收敛到 760px;标题改为 `34px / 44px / 600` 且 y≈108;普通文档隐藏页面大 icon 与 meta/debug 行;正文行高 24px;补 task checkbox、blockquote、list 样式;右下浮动入口减重为 40px,AI 在上、帮助在下,间距 16px、底部留白 44px。
|
|
|
|
|
|
- `rust/crates/mnote-web/src/routes/web_shell.rs`:`legacyBlockToTiptap` 同时识别旧类型和 kernel 规范化类型:`todo`、`bullet_list_item`、`numbered_list_item`、`blockquote`。
|
|
|
|
|
|
- `rust/crates/mnote-web/src/routes/editor.rs`:runtime block 类型映射同步兼容 kernel 规范化类型,避免编辑器链路继续把任务/列表块当成 media 或段落。
|
|
|
|
|
|
- `scripts/task119-rust-web-wolai-visual-regression-smoke.js`:按本次 Wolai 基线更新右下浮动入口顺序、间距和底部留白断言,避免旧 Stitch 目标覆盖当前实测。
|
|
|
|
|
|
|
|
|
|
|
|
验证命令:
|
|
|
|
|
|
|
|
|
|
|
|
- `cargo fmt -p mnote-web --check`
|
|
|
|
|
|
- `cargo check -p mnote-web`
|
|
|
|
|
|
- `cargo build -p mnote-web --bin mnote-web`
|
|
|
|
|
|
- `MNOTE_UI_BASE_URL=http://127.0.0.1:3000 node scripts/task136-wolai-aline-phase-d-smoke.js`
|
|
|
|
|
|
- `MNOTE_UI_BASE_URL=http://127.0.0.1:3000 node scripts/task121-rust-web-editor-island-hydration-smoke.js`
|
|
|
|
|
|
- `node scripts/task119-rust-web-wolai-visual-regression-smoke.js`
|
|
|
|
|
|
- `MNOTE_UI_BASE_URL=http://127.0.0.1:3000 node scripts/task128-rust-web-wolai-search-modal-smoke.js`
|
|
|
|
|
|
- `MNOTE_UI_BASE_URL=http://127.0.0.1:3000 node scripts/task135-wolai-aline-phase-c-smoke.js`
|
|
|
|
|
|
|
|
|
|
|
|
证据路径:
|
|
|
|
|
|
|
|
|
|
|
|
- Phase D subagent 基线矩阵:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task136-phase-d-baseline2/comparison-matrix.md`
|
|
|
|
|
|
- Wolai Phase D 基线:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task136-phase-d-baseline2/wolai-01-first.png`
|
|
|
|
|
|
- 本地 Phase D 最终截图:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task136-phase-d/local-phase-d-document.png`
|
|
|
|
|
|
- Phase D subagent post-fix:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task136-phase-d-postfix/comparison-matrix.md`
|
|
|
|
|
|
|
|
|
|
|
|
主线程复核结论:
|
|
|
|
|
|
|
|
|
|
|
|
- 本地文档画布主列、标题字号/行高/字重、标题 y、meta/icon/debug 隐藏、正文行高、任务/引用/列表渲染、右下浮动入口尺寸/顺序/间距已被 smoke 固化。
|
|
|
|
|
|
- subagent post-fix 在根文档截图中复核标题 y=108、列宽 760、字号 34/字重 600、meta/icon/debug 不可见、浮动入口 40px/16px/44px、点击后不跳动。
|
|
|
|
|
|
- 当前本地 fixture smoke 能证明后台内容链路不再把任务块和列表降级为普通段落;post-fix 根文档缺少任务/引用/列表内容,因此这三类块的真实视觉细节仍以后续 Phase E editable-test 或专门 fixture 页面继续细化。
|
|
|
|
|
|
- 剩余差异:本地页面标题来自临时 fixture,文案与 Wolai Hermes 不同;Wolai 真实 per-page icon 数据仍未进入本地 projection,按 Phase B 结论不伪造。
|
|
|
|
|
|
|
2026-04-30 16:18:54 +08:00
|
|
|
|
## 8. Phase E:主编辑器块交互
|
|
|
|
|
|
|
|
|
|
|
|
| ID | 状态 | 任务 | 验收要点 |
|
|
|
|
|
|
| --- | --- | --- | --- |
|
2026-04-30 21:50:40 +08:00
|
|
|
|
| E0 | DONE | editable-test 焦点护栏 | Wolai Hermes editable-test 与本地 smoke 均断言写入前焦点在正文测试块,不在标题、breadcrumb 或隐藏输入 |
|
|
|
|
|
|
| E1 | DONE | editable-test 基础输入 | Wolai 已取输入/回车/撤销基线;本地 `task137` 覆盖三行输入、保存、刷新后保持 |
|
|
|
|
|
|
| E2 | DONE | 块 hover 手柄 | Wolai follow-up 基线确认默认 hover 只显示 `2x2` 四点手柄;本地 smoke 断言四点、可见性、与正文间距和从正文移向手柄不消失 |
|
|
|
|
|
|
| E3 | DONE | 上方插入加号 | 本地仅在 hover 四点上方热区时显示上方 `+`,点击可在目标块前插入并聚焦;tooltip/title 包含 `在上方插入块` / `Esc, a` |
|
|
|
|
|
|
| E4 | DONE | 下方插入加号 | 本地仅在 hover 四点下方热区时显示下方 `+`,点击可在目标块后插入并聚焦;tooltip/title 包含 `在下方插入块` / `Esc, b` |
|
|
|
|
|
|
| E5 | DONE | `Esc, a` / `Esc, b` | 本地块选中态快捷键可插入 before/after,并把输入焦点放入新块 |
|
2026-04-30 22:14:37 +08:00
|
|
|
|
| E6 | PARTIAL | 块菜单 | 本地点击四点后手柄切换为三横线;主菜单约 240px、浮在侧栏之上、位于三横线左侧且不遮挡正文/手柄;`转换为` 二级菜单已补齐 Wolai 当前基线项目,H4 小标题与页面转换已有真实命令;复制链接/颜色/文字翻译子菜单、折叠标题/折叠待办三级菜单仍需继续补齐 |
|
2026-04-30 21:50:40 +08:00
|
|
|
|
| E7 | DONE | slash 菜单 | 本地 `/` 跟随编辑器打开;含 `AI 助理 / 用 AI 写作 / 基础块列表 / 文本 / 待办列表 / /h1`,方向键/Enter 选择仍由 smoke 覆盖 |
|
|
|
|
|
|
| E8 | DONE | selection toolbar | 本地选中文本出现工具条;粗体、斜体、链接、颜色、转换块入口可见,入口文案已中文化 |
|
|
|
|
|
|
| E9 | PARTIAL | `Ctrl+A` 双阶段选择 | 本地 smoke 覆盖第一次/第二次选择范围扩展;Wolai 的多块粉色选区视觉与块级全选细节后续单列视觉对标 |
|
|
|
|
|
|
| E10 | DONE | 拖拽预览 | 本地 smoke 覆盖拖动手柄时 `.block-drop-indicator` 横向 drop line 可见;分栏竖线预览与落点持久化后续单列 |
|
|
|
|
|
|
|
|
|
|
|
|
### Phase E 执行记录(2026-04-30)
|
|
|
|
|
|
|
|
|
|
|
|
- Wolai 基线:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task137-phase-e-baseline/comparison-matrix.md`,截图目录 `/mnt/Data1T/mnote/tmp/wolai-editor-parity/task137-phase-e-baseline/screenshots/`。
|
|
|
|
|
|
- Wolai 说明页摘要:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task137-phase-e-baseline/doc-summary.md`。
|
|
|
|
|
|
- 本地 post-fix smoke:`MNOTE_PHASE_E_SCREENSHOT_DIR=/mnt/Data1T/mnote/tmp/wolai-editor-parity/task137-phase-e-local-smoke node scripts/task137-wolai-phase-e-smoke.js`,通过。
|
|
|
|
|
|
- Subagent post-fix 复核:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task137-phase-e-postfix-subagent-final3/`,通过。
|
|
|
|
|
|
- 手柄 follow-up Wolai 基线:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task137-handle-followup-wolai-baseline/`,确认默认四点、上/下热区分别出 `+`、点击后变三横线、菜单在正文左侧不挡正文。
|
|
|
|
|
|
- 手柄 follow-up 本地 smoke:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task137-handle-followup-local-postfix10/`,通过并覆盖四点、上下加号、可达性、菜单不挡正文/手柄。
|
|
|
|
|
|
- 手柄 follow-up subagent 本地复核:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task137-handle-followup-local-subagent-postfix/`,通过;复核默认四点、上下加号、正文到手柄不消失、点击后三横线、菜单不遮挡正文/手柄。
|
|
|
|
|
|
- 关键截图:`02-hover-handle-default.png`、`02a-hover-handle-before-plus.png`、`02b-hover-handle-after-plus.png`、`04-drag-preview.png`、`05-block-menu.png`、`07-slash-menu.png`、`08-toolbar.png`。`05-block-menu.png` 已断言菜单不遮挡正文且不盖住三横线手柄;更多 Wolai 菜单项后续补齐。
|
|
|
|
|
|
- 块菜单 refresh Wolai 基线:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task138-phase-e-wolai-refresh/`,确认二级/三级菜单、Esc/外部点击关闭、鼠标移出保持打开。
|
|
|
|
|
|
- 块菜单 refresh 本地 smoke:`MNOTE_PHASE_E_SCREENSHOT_DIR=/mnt/Data1T/mnote/tmp/wolai-editor-parity/task138-phase-e-local-smoke-10 node scripts/task137-wolai-phase-e-smoke.js`,通过;覆盖第二行手柄不跳行、240px 菜单、底部编辑信息、转换子菜单缺失项、鼠标移出保持、Esc 关闭、H4 真实转换。
|
|
|
|
|
|
- 块菜单 refresh subagent 本地复核:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task138-phase-e-local-subagent-postfix/`,通过;复核第 1-4 行手柄不跳行、菜单未被侧栏裁剪、鼠标移出保持、Esc/外部点击关闭、H4 真实转换。
|
2026-04-30 22:45:43 +08:00
|
|
|
|
- `转换为 -> 页面` task139 本地实现曾只做原地伪页面块;该结论已被用户复核纠偏,不能作为完成口径。后续以 task140 Wolai 真源基线为准:转换必须产生/绑定真正子页面,页面树可见且点击页面块可打开。
|
|
|
|
|
|
- `转换为 -> 页面` task140 Wolai 真源基线:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task140-transform-page-true-source-wolai-baseline/`;确认父页 URL 当下不变,当前块原地变 page block,点击后打开真实子页面 `5ZNTivwkmVyRSGN3AAntqJ`,返回父页后页面树 `软件开发 -> Hermes` 下可见同名子页面。
|
|
|
|
|
|
- `转换为 -> 页面` task140 本地 smoke:`MNOTE_PHASE_E_SCREENSHOT_DIR=/mnt/Data1T/mnote/tmp/wolai-editor-parity/task140-transform-page-true-source-local-smoke-4 node scripts/task137-wolai-phase-e-smoke.js`,通过;覆盖 `/api/tree/commands` create、`parentId=当前文档`、返回 `documentId`、页面块 href 指向子页面、点击后进入子页面、刷新后页面树出现同名子页面。
|
|
|
|
|
|
- `转换为 -> 页面` task140 subagent 本地复核:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task140-transform-page-true-source-local-subagent-postfix/`,通过;关键断言 child documentId 存在、`parentId` 指向当前文档、父页 URL 不立即变化、点击页面块进入子页面、页面树可见同名子页面;主线程复核截图 `06-transform-page.png` / `09-transform-page-open-child.png` 未见 true-source 语义差异。
|
|
|
|
|
|
- 代码改动:`rust/spikes/leptos-tiptap-spike/src/lib.rs` 与生成的 `rust/spikes/leptos-tiptap-spike/generated/island/*`;`scripts/task137-wolai-phase-e-smoke.js` 已在本地 ignored smoke 中升级真源断言,默认不入库。
|
2026-04-30 21:50:40 +08:00
|
|
|
|
- 验证命令:`cargo fmt --check`、`cargo check`、`node wolai-frontend/scripts/build-leptos-tiptap-island.js`、`node scripts/task137-wolai-phase-e-smoke.js`、`node scripts/task121-rust-web-editor-island-hydration-smoke.js`、`node scripts/task136-wolai-aline-phase-d-smoke.js`。
|
|
|
|
|
|
|
2026-04-30 22:45:43 +08:00
|
|
|
|
### Phase E 参考 Tiptap 审计记录(2026-04-30)
|
|
|
|
|
|
|
|
|
|
|
|
- `tiptap-notion-like-registry` / `tiptap-notion-like-template` 包含 197 个 registry 组件,核心能力不是单个菜单,而是 `DragContextMenu`、`SlashDropdownMenu`、`NotionToolbarFloating`、AI、颜色、链接、表格、图片、TOC、缩进、节点背景、节点对齐、emoji、mention、协作和移动端 toolbar 的组合。
|
|
|
|
|
|
- `leptos-tiptap` 当前已支持 `starter-kit` 与 `full`:blockquote、bold、bullet/ordered/task list、code/codeBlock、heading、history、horizontalRule、italic、strike、text-align、highlight、image、link、placeholder、youtube;未直接覆盖表格、数学、emoji、mention、TOC、AI、collaboration caret、节点背景、节点对齐、缩进和 UniqueID。
|
|
|
|
|
|
- Phase E 后续实施按 Wolai 基线优先级拆小任务;参考 Tiptap 能力先进入 checklist,不直接视为 mnote 必须一次性照搬。
|
|
|
|
|
|
|
2026-04-30 21:50:40 +08:00
|
|
|
|
### Phase E 说明页扩展 backlog
|
|
|
|
|
|
|
|
|
|
|
|
| ID | 状态 | 任务 | 验收要点 |
|
|
|
|
|
|
| --- | --- | --- | --- |
|
|
|
|
|
|
| E11 | TODO | `Tab` / `Shift+Tab` 缩进结构 | 缩进改变父子块结构,不只是视觉 padding;覆盖不允许缩进的块类型 |
|
|
|
|
|
|
| E12 | TODO | `Ctrl/Cmd+Shift+U` 块布局 | 显示/隐藏块布局虚线框,且不影响编辑保存 |
|
|
|
|
|
|
| E13 | TODO | 块转换三入口 | 块菜单、快捷键、slash `/zh + 拼音首字母` 均能转换文本类块 |
|
|
|
|
|
|
| E14 | TODO | 复制/粘贴与匹配样式粘贴 | 文本选择、块选择、`Ctrl/Cmd+Shift+V` 分别有 smoke |
|
|
|
|
|
|
| E15 | TODO | 链接创建 | 选中文字 `Ctrl/Cmd+K` 与直接粘贴 URL 创建链接 |
|
|
|
|
|
|
| E16 | TODO | 文本颜色/背景色/行内公式/页面引用 | selection toolbar 子菜单真实写入 Tiptap 内容,不只显示入口 |
|
|
|
|
|
|
| E17 | TODO | 评论入口 | 块评论、选中文字评论、评论气泡数量和 `Ctrl/Cmd+Alt+M` 后续对标 |
|
|
|
|
|
|
| E18 | TODO | 块引用与右侧边栏引用 | 块引用搜索、引用预览/别名、右侧边栏拖拽引用后续对标 |
|
|
|
|
|
|
| E19 | TODO | 块历史 | 块历史查看与恢复版本按 Wolai 说明页单列验证 |
|
|
|
|
|
|
| E20 | TODO | 拖拽分栏 | 横线/竖线预览、父子块随父块移动、测试块间安全释放与清理 |
|
2026-04-30 22:14:37 +08:00
|
|
|
|
| E21 | DONE | 块菜单二级转换基础版 | `转换为` hover 后主菜单保持、二级菜单包含 Wolai 当前项目;`文本/待办/高级待办/H1/H2/H3/H4/页面/列表/数字列表/引述/代码` 其中 H4 与页面至少有真实 smoke |
|
2026-04-30 21:50:40 +08:00
|
|
|
|
| E22 | TODO | 折叠标题三级菜单 | hover `折叠标题` 显示 `折叠主标题/折叠大标题/折叠中标题/折叠小标题`;真实折叠语义需接 editor/core 命令,不用 disabled 文案伪装完成 |
|
|
|
|
|
|
| E23 | TODO | 折叠待办三级菜单 | hover `折叠待办` 显示 `折叠待办列表/折叠高级待办列表`;真实折叠待办语义需接 editor/core 命令 |
|
|
|
|
|
|
| E24 | TODO | 复制链接/颜色/文字翻译子菜单 | 复制链接、颜色、文字翻译按 Wolai 展开子菜单;颜色至少覆盖文字色/背景色真实写入,复制链接不只反馈文案 |
|
|
|
|
|
|
| E25 | TODO | 块菜单关闭状态机 | Esc 与外部点击关闭所有层级;鼠标移出菜单保持打开,三级菜单可按 Wolai 收回到二级菜单;smoke 覆盖三条路径 |
|
2026-04-30 22:45:43 +08:00
|
|
|
|
| E26 | DONE | `转换为 -> 页面` 真源 | 已按 task140 修正:本地转换时调用 `/api/tree/commands` 创建 `parentId=当前文档` 的真实子页面,当前块原地变 page block,页面块 href 指向子页面且点击可打开,刷新后页面树显示同名子页面;仍需在后续任务补齐 Wolai 重新打开菜单时 `页面` 勾选态的完整二次复核 |
|
|
|
|
|
|
| E27 | TODO | 参考 Tiptap slash 插入扩展 | 对齐 `tiptap-notion-like-template`:slash 菜单除文本/标题/列表/引用/代码外,还应覆盖 AI continue/ask、mention、emoji、table、divider、TOC、image upload;每项要按 schema/后端能力拆 smoke,不只显示文案 |
|
|
|
|
|
|
| E28 | TODO | 参考 Tiptap floating toolbar 扩展 | 对齐 floating toolbar:Improve/AI、TurnInto、bold/italic/underline/strike/code、image floating、link popover、text color、superscript/subscript、text align、indent/outdent;当前仅覆盖基础行内样式与颜色入口,真实写入需补齐 |
|
|
|
|
|
|
| E29 | TODO | 参考 Tiptap drag context menu 扩展 | 对齐 drag context:copy to clipboard、copy anchor link、reset formatting、Ask AI、ColorMenu、TableAlign/Fit/Clear、TOC show title、image download、delete;当前块菜单仍有多项静态或缺失 |
|
|
|
|
|
|
| E30 | TODO | 参考 Tiptap 表格/图片/TOC 节点 | 对齐 TableKit/TableHandle/TableSelectionOverlay/ImageUpload/Image floating/TOC sidebar;本地 `leptos-tiptap` crate 当前 full feature 只到 image/link/highlight/youtube,表格、数学、emoji、mention、TOC、协作光标等需按架构另列能力边界 |
|
|
|
|
|
|
| E31 | TODO | 参考 Tiptap 节点级样式扩展 | 对齐 NodeBackground、NodeAlignment、Indent、ListNormalization、UniqueID/anchor;当前有 text-align/color/highlight 的局部能力,块背景、缩进结构、锚点复制和列表规范化需补 smoke 与真源映射 |
|
2026-04-30 16:18:54 +08:00
|
|
|
|
|
|
|
|
|
|
## 9. Phase F:Page Aggregate 和命令边界
|
|
|
|
|
|
|
|
|
|
|
|
| ID | 状态 | 任务 | 验收要点 |
|
|
|
|
|
|
| --- | --- | --- | --- |
|
|
|
|
|
|
| F1 | TODO | 标题单一真源 | 标题修改后 breadcrumb、sidebar、file tree、document title 同步 |
|
|
|
|
|
|
| F2 | TODO | 正文保存命令 | 编辑器保存继续走 `page.body.save`,不把 Tiptap 临时 id 当持久真相 |
|
|
|
|
|
|
| F3 | TODO | 页面设置语义 | 设置项进入 `page-option-semantics` 和 editor runtime,不做只保存不消费的假功能 |
|
|
|
|
|
|
| F4 | TODO | 页面树命令 | 新建、重命名、移动、归档仍沿 `tree.*`;菜单入口不直接操作本地临时数组 |
|
|
|
|
|
|
| F5 | TODO | 引用语义 | 页面引用、块引用、嵌入引用先保留类型边界,不降级成普通 URL |
|
|
|
|
|
|
|
|
|
|
|
|
## 10. 每轮收尾
|
|
|
|
|
|
|
|
|
|
|
|
每完成一个 ID,必须补齐:
|
|
|
|
|
|
|
|
|
|
|
|
- Wolai 截图路径:`TODO`
|
|
|
|
|
|
- 本地截图路径:`TODO`
|
|
|
|
|
|
- smoke / 测试命令:`TODO`
|
|
|
|
|
|
- 主线程复核结论:`TODO`
|
|
|
|
|
|
- 剩余差异:`TODO`
|
|
|
|
|
|
|
|
|
|
|
|
如果出现新的可复用失败模式,同步更新 `/home/lix/.codex/skills/wolai-aline/references/failure-patterns.md`。
|