---
name: rebuttal
description: 回复期刊审稿意见(修回)。把编辑决定信 / 审稿人意见变成逐点回复信(point-by-point response)+ 稿件修改清单 + 修回 cover letter。当用户说回复审稿意见、修回、大修 / 小修回复、审稿人问题怎么答、写 response letter / rebuttal、按审稿意见改稿时使用。
---

# 审稿意见回复(修回)

把决定信 / 审稿意见变成可提交的修回包:**摄取材料 → 拆条分诊 → 对齐 spec → 逐条策略确认 → 先改稿后写信 → QA + 渲染**。核心信条:**编辑扫一眼要能看到三件事 —— 你同不同意、改了什么、改在哪**;凡是拿不出真实证据的回复,一律占位标注,不编。

进度展示建议:用 `task_progress` 标记「摄取材料 / 拆条分诊 / spec 对齐 / 策略确认 / 逐审稿人起草 / QA 渲染」等关键阶段。

## 边界(先划清,免得和别的 skill 撞)

| 与谁区分 | 边界 |
|---|---|
| vs `paper` | paper **从零写投稿稿**;rebuttal 处理**投出去之后收到的审稿意见**。paper 阶段六的投稿件(首投 cover letter)也不归这里 —— 这里只管修回 |
| vs `review` | review 是**替作者审自己的稿**(审稿人视角挑毛病);rebuttal 是**答别人审出来的毛病**。修回中要大改某章时可调 review 深审该章 |
| vs `research`/`documents` | 审稿人要求补引文时,引文的真实性核验接到它们头上(复用 paper 的 citation_verify 三层协议) |

**何时不用**:还没投稿 / 没有审稿意见→paper 或 review;申诉拒稿决定(appeal)→ 不是修回,流程不同,明确告知用户本 skill 只处理修回,申诉信可给建议但不套本流程。

## 资源

下面所有路径都相对 **`<skill_dir>`** —— `load_skill` 返回头里的 `[skill=rebuttal, dir=<绝对路径>]`。

**先读(always)**:
- `references/comment_taxonomy.md` —— 意见分类(8 类)× 严重度(4 档)× 动作标签(12 个)× readiness 状态

**按需加载**:
- `references/tone_and_stance.md` —— 语气与立场:同意 / 部分同意 / 反驳的措辞模式 + 中文作者备注转换表(阶段三起草前必读)
- `references/difficult_cases.md` —— 疑难案例:做不了的实验 / 审稿人事实错误 / 两个审稿人打架 / 统计大修 / 合规缺件(分诊遇到时读)

**模板**:
- `templates/spec.md` —— 修回 spec 固定字段(复制到 task 级 spec 文件)
- `templates/response_letter.md` —— 逐点回复信骨架

**渲染**(平台渲染层,别手搓):
```bash
python /sandbox/rendering/render.py --profile paper --format docx <task_dir>/response/ --lang en -o <task_dir>/<稿件短名>-response.docx
```

## 阶段零:摄取材料

修回至少需要两样:**审稿意见**(决定信邮件全文最好,退而求其次是逐条意见)+ **原稿**。用户给 docx / pdf / 邮件文本 → 先转 markdown:

```bash
markitdown <path>/decision_letter.eml  -o <task_dir>/source/decision.md
markitdown <path>/manuscript.docx      -o <task_dir>/source/manuscript.md
```

某 PDF 转出为空 / 近空 = 扫描件(纯图无文本层)→ 改用 `read_document` 工具 OCR:`read_document(document='<path>/xxx.pdf', save_md='source/xxx.md')`,产物同样是 md。

缺原稿也能做分诊和回复框架,但**改稿说明只能占位**;主动向用户要。用户若有自己的逐条应对腹稿(中文随手记也行),一并收进 `source/notes.md` —— 这是后面动作映射的关键输入。

## 阶段一:拆条 + 对齐 spec

1. **解析决定信**:提取 稿件号 / 期刊 / 决定类型(minor / major / revise-and-resubmit / transfer)/ 编辑自己提的要求 / 修回 deadline / 要求提交的文件清单(response letter?marked manuscript?)。信息缺失就标 `<TODO>`,**不猜**
2. **拆原子条目**:编辑要求编 `E.1 E.2...`,各审稿人意见编 `R1.1 R1.2 / R2.1...`。一条长评论里混多个关切时拆开;审稿人边界分不清时**问用户**,不擅自划分
3. **写 spec**:复制 `templates/spec.md` → `<task_dir>/<today>-<task_short_id>-<task_name>.spec.md`(命名按 system prompt 的 task 级宪法约定;已有 spec 先检测,同 paper 阶段一的规矩)。关键字段:决定类型 / 回复信语言(投英文刊→en,中文核心→zh)/ 整体姿态 / **哪些意见需要补实验或分析**(这是工作量大头,必须用户拍板)
4. ⛔ **BLOCKING:spec + 条目清单给用户确认**后才进阶段二

## 阶段二:逐条分诊(tracker)

读 `references/comment_taxonomy.md`,给每条建 tracker 行,写入 `<task_dir>/tracker.md`:

| ID | 意见摘要 | 类别 | 严重度 | 动作 | 缺什么 | readiness |
|---|---|---|---|---|---|---|
| R1.1 | 缺验证数据 | 证据 | major | ACCEPT_ANALYSIS | 需用户提供分析结果 + 位置 | needs_author_input |

