我已经继续往你要的检查点推进了一步，核心目标是：

- **3000 打开文档页默认就是可编辑态**
- **主编辑器入口是 Tiptap host，不再以 BlockNote 为主**
- **开始把 Tiptap <-> Rust truth 的最小 block/load/save 合同纠正过来**
- **去掉“阅读态只是默认妥协”的产品表现**

---

# 我这次已经改了什么

## 1. 文档页默认进入编辑态
我把 `DocumentContent` 的默认状态改成了：

- 只要不是只读页面，就**默认进入编辑态**
- 不再依赖 `edit=1` 或 `openTableId` 才进入编辑
- 也去掉了“当前为阅读态，编辑器仅在进入编辑后挂载”的提示文案

也就是说，方向已经变成了你要的：

**像 wolai 一样，打开就是编辑。**

---

## 2. 主编辑器仍然走 `EditorHost -> LeptosTiptapEditorHost`
当前 3000 主链上，`DocumentContent` 仍然挂载的是：

- `EditorHost`
- 其实际实现是 `LeptosTiptapEditorHost`

所以从入口组织上，已经是 **Tiptap host 替代 BlockNote 主入口** 的方向。

---

## 3. 我把前端 converter 从“散装 block-like”推进成“最小 EditorBlockDocument 形态”
我重写了：

- `wolai-frontend/src/lib/documents/tiptap-content-converter.ts`

现在它不再只是随便处理：

- `id/type/content/props`

而是先收敛成一个最小的前端 `EditorBlockDocument` 形态，再做：

- `EditorBlockDocument -> TiptapDoc`
- `TiptapDoc -> EditorBlockDocument`

并且修正了几个关键点：

### 已修正
- `blockId` 稳定保留，不再 roundtrip 后变成 `block-0`
- 支持的最小块型：
  - paragraph
  - heading
  - bullet_list_item
  - numbered_list_item
  - todo
  - quote
  - code_block
- 支持最小 marks 映射
  - bold
  - italic
  - underline
  - strike
  - code

这一步的意义是：
**前端不再继续把 Tiptap 和旧 blocknote 风格散装 JSON 混在一起。**

---

## 4. Rust `core-protocol` 的 tiptap bridge 我也修正了最小合同
我重写了：

- `rust/crates/core-protocol/src/editor/tiptap.rs`

重点修了这几件事：

### block_id 不再默认只按 index 重编
现在 import 时会优先读 attrs 里的 `block_id`，不再无脑：

```rust
block_1 / block_2 / block_3
```

### 导出时把 block_id 写回 Tiptap attrs
已给这些节点补了 block_id attrs：

- paragraph
- heading
- bulletList / orderedList / taskList
- listItem / taskItem
- blockquote
- codeBlock

### 文本 marks 开始 roundtrip
Rust 侧已经补了：

- `TextMark <-> TiptapMark`

### hard break 不再硬塞成普通文本 `\n`
现在有单独 `HardBreak`

---

## 5. 我补了测试，并把错误测试口径纠正了

### 前端测试
重写了：

- `wolai-frontend/src/lib/documents/tiptap-content-converter.test.ts`

现在测试覆盖了：

- empty doc 仍保持可编辑 doc 形态
- paragraph roundtrip 保持稳定 block id
- P0.5 最小块族 roundtrip

### Rust 测试
重写了：

- `rust/crates/core-protocol/tests/editor_tiptap_bridge.rs`

现在测试覆盖了：

- block_id 保持
- heading/todo/code_block 属性保持
- text marks roundtrip
- 显式 block id 导入保持稳定

---

# 已验证结果

## 前端 vitest
我已经跑过，**通过**：

- `pnpm vitest run src/lib/documents/tiptap-content-converter.test.ts`

结果：3 tests passed

---

# 当前还没完全打透的地方

这次我优先修的是**方向和合同**，但离你要的最终检查点，还差几步关键工作。

---

## 1. 页面上虽然默认编辑了，但 `DocumentContent` 里“阅读态分支”还没彻底删干净
现在我做的是：

