关于 citation-audit
Citation Audit 是面向论文作者的参考文献审计技能,在投稿前核查引用的存在性、元数据准确性及其与文中论述的匹配度。它为每条引用生成判定,并输出 Markdown 报告和 JSON 记录。
主要功能
- 01核查引用文献是否真实存在
- 02比对作者、年份、标题与发表 venue
- 03检查文献是否支持文中论述
- 04生成逐条判定与审计报告
- 05输出机器可读的 JSON 记录
- 06可选检测未引用的文献条目
适用场景
- 01论文投稿前审计参考文献
- 02发现引用与论述语境不匹配
- 03核对作者、年份或 DOI 等元数据
- 04清理未被引用的文献条目
MCP 相关
该技能通过 Codex MCP 将引用条目和上下文发送给外部审查器,并要求进行网页、DBLP 或 arXiv 检索。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ wanshuiyin/ auto-claude-code-research-in-sleep --skill citation-audit安装后在 Claude Code 中输入/citation-audit确认已加载。
详细介绍
引文审查
每个审稿人时段开始前,请遵循 Selectable Reviewers: 通过
reviewer_route.py和规范的辅助解析器依次解析调用 →.aris/reviewer.json→ Claude Code 默认值(Codex MCP),并保留 此时段的层级、新鲜上下文、源文件/图像输入和确定性门控。 下方的 Codex 示例/固定配置仅适用于backend=codex;其他路由使用各自的首次调用/回复约定。保存路由和实际返回的身份; 不可用的选择记为REVIEW_UNAVAILABLE。根据实际的系列/完成情况/范围对接受情况进行分类。 将调用中的审稿人/模型/推理强度覆盖项传递给包含审稿人的子任务。生成工作进程保持不变。
🔒 不要用
/loop、/schedule或CronCreate包装此技能。 它负责给出判定——即评估书目是否正确。定时重复运行此判定不会带来新信号(只有在书目发生变化时才会改变)。安排它之前的外部等待——书目定稿 → 然后审查一次。参见shared-references/external-cadence.md。
通过以下三个相互独立的层面,核验论文中的每个 \cite{...}:
- 是否存在 — 被引用的论文是否确实存在于所声称的 arXiv ID/DOI/会议上。
- 元数据是否正确 — 作者姓名、年份、发表渠道和标题是否与权威来源(DBLP、arXiv、ACL Anthology、Nature、OpenReview 等)一致。
- 上下文是否恰当 — 被引用的论文是否确实支持文稿中用它来支撑的论点。
此技能是 \aris{} 证据与论点保障体系的第四层,与 experiment-audit(代码)、result-to-claim(科学结论判定)和 paper-claim-audit(数值论点)相辅相成。它们共同构成一个自下而上的完整性体系,从原始评估代码一直延伸到文稿书目。
何时使用此技能
在投稿前运行。 合适的门控时点是:
paper-write生成 LaTeX 草稿和 bib 文件之后paper-claim-audit核验数值论点之后- 投稿前最终执行
paper-compile之前
不要在草稿尚未完成时运行此技能——大部分工作在于结合上下文逐一核对每个 \cite,在占位文本上这么做是浪费。
此技能能发现的问题
危险的引文问题并不是一眼就能识别的明显伪造引文。真正危险的问题包括:
- 上下文不符的引文:论文真实存在,但所引述的论点并非该论文实际得出的结论(例如,引用 Self-Refine 来支持“自我反馈会产生相关错误”,而 Self-Refine 实际上论证的是相反观点)。
- 作者信息幻觉:匿名作者占位内容未被清除,遗漏合著者或作者顺序错误。
- 标题变动:arXiv v1 和 v3 的标题不同,却被悄然合并。
- 发表渠道混淆:引用的是 arXiv 预印本,但官方发表渠道现已是 CVPR/ICML/NeurIPS,却仍使用错误的记录。
- 年份不一致:arXiv 2023 年预印本于 2024 年被会议接收,但年份标注不一致。
- 虚构 DOI:DOI 看起来真实,却无法解析。
- 自引年份偏差:引用自己的先前作品时,年份相差一年。
常量
- REVIEWER_MODEL =
gpt-6-astra— 通过 Codex MCP 使用。默认用于支持 Web 访问的跨模型审查。 - CONTEXT_POLICY =
fresh— 每次审计都使用新的审查线程(REVIEWER_BIAS_GUARD)。绝不使用codex-reply。 - WEB_SEARCH = required — 审查者必须实际检索 Web/DBLP/arXiv,而不能凭记忆进行模式匹配。
- OUTPUT =
CITATION_AUDIT.md— 面向人工阅读的逐条判定报告。 - STATE =
CITATION_AUDIT.json— 机器可读的判定记录,可供下游工具使用。 - SOFT_ONLY =
false— 设为true时(通过— soft-only/— soft_only标志设置),审计仍照常运行全部三层,但禁止修改任何.bib文件。原本会修改 bib 的发现(FIX/REPLACE/REMOVE)将转换为针对引用它们的*.tex文件的逐处句子改写建议。/resubmit-pipeline的 Phase 1 使用此选项,以遵守用户“冻结 bib”的硬性约束。 - RENDER_HTML = true — 设为
true时(默认值),写入报告后自动将CITATION_AUDIT.md渲染为 HTML。使用完整 Codex 审查门槛(审计类产物——渲染保真度检查符合该技能的跨模型审计不变量)。设为false可跳过,也可传入— render html: false。
工作流
第 1 步:查找 bib 文件和章节文件
查找:
- 论文目录下的
references.bib(或paper.bib/类似文件) - 所有包含
\cite{...}调用的*.tex文件(通常位于sec/或sections/)
如果存在多个 bib 文件,请分别审计。
第 2 步:提取所有(cite-key,context)对
针对论文中的每个 \cite{key1,key2,...} 调用:
- 记录 cite key
- 记录文件和行号
- 记录引用周围的句子(至少包含引用所在处前后的 1 个完整句子,以便检查上下文)
输出一个扁平列表,包含 (key, file, line, surrounding_sentence) 元组。
同时构建反向索引:针对每条 bib 记录,列出所有引用它的位置。
定义工作流其余部分将用到的两个协议集合:cited_keys 是已审计的 *.tex 文件中任意 \cite{...} 调用所含的唯一 cite key 集合(去重),bib_keys 是从已审计 bib 文件中解析出的 key 集合。cited_keys 用于第 3 步(只审计被引用的记录);bib_keys \ cited_keys 是由 --uncited 选项启用时显示的未引用残余集合。
如果用户传入了 --uncited,还要在此处计算集合差 bib_keys \ cited_keys 并保存起来,以供第 5 步和 JSON 汇总使用;协议详见下方“未引用记录检测(可选)”。集合差计算只是字符串操作,不会消耗审查额度。
将提取的上下文保存到 paper/.aris/citation-audit/contexts.txt,以便审查者直接读取。记录 audited_input_hashes 中的文件路径时,使用相对于论文目录的路径 .aris/citation-audit/contexts.txt;不要将文件暂存到 /tmp 或其他验证器之后无法重新计算哈希的临时位置。
第 3 步:将每条记录发送给新的跨模型审查者
对于每条被引用的 bib 记录——即 cited_keys 中至少有一个提取出的引用上下文的 key——调用 mcp__codex__codex(而非 codex-reply——每条记录使用新的线程,或批量处理并明确隔离每条记录)。不要将 bib_keys \ cited_keys 中的记录发送给审查者;这些记录仅用于检测,只有在明确启用 --uncited 时才会显示(见下方“未引用记录检测”)。
首先解析此审查者插槽;以下是
backend=codex示例。
mcp__codex__codex:
model: gpt-6-astra
config: {"model_reasoning_effort": "xhigh"}
sandbox: read-only
prompt: |
You are auditing a bibliographic entry. Use web/DBLP/arXiv search.
## Bib entry
@article{key2024example,
author = {...}, title = {...}, journal = {...}, year = {...}, ...
}
## Where this entry is cited in the paper
[paste extracted contexts]
For this entry, verify:
1. EXISTENCE: does this paper exist at the claimed arXiv ID / DOI / venue?
Output: YES / NO / UNCERTAIN, with the verifying URL.
2. METADATA: are author names, year, venue, title correct?
For each, output: correct / wrong: should be ... / typo: ...
3. CONTEXT: for each use, does the cited paper actually support the surrounding claim?
Output per-use: SUPPORTS / WEAK / WRONG, with one-sentence reasoning.
VERDICT: KEEP / FIX / REPLACE / REMOVE
- KEEP: entry is clean, all uses are appropriate
- FIX: metadata needs correction; uses are appropriate
- REPLACE: cite is wrong-context, find a different paper that actually supports the claim
- REMOVE: entry is hallucinated or unsupportable
Be honest. If you cannot verify online, say UNCERTAIN; do not guess.
按照审查追踪协议,将响应保存到 .aris/traces/citation-audit/<date>_runNN/<key>.md。
第 4 步:汇总判定结果
按照下方 “提交产物生成” 中定义的架构(此文件唯一权威的架构)构建 CITATION_AUDIT.json。
每条目的台账数据放在 details.per_entry 下,而不是顶层的 entries 字段中。顶层的 verdict 是单个总体值(PASS / WARN / FAIL / NOT_APPLICABLE / BLOCKED / ERROR),根据“提交产物生成”中的决策表从各条目的判定结果推导得出;顶层的 summary 是一行可供人阅读的字符串。
具体来说,details 包含逐条目的台账:
"details": {
"total_entries": 29,
"counts": { "KEEP": 11, "FIX": 14, "REPLACE": 3, "REMOVE": 1 },
"per_entry": [
{
"key": "lu2024aiscientist",
"verdict": "KEEP",
"axis_failures": [],
"uses": [
{"file": "sections/1.intro.tex", "line": 11, "verdict": "SUPPORTS"},
{"file": "sections/6.related.tex", "line": 8, "verdict": "SUPPORTS"}
]
},
{
"key": "madaan2023selfrefine",
"verdict": "FIX",
"axis_failures": ["CONTEXT"],
"uses": [
{"file": "sections/2.overview.tex", "line": 42, "verdict": "WRONG",
"note": "Self-Refine demonstrates iterative improvement, not correlated errors"},
{"file": "sections/6.related.tex", "line": 13, "verdict": "SUPPORTS"}
]
}
]
}
完整产物的字段包括顶层字段 audit_skill、verdict、reason_code、summary、audited_input_hashes、trace_path、thread_id、reviewer_model、reviewer_reasoning、generated_at、details,详见“提交产物生成”。
第 5 步:生成便于阅读的报告
写入 CITATION_AUDIT.md:
# Citation Audit Report
**Date**: 2026-04-19
**Bib file(s)**: references.bib
**Total entries**: 29
## Summary
| Verdict | Count |
|---------|------|
| KEEP | 11 |
| FIX | 14 |
| REPLACE | 3 |
| REMOVE | 1 |
## Priority Fixes (CRITICAL — apply before submission)
### REMOVE: anon2025placeholder
- Author listed as "Anonymous" — canonical record exists with real authors and full title
- Title is incomplete
- ACTION: Replace key with the canonical citekey, update authors and title
### REPLACE-CONTEXT: example2023priorwork in sec/2.overview.tex:42
- Cited to support a specific technical claim
- The cited paper actually demonstrates a different (related but distinct) phenomenon
- ACTION: Rewrite the sentence; cite the prior work for what it actually establishes
[... continues for each entry ...]
## All-Clean Entries (no action needed)
[list of KEEP keys]
启用 --uncited 时,在“All-Clean Entries”之后追加以下章节:
## Uncited Entries (opt-in)
The following bib entries are present in the audited bib file(s) but are not referenced by any `\cite{...}` in the paper body:
- `author2010example` — suggestion: prune (uncited; no local evidence of intent)
- `someone2015othercite` — suggestion: prune (uncited; no local evidence of intent)
- `third2024todo` — suggestion: check (a `% TODO: cite third2024todo` comment was found in `sections/3.related.tex`)
This section is detect-only; it does not change the top-level verdict.
第 6 步:应用修复(交互式)
对于每个 FIX/REPLACE/REMOVE 判定结果,提示用户:
Fix [key]?
Change: <description of change>
Files affected: references.bib + sec/X.tex:Y
[Apply / Skip / Defer]
如果 AUTO_APPLY = true,则应用所有 FIX 级别的变更(仅限元数据更正)。REPLACE 和 REMOVE 始终需要人工批准,因为它们涉及内容变更。
第 7 步:重新编译并验证
latexmk -C && latexmk -pdf -interaction=nonstopmode main.tex
确认:
- 没有新增
Citation undefined警告 - 没有
Reference undefined警告 - 页数未变,或因元数据修复仅有微小变化
未引用条目检测(可选启用)
默认:禁用。现有用户不会看到行为变化——只审计 \cite{...} 键,手稿中没有 \cite 引用的 bib 条目将被静默忽略。
可选启用:调用时传入 --uncited。此时,技能会在第 2 步后进行集合差异比较,并报告所有经过审计的 bib 文件中存在、但论文中任何位置都没有引用的条目。仅检测——未引用条目不会发送给跨模型审阅器,因此不会产生额外的审阅器或网络查询成本。
为何采用可选启用
此技能的主要输出是对已引用条目的三轴审计。默认显示未引用的 bib 条目会:(a) 改变每次现有运行的长篇输出;(b) 给有意维护超集 bib 文件的用户增加噪声(例如,共享实验室 bib 文件,或正在进行章节重排且引用已移除、但有意保留条目的情况)。此标志确保现有调用方的行为完全不变。
启用后的效果
启用 --uncited 时:
CITATION_AUDIT.md会新增## Uncited Entries (opt-in)章节,为每个键列出一条建议:prune(条目已无用,建议删除)或check(条目可能是有意保留的,标记给用户审查)。默认建议为prune;仅在有具体的本地证据时才输出check(例如,.tex文件中提及该键的 TODO 注释,或git diff中显示最近移除的\cite)。不要仅凭 bib 键字符串推断意图。CITATION_AUDIT.json的details会新增uncited_entries数组;架构见下方“提交产物生成”。- 顶层
verdict保持不变:未引用条目不会提高或降低 PASS / WARN / FAIL 等分类。reason_code和summary的形式也保持不变;只会出现details.uncited_entries字段。 - 验证门控和下游技能(
paper-writing第 6 阶段、verify_paper_audits.sh)不得将存在uncited_entries视为阻断信号。
适合启用的情况
- 提交前清理(分享可用于最终出版的 ZIP 前删除无用的 bib 条目)。
- 共享实验室 bib 文件,其中论文只使用一部分条目,而用户希望确认具体使用范围。
- 定期审计时,用户之前查看过未引用条目的数量,并希望追踪其变化。
bib 条目枚举失败时的回退处理
如果启用了 --uncited,但完整的 bib 键枚举失败(例如 bib 语法不规范,解析器无法恢复),仍必须尽可能继续进行已引用条目审计。在这种情况下:
- 不要更改顶层的
verdict、reason_code或summary。 - 将
details.uncited_entries输出为空数组[]。 - 添加
details.uncited_entries_status: "unavailable",并附上一行说明原因的备注(例如:"bib parser could not enumerate keys; cited-entry audit completed normally")。 - 验证器门控和下游技能必须将
unavailable视为与字段缺失相同:不阻塞。
如果 bib 文件无法读取到足以审计已引用条目的程度,则回退到裁决决策表中定义的现有 BLOCKED / bib_unreadable 路径;这与默认未传标志时的行为相同。
关键规则
- 每次审计运行都使用全新的审阅者线程——绝不复用之前的审阅上下文
- 必须能访问 Web——审阅者必须进行实际查找,不能只凭记忆进行模式匹配
- 上下文错误 > 元数据错误——用真实论文支持错误论点,比作者姓名拼写错误更危险
- REPLACE/REMOVE 需要人工批准——绝不自动修改内容论点
- 始终输出,不要阻塞——此技能始终会写入带有裁决结果的
CITATION_AUDIT.json;是否阻止最终定稿由paper-writingPhase 6 和verify_paper_audits.sh根据assurance级别决定。参见下文“提交产物输出”。 - 每次提交运行一次——审计耗费实际时间(需要对每个条目进行 Web 查找);不要在每次保存时运行
- 仅选择性启用未引用检测——绝不自动启用;绝不因未引用条目而阻塞;如果未传入
--uncited,现有调用方必须观察到完全相同的输出 - 在
--soft-only下,citation-audit 只输出文本改写建议;无论发现的严重程度如何,都绝不修改 bib 文件。 审计语义(存在性 + 元数据 + 上下文)以及每个条目的 KEEP/FIX/REPLACE/REMOVE 记录都原样保留;只有操作层会转换为对引用它的*.tex文件中各处句子的改写。设置了--soft-only时,拒绝任何下游提出的 bib 编辑。
与其他审计技能的比较
| 技能 | 审计内容 | 可发现的问题 |
|---|---|---|
/experiment-audit | 评估代码 | 伪造的真实值、自归一化分数、虚构结果 |
/result-to-claim | 结果到论点的映射 | 缺乏证据支持的论点 |
/paper-claim-audit | 手稿中的数值论点 | 数值膨胀、挑选最佳随机种子、配置不匹配 |
/citation-audit | 书目条目 | 幻觉引用、上下文不匹配的引用、元数据错误 |
合起来:代码 → 结果 → 数值论点 → 引用支持的论点。每一层都由跨系列审查,验证器路径中不包含执行器。
已知限制
- DBLP 覆盖缺口:非常新的论文(< 2 周)可能尚未收录在 DBLP 中。审阅者应改查 arXiv。
- 预印本与正式发表版本:两者都存在时,审阅者应优先选择正式发表的版本(ICML 2024 优先于 arXiv 2401.xxxxx),但要标明两者。
- Anthology 与 OpenReview:NeurIPS/ICLR 论文在官方论文集发布前就会有 OpenReview 条目;两者都是有效来源。
- 多作者截断:包含 6 位或更多作者且使用
and others的 bib 条目属于常见写法,除非截断隐藏了用户明确关心的共同作者,否则不予标记。
审查追踪
每次调用 mcp__codex__codex 审阅者后,按照 shared-references/review-tracing.md 保存追踪记录(Policy C——取证;绝不悄然跳过)。使用 save_trace.sh(根据 shared-references/integration-contract.md §2 中的链路解析路径),或直接将文件写入 .aris/traces/citation-audit/<date>_run<NN>/。遵循 --- trace: 参数(默认为 full)。
输出契约
- 论文根目录下的
CITATION_AUDIT.md(人类可读的报告) - 论文根目录下的
CITATION_AUDIT.json(机器可读的台账;架构如下) .aris/traces/citation-audit/<date>_runNN/(每条目的审核追踪记录)- 可选:对
references.bib+sec/*.tex应用修复(使用--apply标志) - 可选:JSON 中的
details.uncited_entries字段 + MD 中的## 未引用条目(选择启用)章节(使用--uncited标志;未设置该标志时,字段不存在且省略此章节) CITATION_AUDIT.html(当RENDER_HTML = true时生成,默认为 true)——通过/render-html "CITATION_AUDIT.md" --json "CITATION_AUDIT.json"自动渲染的单文件 HTML 视图。这是完整审核关卡。旁路文件.review.json会记录渲染保真度判定。非阻塞:如果/render-html失败(缺少辅助程序、Codex MCP 不可用、文件写入错误),记录失败并视为审核已完成——JSON + MD 台账是规范输出。
可选:仅软化模式(— soft-only)
默认:禁用。审核会为每个条目生成标准的 KEEP / FIX / REPLACE / REMOVE 判定,下游调用方(或步骤 6 的 --apply 路径)可以自由修改 bib。
选择启用:调用时传入 — soft-only(也接受 — soft_only)。此模式专为受**“冻结 bib”硬性约束**的调用方设计,尤其是 /resubmit-pipeline 的阶段 1:如果引文上下文有误,就软化周围的句子;不要更改、添加或删除引文本身。
仅软化模式的变化
审核语义不变:存在性、元数据和上下文适用性检查都会执行,仍会针对每条被引用的条目调用一次审核器,且仍会像默认模式一样计算并输出每条目的 KEEP / FIX / REPLACE / REMOVE 判定。只有操作层会变化——仅软化模式会将每种基础判定转换为文本改写建议,而非 bib 修改操作。
判定转换表
| 基础判定 | 仅软化模式转换结果 | 备注 |
|---|---|---|
KEEP | keep_unchanged | 无需操作。引文和句子都没有问题。 |
FIX(元数据错误) | keep_metadata_drift_acknowledged | bib 保持不变。在提交时标记为需要人工审核。附加备注:“检测到元数据偏差,但在 --soft-only 模式下未修复”。 |
REPLACE(引文上下文错误) | soften_citing_sentence | 针对每处引文提出句子改写建议。对于正文中的每个 \cite{X},找到其所在句子,并提出一个软化版本,不再声称 X 实际证明的内容。 |
REMOVE(引文指向不存在的论文,即虚构引文) | drop_cite_in_body_only | bib 条目保持不变(遵循 --soft-only 不变量),但必须从正文中删除行内的 \cite{X} 引用,并改写周围句子,使其不再依赖不存在的论文。改写器可使用两种子策略:(a)完全删除行内的 \cite{X},并改写句子以移除关键论断;或(b)改为引用另一篇 bib 中确实支持该论断的来源。绝不能在正文中保留指向虚构论文的 \cite{X}——这比删除引文更糟,因为审稿人会核查该参考文献,却找不到任何内容。bib 条目本身仍会保留(只要不再引用,就不会造成问题;验证器会在提交时检测未引用条目,以便在本次审核之外进行清理)。 |
增强型 JSON 架构(在 --soft-only 模式下)
设置该标志后,标准顶层字段(audit_skill、verdict、reason_code、summary 等)以及现有的 details.per_entry 记录表都会按默认模式原样输出。此外:
- 添加顶层布尔字段
soft_only_mode: true。 details中新增soft_only_actions数组——每个经过审计的文献键对应一项,顺序与details.per_entry相同。
{
"audit_skill": "citation-audit",
"verdict": "...",
"soft_only_mode": true,
"details": {
"soft_only_actions": [
{
"citekey": "smith2023example",
"base_verdict": "REPLACE",
"soft_action": "soften_citing_sentence",
"occurrences": [
{
"file": "sec/3.method.tex",
"line": 142,
"current_sentence": "Smith et al. [2023] proves a generic result that...",
"proposed_rewrite": "Smith et al. [2023] discusses a related setting; while not directly applicable, the framing motivates...",
"rationale": "Original sentence claims smith2023 'proves' a result, but smith2023 actually only conjectures it. Softened to 'discusses ... motivates' to remove the unsupported claim."
}
]
}
]
}
}
soft_action 的取值为 keep_unchanged | keep_metadata_drift_acknowledged | soften_citing_sentence | drop_cite_in_body_only。对于 keep_unchanged 和 keep_metadata_drift_acknowledged,可以省略 occurrences,也可以将其输出为 []。对于 soften_citing_sentence 和 drop_cite_in_body_only,occurrences 必须为正文中触发该判定的每个 \cite{X} 位置列出一个对象。
对于 drop_cite_in_body_only,proposed_rewrite 字段会显示删除行内 \cite{X} 后的句子(或将其替换为指向文献库中另一来源的 \cite{Y})。bib_entry_action 字段固定为 "leave_as_is_per_soft_only"——审计绝不会修改文献记录本身。
增强型人类可读报告
CITATION_AUDIT.md 会新增一个 ## Soft-Only Rewrites (— soft-only mode) 章节,列出每个位置及建议的句子改写,以供人工批准。示例:
## Soft-Only Rewrites (— soft-only mode)
The bib file is frozen. The following sentence rewrites are proposed in lieu of bib edits.
### `smith2023example` — base verdict REPLACE → `soften_citing_sentence`
- **File**: `sec/3.method.tex:142`
- **Current**: "Smith et al. [2023] proves a generic result that..."
- **Proposed**: "Smith et al. [2023] discusses a related setting; while not directly applicable, the framing motivates..."
- **Rationale**: Original sentence claims smith2023 "proves" a result, but smith2023 actually only conjectures it. Softened to "discusses ... motivates" to remove the unsupported claim.
Summary 块中现有的逐条判定表格会保留,但 FIX/REPLACE/REMOVE 行会标注 🔒 bib frozen by --soft-only 徽标,让下游读者立即了解文献库为何未被修改。
--soft-only 模式下的硬性保证
- 无论何种情况,都不会修改
.bib文件。 第 6 步(“交互式应用修复”)会跳过文献库文件;只会生成*.tex改写建议(任何文本编辑仍须经人工批准)。 - 如果下游调用方(包括
paper-writing第 6 阶段或任何封装程序)在设置--soft-only时提出文献库编辑,必须拒绝:在跟踪记录中输出一行拒绝说明,然后继续处理下一个发现项。 - 顶层
verdict判定表保持不变:上下文错误的引用仍会产生FAIL和reason_code: wrong_context。Soft-only 不会屏蔽该发现项,只会限制操作层的行为。 --soft-only可与--uncited同时使用。未被引用的条目仍只检测、不修改,且不受 soft-only 转换影响(没有可供软化的引用句)。
提交产物生成
无论调用方或检测器的结果如何,此技能始终会写入 paper/CITATION_AUDIT.json。如果论文没有 .bib 文件或没有 \cite{...} 用法,则会输出判定结果 NOT_APPLICABLE;禁止静默跳过。
paper-writing 第 6 阶段和 verify_paper_audits.sh 都依赖此产物存在于可预测的路径。
该产物符合 shared-references/assurance-contract.md 中的架构:
{
"audit_skill": "citation-audit",
"verdict": "PASS | WARN | FAIL | NOT_APPLICABLE | BLOCKED | ERROR",
"reason_code": "all_entries_keep | metadata_drift | wrong_context | hallucinated | ...",
"summary": "One-line human-readable verdict summary.",
"audited_input_hashes": {
"references.bib": "sha256:...",
"main.tex": "sha256:...",
"sections/3.related.tex": "sha256:..."
},
"trace_path": ".aris/traces/citation-audit/<date>_run<NN>/",
"thread_id": "<codex mcp thread id>",
"reviewer_model": "<resolved — the model that actually ran (target: gpt-6-astra)>",
"reviewer_reasoning": "<resolved — the effort that actually ran (target: xhigh)>",
"generated_at": "<UTC ISO-8601>",
"details": {
"total_entries": <int>, // count of audited cited entries (= |cited_keys|), NOT the bib-file size
"per_entry": [ { "key": "madaan2023selfrefine",
"verdict": "KEEP | FIX | REPLACE | REMOVE",
"axis_failures": [ "CONTEXT" | "METADATA" | "EXISTENCE" ],
"note": "..." }, ... ]
}
}
可选:details.uncited_entries(仅在设置 --uncited 时)
"details": {
...
"uncited_entries": [
{"key": "<bibkey>", "suggestion": "prune" | "check", "note": "..."}
],
"uncited_entries_status": "ok" | "unavailable"
}
字段语义:
- 未设置该标志时,两个字段都会被完全省略。默认架构不包含任何一个键。
- 设置该标志且集合差运算正常完成时,
uncited_entries_status为"ok",uncited_entries列出检测到的键(如果所有文献库条目都已被引用,则可能为空)。 - 设置该标志但文献库键枚举失败时(参见上文“文献库枚举失败时的回退处理”),
uncited_entries_status为"unavailable",且uncited_entries为[]。下游使用方必须将"unavailable"与字段缺失视为相同情况:不得阻止处理。 - 下游使用方必须将两个字段缺失视为唯一有效的默认状态,且不得因字段缺失而报错。
suggestion仅供参考;验证器和paper-writing第 6 阶段不会因此阻止处理。
audited_input_hashes 范围
对实际传递给本次审计的声明输入集进行哈希:.bib
文件、main.tex,以及提供引文上下文的所有 sections/*.tex 文件。不要对从 /tmp 或其他临时路径提取的上下文进行哈希——如果需要暂存提取出的上下文,请将其写入 paper/.aris/,以便验证器能够重新计算哈希。不要对整个仓库的并集或审阅者自报已打开的文件子集进行哈希。
路径约定(必须与 verify_paper_audits.sh 一致):键必须是相对于论文目录的路径(不带 paper/ 前缀——验证器会以论文目录为基准解析路径;添加前缀会导致路径变成 paper/paper/...,并因 STALE 而误报)。论文目录之外的文件使用绝对路径。
判定表
| 输入状态 | 判定 | reason_code 示例 |
|---|---|---|
没有 .bib 文件,或没有 \cite{...} 用法 | NOT_APPLICABLE | no_citations |
引用了 .bib 文件,但文件无法读取或缺失 | BLOCKED | bib_unreadable |
| 所有条目均为 KEEP,三个维度均为绿色 | PASS | all_entries_keep |
| 只有 FIX 判定(元数据偏差,无上下文错误) | WARN | metadata_drift |
| 存在任何 REPLACE 或 REMOVE(上下文错误或幻觉条目) | FAIL | wrong_context |
| 网络查询超时/审阅者调用失败 | ERROR | reviewer_error |
--uncited 标志不在此表中:未引用条目仅供参考,绝不会改变顶层判定或 reason_code。它们只会显示在 details.uncited_entries 和可选的 Markdown 章节中。
线程独立性
每次调用都使用一个全新的 mcp__codex__codex 线程。切勿使用
codex-reply。不要将先前的审计输出(PROOF_AUDIT、
PAPER_CLAIM_AUDIT、EXPERIMENT_LOG)作为输入——全新线程可依据
shared-references/reviewer-independence.md 保持审阅者独立性。
此技能本身永远不会阻止流程;paper-writing Phase 6 和
验证器会根据 assurance 级别决定该判定是否会阻止最终定稿。
另请参阅
/paper-claim-audit— 用于数值声明验证的同类技能/experiment-audit— 用于评估代码完整性审查的同类技能/result-to-claim— 根据结果分配声明判定shared-references/citation-discipline.md— 引文规范协议文档shared-references/reviewer-independence.md— 跨模型审查约束