分诊铁律:
- **先分诊后动笔** —— 动作没定就写回复,必然写出"感谢但没说改了啥"的空话
- 用户腹稿里"我们已经改了 / 补了实验"这类**模糊陈述一律 `AUTHOR_INPUT_NEEDED`**,追问:改了什么、在哪、数据长什么样(转换表见 tone_and_stance.md)
- 涉及伦理 / 合规 / 数据完整性 / 中心论断无支撑 → `BLOCKING`,不得用自信措辞绕过去
- 两个审稿人要求矛盾 / 要求做不了的实验 → 读 `references/difficult_cases.md`

⛔ **BLOCKING:tracker 给用户过目** —— 重点确认:要补的实验 / 分析用户做不做、反驳哪几条、readiness 为 needs_author_input 的条目用户能不能补料。确认后进阶段三。

## 阶段三:先改稿后写信

> 顺序不能反:**回复信要对着改完的稿子写**,否则"修改见 Section 3.2"全是空头支票。

**A. 稿件修改**(有原稿时):
1. 按 tracker 逐条落实改动,产出 `<task_dir>/manuscript_changes.md`:每条 ID 对应「修改位置 + 修改前 → 修改后」对照(位置用章节名;**行号只有用户给了才写,不编**)
2. 需要大改某章(如重写 Discussion)→ 调 `review` skill 深审该章;需要补引文 → 走 `documents`/`research` 检索并按 paper 的 `citation_verify.md` 三层核验,**未核验的引文不进回复信**
3. 补的实验 / 分析数据**只能来自用户**,数据没到就保持占位

**B. 逐审稿人起草回复信**(写到 `<task_dir>/response/`,一个审稿人一个文件 `NN_reviewer<N>.md`):
1. 起草前读 `references/tone_and_stance.md`
2. 每条回复三段式:**原评论全文引用(保留原文不改写)→ 回复(头 1-2 句直接说做了什么 / 同意与否)→ 修改后原文节选(斜体,只贴真实改过的)**;骨架见 `templates/response_letter.md`
3. 编辑要求(E.x)排最前;每个审稿人一节
4. **一个审稿人一卡**:起草完一个审稿人的全部回复 → 报告(几条 / 各自动作 / 遗留占位)→ ⛔ 等用户确认再写下一个审稿人
5. 修回 cover letter(用户要或期刊要求时才写):3-5 句概括本轮改了什么大项,**不替逐点回复辩护**,写 `response/00_cover_letter.md`

## 阶段四:QA + 渲染

**QA 清单**(逐项过,不过不渲染):
- [ ] 每条 ID 都有回复或显式 unresolved 标记;没有一条只用感谢打发
- [ ] 每个"已修改"都有稿件位置或可见占位;**行号 / 图号 / 数据没有一个是编的**
- [ ] 反驳条目:先认可关切 → 窄口径不同意 → 给证据或范围逻辑;无指责语("审稿人误解了"禁用)
- [ ] 拒做实验的理由是**研究设计 / 范围边界**,不是时间 / 经费 / 能力
- [ ] 补的引文全部经核验;修改节选与 manuscript_changes.md 一致
- [ ] readiness 总标签诚实:有占位就不得标 `ready_to_submit`

**readiness 四档**:`ready_to_submit`(无占位,可直接提交)/ `draft_with_placeholders`(可用但有可见占位)/ `needs_author_input`(等用户补料)/ `blocked`(合规 / 中心证据问题,不能靠措辞绕)。

**渲染**:
```bash
python /sandbox/rendering/render.py --profile paper --format docx <task_dir>/response/ --lang <en|zh> -o <task_dir>/<稿件短名>-response.docx
```
中文核对段(用户中文沟通时)只留在对话里,不进英文回复信正文。

## 工作目录

```
<task_dir>/
├── source/                 # 决定信 / 原稿 / 用户腹稿(markitdown 转的 md)
├── <today>-<task_short_id>-<task_name>.spec.md
├── tracker.md              # 阶段二分诊表(逐条动作 + readiness)
├── manuscript_changes.md   # 阶段三 A:修改前后对照清单
├── response/               # 阶段三 B:00_cover_letter + NN_reviewer<N>.md
└── <稿件短名>-response.docx
```

## 硬规则速查

- **零编造**:不虚构实验 / 数据 / p 值 / 样本量 / 行号 / 图号 / 引文 / 编辑指示 / "已修改"声明。缺的事实标 `AUTHOR_INPUT_NEEDED`,可见占位,不藏在措辞里
- **先改稿后写信**;回复对着改完的稿子写
- **头 1-2 句说动作**:每条回复开头直接说同意与否 + 做了什么,感谢语一句带过
- **审稿人评论原样保留**,不改写(改写改变语义 = 给编辑留下回避印象)
- **一条意见一个归宿**:只在信里澄清 / 改了稿 / 稿信都改 / 有理有据地不改 —— 四选一,不许含糊中间态
- **不同意要窄**:承认关切合理 → 精确说明不同意的点 → 给证据;稿子确实写得让人误解的,顺手改稿
- 语气:合作但不卑;不过度道歉、不空洞连环感谢、不用 hype 回应批评

## 反模式

- 不分诊直接逐条写回复(必出空话)
- 回复信先写完再想改稿(位置全是空头支票)
- "We have revised accordingly" 不说改了什么、在哪
- 把两个矛盾的审稿要求都答应下来
- 用"时间来不及 / 没有经费"当拒做实验的理由
- 明明该降论断强度,用软话把问题糊过去
- 编行号 / 编图号 / 声称补了没做的实验(= 学术不端,一票否决)

## 输出

完成后给用户:
- 文件路径(docx + tracker + manuscript_changes)
- readiness 总标签 + 各条分布(几条 ready / 几条占位 / 几条等补料)
- 待用户提供清单(中文,逐条说清要什么:结果方向、样本量、位置)
- 反驳条目清单(哪些没照办 + 理由一句话)
