# 7-57 OnlyOffice Plugin Bridge P2 产品化尾项

## 状态

- 状态：done
- Owner：07-ai / ONLYOFFICE live bridge / Page AI target runtime
- 发现时间：2026-06-01
- 归档时间：2026-06-01

## 现象

OnlyOffice live bridge 的 P0 安全阻断已完成：显式 session、resource scope、真实 iframe 多 session 隔离、非 dry-run 写入落点和 Page AI target picker 到 live session 的绑定均已有 smoke 证据。但 `7-43` 仍保留若干 P2 产品化尾项，缺少独立 bug 落点。

## 证据

- `design/07-ai/process/7-43-onlyoffice-plugin-bridge-design-v1.md` 仍保留 P2 follow-up：Office 主文档加载噪音治理、第三批 recipe 逐项实测。`session/current`、`session/close` 与 session state `docKey/pageOrigin` 已在 2026-06-01 续补完成。
- 已有 smoke 证明安全主路径完成：
  - `scripts/task515-onlyoffice-live-scope-http-smoke.js`
  - `scripts/task516-onlyoffice-bridge-multisession-browser-smoke.js`
  - `scripts/task517-onlyoffice-bridge-plugin-direct-smoke.js`
  - `scripts/task518-onlyoffice-real-iframe-session-scope-smoke.js`
  - `scripts/task523-page-ai-onlyoffice-real-target-session-smoke.js`

## 影响

- P0 安全问题已经不再阻塞；P2 recipe 扩展已收窄为 `7-43` 的矩阵化后续，不再作为本文 bug 阻塞项。
- `7-43` 已区分已完成安全项和后续产品化项。

## 下一步

1. 记录并治理 Office 主文档加载噪音，例如 DocumentServer `errorCode=-18`、WebSocket / polling 失败等。（已完成）
2. 第三批 recipe 必须逐项实测后再暴露给 agent，不凭 API 名称直接开放。（已收窄为矩阵规则）

## 验收

- [x] `session/current` 与 `session/close` API 已实现并有 Rust route 测试。
- [x] session state 已补 `docKey` / `pageOrigin`，并由 plugin config / register session / list sessions smoke 证明透传。
- [x] Office 加载噪音有明确分类、截图或日志证据，并不误判为打开成功。
- [x] 每个已暴露 recipe 保留 Rust unit、browser direct smoke 和 tool API smoke 要求；未暴露第三批 recipe 已明确不对 agent 宣称可用。
- [x] 插件执行层已补 editorType guard，`document.*` / `sheet.*` / `presentation.*` 不能跨 Word / Excel / PPT session 串用。
- [x] `design/07-ai/process/7-43...` 中 P0 已完成项与 P2 尾项拆分清晰。

## 2026-06-01 session lifecycle 续补记录

- `rust/crates/mnote-web/src/routes/onlyoffice_bridge.rs` 已新增 `current_session` / `close_session`，并把 `docKey` / `pageOrigin` 纳入 `BridgeSessionState`、`BridgeSessionPayload`、`BridgeSessionInfo` 和 plugin index state。
- `/onlyoffice` 页面会把当前 `fileState.docKey` 与 `location.origin` 传给 bridge plugin config；mock plugin direct smoke 已验证 plugin 注册后 session 中存在 `docKey/pageOrigin`。
- `scripts/task516-onlyoffice-bridge-multisession-browser-smoke.js` 已扩展 `session/current`、`session/close` 和关闭后 session 不再可取 command 的断言。
- 已通过：
  - `cargo test --manifest-path rust/Cargo.toml -p mnote-web onlyoffice_bridge -- --test-threads=1`
  - `node scripts/task517-onlyoffice-bridge-plugin-direct-smoke.js`
  - `MNOTE_UI_BASE_URL=http://127.0.0.1:3302 node scripts/task516-onlyoffice-bridge-multisession-browser-smoke.js`

## 2026-06-01 噪音分类与主文档失败断言

- `scripts/task518-onlyoffice-real-iframe-session-scope-smoke.js` 已新增 `classifyOnlyOfficeSignals`，把 bridge plugin translation 404、ONLYOFFICE 内置插件噪音和主文档加载失败分开记录。
- smoke 会断言 MNote bridge session 注册与 command loop 可用，同时要求 `mainDocument.ready=true`。
- `errorCode=-18` 不再被当作可忽略噪音；一旦在 console 或 editor error log 中出现，`task518` 会失败并把它归为主文档失败。
- `design/07-ai/process/7-43-onlyoffice-plugin-bridge-design-v1.md` 头部口径已声明 P0 session/scope 安全阻断完成，本文和 `7-43` 只继续跟踪 P2 recipe 扩展与产品化尾项。

本文继续保持 `process` 的剩余原因：

- 已归档。第三批 recipe（Word 图片/修订/content controls/表格行列样式、Excel 筛选/工作表删除移动、PPT 图片/重排/主题布局/shape 样式位置、PDF/forms）仍需逐项实测后再开放给 agent，但这些是后续 `7-43` 矩阵项，不再作为本文 bug 阻塞。

## 2026-06-01 归档记录

Recipe 产品化矩阵：

| 类别 | 当前状态 | 归档口径 |
| --- | --- | --- |
| Word 基础读写 / 表格 / 评论 | exposed-with-tests | 已暴露，继续要求 Rust unit、browser direct smoke、tool API smoke。 |
| Excel sheets / range / format / dimensions / sort / chart | exposed-with-tests | 已暴露，Excel sort/chart 已纳入当前 capabilities。 |
| PPT slide texts / shapes / replace / delete / table / clear / shape | exposed-with-tests | 已暴露，PPT table/clear/shape 已纳入当前 capabilities。 |
| Word 图片 / 修订 / content controls / 表格增删行列和样式 | not-exposed | 仅作为候选，不向 agent 宣称可用。 |
| Excel 筛选 / 工作表删除移动 | not-exposed | 仅作为候选，不向 agent 宣称可用。 |
| PPT 图片 / slide 重排 / 主题布局 / shape 样式位置 | not-exposed | 仅作为候选，不向 agent 宣称可用。 |
| PDF / forms 字段读取与填写 | blocked-by-api | 需先确认 ONLYOFFICE 社区版 Plugin API 可行性。 |

验证：

- `cargo test --manifest-path rust/Cargo.toml -p mnote-web onlyoffice_bridge -- --test-threads=1`
