Files
mnote/.codex/reasonix-tasks/2026-05-21-worker-c-onlyoffice-local-save-callback-contract.md
T
lix-2026 eba1010191 fix local office resource editing
- add local-folder OnlyOffice sign/callback writeback and edit-tab handling

- align main resource tabs, attachment edit menu, slash isolation, and filetree context behavior

- record Sidex/Hermes gap reviews and Reasonix task checklists
2026-05-21 05:40:06 +08:00

66 lines
2.2 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.
# Reasonix Worker COnlyOffice local-folder callback 保存契约
你是编码 worker,但本任务优先做设计与最小安全实现评估。你不独占代码库,可能有其他 worker 同时修改不同文件;不要回滚、覆盖或清理他人的改动。
## Project Root
`/mnt/Data1T/mnote`
## 背景
详见:
- `bugs/05-editor-mainline/process/2026-05-21-office-edit-sign-plugin-gap-review-v1.md`
- `bugs/05-editor-mainline/process/5-36-onlyoffice-local-edit-save-callback-contract-v1.md`
ONLYOFFICE 官方口径:callback `status === 2``status === 6` 时,后端需要下载 `body.url` 并写回文件,成功返回 `{ "error": 0 }`。当前 `mnote-web` callback 代理 legacy Nextlocal-folder 写回没有闭环。
## Ownership
你负责:
- 优先更新 `bugs/05-editor-mainline/process/5-36-onlyoffice-local-edit-save-callback-contract-v1.md`
- 如判断安全且改动小,可修改:
- `rust/crates/mnote-web/src/routes/onlyoffice.rs`
- `rust/crates/adapter-onlyoffice/src/lib.rs`
- 相关单测
不要修改:
- `rust/crates/mnote-web/src/ssr/pages/layout.rs`
- ACP / Hermes 相关文件
## 任务
1. 梳理当前 callback 能否定位 local-folder 原文件。
2. 明确实现 local writeback 还缺哪些输入:rootUri、relative path、workspace/source kind、session。
3. 如果现有 URL 参数已经足够安全定位文件,则实现最小 status 2/6 下载写回。
4. 如果现有输入不足,先不要硬写实现;更新 checklist,明确缺口,并建议 Worker B 的编辑入口保持 guard。
## 必须满足的安全条件
- 写回路径必须落在当前 local root allowed roots 内。
- status 非 2/6 不写文件并返回 `{ "error": 0 }`
- 下载 URL 必须经过现有 OnlyOffice internal URL rewrite 逻辑或等价安全处理。
- 不允许从 assetId 字符串直接拼任意绝对路径写入。
## 验收命令
如改代码,请至少运行:
```bash
cargo test -p mnote-web onlyoffice_callback -- --test-threads=1
```
如果只更新设计,也请说明为什么本轮不应实现。
## 最终输出
在 final 中列出:
- 修改文件
- 是否实现代码,若未实现说明阻塞输入
- 安全边界判断
- 运行过的命令和结果
- 未完成项或风险