关于 self-review
Self-Review 是用于投稿前检查稿件的 Claude 技能,会生成预期审稿意见及具体修改建议。它结合研究设计、统计和报告规范检查,并提供可选的精简与措辞收紧建议。
主要功能
- 01检查研究设计与数据完整性
- 02审查报告规范和统计细节
- 03标记主要与次要审稿疑点
- 04为问题提出具体修改建议
- 05可选 AI 修订和多 Agent 评审
适用场景
- 01投稿前发现稿件问题
- 02将已发现问题整理为修改清单
- 03为重要终审运行可选评审组
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ aperivue/ medsci-skills --skill self-review安装后在 Claude Code 中输入/self-review确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/evalues_schema.mdreferences/domain-probes/ai_overclaiming.mdcase_report.mdclinical_prediction_model.mddiagnostic_accuracy.mdequity_fairness.mdhealth_economic_evaluation.mdimage_synthesis.mdmendelian_randomization.mdmllm_evaluation.mdmodel_development.mdnarrative_review.mdnetwork_meta_analysis.mdobservational_confounding.mdpolygenic_risk_score.mdqualitative_research.mdradiomics.mdrct_trial.mdrecord_routinely_collected_data.mdscoping_review.mdself_improving_system.mdsr_ma.mdsurvey_research.mdsurvival_prognostic.mdreferences/exemplar_findings/cohort_arithmetic_mismatch.mdcross_sectional_mediation.mdestimand_drift_posthoc_primary.mdover_adjustment_collider.mdprediction_two_null_conflation.mdREADME.md详细介绍
自我审查技能
在提交前检查用户自己的手稿,并生成一份可执行的预期审稿意见清单,每条意见都附有具体修改建议——而不是撰写一份审稿报告。
可选标志
--fix:生成报告后,对每个fixable_by_ai: true的问题应用修复,直接编辑手稿,然后汇总差异。绝不修复fixable_by_ai: false的问题(数据缺失、设计缺陷)。最多进行 2 轮修复和重新审查;如果第二轮后评分仍低于阈值,则停止,并将剩余问题报告为结构性问题(在/write-paper中,这会转到 Phase 7.4a Audit Recovery)。--json:同时输出结构化 JSON 块(Phase 3c)。从/write-paperPhase 7 调用时默认启用。--panel:运行多 Agent 专家组审查(Phase 2.6)——让领域专家审稿人并行审查,再由编辑综合意见——而不是单轮审查。此选项默认关闭,因为它会启动 N 个审稿 Agent 和 1 个编辑,耗费的 token 是原来的数倍;仅在面向顶级目标期刊进行高风险的最终审查时使用。不要与--fix组合使用:专家组负责诊断和确定优先级;作者对专家组意见完成分流后,再单独运行--fix。
严重程度说明
- 致命:现有数据无法解决的设计缺陷(会使所有结果失效的数据泄漏、没有参照标准、标签与特征循环关联)。提交后很可能被拒。只有真正的设计层面问题才应标为致命。
- 可修复:问题严重,但可通过现有数据解决(缺少校准、排除标准不明确、缺少置信区间、报告不完整)。大多数问题都属于可修复。
两个目标:底线与上限
底线(类别 A–K 及 Phase 2.5–2.5f 的关卡)旨在尽量避免因故拒稿——虚构引文、数据对不上、过度宣称、缺少清单项目、数据泄漏——其中许多做法是通过添加保留语、注意事项、披露内容或审计记录来实现的。反复迭代会让手稿变得过度严苛:每条发现都正确,但全文读起来却像防御性审计(保留语过多、正文中出现审计记录、摘要被注意事项淹没、最有力的稳健性结果藏在局限性部分)。上限审查(类别 L / Phase 2.5g)在底线关卡之后进行,通读准确的手稿全文,仅提出删减建议——删除、移动或精简。它仅供参考,绝不阻止流程,也不能放宽底线关卡。将其发现单独列为一个区块(Phase 3),不要并入“添加以下内容”的意见中。随后,Phase 2.5i 会结合底线与上限的状态,判断循环是否完成,包括零修改通过的情况。
工作流
阶段 1:接收
-
获取稿件——PDF、Word 文档或粘贴的文本。
-
询问用户:目标期刊(决定报告规范和范围);稿件类型(原创研究/综述/观点文章/技术说明/来信/Meta 分析/病例报告);他们目前担心的问题。在交互式运行中,用一行文字仅一次提供
--panel评审(阶段 2.6),然后继续单次评审,除非用户选择加入。使用--json或从/write-paper调用时,绝不提供或应用评审小组。 -
阅读完整稿件。
-
SSOT 闸门——确认只有一份稿件,而非多份。 自我评审只会读取单个文件, 因此无法察觉旧工作副本与当前投稿副本之间的差异。在运行
--panel或进行任何投稿前评审之前, 检查是否有多个副本:find . \( -path '*manuscript*' -o -path '*main_document*' \) -name '*.md' | grep -v node_modules如果存在多个类似稿件的文件,请确认哪一份是 SSOT,并运行
/sync-submission的差异闸门——STALE_COPY(SSOT 中的数值主张或标题未同步到其他副本) 属于必须先解决的 P0:python3 "${CLAUDE_SKILL_DIR}/../sync-submission/scripts/detect_copy_divergence.py" \ --ssot <ssot>.md --copy <other-copy>.md评审 SSOT 副本,绝不要评审过时副本。**使用
--panel时,此项为阻断条件:**如果find返回 多个文件,且 SSOT 尚未固定(没有包含truth.manuscript_md的SSOT.yaml,也没有 明确的--ssot <path>),则在启动任何评审者之前停止,并请用户指定 SSOT (并解决任何STALE_COPY),因为对过时副本进行小组评审会浪费整个评审流程。不要 自动选择最长或最新的文件。单次评审可以基于提供给它的那一个文件继续进行。
第 2 阶段:系统检查
逐一检查下方“研究类型适配”表中标为适用的类别,并判断审稿人会针对每项提出主要意见还是次要意见。各项检查表位于 references/phases/phase2_systematic_check.md——拿到稿件并确定其类型后,请阅读该文件。
| 类别 | 检查内容 | |
|---|---|---|
| A | 研究设计与数据完整性 | 患者级划分、数据泄漏、输入文本污染、分析单位 |
| B | 参考标准与真实标签 | 定义的具体程度、时间安排、标注者独立性 |
| C | 验证与统计报告 | 置信区间、校准、比较对象、效应量、考虑统计效能的阴性结果、等效界值、交互作用锚定 |
| D | 临床定位与重要性 | 预期用途、过度声称、新颖性、终点↔结论范围 |
| E | 可复现性 | 预处理、模型详情、硬件/软件、数据与代码可用性 |
| F | 报告完整性 | 摘要↔正文一致性、流程图、伦理、缺失数据、字数上限 |
| G | 报告指南合规性 | 将类型与相应清单匹配;/check-reporting 会逐项审查 |
| H | 循环论证 | 标签与特征重叠、同义反复式预测、循环验证 |
| I | 方案异质性 | 多中心采集、协调、时间性方案漂移 |
| J | 方法透明度 | 模型来源、微调、经典论文正文规范 |
| K | 审稿团队一致性 | 仅限 SR/MA——双人审查与单人审查的联合条件、LLM 作为审稿人(两者均属足以构成造假级别的问题) |
| L | 编辑印象与防御性 | 仅供参考,绝不阻断流程——处理上限类别:删除/移至别处/精简 |
在第 2 阶段入口处,无论采用哪条路径,都要运行确定性门禁:
# D. endpoint↔conclusion scope
python3 "${CLAUDE_SKILL_DIR}/scripts/check_scope_coherence.py" \
--manuscript manuscript.md --out qc/scope_coherence.json --strict
# J. classical-style body conventions
python3 "${CLAUDE_SKILL_DIR}/scripts/check_classical_style.py" \
--manuscript manuscript.md --out qc/classical_style.json --strict
# K. reviewer-team consistency (SR/MA only; pass the extraction JSON file or directory)
python "${CLAUDE_SKILL_DIR}/scripts/check_reviewer_team_consistency.py" \
--manuscript manuscript.md --prospero prospero/record.md \
--extraction-json extraction/ --out _audit_self/reviewer_team_consistency.md
# J/D. Perspective structure (genre-gated: silent unless article_type is a Perspective).
# Pass the known type via --type; it also self-detects from the front-matter article_type.
python3 "${CLAUDE_SKILL_DIR}/scripts/check_perspective_structure.py" \
--manuscript manuscript.md --type "${TYPE:-}" --out qc/perspective_structure.json
# Was every reported analysis ever defined (outcome, reference standard)?
python3 "${CLAUDE_SKILL_DIR}/scripts/check_analysis_definitions.py" \
--manuscript manuscript.md --json --strict > qc/analysis_definitions.json
判定结果映射:CROSS_SECTIONAL_PROGNOSTIC、SURROGATE_CARE_DIRECTIVE、SECTION_SYMBOL、INBODY_AI_DISCLOSURE、任何审稿团队命中项(退出码为 1)、MODEL_OUTCOME_UNDEFINED(未命名结局的 Cox/Fine–Gray/logistic 模型),以及 REFERENCE_STANDARD_UNDEFINED(判别或校准没有评分依据)均为预期的主要意见。CROSS_SECTIONAL_YIELD_LANGUAGE、ELIGIBILITY_PROSE、DECIMAL_INCONSISTENCY、EM_DASH_OVERUSE、PERSPECTIVE_HEADING_NOT_ASSERTION、PERSPECTIVE_ABSTRACT_NO_AUTHORIAL_MOVE 和 TIER_LABEL_UNDEFINED 均为次要意见。各判定结果的理由及解决路径见第 2 阶段参考文件。
ANALYSIS_LOAD 仅供参考,不是判定结果:分析过多往往会导致定义被省略,而非构成缺陷。不要为了满足该项而删减分析;应补充被挤出的定义。如果分析负担确实过重,则将防御性分析移至补充材料。
研究类型适配
| 类别 | AI/ML | 观察性研究 | 教育研究 | Meta-Analysis | 病例报告 | 外科研究 |
|---|---|---|---|---|---|---|
| A. 研究设计 | 全面 | 全面 | 部分 | 不适用 | 不适用 | 全面 |
| B. 参考标准 | 全面 | 全面 | 不适用 | 按研究 | 部分 | 全面 |
| C. 验证与统计 | 全面 | 全面 | 全面 | 特殊* | 部分 | 全面 |
| D. 临床定位 | 全面 | 全面 | 全面 | 全面 | 全面 | 全面 |
| E. 可复现性 | 全面 | 部分 | 部分 | 部分 | 不适用 | 全面 |
| F. 报告 | 全面 | 全面 | 全面 | 全面 | 全面 | 全面 |
| G. 指南合规性 | 全面 | 全面 | 全面 | 全面 | 全面 | 全面 |
| H. 循环论证 | 全面 | 部分 | 不适用 | 不适用 | 不适用 | 部分 |
| I. 方案异质性 | 全面 | 全面 | 不适用 | 按研究 | 不适用 | 全面 |
| J. 方法透明度 | 全面 | 部分 | 部分 | 不适用 | 不适用 | 部分 |
| K. 审稿团队一致性 | 不适用 | 不适用 | 不适用 | 全面 | 不适用 | 不适用 |
| L. 编辑印象 | 全面 | 全面 | 全面 | 全面 | 全面 | 全面 |
*Meta-analysis:将 C 替换为异质性(I²、预测区间)、发表偏倚(漏斗图、Egger 检验)以及敏感性/亚组分析。 特定类型的附加检查:
- 观察性研究:混杂因素(DAG 或调整策略)、选择偏倚、暴露测量效度。运行 Phase 2.5e(混杂完整性),然后应用
references/domain-probes/observational_confounding.md中的 O 探针——O1(表 1 中协变量按暴露分组存在不平衡,却未纳入调整集)和 O8(记录数 > 受试者数,但未披露分析单位;check_cohort_arithmetic.py --id-col)是确定性的探针;O7(调整了中介变量/结局的后果)则是其方向相反的对应项。对于临床预测模型(TRIPOD / TRIPOD+AI、嵌套预测变量集比较),还需应用references/domain-probes/clinical_prediction_model.md中的 CP 探针。 - 教育研究:学习成果测量效度、Kirkpatrick 等级、对照组充分性、课程实施忠实度。
- 荟萃分析:检索全面性(2+ 个数据库)、筛选可重复性(2 名审稿人)、逐项研究的 RoB、GRADE 证据确定性。
- 病例报告:诊断推理透明度、时间线完整性、知情同意、可推广性免责声明。
- 外科研究:学习曲线、外科医生的手术量/经验、并发症分级(Clavien-Dindo)、手术细节。
领域探针模块——此处内置了 /peer-review 使用的相同探针。加载其行符合以下条件的每个模块:
| 稿件类型/信号 | 探查模块 |
|---|---|
| 系统综述/荟萃分析 | references/domain-probes/sr_ma.md (P0–P19) |
| 生存时间/生存分析/预后模型(Cox、Fine-Gray、DeepSurv、列线图、风险分层截点) | references/domain-probes/survival_prognostic.md (S1–S9) |
| 放射组学特征的可重复性/采集参数扫描/基于可靠性的特征筛选 | references/domain-probes/radiomics.md (R1–R4) |
| 跨模态图像合成(MRI→PET/MRI→CT/非增强→增强/低剂量→全剂量),并声称可提供功能/分子信息或替代目标模态 | references/domain-probes/image_synthesis.md (IS1–IS4) |
| 叙述性文章/综述文章/入门指南/最新进展 | references/domain-probes/narrative_review.md (RV1–RV9) |
| 观点/评论/视角文章(npj DM 长篇文章、Lancet 评论、NEJM AI/RYAI 短篇结构化文章) | references/domain-probes/narrative_review.md (RV1–RV9) + 上文的 check_perspective_structure.py 门禁 |
| 带有临床主张的 AI/ML 原始研究(可泛化/优于临床医生/可部署/可替代阅片者) | references/domain-probes/ai_overclaiming.md (AO0–AO7) |
| 工程师构建并进行验证的医学影像模型(分割/分类/检测)——数据划分/泄漏、随机种子和运行方差、指标选择、可重复性、参考标准质量;如果提出临床应用主张,还包括显著性图的忠实度、不确定性/分布外检测/弃权及部署可行性 | references/domain-probes/model_development.md (MD0–MD11) |
| 在临床任务上评估的 LLM/MLLM(报告生成、VQA、临床文本提取/分类;闭源 API 或开放权重) | references/domain-probes/mllm_evaluation.md (ME0–ME8) |
| 随机对照试验(平行/交叉/整群/阶梯楔形) | references/domain-probes/rct_trial.md (RC0–RC7) |
| 诊断试验准确性(DTA)原始研究/多阅片者多病例(MRMC)阅片者研究(AI 与阅片者对比、AI 辅助阅片、模态比较) | references/domain-probes/diagnostic_accuracy.md (D1–D12) |
| 病例报告/病例系列(包括不良事件/药物警戒及以影像为主的放射学/核医学/介入放射学报告) | references/domain-probes/case_report.md (CR1–CR9) |
| 声称具有跨人群表现,或将亚组分析作为公平性/公正性论据的 AI/ML、预测或诊断研究 | references/domain-probes/equity_fairness.md (EQ0–EQ6) |
| 孟德尔随机化(双样本、单样本、多变量、药物靶点/cis-MR、非线性 MR) | references/domain-probes/mendelian_randomization.md (MR1–MR8) |
| 开发、验证或作为预测因子/风险分层工具应用的多基因风险评分(PRS/PGS) | references/domain-probes/polygenic_risk_score.md (PG1–PG8) |
| 网络荟萃分析(通过直接和间接证据比较 ≥3 种干预,进行治疗排序;包括成分网络荟萃分析) | references/domain-probes/network_meta_analysis.md (NM1–NM8) |
| 卫生经济学评价(成本效果/成本效用/成本收益/预算影响;基于试验或模型——决策树、Markov、DES) | references/domain-probes/health_economic_evaluation.md (HE1–HE8) |
| 使用常规收集健康数据开展的观察性研究(理赔数据/EHR/登记系统/体检数据库,可关联或不关联) | references/domain-probes/record_routinely_collected_data.md (RD1–RD8) |
| 自我报告调查/问卷研究(KAP、医生/患者调查、网络/电子调查) | references/domain-probes/survey_research.md (SV1–SV8) |
| 范围综述(梳理证据的广度;采用 PCC 框架、证据制表——并非聚焦于效果/准确性问题) | references/domain-probes/scoping_review.md (SC1–SC8) |
| 定性研究(访谈、焦点小组、民族志、扎根理论、现象学、文档分析) | references/domain-probes/qualitative_research.md (QL1–QL8) |
| 自我改进/自我评估系统(批评并改写自身输出的 Agent;使用模型生成的数据进行训练;为训练信号评分的 LLM 评判器;“自我进化”的临床 Agent) | references/domain-probes/self_improving_system.md (SI1–SI7) + ${CLAUDE_SKILL_DIR}/../peer-review/scripts/check_self_improvement_claims.py |
| 将每项探查作为额外的评论来源,补充(而非替代)A–K 类别:威胁结论或设计层面的发现应成为 Fatal 预期重大评论,报告层面的发现应成为 Fixable 预期次要评论,并分别标记最接近的类别字母(A–K)。 |
对于分类器/NLP/表格型 ML 稿件,还要运行特征选择泄漏检查——在交叉验证前,基于完整数据集拟合数据驱动的选择(特征选择、单变量筛选、词汇表、阈值),会使交叉验证指标虚高:
python3 "${CLAUDE_SKILL_DIR}/scripts/check_cv_leakage.py" \
--manuscript manuscript.md --out qc/cv_leakage.json
当选择相关词条与交叉验证同时出现,且未说明在每个折内进行嵌套时(“within each fold”/“nested CV” 会抑制此检查),CV_SELECTION_LEAKAGE(Major)即触发。患者与图像划分泄漏是另一项检查(model-assessment/check_split_leakage.py)。
阶段 2.5:数值交叉核验(内部)
生成报告前,请核验内部一致性:
- 摘要与正文:摘要中的每个数值都与结果和表格相符。
- 表格与文本:样本量、主要结局和 p 值在表格与叙述中一致。
- 图与文本:图例与结果中描述的数据一致。
- 百分比计算:n/N 百分比正确(23/150 = 15.3%,而非 15.0%)。检查会按照单元格所打印的精度进行核验(末位的一半)。
- CI 合理性:置信区间与样本量相符。
- 率值反算:每个率值都能反算出其自身的分子/分母(发生率 ≈ 事件数 / 人年 × 倍数,允许舍入误差)。率值无法重新计算,或意味着事件数超过队列所能提供的数量,均属 Major。
- 排除级联与完整病例计算(队列/观察性研究):起始 N − Σ(排除数)== 最终分析 N,且总数 − 缺失数 == 完整数。脚注中的 N 与减法结果不符,属 Major。
对于队列/观察性研究稿件,请运行检查,而非仅凭目测判断(该检查会解析文本公式和 GFM 表格;若提供已提交的 CSV,还会根据它重新计算):
python3 "${CLAUDE_SKILL_DIR}/scripts/check_cohort_arithmetic.py" \
--manuscript manuscript.md --data analysis/cohort.csv --id-col mockid \
--out qc/cohort_arithmetic.json --strict
RATE_BACKCALC/CASCADE_SUM/PARTITION_OVERLAP 属于预期重大评论(类别 A)。
对于健康筛查/EMR/登记数据,请传入 --id-col(或允许其自动检测受试者 ID 列),以便同时检查分析单位:当 records > unique subjects,且既未说明分析单位,也未说明每位受试者仅保留一条记录的敏感性分析时,会输出 ANALYSIS_UNIT_UNDISCLOSED(Major——非独立观测会导致 CI 偏保守;探查 O8)。将其余内部一致性差异标记为预期次要评论(类别 F)。
然后重新计算审稿人会手动核算的内容:
# Every "n (%)" in a table, recomputed against its own denominator.
python3 "${CLAUDE_SKILL_DIR}/scripts/check_table_percentages.py" \
--manuscript manuscript.md --out qc/table_percentages.json --strict
# Every reported P beside a 2×2 (or r×c) count, recomputed from the counts themselves.
python3 "${CLAUDE_SKILL_DIR}/scripts/check_reported_p_from_counts.py" \
--manuscript manuscript.md --json --strict > qc/reported_p.json
# Every t(df) / F(df1, df2) / χ2(df) / z with a P in its sentence, P recomputed from the statistic.
python3 "${CLAUDE_SKILL_DIR}/scripts/check_test_statistic_p.py" \
--manuscript manuscript.md --json --strict > qc/test_statistic_p.json # add --grim grim.json
# Diagnostic-accuracy only: sensitivity/specificity against the reference-standard denominators.
python3 "${CLAUDE_SKILL_DIR}/scripts/check_dta_denominators.py" \
--manuscript manuscript.md --json --strict > qc/dta_denominators.json
PERCENT_MISMATCH、P_NOT_REPRODUCIBLE 和 DTA_DENOMINATOR_MISMATCH/STAGE_ROWSUM 均属 P0 Major——这不是舍入差异:两个数值中有一个是错的。所有带表格的稿件都要运行前两项;第三项仅用于诊断准确性研究。
check_test_statistic_p.py 会根据统计量和 P 值的打印精度进行核验:如果统计量在舍入区间内无法得出该 P 值,则记为 P_STAT_INCONSISTENT(Minor);如果二者还落在 alpha 的相反两侧(--alpha),则记为 Major P_STAT_DECISION_ERROR。经调整或非标准的 P 值(校正、精确检验、Welch 等),以及只有与未说明的单侧 P 值相符的结果,绝不会判为 Major。--grim 接受已声明的均值([{"label", "mean", "n", "items"?, "decimals"?}]):若不存在能得出该均值的整数总和,则记为 GRIM_INCONSISTENT(Major);当 n·items >= 10^decimals 时,则记为 GRIM_NOT_ASSESSED。
要使用各自的检验核查每个 P 值,请将检验声明为 p_tests.json(复制 ${CLAUDE_SKILL_DIR}/templates/p_tests.json;模式见 references/p_tests_schema.md),并添加 --tests p_tests.json。该行的 P 值会根据声明的检验(fisher、chi2、chi2_yates)重新计算。若报告的 P 值在其全部显示精度区间内,落在与重新计算所得 P 值相对于 alpha 的另一侧,则判定为 P_ALPHA_CROSSING(Major)。若检验为 adjusted、paired 或 other:,该行显示的百分比不是 count/n(分母不同),或表格包含 3 个或更多组(去掉 Total 列后),则判定为 P_NOT_ASSESSED(Minor)。
已知限制:如果未使用 --tests,check_reported_p_from_counts.py 只会在以下情况下标记某行:在所有检验类型下,其报告的 P 值与粗略 2x2 P 值相差超过一个数量级,且表格至少有两行计数。对于报告为 < 界限(<0.001)、但粗略 P 值仅略高于该界限,或落在 alpha 另一侧但差距未达上述程度的情况,该脚本不会标记;对于仅有一行计数的情况也不会标记(纯文本模式下为未解决的问题 SR-01):表格无法显示该 P 值是否经过调整、是否为配对检验,或是否使用了其他分母。请手动对照声明的检验核查此类 P 值,或将其声明出来。check_table_percentages.py 按列读取一个分母。若某个单元格仅在显示精度范围内有偏差(误差在 0.5 个百分点以内),且位于带脚注的行(n = 150、其中 149 个已知时,Current smoker^a | 23 (15.4%)),则标记为 Minor PERCENT_PRECISION_NOTE;未带脚注的行或偏差更大的情况,则标记为 PERCENT_MISMATCH。请对照脚注核实带脚注的行。
阶段 2.5a:数值来源忠实度审计(外部)
所有数字在内部都可能自洽,却仍与来源不符;只有追溯回原始来源才能发现这一点。首先运行显示算术关卡——所述差值必须等于两个显示值相减所得的结果,且精度相同:
python3 "${CLAUDE_SKILL_DIR}/scripts/check_rounded_delta.py" \
--manuscript manuscript.md --out qc/rounded_delta.json
如果 AUC 显示为 0.79 和 0.82,但报告的差值为 0.02,则会触发 ROUNDED_DELTA_MISMATCH(Minor)。如果使用更高精度的数值对(0.794 与 0.816)并报告 2 位小数的差值,则属于合理情况,不会被标记。
**何时运行外部审计:**修订稿、投稿,或用户提出“对照来源核查”“验证提取结果”或“随机抽样”时。其他情况跳过。
**审计内容:**按分层抽取 5 项数值主张——必须包括一项比较组数值和一项修订时新增的数字——并逐项追溯以下三个层级(稿件 → 提取 CSV → 原始来源页面;若由脚本生成,则还需追溯分析脚本 → CSV)。任何不一致都属于重大意见;若导致方向反转或跨越显著性界限,则属于 P0 阻断问题。无论样本量如何,每个 [VERIFY-CSV] 标记都必须纳入审计。
运行外部审计时,请阅读 references/phases/phase2_5a_source_fidelity.md,其中包含追溯流程、记录表、抽样分层,以及四项文本判断规则(手动录入的分析脚本输入;正文与表格的统计量类型不一致,例如正文使用中位数、表 1 却使用均值;模型或调整集发生变更后派生 CSV 过时;内部一致性检查无法发现的方向反转)。
阶段 2.5a-2:设计与检验效能统计量的来源追溯
仅当稿件陈述样本量计算、检验效能数值或可检测效应主张时适用。这些数值是计算得出的,而非复制而来,因此阶段 2.5a 无法核查:请根据稿件自身的输入重新推导每项数值。如果某个数值无法通过已提交的代码复现,或只能通过已提交脚本未实现的方法复现,则属于重大意见(若为核心主张,则为 P0)。当稿件报告样本量/检验效能/MDE 计算时,请阅读 references/phases/phase2_5a2_design_power.md。
阶段 2.5b:根据 ID 集合核对筛选数量(SR/MA + 观察性研究分层/亚组)
**适用时机:**任何 SR/MA 稿件修订,无论处于哪个阶段(阶段 3 之前);或者任何报告有序分层/互斥亚组划分的观察性研究稿件。其他情况跳过。错误的正文总数会在其他所有检查中漏过,因为摘要、方法、结果、图注和补充材料都会相互引用;只有根据 ID 集合重新计数才能发现。
A. SR/MA — 根据 ID 集合重新计数。从筛选 TSV 和共识表中推导每项研究的数量,切勿根据正文推导,并明确列出仅出现在叙述中的 ID(将“10 项仅出现在叙述中的研究”改为“2 项(ID 为 120、474)”)。推导出的总数若与摘要、方法、结果、图 1 图注或局限性部分不一致,即为 P0 Major,会阻止投稿;如果没有可枚举的 ID 增减集合支持,则 N → M 转变声明属于 Major。
B. 观察性研究分层/亚组。互斥划分必须满足 Σ(stratum N) == unique total 和 Σ(stratum events) == total events。分母之和高于唯一队列总数表示受试者被重复计数;每个分层的 n 都等于总人数则说明录入有误。确认任何分层风险比/优势比表中都包含并标注了参照(基线)行。
python3 "${CLAUDE_SKILL_DIR}/scripts/check_cohort_arithmetic.py" \
--manuscript manuscript.md --data analysis/strata.csv --strict
**C. 跨脚本切点一致性。**当同一队列在多个脚本中重新分层时,推导出的分类变量必须使用相同的切点定义(相同的分界值、相同的 right= 闭合方式、相同的标签),否则各分层的 N 会出现偏差,而总人数仍能核对一致。同一检查也适用于在第二个脚本中重建、但遗漏了一个子句的推导式 0/1 复合变量。
python3 "${CLAUDE_SKILL_DIR}/scripts/check_binning_consistency.py" \
--root analysis --root scripts --strict
PARTITION_OVERLAP、BINNING_DRIFT 和 DERIVED_DEF_DRIFT 均属于 P0 Major。在进行 SR/MA ID 集合重新计数或分层队列重新计数时,请阅读 references/phases/phase2_5b_screening_counts.md(集合定义、推导公式、核对区块模板)。
阶段 2.5c:参考文献扫描(幻觉 + 充分性)
2.5c 检查不存在的引文或虚构的第一作者;2.5c-2 检查没有引文支持的主张。两者都需要参考文献列表——如果没有 refs.bib,也没有参考文献列表,则跳过。先运行 /verify-refs --strict(这些扫描会读取其审计结果),然后运行充分性检查器:
python3 "${CLAUDE_SKILL_DIR}/scripts/check_reference_adequacy.py" \
--manuscript manuscript/manuscript.md --bib "$BIB" \
--article-type "$TYPE" ${CAP:+--journal-cap "$CAP"} \
--out qc/reference_adequacy.json --strict
qc/reference_audit.json 中存在 FABRICATED 记录或任何 duplicate_findings[] 条目,均属于阻止投稿的 P0 Major Comment。当稿件包含参考文献列表且你正在审查引文时,请阅读 references/phases/phase2_5c_reference_scans.md。
阶段 2.5d:交叉引用质控(手稿 ↔ 渲染后的 DOCX)
当构建脚本沿用自身的旧版 SSOT 时,正文中的表格/图引用可能会解析到渲染后 DOCX 中的另一条标题;其他阶段都无法发现这一问题。
Markdown 阶段(始终运行)。 每条带标题的 Figure N. / Table N. 都必须在正文其他位置被引用:
python3 "${CLAUDE_SKILL_DIR}/scripts/check_figure_citation.py" \
--manuscript manuscript.md --out qc/figure_citation.json
FIGURE_ORPHAN / TABLE_ORPHAN(次要):有图例但正文中没有引用的浮动对象。
DOCX 阶段(仅当存在渲染后的 DOCX 时——流转稿、构建后检查):
python3 "${CLAUDE_SKILL_DIR}/../manage-refs/scripts/check_xref.py" \
--md manuscript/manuscript.md --docx manuscript/manuscript_final.docx \
--out qc/xref_audit.json [--allow-separate-attachments]
MISMATCH 始终为主要问题(P0)。MISSING_DOCX 和 MISSING_BODY 默认均为主要问题(P0)。
对于将图表作为单独附件接收的期刊(European Radiology、Radiology、AJR),传入 --allow-separate-attachments:这会将 MISSING_DOCX 降级为次要问题;仅当未提供 --docx 时,MISSING_BODY 才会降级为次要问题——由于没有进行检查,应将这些行视为未经验证(summary.downgraded_unchecked),并在提交前使用 --docx 重新运行。对于渲染后的 DOCX 中确实存在浮动对象的情况,MISSING_BODY 仍为 P0(SSOT 漂移)。UNCITED 为次要问题。
在 --fix 模式下,切勿自动修复交叉引用缺陷,因为如果不重新运行 DOCX 构建,重写正文标题只会让不匹配转移位置。将每条 P0 行单独输出为一条编号为 M 的主要评论,设置 category: "F" 和 fixable_by_ai: false,并引导用户前往 /write-paper 第 7.6a 步。若交叉引用检查门已触发且你正在撰写核对结果,请阅读 references/phases/phase2_5d_xref_qc.md。
阶段 2.5e:混杂因素完整性(仅观察性研究)
运行时机: 中心论点是校正后的暴露因素–结局关联的观察性手稿(队列、病例对照、横断面、健康筛查登记研究)。RCT、诊断准确性研究、SR/MA 和描述性研究跳过此步骤。
通过正文审阅无法发现这样一个协变量:它已测量、在表 1 中的暴露组间不平衡,且未纳入校正集(探查 O1)。运行检查门,并将每个 UNADJUSTED_IMBALANCED 协变量视为预期主要评论(类别 A):
python3 "${CLAUDE_SKILL_DIR}/scripts/check_confounding_completeness.py" \
--table1 table1_by_<exposure>.csv \
--adjusted-list "age, sex, BMI, hypertension, diabetes" \
--exposure-defining-list "body mass index, waist, fasting glucose, triglycerides, HDL cholesterol" \
--out qc/confounding_completeness.json --strict
对于观察性手稿,请阅读 references/phases/confounding_completeness.md 以了解完整流程:针对指南定义暴露因素(MASLD / metabolic syndrome / CKM / sarcopenia / frailty)的 --exposure-defining-list 过度校正豁免、基于 mean ± SD 的 SMD 备用计算方法、扩展校正敏感性模型(在缩减后的完整病例框架上重新拟合未校正估计值,而非使用完整框架),以及 references/domain-probes/observational_confounding.md 中的 O2–O10 探查。
第 2.5f 阶段:主张与材料交叉核查
本阶段会将主张与其应追溯到的材料(预注册、方案、分析输出)进行核对,找出正文内部自洽却与这些材料不符的情况。运行各项检查(传入补充材料,确保语料完整):
# 1. claims ↔ pre-registration/protocol: estimand provenance + E-value arithmetic
python3 "${CLAUDE_SKILL_DIR}/scripts/check_claim_artifact.py" \
--manuscript manuscript.md --prereg prereg.md \
--out qc/claim_artifact.json --strict # + --evalues evalues.json (templates/) to recompute declared E-values
# 2. Methods ↔ Results ↔ disk coverage (both directions: promised-absent AND run-but-unreported)
python3 "${CLAUDE_SKILL_DIR}/scripts/check_artifact_coverage.py" \
--manuscript manuscript.md --supplement supplement.md --analysis-dir output/analysis \
--out qc/artifact_coverage.json --strict
# 3. reader-facing residue in EVERY rendered artifact, not just the body
python3 "${CLAUDE_SKILL_DIR}/scripts/check_supplement_hygiene.py" \
--supplement supplement.md --supplement tables.md --supplement captions.md \
--manuscript manuscript.md --out qc/supplement_hygiene.json --strict
# 4. float AND in-text reference-number ([N]) citation order — a desk-reject item the hygiene gate does not cover
python3 "${CLAUDE_SKILL_DIR}/scripts/check_citation_order.py" \
--manuscript manuscript.md --out qc/citation_order.json --strict
# 5. a headline null is uninterpretable without a precision statement
python3 "${CLAUDE_SKILL_DIR}/scripts/check_null_calibration.py" \
--manuscript manuscript.md --out qc/null_calibration.json --strict
# 5b. a headline OR/HR/RR whose 95% CI spans an order of magnitude (a direction, not a magnitude), or events/covariates < 10 (EPV)
python3 "${CLAUDE_SKILL_DIR}/scripts/check_effect_stability.py" \
--manuscript manuscript.md --out qc/effect_stability.json --strict
# 5c. incorporation bias — a trajectory-defined reference standard with a trajectory predictor (growth) reported as associated with the outcome
python3 "${CLAUDE_SKILL_DIR}/scripts/check_incorporation_bias.py" \
--manuscript manuscript.md --out qc/incorporation_bias.json --strict
# 6. reader/observer study only — prove the (call × confidence) → score encoding is strictly
# monotonic; a folded score silently mis-estimates the AUC and no prose review can see it
python3 "${CLAUDE_SKILL_DIR}/../analyze-stats/scripts/rating_monotonicity.py" \
--encoding score_def.json
| 判定 | 严重程度 |
|---|---|
PRIMARY_REASSIGNED | 重大——主要结局在结果已知后被重新指定 |
EVALUE_ARITHMETIC | 重大——对已声明的主要结局估计值重新计算;EVALUE_NON_PRIMARY 是提示性标记(检查 E 值界定的是哪个估计值) |
PROMISED_ABSENT、DISK_UNREPORTED、PROMISED_STAT_NO_VALUE | 重大 |
SUPP_INTERNAL_LABEL、SUPP_PLACEHOLDER、SUPP_BUILD_MARKER、SUPP_RESPONSE_FRAMING、SUPP_PLANNING_RESIDUE、SUPP_XREF_UNRESOLVED | 重大——补充材料中的疏漏在技术检查中与正文中的疏漏一样严重 |
CITATION_ORDER | 重大;CITATION_GAP 轻微 |
CONFIRM_NULL_NO_MDE | 重大 |
ESTIMAND_DRIFT、PRIMARY_DISCLOSURE_NOTE | 提示性轻微——绝不会阻止通过。 来源匹配采用模糊方式(基于词项重合);请先对照实际预注册进行确认。PRIMARY_DISCLOSURE_NOTE 标记的是指南建议的诚实披露——请勿因此处罚。 |
使用 --evalues(架构见 references/evalues_schema.md)时,系统会根据每个已声明的 E 值所对应的 RR 和 CI,按所有数字的印刷精度重新计算 E 值(VanderWeele–Ding;CI 的 E 值取最接近 1 的界限):EVALUE_DECLARED_MISMATCH 为重大,EVALUE_DECLARED_NOT_IN_TEXT 为轻微;OR/HR 必须转换为 RR,或声明为 other:(轻微,不重新计算)。
已知限制:仅分析正文模式下,E 值检查会在每个“.”处拆分句子,因此“HR 1.52”中的小数点可能导致估计值被截出其检查范围(EVALUE_UNVERIFIABLE);系统无法识别“E-value = 3.10”、“(E-value 3.10)”及其复数形式,也无法识别 CI 界限的 E 值(未使用 --evalues 时会产生未解决问题 SR-02)。请手动检查,或将其声明出来。
没有脚本能完成的检查(需进行正文判断):
- 主要结局变更防护——针对同一对比有两个模型,一个显著、一个为零效应,却突出显示显著结果:请确认哪个是预先指定的。
- 标题与自身敏感性分析的方向——标题中的主张若与作者自己的敏感性分析估计值方向相反,意味着论文与自身的稳健性检查相矛盾(重大)。
- 图中嵌入的数字无法通过 grep 检查——以上所有数值审计都会漏掉栅格化图像中的数字。提交前请逐页目视检查每张图。
每次调整表述后,都要重新运行 /sync-submission 的 check_cross_artifact_stale.py,而不只是开始时运行一次。对于事件发生时间结局的稿件,请执行 references/domain-probes/survival_prognostic.md 中的探查项 S8(目标估计量的来源)。若上述检查触发,且你需要了解其理由和解决路径,或需要核对预注册,请阅读 references/phases/phase2_5f_claim_artifact.md。
阶段 2.5g:编辑印象/防御性措辞扫描(上限检查)
在底线关卡(阶段 2.5–2.5f)之后运行:它会读取准确的稿件,并建议删去哪些内容。此检查仅供参考,且不会阻断流程——它绝不会产生 Major,也不会阻止提交。
python3 "${CLAUDE_SKILL_DIR}/scripts/check_editorial_impression.py" \
--manuscript manuscript.md --out qc/editorial_impression.json
即使使用 --strict,它也会以状态码 0 退出,并最多生成六条判定,每条都带有一个 SUBTRACTION
action:
| 判定 | 读起来像是 | 操作 |
|---|---|---|
HEDGE_DENSITY | 每 1,000 个叙述性词语中的防御性限定词数量超过阈值 | TIGHTEN |
HEDGE_REPEAT | 正文和摘要中重复出现同一种限定语 | TIGHTEN |
AUDIT_IN_BODY | 叙述中出现 SHA/提交记录/单元测试/锁定后/清单/种子 | MOVE(→ 方法/补充材料) |
LIMITATIONS_VOLUME | 局限性部分列出的条目过多 | TIGHTEN(合并) |
ABSTRACT_CAVEAT_LOAD | 摘要中有多处限定语从句 | TIGHTEN |
BURIED_DEFENSE | 有力的数值稳健性结果只出现在局限性/补充材料中 | MOVE(→ 结果) |
每项发现都会成为 issues[] 中的一条 Minor 条目,包含 category: "L"、category_name: "Editorial impression"、issue_type: "editorial_impression"、subtype: <verdict> 和 action: "REMOVE" | "MOVE" | "TIGHTEN",并在阶段 3 的“编辑印象风险”区块中报告。将这些条目标记为
fixable_by_ai: false——收紧限定语或移动结果属于需要作者判断并体现作者风格的修改——但明确重复的 HEDGE_REPEAT 除外,--fix 可以将其合并为一处表述。
当前序阶段建议添加限定语或披露信息时,应结合 L 类问题权衡:诚信至关重要的披露必须保留,简洁表述一次;防御性过度披露则应删去或移至别处。只在一处说明,并指向补充材料,而不要在每个论述位置重复。
阶段 2.5h:基线漂移(以最近一次经人工批准的版本为基准)
在上限检查之后、循环控制器(阶段 2.5i)之前运行。每轮润色都以上一版 AI 输出为基线,因此表述偏差会在无形中累积;此关卡会将稿件与最近一次经人工批准的版本(即发送给资深作者/合著者审阅的冻结版 v_N,而非最近一版 AI 输出)进行比较。若没有基线(初稿),则跳过此项。
python3 "${CLAUDE_SKILL_DIR}/scripts/check_baseline_drift.py" \
--manuscript manuscript.md --baseline "$BASELINE_MD" \
--out qc/baseline_drift.json
| 判定 | 信号(基线 → 当前版本) | 纳入报告的方式 |
|---|---|---|
STRENGTH_INFLATION | 确定性标记增加,同时限定语减少 | Minor — 将语气调整回已批准的强度 |
SIGNIFICANCE_INFLATION_DRIFT | 新增 novel/pivotal/unprecedented 等词语 | Minor — 删除夸大表述 |
SCOPE_INFLATION_DRIFT | 新增概括性短语(“在临床实践中”) | Minor — 估计目标并未扩大;重新限定范围 |
HEDGE_ACCRETION | 限定语/注意事项密度上升 | Minor — 累积性过度收紧;TIGHTEN |
所有发现均为 Minor,且仅供参考;此关卡绝不会阻断流程。应将漂移视为对照已批准基准进行检查的提示,而非要求回退——新的分析可能足以支持更强的论断,但作者应予以确认。qc/baseline_drift.json 会传递给循环控制器,因此发生漂移的稿件不会被视为零修改的 PASS。
阶段 2.5i:精修终态(循环控制器)
在完成底线门禁和上限检查后,最后运行此步骤:它会读取它们的 qc/*.json 产物,并判断“审阅 → 修订 → 审阅”循环是否已完成,避免对准确的稿件进行不必要的过度强化。此步骤仅供参考,绝不会阻止流程;不要将其视为底线检测器的第二道门禁,底线检测器在 --strict 模式下已经会因各自的 Major 而失败。
python3 "${CLAUDE_SKILL_DIR}/scripts/refinement_stop.py" \
--qc-dir qc --out qc/refinement_stop.json
| 判定结果 | 含义 | 执行框架必须执行的操作 |
|---|---|---|
CONTINUE | 底线门禁仍报告 Major | 仍有实质工作要做——继续 |
STOP_OVERHARDENING | 底线检查干净,但上限检查发现累积问题 | 停止添加;只剩可选的删减(REMOVE/MOVE/TIGHTEN)——不要再运行添加内容的轮次 |
STOP_MINOR_OPTIONAL | 底线检查干净,只剩可选的 Minor 润色 | 停止必需工作循环;将 Minor 项目列为可选清单,不要为此继续循环 |
STOP_ZERO_EDIT | 底线检查已达固定点,上限检查干净 | 稿件原样即可提交——无需编辑。不要凭空制造修改。 将零编辑 PASS 作为正式结果报告 |
INDETERMINATE | 尚无门禁产物、未解析出底线门禁(例如只运行了上限检查),或 qc/*.json 为空/无效(门禁在 --json > file 下崩溃) | 先运行或重新运行底线 + 上限门禁 |
已知限制:如果某个按检测器分类的产物,其发现项不在 claims / findings 下(例如 /verify-refs 的 qc/reference_audit.json),则会被列为 Unparsed 并显示 WARNING,但这本身不会阻止 STOP_*;采取停止操作前,请先查看该产物自身的判定结果。
一旦判定结果为任意 STOP_*,就停止添加内容的循环:在阶段 3 报告中说明终态,不要重新运行自我审阅来寻找“另一个问题”。零编辑或仅剩可选 Minor 的结果都是合理结果,并不代表尝试不够。
阶段 2.5j:精修回归(跨轮次比较修复与破坏)
每轮都运行,在循环控制器之后执行。修订解决发现项 X 的同时,可能引入发现项 Y,而通过率会掩盖这一点;此步骤会读取运行历史记录表(一行对应一次运行,记录其发现项的 verdict@where 指纹),并报告修订修复了什么、破坏了什么。
python3 "${CLAUDE_SKILL_DIR}/scripts/refinement_regression.py" \
--qc-dir qc --ledger qc/refinement_ledger.jsonl --append \
--out qc/refinement_regression.json
在实际运行时使用 --append,将当前发现项作为下一条记录;省略此选项则只进行分类,不予记录。
| 判定结果 | 含义 | 执行框架必须执行的操作 |
|---|---|---|
PROGRESSING | 发现项已解决,没有新增项 | 继续 |
REGRESSION | 修订引入了新的发现项 | 接受修复前先审查新发现项——通过率提高了,但也有内容被破坏 |
CHURNING | 已解决的发现项再次出现(镜像循环) | 停止修订并重新锚定——更多轮次只会重新推导问题,无法收敛 |
CONVERGED | 没有新增项,也没有遗留项 | 循环已完成 |
INDETERMINATE | 首次运行,没有先前记录 | 修订后重新运行 |
此步骤仅供参考,绝不会阻止流程。在阶段 3 中报告这两个维度:只有在解决了发现项,且 new/churn 列均为空时,修订才算有所改进。
阶段 2.6:多 Agent 小组审阅(--panel,可选)
仅当传入 --panel 时运行此阶段;应在数值审计(阶段 2.5–2.5d)之后运行,以便审阅者看到经源文件核实的数字,并在阶段 3 报告之前运行,因为阶段 3 报告会用到审阅结果。启动任何操作前,必须满足两项条件:SSOT 必须唯一(阶段 1 步骤 4 的门槛——如果有多个未固定的、类似手稿的 .md 文件,则暂停并询问);审阅者名单不得形成底层技术单一化(与起草者共用模型的审阅小组会继承其盲点;至少安排一个视角由 Codex 或人类合作者提供)。check_panel_diversity.py --strict 会强制执行第二项条件,并在返回的审阅少于启动的审阅者数量时触发 PANEL_UNDERRETURN——返回审阅数少于 2 的小组属于运行失败,而非审阅不充分。
传入 --panel 时,请阅读 ${CLAUDE_SKILL_DIR}/references/phases/phase2_6_panel.md——其中包含审阅者集合表、名单清单、编辑综合意见和视角多样性门槛。
阶段 3:报告
撰写评论前,先浏览 references/exemplar_findings/ 中与当前发现相关的示例(队列算术不匹配、未调整的混杂因素、横断面研究范围夸大、事后主要结局/估计目标偏移)。每个示例都展示了完整结构——门槛触发、以审阅者口吻撰写的评论、致命/可修复、类别字母、修复建议、fixable_by_ai、可用于 R0 的表述。遵循其结构,而非措辞;这些示例是合成的。
按以下结构将报告写入 qc/self_review.md:
# Self-Review Report: {manuscript title}
**Target journal**: {journal}
**Manuscript type**: {type}
**Date**: {date}
**Overall assessment**: {1-2 sentences: key vulnerability and overall readiness}
## Anticipated Major Comments (fix before submission)
M1. **{Issue title}** [{Category letter}]
{1-2 sentences: what a reviewer would likely say, with specific manuscript location}
**Severity**: {Fatal | Fixable}
**Suggested fix**: {specific, actionable fix using existing data}
M2. ...
## Anticipated Minor Comments (address proactively)
m1. **{Issue}** [{Category}]: {1 sentence with location + fix}
m2. ...
## Editorial-Impression Risks (REMOVE / MOVE / TIGHTEN)
*The subtraction axis — what to take out, move, or tighten so the accurate manuscript reads
confidently. Advisory and non-blocking; from Phase 2.5g / category L. Omit this block only if the
scan returned nothing.*
L1. **{Issue}** [{REMOVE | MOVE | TIGHTEN}]: {1 sentence — what reads as over-defensive and where, with the subtraction to make}
L2. ...
## Strengths (emphasize in cover letter)
- {Specific strength 1}
- {Specific strength 2}
- ...
将 ADD / FIX 轴(主要/次要评论)与 SUBTRACTION 轴(编辑印象风险)在视觉上分开;绝不要把 L 项归入次要评论。
在建议的修复方案和阶段 4 起草的任何文本中:
- 参考文献仅可来自
/search-lit,且必须有已确认的 DOI 或 PMID;其他参考文献均标记为[UNVERIFIED - NEEDS MANUAL CHECK](阶段 2.5c 会拦截标记为FABRICATED的参考文献)。 - 对于无法核实的临床定义、诊断标准和指南建议:标记
[VERIFY]并询问用户;绝不要编造。
简洁性:每条评论都要说明审阅者会提出什么、问题在哪里以及如何修复:主要评论用几行,次要评论用一两句话,编辑印象风险用一句话。列出门槛检查和审阅中产生的所有主要评论(每条 P0 门槛记录各自构成一条主要评论);绝不要为满足数量要求而合并或删除。优点:仅列出值得在投稿附信中重申的少数优点——绝不要写任何抢先回应异议的句子(预期异议应放入回复信条目;参见 §L)。
阶段 3b:R0 编号(可选)
如果用户计划在收到真实审阅意见后使用 /revise,请提出追加带 R0 编号的输出,以便之后区分预期评论(R0)和新出现的评论(仅 R1):
## R0 Pre-Submission Findings (for /revise cross-reference)
R0-1 [MAJ] {mapped from M1}: {issue title}
R0-2 [MAJ] {mapped from M2}: {issue title}
R0-3 [MIN] {mapped from m1}: {issue title}
...
阶段 3c:结构化 JSON 输出(--json)
仅当传入 --json 时(或其他技能会使用本次运行结果时)才输出机器可读的 JSON:将该代码块追加到报告中,并写入 qc/self_review.json。传入 --json 或下游技能会使用本次运行结果时,请阅读 ${CLAUDE_SKILL_DIR}/references/phases/phase3c_json_output.md,了解架构、字段含义和完整示例。
JSON 包含一个 coverage 台账(记录 A–L 各类别及每个已加载探测模块的状态),并且只要任何适用条目的状态为 not_assessed,就不得标记为 PASS。使用 scripts/check_review_coverage.py --review qc/self_review.json --out qc/review_coverage.json --strict 完成检查(退出代码 1 = 有尚未处理的类别却标记为 PASS;任何使用方读取前都必须先修正 JSON)。
阶段 4:修复支持(按需)
审阅在阶段 3 结束。当传入 --fix 或用户要求你应用或起草针对这些发现的修复时,请阅读 ${CLAUDE_SKILL_DIR}/references/phases/phase4_fix_support.md。