name: reviewer-response-sci description: 用于SCI审稿意见逐条回复的全流程技能,适用于期刊大修/小修阶段,只出回复包(HTML),不改主稿。触发词:审稿意见回复、回复审稿人、回复reviewer、response letter、回复信、rebuttal、逐条回复、Response to Reviewer、revise and resubmit、R&R、reviewer comments。路由说明:与revise-sci区分,本技能只出回复包不改主稿,需同时改主稿并出修订稿docx请用revise-sci;与reviewer-simulator区分,本技能针对已收到的意见写回复,后者是模拟生成审稿意见。
Reviewer Response SCI
Scope
Default mode is one-shot full package with atomic storage. Two secondary modes also exist: Re-Render(手改 unit JSON 后单独重渲,见 Re-Render Workflow)和 skeleton/prewrite 预览(出占位符草稿,命令见 Scripts 段)。
Required Inputs
| 参数 | 必需 | 说明 |
|---|---|---|
comments_docx_path |
✅ | 审稿意见文件 |
manuscript_docx_path |
✅ | 论文正文 |
si_docx_path |
可选 | 补充材料 |
project_root |
✅ | 输出根目录 |
output_html_path |
✅ | 最终 HTML 路径 |
Outputs(one-shot 产物):
- Atomic JSON pages —
units/目录(每条意见一个 JSON + 邮件 JSON) - Atomic manuscript units —
manuscript_units/ - Atomic SI units —
si_units/(有SI时) - One final hierarchical HTML(主交付物,见 Output Contract)
Save Path Confirmation (Mandatory)
Before running the pipeline, first ask the user where output files should be saved.
环境预检(软门禁,确认 project_root 后、跑 pipeline 前): python3 scripts/env_preflight.py <project_root> --cli esearch --py docx,写 env_status.json,末行 PRECHECK: OK|ASK|BLOCKED。BLOCKED(Python 过低)→ 停并引导升级;ASK(缺 esearch/python-docx 等可选工具)→ 逐项问用户是否安装并给指引,用户答"已装/不装"后才继续;OK → 继续。回退靠 state_manager.py snapshot(不建 git 检查点)。
Default behavior if user does not specify a custom location:
- Use the current project directory.
- Create a dedicated subfolder for this run (for example:
projects/<task_name_or_date>/). - Write all artifacts into that subfolder (
units/,manuscript_units/,si_units/,logs/, final HTML).
Output Contract (One-Shot)
主交付 = 回复包(给编辑的总览邮件 + 各审稿人 point-by-point 回复,最终渲染为单文件分层 HTML)。 修改稿 track-changes 需用户手工补:本技能生成回复文档,不产出 Word track-changes 版本;用户应以
manuscript_edit_plan.md为操作指南,在 Word 中手动启用修订模式完成改稿。若用户要求 track-changes 稿件,解释此限制并推荐使用manuscript_edit_plan.md。
主交付物 = 单文件分层 HTML(左侧层级 TOC + 右侧内容,单页可见)。TOC 顶层节点为 Editor(若有)+ Reviewer #1/#2/...,Editor 排在所有 Reviewer 之前;编辑信里的 editor comment(字数/格式/伦理声明/数据可用性/利益冲突/统计复核等)作为独立顶层 Editor 节点呈现,与各 Reviewer 并列,不得并入任何 Reviewer。全部 UI 由 scripts/build_full_package.py 的 render_html() 生成,TOC 层级、严重度背景色、折叠/展开、可拖拽分割线、复制 按钮、localStorage 持久化、各 box 布局均已硬编码,AI 无需手工实现 HTML。完整 UI 验收对照细则见 references/output-template.md。
AI 真正要产出的是每条 comment unit 的内容字段(脚本只写占位符,AI 填真值):
- 审稿人意图:原始意见(EN) + 中文直译(直译不意译)+ 中文意图理解(摘要,非粘贴英文原文)。直译/中文回应必须由当前模型直接产出,脚本不自动出译文、只留占位符。
- Response:中文回复 + 对应英文(非逐字翻译)。
- 修改候选:revised EN 段落(聚焦匹配句周围片段)+ 中文译文;无修改写
无;定位字段(unit_id/路径/段落与句子 index)随 unit 写入。 - 修改说明:动作列表(添加/删除/修改+原因)+
🔴 Core/🟡 Support汇总。 - 证据/图片:Figure Prompt Block,审稿人明确要求改/新增图片时,按
references/figure-prompt-template.md生成结构化提示词,存入对应 comment unit JSON 的content.figure_prompt。
Atomic JSON Contract
Project layout:
project_root/project_state.jsonproject_root/index.json(hierarchical TOC source)project_root/citation_registry.json(new references added during response; see Step 2)project_root/manuscript_edit_plan.md(ordered revision plan; see Step 5)project_root/units/000_email.jsonproject_root/units/*.json(one file per comment)project_root/manuscript_units/*.json(one section-level block per unit: heading + corresponding body text + corresponding figure captions when present)project_root/si_units/*.json(one section-level block per unit: heading + corresponding body text + corresponding figure captions when present)
Each unit follows references/atomic-unit-schema.json.
Each comment unit should carry content.atomic_location and must be renderable in HTML section 3.
Source atomic units (manuscript_units / si_units) must include:
- section-level units (
unit_type=section_block, optionallypreamble_block) - section text and corresponding figure captions in the same section-level unit when available
- force split back-matter sections into independent units:
Author Contributions,Acknowledgements,Conflicts of Interest,References(supports numbered headings like6. AUTHOR CONTRIBUTIONSand inline heading patterns) - if no figure exists, figure-caption units can be absent
- optional image attachment extraction is allowed but not mandatory; section text + corresponding figure caption text is mandatory
Rules
- Do not fabricate experiments, statistics, or references.
- If evidence is missing, explicitly mark
Not provided by user. - Keep tone professional and non-defensive.
- English reviewer responses must be fluent and natural, with low AI-style phrasing.
- Prefer short sentences for clear, natural rhythm; avoid long complex sentences by default, but do not split mechanically.
- If a reviewer comment requires adding references, literature retrieval follows topic-dependent routing: ① determine field — life science/medicine → PubMed CLI first (
esearch/efetch,~/edirect/,< /dev/null, proxyhttp://127.0.0.1:<PROXY_PORT>); CS/AI/engineering → paper-search MCP first (mcp__paper-search-mcp__search_arxivetc.) ② fallback to the other when primary yields no results. Auto-install PubMed CLI if~/edirect/esearchmissing:sh -c "$(curl -fsSL https://ftp.ncbi.nlm.nih.gov/entrez/entrezdirect/install-edirect.sh)". Windows: thesh/curlinstaller and< /dev/nullare not available in native cmd/PowerShell — run PubMed CLI under WSL, or skip it and use the paper-search MCP fallback instead. - 严禁 使用
tavily、websearch或openalex(pyalex)进行文献检索。 - Serial Search (MANDATORY): Execute all retrieval calls sequentially (PubMed CLI and paper-search MCP alike). Never parallelize search requests. Enforce ≥1s interval between consecutive calls.
- Do not create ad-hoc fixer scripts (e.g.,
fix_gate_errors.py, temporary patch scripts) during normal runs. - When gate checks fail, directly edit the failing
project_root/units/*.jsonfields and re-run checks. - Keep one-page-per-comment structure.
- All copy buttons in the UI must use Chinese label
复制. - Frontend design specifications are hardcoded in
scripts/build_full_package.py'srender_html(); AI does not need to write HTML. Full spec is inreferences/output-template.md. - Quality gates must fail when:
revised_excerpt_enis placeholder/empty (unless explicitly running with a relaxed gate mode)revised_excerpt_enis identical tooriginal_excerpt_en- unit status indicates
needs_manual_revision
- If
comments_docxfails to parse (corrupt file, encoding error), abort immediately and report the exact error; do not proceed to atomization. - If a reviewer comment cannot be matched to any manuscript paragraph (location confidence below threshold), set
atomic_location.confidence = "low"and mark the unitneeds_manual_revision; do not fabricate a location. - Gate fix loop must not exceed 3 iterations; if gate still fails after 3 direct JSON edits, halt and report remaining failures to the user with a list of unresolved unit IDs.
- AI Style Control: English responses must avoid AI-typical phrasing patterns:
- Hedging overuse: "it is important to note that", "it should be noted that", "notably", "importantly"
- Empty appreciation: "we greatly appreciate your insightful comments", "this is an excellent suggestion"
- Filler phrases: "in order to", "we would like to point out that", "as the reviewer rightly noted"
- Structural repetition: ≥3 responses must not open with the same template sentence
- English sentence length hard cap: each sentence in
response_enandrevised_excerpt_enmust be ≤30 words. If a sentence exceeds 30 words, split it. Do not achieve this by removing necessary content; restructure instead. - -ing participial clause ban: do not attach a dangling -ing clause to the main clause with a comma (e.g., ", reflecting our commitment to…", ", ensuring that…", ", highlighting the importance of…"). Rewrite as a separate sentence or use a coordinating conjunction.
- Decorative em-dash ban: do not use —/——/em-dash as a pause, parenthetical, or emphasis marker (e.g., "This result—while preliminary—suggests…"); use a comma, period, or split sentence instead. Hyphens in compound terms ("dose-response") and numeric ranges are not affected. Applies to both English and Chinese outputs.
- Scare-quote ban: do not use quotation marks around coined words or ordinary phrases to imply novelty or irony (e.g., "robust" findings, "novel" approach). Retain quotes for: first-time term definitions, direct verbatim quotations from reviewer comments, and established idiomatic expressions.
- Explanatory-colon ban: do not use the pattern "concept: explanation" as a decorative sentence structure (e.g., "Main revision: we added a new control group"). Legitimate colons include ratios (2:1), clock times, list lead-ins, section headings, and figure labels ("Figure 3A:").
risk_check.pyscans for these patterns automatically (including sentence length and -ing clause detection); WARN-level issues should be fixed before delivery
- Chinese response style (中文回复规则):
- 单句 ≤50 字硬上限。 超 50 字的句子必须拆分;不得为凑长度补充冗余内容。
- 从句嵌套 ≤2 层。 禁止三重嵌套("因为…由于…鉴于…"类结构)。
risk_check.py对response_zh执行中文句长检测(WARN 级,>50 字告警)
Domain Edge Cases
- Reviewer recommends acceptance without comments ("I have no major/minor concerns"): create a single email-only response acknowledging the reviewer; do not generate an empty Major/Minor section.
- Two reviewers give contradictory suggestions (e.g., R1 says "remove Section 3" vs R2 says "expand Section 3"): flag the conflict explicitly in both units'
notes_core_zh; in the English response, acknowledge the divergence and state which direction is adopted with evidence-based justification. Add a[CONFLICTING ADVICE]marker inmanuscript_edit_plan.md. - Reviewer writes comments in a non-English language: translate the original comment into English first (store in
reviewer_comment_en), then produce the Chinese translation from the original language (not from the English translation). Note the original language in asource_languageannotation in the unit JSON. - Manuscript lacks standard section headings (e.g., Letter/Communication format): atomize by paragraph breaks instead of headings; set
unit_type=paragraph_blockfor manuscript units; use paragraph index as the primary location anchor. - Same paragraph targeted by 5+ comments: in
manuscript_edit_plan.md, merge all into one block sorted by reviewer priority (Editor > R1 > R2 > R3). If modifications conflict within the same paragraph, flag[INTRA-PARAGRAPH CONFLICT]and present alternative revision options for user decision.
One-Shot Workflow
执行模型(先读这段): 本流程是两段式自动化 + AI 填空,不是线性手工 13 步。
scripts/build_full_package.py(pipeline 内部自动调用)一次性完成 Step 3/4/5/6/8 的机械部分:atomize 论文/SI 段落、在units/*.json写好占位符骨架(【待AI...】/[AI_FILL_REQUIRED])、生成index.json、并由render_html()渲出完整 HTML。不要手工 atomize,也不要手写 index.json。- AI 的核心工作只有两件:①Step 7 把
units/*.json里的占位符字段填成真实内容;②gate 失败时按报告直接改对应units/*.json再重跑。 - 两种调用时机,二选一:
- 分步:先
build_full_package.py出骨架(无条件写占位符、不跑 gate)→ AI 填units/*.json→ 再run_pipeline.py跑全部 gate; - 串起:一条
run_pipeline.py走完 build→gate(首轮占位符会被门禁拦下,按报告填 units 后重跑)。
- 分步:先
- 下列编号步骤是逻辑顺序说明,多数由脚本代劳;User Checkpoint 之间 AI 需停下确认。
- 跨平台命令说明(一次性): 本节及后续所有
python3 scripts/...命令在 Windows 上请用python或py代替python3(macOS/Linux 保持python3)。
- Parse all reviewer comments from
comments_docx_path. The parser (split_reviewer_blocks) recognizes bothReviewer #Nblocks and Editor blocks (Editor:,Editor Comments,Comments from the Editor,Editorial Comments,编辑意见,编辑要求等) as top-level nodes. Editor comments become an independentreviewer="Editor"group, never merged into a reviewer. 1.5. [User Checkpoint] Print parsed comment summary table:- Top-level node count (Editor + Reviewers)
- Per-node breakdown: Major / Minor / General comment counts (Editor comments usually fall under General)
- Full list: reviewer × section × comment index × first 20 words of each comment Ask the user: "Comment parsing complete. Does this match the reviewer letter? (yes / abort / correct:N)" Do not continue to step 1.7 until user confirms.
1.7. [Strategy Planning] Build a rebuttal strategy table before writing any responses:
| Reviewer | # | Section | Strategy | Rationale | Data Needed |
|---|---|---|---|---|---|
| R1 | 1 | Major | Accept | Valid concern, easy fix | None |
| R1 | 2 | Major | Partial | Agree on X, push back on Y | New ref for Y |
| R2 | 1 | Minor | Push back | Misunderstanding, cite existing evidence | None |
Strategy options:
- Accept: fully agree, will revise as requested
- Partial: agree on some points, provide evidence/rationale for others
- Push back: respectfully disagree with evidence-based justification
- Acknowledge: thank reviewer for the suggestion, explain why not adopted (e.g., scope, data limitation)
Rules:
- Every comment must have a strategy assignment before proceeding
Push backrequires at least one concrete evidence item (existing data, published precedent, or methodological rationale)- If strategy requires new literature, flag in
Data Neededcolumn for Step 2 - Print the strategy table and ask user: "Strategy plan ready. Approve? (yes / adjust:R1.2 → Accept / abort)"
- Do not proceed to Step 2 until user confirms
- 用户确认后,将每条 comment 的 strategy 写入对应
units/*.json的content.strategy字段(脚本建骨架时留空字符串,由 AI 在此步骤填入)
If any comment needs additional citations (identified in Step 1.7
Data Needed), run retrieval per the Rules section's topic-dependent routing spec.- After retrieval, build
citation_registry.jsoninproject_root/:{ "original_ref_count": 42, "entries": [ { "ref_number": 43, "title": "...", "doi": "10.xxxx/...", "pmid": "12345678", "authors": "First A, Second B", "year": 2023, "journal": "...", "source_provider": "pubmed-cli", "source_id": "esearch:query_string", "added_for_units": ["003_R1_major_01"], "retrieved_at": "2024-..." } ] } original_ref_count: total references in the original manuscript (count from References section)- New reference numbers must start from
original_ref_count + 1, sequential, no gaps - Each entry must record
source_provider(e.g.,pubmed-cli,paper-search-mcp) for traceability
- After retrieval, build
Atomize manuscript and SI into section-level units (heading + body + corresponding figure captions). 3.5. [User Checkpoint] Print a summary table:
- Total section-level units extracted (manuscript count / SI count)
- Any sections that failed to split or produced empty units Ask the user: "Atomization complete. Proceed to build comment units? (yes / abort)" Do not continue to step 4 until user confirms.
Build comment atomic units in
project_root/units/and attach anchor-based links to manuscript/SI units. Also build email page JSON atproject_root/units/000_email.jsonwith the following content:subject:Response to Reviewers — [Manuscript Title]opening: thank the editor; state that a point-by-point response and revised manuscript are attachedchange_summary: one bullet per reviewer, ≤2 sentences per bullet, summarizing major revisions madeclosing: restate willingness to provide further revisions if needed- Tone: professional, concise, non-defensive; English only; no Chinese in email body
Build
manuscript_edit_plan.mdskeleton inproject_root/(Step 5 = 建骨架;Step 7 后回填真值,见下).- The plan must be sorted by manuscript original order (ascending
manuscript_paragraph_index). - Each row must include:
comment_unit_id/ reviewer and major-minor info- target document (
manuscript/SI/ both) - section heading
- paragraph index
- one Word-search key sentence (
Word Find key sentence) - exact to-be-replaced snippet (if available)
revised text to insert(EN, and ZH if provided):此列 Step 5 时留占位符[PENDING Step 7];Step 7 完成后运行python3 scripts/state_manager.py aggregate-edit-plan --project-root <root>自动聚合回填。- action type (
添加/删除/修改)
- When multiple comments map to the same paragraph, merge into one ordered block with sub-items.
- If a comment is global (language polishing, full-figure consistency), put it in a separate
Global editssection and explicitly mark as non-localized.
- The plan must be sorted by manuscript original order (ascending
Build hierarchical index in
project_root/index.json.Fill all AI-required fields in each comment unit JSON. Execute in sub-steps:
改坏可回滚: 每次大改
units/*.json前先python3 scripts/state_manager.py snapshot --project-root <root>建还原点;改坏用python3 scripts/state_manager.py rollback --project-root <root>(默认还原最近一次快照)。快照存于logs/snapshots/units_<时间戳>/。7a. 排序与分批:
- 按 reviewer 分组,每组内先 major 后 minor 后 general
- 如 comment 总数 ≤15,一次性处理;>15 条时分批(每批 ≤10 条),每批完成后写盘再继续下一批
- 每条 comment unit 需填写以下 8 组字段(参照
references/atomic-unit-schema.json):
7b. 逐条填写(每条 comment unit): 0. 读取
content.strategy字段(Step 1.7 已写入),据此选定回复基调:Accept→直接致谢+落实;Partial→分点肯定+部分推回;Push back→证据先行+礼貌否定;Acknowledge→解释为何未采纳。content.reviewer_comment_zh:直译审稿意见(中文,不改写不概括)content.reviewer_intent_zh:理解审稿人真实意图(中文摘要,≤3 句)content.response_en:英文回复(遵循references/decision-rules.md的基调选择和句式规范;短句优先见 Rules)content.response_zh:中文回复(与英文回复对应,非逐字翻译,需自然通顺)content.revised_excerpt_en:修改后的英文正文段落(如无需修改写无)content.revised_excerpt_zh:修改后的中文翻译(如无需修改写无)content.modification_actions:修改动作列表(每条含action_type+target+reason)content.notes_core_zh+content.notes_support_zh:核心🔴和辅助🟡修改说明
7c. 质量标准:
- 英文回复:≥3 句、≤300 词;必须包含致谢 + 具体行动描述
- 中文回复:与英文回复信息等价,但措辞独立,不是机械翻译
- revised_excerpt:必须与 original_excerpt_en 有实质差异(不能只改标点)
- 禁止虚构实验、统计、引用(遵循 Rules 中的红线)
Step 7 Mini-Gate(填写完成后,进入 Step 8 前执行):
- 抽取前 3 个 comment unit,检查以下字段是否已填(非占位符):
content.reviewer_comment_zh(非待AI/AI_FILL_REQUIRED)content.response_zh(非空、非占位符)content.revised_excerpt_en(非空、非与original_excerpt_en相同)
- 如发现任何占位符或空值,停止并列出未填字段,等待修复后再继续
- 抽查通过后方可进入 Step 7.5
7.5. [User Checkpoint — Quality Review] 展示回复质量摘要供用户审查:
- 打印表格:每条 comment 的 unit_id | reviewer | section | response_en 前 50 字 | revised_excerpt 状态(有修改/无/needs_manual)
- 标记需人工关注的条目:
needs_manual_revision的 unit、confidence=low的定位、revised_excerpt_en 为无但 comment 明确要求改文的 - 问用户:"Response content ready for rendering. Review OK? (yes / fix:unit_id / abort)"
- 用户可指定修改特定 unit,修改后重新展示该 unit 摘要
- 确认后方可进入 Step 8
Step 7 后 → edit_plan 回填(在进入 Step 8 前执行):
python3 scripts/state_manager.py aggregate-edit-plan --project-root <root>脚本遍历
units/*.json,把每个 unit 的revised_excerpt_en(以及revised_excerpt_zh,若有则以/拼接)写入manuscript_edit_plan.md对应行的revised text to insert列,替换[PENDING Step 7]。revised_excerpt_en == "无"的 unit 写入无改动,不计为 PENDING。输出含两行关键信息:filled: N(已回填数)和still PENDING: N(未填数);若有 PENDING,脚本列出具体 unit_id 并以退出码 2 提示,需补填后重跑。回填完成后 edit_plan 即为可直接用于手工 track-changes 的完整操作清单。Render single HTML with left hierarchical TOC + right content pane from updated atomic JSON.
Run hard gate checks, citation checks, and HTML checks before delivery.
- 判读:
scripts/run_pipeline.py串行自动执行全部 gate(顺序与职责详见 Scripts 段);退出码0= 全部通过;非零时 stdout 打印PIPELINE: FAIL (step=..., code=...)及失败 unit。按失败信息直接改对应units/*.json(≤3 次上限,见 Rules)后重跑。Do not run gates manually one-by-one; do not generate extra fixer scripts. - 注:
citation_ref_tracker/citation_guard在 pipeline 内为 WARN 级(未带--fail-on-undefined/--fail-on-unverified,仅撤稿引用会直接 FAIL),PIPELINE: PASS不代表引文零缺陷,RR1/RR2 须在 DoD 委托盲检阶段单独确认。
- 判读:
Run final consistency report.
Write checkpoint + transaction logs to
project_root/logs/.Sync unit state map to
project_root/logs/unit_state.json.Write reproducibility snapshot to
project_root/logs/version_snapshot.json(hashes for key scripts + outputs).
❌ 反例黑名单(Anti-Patterns)
- ❌ 越界改主稿或生成 Word track-changes 稿,本技能只出回复包(HTML),改稿一律落到
manuscript_edit_plan.md由用户手工执行。 - ❌ 虚构实验、统计或引用来回应意见;证据缺失时不写
Not provided by user而是编造数据。 - ❌ response_en 里承诺的动作(we added/clarified/revised)在
modification_actions或revised_excerpt_en找不到落点(承诺↔落点不一致,consistency_check WARN 必须消除)。 - ❌ 主 agent 自评承诺↔落点一致性与 DoD 清单,必须委托独立上下文子代理盲检,delegate_review verify 未 exit 0 就出具回复信。
- ❌ 漏回任何一条意见,尤其把 Editor 意见并入某个 Reviewer,而非作为独立顶层节点。
- ❌ 用 tavily、websearch 或 openalex(pyalex)查文献;生命医学不走 PubMed CLI、CS/AI 不走 paper-search MCP。
- ❌ 并行发起检索请求,必须串行且相邻调用间隔 ≥1s。
- ❌ 把
revised_excerpt_en留作占位符、留空、或与original_excerpt_en完全相同(仅改标点也算未改),strict_gate 必拦。 - ❌ 交付时残留
待AI/AI_FILL_REQUIRED/[PENDING Step 7]占位符,或 Step 7 后漏跑aggregate-edit-plan回填 edit_plan。 - ❌ 去 AI 三禁未过:装饰性破折号、scare quotes、解释性冒号;英文单句 >30 词或挂 -ing 分词从句,中文单句 >50 字或从句嵌套 >2 层。
- ❌ 英文回复堆套话:空致谢(we greatly appreciate your insightful comments)、对冲词(it is important to note that)、≥3 条回复用同一模板开头。
- ❌ 意见无法匹配到任何段落时硬编一个 location,而非置
confidence=low并标needs_manual_revision。 - ❌ gate 失败时新建临时修复脚本(fix_gate_errors.py 之类)或逐个手跑 gate,应直接改
units/*.json重跑且修复循环 ≤3 次。 - ❌ Push back 策略的 unit 没有任何具体证据(引文/数据/方法学依据)就硬顶审稿人。
Definition-of-Done: 回复包收口自检清单
硬规则:清单未逐项确认通过,不得向用户声明"回复包完成"。 能脚本核的项直接跑对应 gate;人工项逐条确认。
🔴 委托盲检(不得主 agent 自评):你刚写完回复包,自评会失真地默认通过、且易漏项。承诺↔落点一致性尤其如此,主 agent 写了回复再自核"承诺有没有落地"几乎必然失真。run_pipeline.py 退出码 0 后、声明完成前,必须把 DoD 清单委托给独立上下文的子代理盲检,自己不直接打勾:
🔴 出具前置闸口:delegate_review verify 必须 exit 0(含 RR14 结构完整性),否则不得向用户出具 response letter。
- 生成任务包:
python scripts/delegate_review.py pack --checklist references/dod_checklist.json --gate response-dod --files <project_root>/units/*.json(Windows PowerShell/cmd 不展开*.json,需把units/下的 json 显式逐个列在--files后,或在 WSL/bash 里运行) - 派一个独立子代理(Claude Code 用
academic-blind-reviewer;其他平台派通用子代理),把任务包原样给它、不要给它回复包的写作上下文,要求按任务包返回 JSON 数组。 - 校验返回:
python scripts/delegate_review.py verify --checklist references/dod_checklist.json --gate response-dod --return <子代理返回.json>;退出码非 0(任一缺项/fail/无证据)= fail-closed,据子代理证据修复后重跑,未过不得声明完成。
下列清单与 references/dod_checklist.json 逐项对应(改清单先改 JSON,此处仅供人工对照;能脚本核的项子代理会先跑脚本):
通用 6 项(全技能必过,对应 RR1–RR6)
- ① 引文 [N] ↔ 参考列表一一对应(无孤儿、无缺号、编号连续)→
citation_ref_tracker.py - ② 本次新增引用已过
citation_guard.py(status == "pass"或无新增引用) - ③ 全部回复内容符合投稿论文主线(无跑题、无与原稿结论矛盾的表述)→ 人工
- ④ 占位符清零(无
待AI/AI_FILL_REQUIRED/[PENDING Step 7])→final_content_gate.py - ⑤ 去 AI(英文单句 ≤30 词、无 -ing 分词挂句、无套话禁词;中文单句 ≤50 字、从句 ≤2 层)→
risk_check.py+ 人工 - ⑥ 字数达标(每条 response_en ≥3 句且 ≤300 词;response_zh 信息等价)→ 人工
reviewer-response 特有项(对应 RR7–RR13)
- 逐条覆盖:每条审稿意见(含 Editor 意见)均有对应 unit,无遗漏 → 人工对照 Step 1.5 解析表
- Editor 层独立:Editor 意见为独立顶层节点,未并入任何 Reviewer → HTML TOC 人工核对
- Strategy 基调已定:每个 comment unit 的
content.strategy字段均非空 → 人工(Step 1.7 确认后) - 承诺 ↔ 落点一致:
response_en里承诺的动作能在modification_actions或revised_excerpt_en找到对应落点 →consistency_check.py(WARN 需消除)[此项必须由独立子代理核,主 agent 不得自评] -
edit_plan已聚合回填:manuscript_edit_plan.md无[PENDING Step 7]行 →aggregate-edit-plan脚本退出码 0 - 反驳有据:所有
Push back策略的 unit 均有至少一条具体证据(引文 / 数据 / 方法学依据)→ 人工 - Citation registry 已核验:
citation_registry.json存在且citation_guard.py通过;若无新增引用,确认citation_registry.json的entries为空数组 →citation_guard.py - 各 gate 全通:各独立 gate 脚本退出码均为 0(
strict_gate/final_content_gate/consistency_check/risk_check/citation_guard/citation_ref_tracker)→ 见 RR13 - 结构完整性(RR14):每个 response unit 结构完整(审稿意见原文 + 回复正文 + 修改证据/落点定位 三要素齐全),无空 unit;letter 整体覆盖每条意见无遗漏 → 人工
Re-Render Workflow
After manual editing of any unit JSON:
- Keep
index.jsonunchanged unless hierarchy changes. - Rebuild HTML only using
scripts/render_from_atomic_json.py.- If render fails (JSON parse error / missing required field): fix the offending
units/*.jsondirectly, then re-run. Do not regenerate from scratch. - If render fails (script not found / import error): check
scripts/directory exists and dependencies are installed; fall back toscripts/run_pipeline.py --allow-placeholderas last resort.
- If render fails (JSON parse error / missing required field): fix the offending
- Sync state using
scripts/state_manager.py sync --project-root ..- If sync fails: run
scripts/state_manager.py show --project-root .to identify out-of-sync units; fix manually, then retry sync.
- If sync fails: run
- Run
scripts/final_content_gate.pyandscripts/html_format_check.pyon the newly rendered HTML.- Gate checks are mandatory even for single-unit edits.
- If gate fails, fix the offending
units/*.jsondirectly and re-run from step 2. Do not skip.
Scripts
入口: scripts/run_pipeline.py,一站式串行执行 preflight → build → 全部 gate → consistency report → html gate。5 个必需参数:--comments / --manuscript / --si(可选)/ --project-root / --output-html。
最小可执行示例(占位符首轮预览,加 --allow-placeholder 放宽内容门禁出骨架;正式交付去掉该 flag):
python3 scripts/run_pipeline.py \
--comments /path/to/reviewer_comments.docx \
--manuscript /path/to/manuscript.docx \
--si /path/to/supplementary.docx \
--project-root /path/to/project_root \
--output-html /path/to/project_root/reviewer_response.html \
--allow-placeholder
无 SI 时省略 --si。AI 填完 units/*.json 后,去掉 --allow-placeholder 重跑同一命令即为正式交付。
各 gate 由 run_pipeline.py 串行自动调用,正常运行无需手动单独跑。按执行顺序:
strict_gate.py:硬门禁,检查revised_excerpt_en非空/非占位符/与原文有实质差异、needs_manual_revision状态final_content_gate.py:内容完整性,检查所有待AI/AI_FILL_REQUIRED占位符是否已填(--allow-placeholder仅骨架预览阶段)consistency_check.py:① 禁用词/冲突术语检查;② 承诺↔落点一致性(WARN):response_en中承诺的动作动词(we added/clarified/revised+ 对象)须能在同 unit 的modification_actions或revised_excerpt_en找到对应,否则 WARN(非阻断)final_consistency_report.py:生成统计报告(units 数量、链接率、缺失 excerpt 计数)html_format_check.py:HTML 结构完整性risk_check.py:检测虚构实验/统计、过度承诺、AI 式套话、跨 unit 结构重复citation_guard.py:验证citation_registry.json新增引用真实性(DOI/PMID/撤稿检测);--offline跳过在线验证。报告写入logs/citation_guard_report.json,顶层结构为{"status": "pass"|"warn", "verified": N, "failed": N, "retracted": N, ...}(注意:无report.ok嵌套层;判断通过用status == "pass",判断撤稿用retracted > 0)citation_ref_tracker.py:交叉验证[N]引用编号一致性(未定义引用、编号间隙)
Re-Render 单独脚本:render_from_atomic_json.py(重渲)、state_manager.py(状态同步 sync/show/set/init;改 units 前后用 snapshot/rollback 建还原点与回滚)。
References
按需加载,不要全部预加载:
- Atomic schema:
references/atomic-unit-schema.json,单元 JSON 结构定义(原子化构建时参考) - Atomic workflow:
references/atomic-workflow.md,原子化流程详细说明(首次使用或遇到异常时) - HTML structural skeleton:
references/html-template-full.html,主交付物布局骨架(grid + sidebar + content 结构);实际渲染由scripts/build_full_package.py的render_html()生成完整 UI(含折叠/展开、拖拽分割线、复制按钮、severity 背景色、localStorage 持久化) - Single-comment fill template:
references/html-template.html,单条 comment 的占位符填充骨架,仅配合html-fill-guide.md手工填单页时使用;与上面的整包骨架html-template-full.html不同 - Output contract:
references/output-template.md,输出规范(核对交付物结构时) - Decision rules and sentence patterns:
references/decision-rules.md,回复措辞决策规则(撰写英文回复时) - HTML filling notes:
references/html-fill-guide.md,html-template.html占位符填写注意事项(手工填单页或渲染异常时) - Figure prompt template:
references/figure-prompt-template.md,图片修改/新增时的结构化提示词模板(Output Contract 第3块图片需求时) - Consistency rules:
references/consistency-rules.json,consistency_check.py默认加载的一致性规则集(无需手动引用,gate 自动读取)