- Split dr-chief-editor (Phase 3 read-only) vs new dr-editor-in-chief (Opus, Phase 4 lead) - New dr-translator (en->zh) and new humanizer-cn / output-hygiene / en-zh-translation skills - Switch to English working language (Phase 2-3), final Chinese translation (Phase 4) - /dr-init: add report title proposals + word budget mode - /dr-frame: bilingual framework - /dr-finalize: new chain editor->translator->polisher->reporter - report-template.py: widows/orphans/keepWithNext, 3-color hierarchy, confidentiality banner - dr-reporter: mandatory citations backfill + output hygiene check - dr-pm: batch-level context compression via manifest.batches_summary - mckinsey-method: SCQA only for Executive Summary + chapter intros (no explicit labels) - length-budget: 4 word-budget modes + en/zh 1:1.4 ratio
7.8 KiB
7.8 KiB
name, description
| name | description |
|---|---|
| output-hygiene | 报告输出卫生检查。禁止词清单(调度元数据、占位符残留、待验证标注)、格式异常检测、参考文献完整性校验。dr-polisher 在润色最后一步必跑;dr-reporter 出稿前复查一次。 |
输出卫生清单(Output Hygiene Checklist)
目的
拦截"调度元数据"和"中间产物残留"进入最终报告。9MW1911 那份报告之所以干净,是因为过滤掉了一切过程性内容,只留最终成品。
一、禁止出现在最终报告正文中的字样(元数据黑名单)
以下字符串在 final.md / final_zh.md / final_en.md 里一旦出现即为缺陷,dr-polisher 必须清除:
A. 调度元数据
章节定位字数配额研究员:dr-analyst研究员:dr-searcher生成时间:2026-(Year-MM 生成日期只在版本信息页出现一次)P0 核心章/P1/P2(这些是内部分级,不给读者看)dr-plan/dr-pm/dr-analyst/dr-verifier/dr-chief-editor/dr-editor-in-chief/dr-polisher/dr-reporter/dr-translatorPhase 1/Phase 2/Phase 3/Phase 4(除非在"方法论说明"附录讨论研究流程时)
B. 占位符残留
[由 dr-reporter 自动生成][待填]/[TBD]/[TODO]<slug>/<topic>/<N>/<X>等模板占位符{{ ... }}/${...}变量语法残留
C. 中间产物引用
参考信源:[src_101] –[src_120] (详见 sources.jsonl ch02 条目)详见 phase2/evidence/chXX-evidence.md详见 sources.jsonl本章信源索引:...(详见 ...)⚠️ 待验证/⚠️ [待验证](这是过程性标注;如必须保留某个"存疑观点"的提示,应改为正式语言如"该数据仅有 X 个来源支持,建议人工核实")
D. 研究思路泄漏
研究思路:核心研究问题:初步假设:预期信源:预期篇幅:
这些是 framework.md 里给 dr-analyst 看的规划信息,不能出现在读者版。
E. Agent 交付汇报语
产出:/完成后返回:任务:/硬性要求:必读 skill:章节小结:(改为自然段落收尾)
二、格式异常检测
F. SCQA 显式标注(已禁止的机械模式)
以下组合不应在最终报告中成对出现(用 grep 扫):
**Situation(背景)**+**Complication(张力)****S(背景)**+**C(挑战)**+**Q(问题)**+**A(答案)**Answer-First显式标注**核心结论(Answer-First)**
SCQA 要写得隐式融合(见 mckinsey-method skill)。
G. 三级以上嵌套标题乱用
正文正式章节标题不要超过 3 级:
# 第 X 章(报告级)## X.Y 节(章内节)### X.Y.Z 小节(节内小节)
禁止 #### ##### ######。如果需要 4 级以上,重新组织结构。
H. 引用格式不统一
所有引用统一 [src_XXX] 格式(3 位数字)。禁止混用:
[src_1](没补零)[source_001](变形)(src_001)(圆括号)[ref_1]/[r1](其他简写)
I. 中英文标点混用
中文正文里的标点应是中文标点:
,不是,。不是.;不是;:不是:"..."不是"..."(除了直接引用英文)(...)不是(...)
例外:行内英文术语、代码、URL、数据单位前后保持英文标点合理。
三、参考文献完整性校验(最关键)
dr-reporter 出稿前必须执行:
# 1. 从 final.md 提取所有引用的 src_id
grep -oE '\[src_[0-9]+\]' projects/<slug>/phase4/final.md | sort -u > /tmp/cited.txt
# 2. 从 citations.md / sources.jsonl 提取所有已登记的 src_id
grep -oE 'src_[0-9]+' projects/<slug>/phase4/citations.md | sort -u > /tmp/registered.txt
# 或从 sources.jsonl
python3 -c "
import json
with open('projects/<slug>/phase2/sources.jsonl') as f:
for line in f:
d = json.loads(line)
print(d['id'])
" | sort -u > /tmp/registered.txt
# 3. 差集:cited 里有但 registered 里没有 → 严重错误
comm -23 /tmp/cited.txt <(sed 's/[][]//g' /tmp/registered.txt) > /tmp/missing.txt
# 4. 反向差集:registered 有但从未被 cited → 孤立信源,可剔除
comm -13 /tmp/cited.txt <(sed 's/[][]//g' /tmp/registered.txt) > /tmp/orphan.txt
处理规则
- 有 missing 信源(引用了但无记录)→ 致命错误,dr-reporter 拒绝出稿,抛回上游排查
- 有 orphan 信源(有记录但未被引用)→ 警告,从 citations.md 剔除
- final.md 里的"参考文献"段落必须包含完整的编号清单,不能是
[由 dr-reporter 自动生成]之类的占位符 - 如果 final.md 的参考文献段落是占位符 → 读 citations.md 内容回填
四、标题规范
章标题
- 观点型判断句,不是"概述/现状/背景"
- 长度 15-40 字(中)/ 10-25 词(英)
- 不以动词开头(如"分析/探讨/研究"),改为判断句
反例:
- 第 2 章 分析中国 GLP-1 市场的现状
- 第 3 章 探讨 NEB 产品的竞争优势
正例:
- 第 2 章 中国 GLP-1 市场 2025 年已跨越 10 亿美元门槛
- 第 3 章 NEB 的 30 年专利丛林将在 2028 年后开始瓦解
节标题
- 同样要求观点型
- 长度 10-25 字 / 8-15 词
- 禁止
2.1 背景 / 2.2 现状 / 2.3 趋势这种模板化结构
五、图表与数据卫生
表格
- 表头第一行要有单位(金额 USD / 百分比 % / 年份等)
- 所有数据有来源标注(行内 [src_xxx] 或表脚注)
- 避免超过 10 列宽表(PDF 会被截断)
图表标题
格式:图 X-Y:<内容描述>(数据来源:[src_xxx])
数字规范
- 阿拉伯数字 + 中文量词:
12 项研究/3.2 亿元 - 大数字三位分节:
12,000而非12000 - 百分比带
%,不写"百分之十二" - 时间范围用连字符:
2020-2025 年不是2020 至 2025 年
六、自动化检查脚本(dr-polisher / dr-reporter 必跑)
# hygiene_check.py
import re, sys
BLACKLIST_ZH = [
"章节定位", "字数配额", "研究员:dr-",
"P0 核心章", "P1 主干章", "P2 辅助章",
"Phase 1", "Phase 2", "Phase 3", "Phase 4",
"dr-plan", "dr-pm", "dr-analyst", "dr-verifier",
"dr-chief-editor", "dr-editor-in-chief", "dr-polisher",
"dr-reporter", "dr-translator",
"[由 dr-reporter 自动生成]", "[待填]", "[TBD]", "[TODO]",
"详见 phase2/", "详见 sources.jsonl",
"本章信源索引", "⚠️ 待验证", "⚠️ [待验证]",
"**Situation(背景)**", "**Complication(张力)**",
"**Question(问题)**", "**Answer(答案)**",
"**S(背景)**", "**C(挑战)**",
"Answer-First", "核心结论(Answer-First)",
"研究思路:", "核心研究问题:", "初步假设:",
"预期信源:", "预期篇幅:",
"硬性要求:", "必读 skill:", "产出:",
]
path = sys.argv[1]
text = open(path, encoding='utf-8').read()
issues = []
for pattern in BLACKLIST_ZH:
if pattern in text:
count = text.count(pattern)
issues.append(f" × '{pattern}' 出现 {count} 次")
if issues:
print(f"{path} 存在 {len(issues)} 项卫生问题:")
for i in issues:
print(i)
sys.exit(1)
else:
print(f"{path} 输出卫生检查通过")
sys.exit(0)
七、硬规则
- ✅ dr-polisher 润色的最后一步跑 hygiene_check
- ✅ dr-reporter 出稿前再跑一次 hygiene_check + 参考文献完整性校验
- ✅ 任何禁止词残留都必须修正,不能"放过一马"
- ✅ 参考文献段落必须包含完整编号清单,不允许占位符
- ❌ 禁止把"⚠️ 待验证"这种过程标注留到读者版
- ❌ 禁止三级以上嵌套标题