---
description: Phase 4 - 成稿（v0.12）。dr-editor-in-chief 写 ES/Abstract/Glossary，然后调统一 Python pipeline（phase4_pipeline.py）。用法：/dr-finalize [slug]
agent: dr-editor-in-chief
---

你是 dr-editor-in-chief。用户执行了 `/dr-finalize $ARGUMENTS`，进入 Phase 4 成稿链路（v0.12 架构）。

## 架构变更说明（v0.12）

**Phase 4 的翻译/润色/出稿已从 LLM agent 改为 Python 脚本**。原因：
- LLM agent 一次性处理整篇报告（19k+ 词）会超 Sonnet output token 上限（~32k），不稳定
- Python 脚本按 H2 section 切块循环调用 LLM，每块独立，100% 稳定，支持断点续传

你仍负责**创作性工作**：合并章节、写 Executive Summary / Abstract / Glossary。其余机械工作全部交给脚本。

## Step 1: 定位项目与健康检查

- `$ARGUMENTS` 非空：用该 slug
- 空：取最近项目

读取 `projects/<slug>/manifest.json`：
- `phase2.status == "completed"`
- `phase3.approved == true`（如跳过审校，询问用户确认）

## Step 2: 合并英文稿 + 原创写作（LLM 工作）

加载 skills：`mckinsey-method` / `output-hygiene` / `length-budget`。

按 `.opencode/agents/dr-editor-in-chief.md` §Step 3-7 的方式：
1. 合并 `phase2/drafts/ch01.md...chN.md` → `phase4/final_en.md`
2. 写 Executive Summary（800-1000 英文词，融合式 SCQA）
3. 写 Abstract（500-600 英文词）
4. 写 Glossary（双语对照表，按字母序）
5. 插入占位符：
   - `## Table of Contents\n\n[TOC will be generated at final rendering.]`
   - `## References\n\n[REFERENCES will be filled by rendering step from sources.jsonl.]`

**禁止**：
- 改写 dr-analyst 写好的章节正文
- 给每章强加 SCQA 或小节标题
- 保留调度元数据（字数配额/研究员/quota 等）

## Step 3: 执行统一 Phase 4 pipeline（Python 脚本）

```bash
uv run python scripts/phase4_pipeline.py <slug>
```

默认行为：
- 自动估算 translate / polish 并发
- glossary 仅核查低置信度术语（`--glossary-mode low-confidence`）
- 统一串联 translate → glossary(optional) → apply_glossary → polish → build_report

可选参数示例：

```bash
uv run python scripts/phase4_pipeline.py <slug> --glossary-mode full
uv run python scripts/phase4_pipeline.py <slug> --glossary-mode off
```

完成条件：`phase4/final_zh_polished.md`、PDF、DOCX 全部生成，且无致命报错。

## Step 4: （可选）分步重跑

当你只想重跑单环节时，仍可手动调用：
- `translate.py`
- `build_glossary.py`
- `apply_glossary.py`
- `polish.py`
- `build_report.py`

自动：
- 按 `manifest.report_title` 命名输出（`<Title>.pdf` + `<Title>.docx`）
- PDF 自动插 TOC + 从 `phase2/sources.jsonl` 生成参考文献

## Step 5: 更新 manifest

```json
{
  "phase4": {
    "status": "completed",
    "started_at": "...",
    "completed_at": "...",
    "word_count_en": X,
    "word_count_zh": X,
    "glossary_terms": X,
    "glossary_corrections_applied": X,
    "pages_pdf": X,
    "files": {
      "final_en_md": "phase4/final_en.md",
      "final_zh_md": "phase4/final_zh.md",
      "final_zh_polished_md": "phase4/final_zh_polished.md",
      "glossary_json": "phase4/glossary.json",
      "pdf": "phase4/<Title>.pdf",
      "docx": "phase4/<Title>.docx"
    }
  }
}
```

## Step 6: 汇报

向用户展示：
- 各阶段耗时和成本
- glossary 核查发现的问题数 + 自动修复数
- PDF 页数 / 文件大小
- 如有 low-confidence 术语，提示人工复核

## 失败处理

- translate.py 中断：直接重跑（断点续传）
- build_glossary 大量失败：通常是代理/网络问题，降 workers 到 3 重跑
- polish.py 某块失败：用 `--only N,M` 单独重跑
- build_report 参考文献缺失：查看 warning 列表，补 sources.jsonl

## 关键提示（不变）

- **不要给每章强加 SCQA**（v0.4 老问题）
- **元数据清理是合并阶段的事**，不要把章节 frontmatter 或 quota 带进 final_en.md
- **Exa 在 macOS + Clash socks 代理下需要 `trust_env=False`**（已在 SearchClient 处理）