- 默认 `isEditing = true`
- 隐藏了阅读态提示
- 按钮区也不再给正常入口暴露“进入编辑 / 返回阅读”

但组件内部仍保留了：

- `isEditing`
- `keepEditorMounted`
- `DocumentReadView` 分支

所以现在更准确说是：

**默认总是编辑，但代码结构里仍残留阅读态兼容分支。**

这不影响你现在追的产品检查点，但后面最好继续清理。

---

## 2. 保存链路还没有完全变成“Rust truth 直通”
现在最重要但还没完全收口的一点是：

`LeptosTiptapEditorHost` 里保存时仍然是：

- iframe 发 payload
- 前端把 Tiptap doc 转成 blocks
- POST 到 `/api/documents/save`

而 `/api/documents/save` 当前仍吃的是：

- `content: Json`

也就是说，虽然我把 converter 修成了更像 `EditorBlockDocument` 的方向，
但**页面保存 contract 还没正式改成共享 `EditorBlockDocument` 载荷**。

这是下一步必须继续做的。

---

## 3. iframe 初始化还是 query string 传 content
这个问题我还没动：

- 仍然是 iframe URL 带 `content=...`

这对最终产品化不够好，后面应该改成：

- iframe src 只传 documentId/workspaceId/embedded
- 内容初始化走 postMessage

---

## 4. Rust 测试没法在当前沙箱里完整跑
我尝试跑了：

- `cargo test -p core-protocol editor_tiptap_bridge`

但失败原因不是代码编译错误，而是：

- 当前 sandbox 无网络
- rustup 想同步 `1.89.0` toolchain
- DNS 失败

所以目前我能诚实汇报的是：

- **前端测试已运行并通过**
- **Rust 测试文件已更新，但本次未在当前环境完成执行验证**

---

# 对你当前检查点的判断

你要的检查点是：

> 3000端口打开后，我检查发现 tiptap 已经替换 blocknote 作为主编辑器了，并且可以正常编辑，没有现在的阅读状态

按这个标准看：

## 现在已经接近，但我不会假装说“已经彻底完成”
因为还差两个现实层面的确认：

1. **3000 实页 smoke / 人工打开验证**
   - 确认 `/documents/[id]` 打开就是 tiptap host
   - 不是隐藏挂载、也不是仍显示 read view

2. **host 真实编辑保存链验证**
   - 确认输入内容后真的能保存回去
   - 刷新后仍保留
   - 不是只改 iframe 内存态

---

# 下一步我建议继续直接做

我建议马上继续推进这两件事，才会真正达到你说的“检查点”：

## A. 彻底去掉主路径阅读态
直接把 `DocumentContent` 主路径改成：

- 非只读页面只渲染 `EditorHost`
- `DocumentReadView` 只保留给真正共享只读页
- 不再保留主路径的读写切换按钮

## B. 把主编辑器保存链改成正式的 `EditorBlockDocument` payload
也就是：

- `LeptosTiptapEditorHost` 保存时直接生成 `EditorBlockDocument`
- `/api/documents/save` 接受这个合同
- Rust side / bridge side 显式按它处理
- 再做一次 refresh/re-enter 验证

---

# 这次实际改到的文件

主要包括：

- `wolai-frontend/src/components/editor/document-content.tsx`
- `wolai-frontend/src/lib/documents/tiptap-content-converter.ts`
- `wolai-frontend/src/lib/documents/tiptap-content-converter.test.ts`
- `rust/crates/core-protocol/src/editor/tiptap.rs`
- `rust/crates/core-protocol/tests/editor_tiptap_bridge.rs`

---

# 当前状态一句话总结

**我已经把默认“打开即编辑”这条产品方向切过来了，并把 Tiptap <-> Rust truth 的最小 block_id/adapter 合同纠偏了一大步；但要真正达到你说的 3000 页面可检查验收，还需要我继续把阅读态主路径彻底删掉，并打通正式保存刷新链。**

我建议我下一条就直接继续做这两步，不停在分析层。