docs: 继续收口设计稿状态与主线口径

This commit is contained in:
lix-2026
2026-05-09 21:12:57 +08:00
parent ac7023988e
commit 3adc2b5e85
18 changed files with 110 additions and 66 deletions
@@ -1,4 +1,8 @@
# 3-11 [process] Rust Web Legacy Next Retirement Gates v1
# 3-11 [done] Rust Web Legacy Next Retirement Gates v1
> 状态说明:
> - 本稿定义的 default gate 已在当前主线代码中成立:`mnote-web``3000` ownerNext 仅保留 legacy compat/debug 边界
> - `MNOTE_WEB_ENABLE_LEGACY_NEXT_COMPAT` 默认关闭与 `task117` guard 已落地,故迁入 `done/`
## 目标
@@ -1,7 +1,11 @@
# 3-14 [process] Rust Web 双窗格可编辑文档壳方案 v1
# 3-14 [done] Rust Web 双窗格可编辑文档壳方案 v1
> 更新时间:2026-05-08
>
> 状态说明:
> - 本稿对应的双窗格文档壳、共享 session、事件流复用、URL 恢复与自动化 smoke 已完成,故迁入 `done/`
> - 下文第 2 节保留的是实现前问题基线;当前真实完成状态与验证证据以第 15-16 节为准
>
> 关联文档:
> - `/mnt/Data1T/mnote/design/03-rust-web/process/3-rust-web-long-term-architecture-v1.md`
> - `/mnt/Data1T/mnote/design/03-rust-web/process/3-3-rust-web-tree-realtime-event-stream-v1.md`
@@ -11,9 +15,17 @@
## 1. 结论
当前 `3000` 已经把“在右侧边栏打开”挂到了右键菜单和搜索提示上,但实际只发出了 `tree.page.open-right` 事件,还没有真正的右侧文档容器、窗格状态和多实例同步模型。
截至 2026-05-09,当前 `3000` 已经具备:
这一步不应该做成“再开一个完整页面”或“在右侧塞一个 iframe”,而应该在现有 `workspace shell` 内引入:
- 右侧 `secondary pane` 文档容器
- pane 状态模型与 URL 恢复
- 同文档双开共享 session 与即时同步
- tree live stream / local-folder 事件流复用
- 对应 Rust 单测与浏览器 smoke
本稿记录的是这条双窗格能力从问题定义到完成验收的收口过程。
最终实现没有做成“再开一个完整页面”或“在右侧塞一个 iframe”,而是在现有 `workspace shell` 内引入了:
- 双窗格文档宿主
- 可复用的文档 session 层
@@ -241,7 +241,7 @@
- [ ] `Sidebar` 仍然是超大客户端组件
- [sidebar.tsx](/mnt/Data1T/mnote/wolai-frontend/src/components/sidebar/sidebar.tsx)
- [ ] 页面树 / 文件树虽然已统一协议,legacy Next 侧整体执行面仍主要在客户端;当前 Rust Web 3000 SSR 壳也尚未直接消费 live EventSource
- [ ] 页面树 / 文件树虽然已统一协议,legacy Next 侧整体执行面仍主要在客户端;当前 Rust Web 3000 SSR 壳已接入 live EventSource,但 live cache、preferred snapshot 与补偿链还未完全统一
- [x] `buildDocumentTree(...)` 仅剩兼容 helper 与旧单测,不再位于树域主路径
- [ ] 主布局仍然默认常驻挂载 Sidebar
- [ ] 还不能叫“服务端输出 + 局部 island”,现在更像“服务端首包 + 超大客户端壳”
@@ -1,12 +1,24 @@
# 3-13 [process] Rust Web 本地 Markdown GFM AST 解析器迁移方案 v1
> 更新时间:2026-05-08关联:`/mnt/Data1T/mnote/rust/crates/mnote-web/src/routes/local_folder_source.rs/mnt/Data1T/mnote/rust/crates/mnote-web/src/routes/web_shell.rs/mnt/Data1T/mnote/design/04-tree-domain/done/4-21-local-folder-convex-unified-tree-source-v1.md/mnt/Data1T/mnote/design/04-tree-domain/done/4-22-local-folder-convex-unified-tree-execution-checklist-v1.md`
> 更新时间:2026-05-09
>
> 关联:
> - `/mnt/Data1T/mnote/rust/crates/mnote-web/src/routes/local_folder_source.rs`
> - `/mnt/Data1T/mnote/rust/crates/mnote-web/src/routes/local_markdown_parser.rs`
> - `/mnt/Data1T/mnote/rust/crates/mnote-web/src/routes/web_shell.rs`
> - `/mnt/Data1T/mnote/design/04-tree-domain/done/4-21-local-folder-convex-unified-tree-source-v1.md`
> - `/mnt/Data1T/mnote/design/04-tree-domain/done/4-22-local-folder-convex-unified-tree-execution-checklist-v1.md`
## 1. 结论
当前本地 Markdown 渲染链路`mnote-web` 自己写的轻量 parser,不是 VSCode 解析器,也不是成熟 GFM AST pipeline。它已经被补到能覆盖一部分常见语法,但本质上仍是“自己造轮子”,后续维护成本会持续上升。
当前本地 Markdown 渲染链路已经进入“读侧 AST、写侧仍在过渡”的 partial 状态:
本方案建议把本地 `.md` 读取侧迁移到 Rust 侧成熟 GFM AST 解析器,再把 AST 映射到现有 `PageAggregate` / Tiptap bridge。当前手写 parser 只保留为过渡层,不再作为长期语义来源。
- 读侧已新增 Rust `local_markdown_parser.rs`,并基于成熟 GFM AST 解析常见语法
- 写侧回 Markdown 仍主要依赖 `local_folder_source.rs` 里的手写规则
因此当前问题已经不再是“要不要迁到 AST”,而是“如何把剩余写侧与兼容补丁继续收口”。
本方案当前聚焦的是:继续把 AST 映射到现有 `PageAggregate` / Tiptap bridge,并让剩余手写 parser/回写逻辑逐步退回过渡层,不再作为长期语义来源。
## 2. 当前问题
+1 -1
View File
@@ -300,7 +300,7 @@ MNOTE_UI_BASE_URL=http://127.0.0.1:3000 node scripts/task127-rust-web-mindmap-ke
- Modify: `rust/crates/mnote-web/src/routes/gateway.rs`
- Modify: `rust/crates/mnote-web/src/config.rs`
- Modify: `scripts/task117-next-retirement-guard.js`
- Create or Modify: `design/03-rust-web/process/3-11-rust-web-legacy-next-retirement-gates-v1.md`
- Create or Modify: `design/03-rust-web/done/3-11-rust-web-legacy-next-retirement-gates-v1.md`
**Checklist**
- [x] 盘点 `routes/mod.rs` 中所有 `/api/compat/next`、fallback proxy、legacy debug route 的入口和调用方。
@@ -1,6 +1,6 @@
# 3 [process] Rust Web 长期架构方案 v1
> 更新时间:2026-04-16
> 更新时间:2026-05-09
>
> 相关文档:
> - `/mnt/Data1T/mnote/ARCHITECTURE.md`
@@ -26,7 +26,7 @@
- 前端哪些部分应该退出当前重 React 壳
- `axum``Leptos` 这类 Rust Web 方案是否值得采用
- `mnote-cli` 应如何成为唯一长期 agent 执行面
- `BlockNote` 应如何被隔离到最后处理
- 默认主编辑器已经切到页面内 `leptos-tiptap` island 后,剩余重编辑兼容链应如何继续收口
---
@@ -58,17 +58,17 @@
- **Web 承载层:`axum`**
- **页面渲染模型:`Leptos Islands`**
- **AI 执行面:`mnote-cli`**
- **最后保留的重前端孤岛:`BlockNote`**
- **最后保留的重编辑兼容孤岛:少量编辑器 runtime(当前默认主编辑器已是页面内 `leptos-tiptap` island`BlockNote` 仅保留为 fallback / 对照链)**
一句话概括:
> **mnote 的长期正确方向不是“Next 外壳上继续打补丁”,也不是“只把 API 改成 Rust”,而是“Rust 内核 + Rust Web 壳 + server-first 页面 + 少量交互孤岛”。**
### 2.3 `BlockNote` 不是第一刀,而是最后一刀
### 2.3 重编辑兼容链不是第一刀,而是最后一刀
当前真正难替代的主要是:
- `BlockNote`
- `BlockNote` fallback、转换链和剩余兼容保存链为代表的重编辑 runtime
而下面这些能力,从长期看都可以先退出当前大前端壳:
@@ -81,7 +81,7 @@
所以长期路线应当是:
> **先把能 Rust 化、能 server-first 化、能 island 化的东西全部迁走,最后再处理 `BlockNote`。**
> **先把能 Rust 化、能 server-first 化、能 island 化的东西全部迁走,最后再处理重编辑兼容链。**
---
@@ -353,12 +353,14 @@ Leptos Islands 很适合承接下面这类长期目标:
对应的执行细节、逐阶段清单和可验证项,当前应先以 `/mnt/Data1T/mnote/design/01-05-current-priority-overview.md` 确认优先级;`/mnt/Data1T/mnote/design/03-rust-web/process/3-1-rust-web-long-term-checklist-v2.md` 保留为 Rust Web 分阶段全景参考。
### 8.4 当前已落地的最小里程碑(2026-04-16
### 8.4 当前已落地的最小里程碑(2026-05-09
到目前为止,长期路线里已经有几条可以被源码直接证明的最小里程碑:
- Rust Web 承载层已经有 `mnote-web` crate 骨架`router / middleware / request context / SSE / WS / AI bridge` 的主接缝已立住;历史上这条线曾经包含 Hermes bridge
- 文档页已经从“默认先进编辑器”改成“先阅读、后编辑”:服务端先读 `meta + content`,阅读态单独渲染,`BlockNote` 只在进入编辑态后挂载
- `mnote-web` 已经不是只停留在 crate 骨架`3000` 公开入口已由 Rust Web 主壳承接,`3104` 已退到仅显式 debug / internal 边界
- Rust Web 主壳已经接入 `/api/tree/events` snapshot / delta / resync consumer,双 pane 也已复用同一条 tree realtime 主链,而不是每个页面壳各自维护第二条流
- 文档页读取已经进入 Rust-first `page aggregate` 过渡态:`/api/documents/page` 优先消费 Rust `/api/page-aggregate/:id``mnote.page_aggregate.v1` snapshot,失败时才回退 TS builder。
- 默认主编辑区已经切到页面内 `leptos-tiptap` island;阅读态、页头、页面设置和页面内 AI 面板都在 `3000` 主壳上继续收口,`BlockNote` 只保留为 fallback / 对照链。
- Sidebar 已形成“服务端首包 + 客户端局部 island”的最小边界,导航数据聚合契约不再散落在布局层。
- SearchPalette 与页面级 AI 面板都已经收成轻 host + 按需 runtime island,重量运行态不再默认跟随主布局常驻。
- Global AI 继续保留为实验入口,但不再回到 app layout 主链,避免长期路线再次滑回“全局大面板常驻”模式。
@@ -1,7 +1,11 @@
# 5-10 [process] Wolai 页面设置与 AI 交互壳对齐方案 v1
# 5-10 [done] Wolai 页面设置与 AI 交互壳对齐方案 v1
> 更新时间:2026-05-06
>
> 状态说明:
> - 本稿对应的页面设置 `popover`、页面 AI `drawer`、入口位置与最小接线方案已在当前 `mnote-web` 文档壳中落地,故迁入 `done/`
> - 本稿中的 deferred 项继续由后续独立任务推进,不影响这一轮“页面设置 + 页面 AI 交互壳”完成判定
>
> 关联文档:
> - `/mnt/Data1T/mnote/ARCHITECTURE.md`
> - `/mnt/Data1T/mnote/design/01-05-current-priority-overview.md`
@@ -348,7 +352,7 @@ Wolai 里页面设置和 AI 的第一感受,首先是:
负责。
因此本轮入口层优先落在 React compat 主路径,而不是先去大改 Rust SSR 占位按钮
因此本轮入口层最终落在当前 `mnote-web` / Rust SSR 文档壳主路径,而不是回到 React compat 交互 owner
首批调整建议:
@@ -358,9 +362,9 @@ Wolai 里页面设置和 AI 的第一感受,首先是:
理由:
- 当前现网入口真正在这里
- 直接改这里可以最小改动验证体验
- 先把交互壳对齐,再决定 Rust SSR 侧是否同步收口
- 当前 `3000` 主壳 owner 已是 `mnote-web`
- 页面设置与页面 AI 的入口、容器和状态合同已经在 Rust SSR 文档壳中集中落地
- 继续把入口回接到 React compat 会重新制造双 owner 歧义
## 7.2 页面设置面板组件
@@ -437,15 +441,15 @@ Wolai 里页面设置和 AI 的第一感受,首先是:
Rust `mnote-web` 当前在文档壳中已有顶栏占位按钮与右下角浮动按钮。
本轮不把 Rust SSR 作为首批真实交互 owner,原因是:
当前实现已经把 Rust SSR 作为这一轮真实交互 owner,原因是:
- 当前现网文档页真实入口仍由 React compat 壳主导
- 先在 React compat 层做对入口与容器,风险更低
- 等行为稳定后,再决定是否把 Rust SSR 占位按钮收口到同一 contract
- 当前 `3000` 文档页主壳就是 `mnote-web`
- 页面设置与页面 AI 的入口、容器和状态合同已收口到同一份 Rust shell/runtime contract
- React compat 不再承担这一轮页面设置与页面 AI 的默认交互 owner
这意味着本轮的正确做法是:
这意味着本轮完成后的正确做法是:
> **先统一产品行为合同,再决定是否让 Rust SSR 与 React compat 共用同一套入口渲染。**
> **以 Rust SSR / `mnote-web` 文档壳作为默认行为 ownerReact compat 只保留兼容与过渡边界。**
---
@@ -1,9 +1,13 @@
# 5-11 [process] Wolai 页面设置与 AI 交互壳连续执行 checklist v1
# 5-11 [done] Wolai 页面设置与 AI 交互壳连续执行 checklist v1
> 更新时间:2026-05-06
>
> 状态说明:
> - 本清单覆盖的页面设置 A/B、页面 AI C、集成护栏 D 均已完成并有 `task160/161/162` 证据,故迁入 `done/`
> - `X1-X6` 属于明确 deferred 项,不构成这轮完成阻塞
>
> 本清单服务于:
> - `/mnt/Data1T/mnote/design/05-editor-mainline/process/5-10-wolai-page-settings-and-ai-surface-alignment-v1.md`
> - `/mnt/Data1T/mnote/design/05-editor-mainline/done/5-10-wolai-page-settings-and-ai-surface-alignment-v1.md`
>
> 执行口径继续统一服从:
> - `/home/lix/.codex/skills/wolai-aline/SKILL.md`
@@ -6,7 +6,7 @@
>
> 现在的问题不再是“这套模板能不能迁进来”,而是:
>
> **我们已经做出了一版 `leptos-tiptap` 编辑器,接下来应该从官方模板保留什么行为模型,并优先把它接入主编辑器。**
> **默认主编辑器已经切到页面内 `leptos-tiptap` island;当前问题转为:应该从官方模板保留什么行为模型,并优先把哪些能力继续收口到当前主编辑器主链。**
## 1. 修正后的总判断
@@ -14,7 +14,7 @@
这份文档只解决一个已经开始偏掉的问题:
> **当 `mnote` 决定继续采用 `Tiptap + leptos-tiptap` 作为主编辑器输入 runtime 时,如何避免把“过渡桥接层”误当成“Rust + Leptos 主线已经成立”。**
> **当 `mnote` 已经采用 `Tiptap + leptos-tiptap` 作为默认主编辑器输入 runtime 时,如何避免把剩余过渡适配层误当成“Rust + Leptos 主线已经完全成立”。**
当前需要纠偏的不是:
@@ -50,27 +50,26 @@
### 2.2 当前偏差也已经很明确
当前未提交改动里的主要偏差不是“换成了 `leptos-tiptap`”,而是:
当前需要继续纠偏的主要偏差不是“换成了 `leptos-tiptap`”,而是:
- 在真实文档页主链里,已经把 `BlockNoteEditor` 直接替成了新的 `EditorHost`
- 默认文档页主链虽然已经切到页面内 `leptos-tiptap` island
- `/mnt/Data1T/mnote/wolai-frontend/src/components/editor/document-content.tsx`
- 这个 `EditorHost` 当前又固定只挂 `leptos-tiptap`
- `/mnt/Data1T/mnote/wolai-frontend/src/components/editor/editor-host.tsx`
- 当前 host 的真实承载方式是 `iframe + postMessage + 8123 runtime + TS converter + 旧 /api/documents/save`
- `/mnt/Data1T/mnote/wolai-frontend/src/components/editor/leptos-tiptap-editor-host.tsx`
- 但仍保留 TS converter、fallback host、兼容保存链与部分 host/runtime 过渡层
- `/mnt/Data1T/mnote/wolai-frontend/src/lib/documents/tiptap-content-converter.ts`
- `/mnt/Data1T/mnote/wolai-frontend/src/components/editor/blocknote-editor.tsx`
这条线的问题不是“代码不能运行”,而是:
> **它把 `leptos-tiptap` 先落成了一个“跨 iframe 的外来 runtime”,而不是一个真正受 Rust truth 和 Leptos 页面模型约束的主编辑区。**
> **它虽然已经是页面内主编辑器,但剩余 fallback / adapter / 兼容保存链还没有完全退到过渡边界。**
### 2.3 当前最该回退的不是 Tiptap,而是默认主链切换方式
当前最该回退的是:
当前最该继续收口的是:
- **默认主文档页直接切到 `iframe host`**
- **把 TS converter + `/api/documents/save` 当成正式保存边界**
- **`documentEditorHost = leptos_tiptap` 提前写成事实默认值**
- **把 TS converter 继续降级为过渡适配层**
- **把 fallback host / 兼容保存链继续收回到非主路径**
- **让默认 `leptos-tiptap` 主链更多直接消费 Rust-first projection / command 边界**
当前不该回退的是:
@@ -133,12 +133,12 @@
| 项 | Wolai Hermes | 本地 `3000` | 后续处理 |
| --- | --- | --- | --- |
| 首屏入口 | owner 登录态直接显示 `Hermes` 正文页,标题、正文、页面树同屏 | 默认是聚合 / 预览壳,正文编辑器需点击 `打开当前页面` 才出现 | 拆成 P0/P1 独立任务;先用 smoke 固化“普通文档首屏直接进入正文体验”或明确产品降级 |
| 首屏入口 | owner 登录态直接显示 `Hermes` 正文页,标题、正文、页面树同屏 | `task130` 后已改为根页直接进入 document shell + editor island;历史上曾停留在聚合 / 预览壳 | 后续仅继续收口侧栏数据、视觉密度与 owner/published 状态差异 |
| 侧栏数据与选中态 | 真实空间树,当前页在 `个人 / 软件开发 / Hermes` 路径下,红色选中态明显 | anonymous 示例树,当前页为 `1111`,行密度和图标体系仍偏本地化 | Sidebar checklist 必须同时验视觉和真实 active path |
| 搜索入口 | 左侧放大镜可打开全局搜索;本轮 `Ctrl+K` 未稳定打开,`Ctrl+P` 在另一轮可 toggle | 顶栏搜索可打开;侧栏搜索曾修为 modal;`Ctrl+P` 可 toggle | 搜索任务不得只测一个入口;需记录每个入口、快捷键和 URL |
| 搜索控件 | modal 居中,遮罩、结果行、快捷键提示完整;switch 视觉可见 | modal 结构接近,`role="switch"` 可测;不同输入下结果为空或本地数据结果 | switch 默认状态必须同时记录截图和 `aria-checked`,结果态需拆数据差异与控件差异 |
| 搜索结果 | 输入 `Hermes` 命中页面和块,结果有红色高亮和路径 | 本地同词可出现空态或示例数据结果,取决于当前页面数据 | 建立固定本地 fixture 或 smoke 种子,不能用随机工作区数据验视觉 |
| 正文编辑区 | 首屏正文 `contenteditable=true`,标题也可编辑 | 首屏无可见编辑区;点击后出现 title textarea 与 `.tiptap.ProseMirror` | 文档画布任务必须先消除“打开当前页面”入口语义差异或显式记录降级 |
| 正文编辑区 | 首屏正文 `contenteditable=true`,标题也可编辑 | 当前已在首屏直接出现主编辑区;剩余差异转为标题区、正文密度与块交互细节 | 文档画布任务继续聚焦主编辑器体验,而不是首屏入口纠偏 |
| 编辑焦点风险 | Wolai 标题和正文均可编辑,测试输入曾误落到标题,已清理 | 本地输入 / 撤销可完成,但页面结构不同 | editable-test mode 前必须先断言焦点 block 类型,优先在正文末尾新建唯一测试块 |
| 块 hover | 正文块左侧出现轻量块控制入口,视觉很克制 | 本地显示 `+` 与拖拽/块句柄按钮,但位置、密度、内容列差异明显 | E2-E4 必须以截图和 hover 点位复核,不可只看按钮存在 |
@@ -357,7 +357,7 @@ mnote 当前差距:
- 当前本地文档页标题偏靠左且偏低,内容列与真实 Wolai 相比没有稳定对齐。
- 当前显示“个人空间 / 工作区首页”元信息和横向分割线,这不是 Wolai 普通文档页默认观感。
- 当前正文首块是“打开当前页面”链接,和目标 `Hermes` 的普通块 / 任务块 / 段落展示差异较大
- 历史上首屏正文首块是“打开当前页面”链接`task130` 之后这条差异已收口,当前重点转向主编辑区密度、块 hover 和 toolbar 细节
- 右下角绿色 AI 浮动按钮比 Wolai 更重,真实 Wolai 是更轻的 AI 方形入口和问号入口。
### 4.5 主编辑器块级体验
@@ -27,17 +27,16 @@
| 项 | 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 直接正文页不一致 |
| 首屏 | `/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` | 历史基线显示本地首屏曾停留在聚合/预览壳;该差异已由 `task130` 收口,当前保留为基线证据 |
| 搜索 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 渲染副本。
1. 搜索入口矩阵:Wolai 左侧搜索可打开,`Ctrl+K` 本轮未稳定;本地侧栏入口和快捷键要继续按 smoke 验证
2. 搜索结果数据Wolai `Hermes` 有真实结果,本地依赖当前工作区示例数据;后续需要固定 fixture 或种子
3. 编辑器测试焦点:写入前必须确认当前焦点在正文测试块,不在标题或 breadcrumb 渲染副本
### 2.1 task129 Phase A 执行记录
@@ -69,8 +68,7 @@ subagent 复测:
主线程截图复核结论:
- Wolai Hermes 为 owner 登录态,直接显示正文页和 `全网公开` 状态。
- 本地 `3000` 工作区可见,但首屏仍停留在聚合 / 预览入口,需要点击 `打开当前页面` 才进入正文
- `task129` 只证明取证工具链可用,不证明 UI 已对齐;后续首个实现任务应优先处理 `D9 普通文档首屏入口语义`
- `task129` 只证明取证工具链可用,不证明 UI 已对齐;其中暴露出的 `D9 普通文档首屏入口语义` 已在后续 `task130` 中收口
### 2.2 task130 D9 执行记录
@@ -3,7 +3,7 @@
> 更新时间:2026-04-22
>
> 上位依据:
> - `/mnt/Data1T/mnote/design/07-ai/process/7-phase7-ai-kernel-projection-plan-v2.md`
> - `/mnt/Data1T/mnote/design/old/07-ai/process/7-phase7-ai-kernel-projection-plan-v2.md`
> - `/mnt/Data1T/mnote/ARCHITECTURE.md`
> - `/mnt/Data1T/mnote/design/05-editor-mainline/process/5-6-page-aggregate-alignment-checklist-v1.md`
>
@@ -7,7 +7,7 @@
> - `/mnt/Data1T/mnote/design/01-tree-first-graph-kernel/process/1-tree-first-graph-kernel-v1.md`
> - `/mnt/Data1T/mnote/design/05-editor-mainline/process/5-5-page-aggregate-single-truth-alignment-v1.md`
> - `/mnt/Data1T/mnote/design/05-editor-mainline/process/5-6-page-aggregate-alignment-checklist-v1.md`
> - `/mnt/Data1T/mnote/design/07-ai/process/7-phase7-ai-kernel-projection-plan-v2.md`
> - `/mnt/Data1T/mnote/design/07-ai/process/7-phase7-ai-kernel-projection-plan-v4.md`
> - `/mnt/Data1T/mnote/design/07-ai/done/7-1-phase7-document-ai-minimum-loop-checklist-v1.md`
>
> 2026-05-05 追加说明:
@@ -43,7 +43,7 @@
- `ai_note node`
- `reference edge`
2. 只允许围绕**当前文档页**创建,不做跨页、跨工作区写链
3. 触发方式不是自然语言,不做自动推断,只允许页面 AI 面板里的固定按钮触发;该面板长期应只是 `mnote-cli` host
3. 触发方式不是自然语言,不做自动推断,只允许页面 AI host 暴露的固定动作触发;当前页面 AI 面板只是 `mnote-cli` host 的一个页面内入口
4. 点击按钮后直接创建,不走“先预览再确认”的两阶段流
5. `summary node` 默认单例覆盖更新;`ai_note node` 每次新建
6. 两者都落成**可编辑的页面型节点**
@@ -1,6 +1,6 @@
# 7 [process] mnote Kernel Phase 7 CLI-First 外置 Agent 统一执行面方案 v4
> 更新时间:2026-05-05
> 更新时间:2026-05-09
>
> 上位依据:
> - `/mnt/Data1T/mnote/ARCHITECTURE.md`
@@ -11,8 +11,8 @@
> - `/mnt/Data1T/mnote/design/05-editor-mainline/process/5-5-page-aggregate-single-truth-alignment-v1.md`
> - `/mnt/Data1T/mnote/design/05-editor-mainline/process/5-6-page-aggregate-alignment-checklist-v1.md`
> - `/mnt/Data1T/mnote/design/07-ai/done/7-1-phase7-document-ai-minimum-loop-checklist-v1.md`
> - `/mnt/Data1T/mnote/design/07-ai/process/7-phase7-ai-kernel-projection-plan-v2.md`
> - `/mnt/Data1T/mnote/design/07-ai/process/7-phase7-ai-kernel-projection-plan-v3.md`
> - `/mnt/Data1T/mnote/design/old/07-ai/process/7-phase7-ai-kernel-projection-plan-v2.md`
> - `/mnt/Data1T/mnote/design/old/07-ai/process/7-phase7-ai-kernel-projection-plan-v3.md`
>
> 本稿与前稿的关系:
> - `v2` 的价值仍然成立:它记录了文档页 AI 最小闭环已经真实完成
@@ -23,6 +23,8 @@
> - 文档页 AI 面板不再被视为独立 AI 编排主线
> - `openai-agents-python` 不再被视为长期默认主编排,而是一个可插拔外置 agent
> - Hermes、Codex、后续其他 agent,应统一通过 `mnote-cli` 接入
> - `3000` 上的页面内 AI host 已属于 Rust `mnote-web` 主壳;`/api/ai-agent/run` 只保留 CLI host / adapter 口径
> - 文档页 AI 上下文读取已优先消费 Rust `page aggregate` snapshot,旧 TS builder / 旧 sidecar 只保留 fallback / 对照语义
---
@@ -88,7 +90,7 @@
当前文档页 AI 最小闭环已经完成,这个事实不变:
- page aggregate 上下文读取
- Rust `mnote.page_aggregate.v1` snapshot 优先的页面上下文读取
- 标题改名与正文改写
- `openai-agents-python` sidecar
- `Hermes` fallback / 对照链
@@ -251,6 +253,8 @@ CLI-first 不等于没有产品内 AI UI。
> **CLI 的图形客户端。**
并且当前这些客户端默认都挂在 `3000` 的 Rust `mnote-web` 主壳里,而不是重新长出第二套产品内执行面。
### 6.2 页面语义仍然保留
虽然主执行面转到 CLI,但下面这些产品语义仍要保留:
@@ -488,7 +492,7 @@ CLI 要能明确限制:
- 已核对:该文件明确写入“长期执行面应收口到 `mnote-cli`Web 只作为 CLI host / client`openai-agents-python` / Hermes / Codex 只作为可插拔外置 agent”。
- [x] 检查 legacy Next retirement gate 的 AI route 口径。
- 文件:`/mnt/Data1T/mnote/design/03-rust-web/process/3-11-rust-web-legacy-next-retirement-gates-v1.md`
- 文件:`/mnt/Data1T/mnote/design/03-rust-web/done/3-11-rust-web-legacy-next-retirement-gates-v1.md`
- 通过标准:`/api/ai-agent/run` 只能写成 CLI host / adapter 兼容层,结构化写入必须经 Rust runtime。
- 已核对:该文件明确写入 `/api/ai-agent/run` 长期应降为 `mnote-cli` host / adapter,结构化写入必须经 Rust runtime,外置 agent 不得拥有第二执行面。
@@ -3,7 +3,7 @@
> 更新时间:2026-04-22
>
> 状态说明:
> - 本稿已被 `/mnt/Data1T/mnote/design/07-ai/process/7-phase7-ai-kernel-projection-plan-v2.md` 覆盖
> - 本稿已被 `/mnt/Data1T/mnote/design/old/07-ai/process/7-phase7-ai-kernel-projection-plan-v2.md` 覆盖
> - 保留在 `design/old/` 仅作为上一轮判断稿与历史参考,不再作为当前执行口径
>
> 当前主线依据:
@@ -1,7 +1,12 @@
# 7 [process] mnote Kernel Phase 7 AI 编排与 Kernel Projection 实施计划 v2
# 7 [process][recycle] mnote Kernel Phase 7 AI 编排与 Kernel Projection 实施计划 v2
> 更新时间:2026-04-22
>
> 状态说明:
> - 本稿记录的是 `openai-agents-python` 作为过渡主链时期的 `Phase 7` 执行口径
> - 当前长期方向已被 `/mnt/Data1T/mnote/design/07-ai/process/7-phase7-ai-kernel-projection-plan-v4.md` 覆盖
> - 因此本稿迁入 `design/old/`,仅保留为历史过渡基线
>
> 当前主线依据:
> - `/mnt/Data1T/mnote/ARCHITECTURE.md`
> - `/mnt/Data1T/mnote/design/01-05-current-priority-overview.md`
@@ -1,4 +1,4 @@
# 7 [process] mnote Kernel Phase 7 AI 与 CLI 外置 Agent 边界实施方案 v3
# 7 [process][recycle] mnote Kernel Phase 7 AI 与 CLI 外置 Agent 边界实施方案 v3
> 更新时间:2026-05-05
>
@@ -11,7 +11,7 @@
> - `/mnt/Data1T/mnote/design/05-editor-mainline/process/5-5-page-aggregate-single-truth-alignment-v1.md`
> - `/mnt/Data1T/mnote/design/05-editor-mainline/process/5-6-page-aggregate-alignment-checklist-v1.md`
> - `/mnt/Data1T/mnote/design/07-ai/done/7-1-phase7-document-ai-minimum-loop-checklist-v1.md`
> - `/mnt/Data1T/mnote/design/07-ai/process/7-phase7-ai-kernel-projection-plan-v2.md`
> - `/mnt/Data1T/mnote/design/old/07-ai/process/7-phase7-ai-kernel-projection-plan-v2.md`
>
> 本稿与 `v2` 的关系:
> - `v2` 记录的是文档页 AI 最小闭环与 `openai-agents-python` sidecar 的主线收口