关于 integrity-forensics
integrity-forensics 是启动固定版本 Anti-Autoresearch 论文审计的轻量技能。它验证上游版本、原样委托审计,并将发现映射到 ARIS 策略门槛;审计无标记不等于论文获认可。
主要功能
- 01固定并验证上游提交版本
- 02原样委托上游审计流程
- 03将审计结论映射为策略门槛
- 04以带类型的义务跟踪发现
- 05核验报告、论文文件和凭据
适用场景
- 01对论文运行完整性取证审计
- 02存在关键标记或审查未完成时阻止提交
- 03跟踪审计发现的修复或人工豁免
- 04论文或台账变更后重新验证门槛
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ wanshuiyin/ auto-claude-code-research-in-sleep --skill integrity-forensics安装后在 Claude Code 中输入/integrity-forensics确认已加载。
详细介绍
Integrity Forensics — Anti-Autoresearch 的轻量启动器
审计目标:$ARGUMENTS
这是什么。 ARIS 用于生成论文;Anti-Autoresearch 则是面向外部的互补工具,用于审稿方的诚信取证(涵盖 8 个类别中的 46 种模式, 核心采用确定性的 GRIM/GRIMMER/statcheck,声明锚定到具体文本片段, 仅基于规则的报告器负责总结而非裁决)。此技能是一个 轻量启动器:固定上游提交,通过上游评估门禁验证固定版本,原样委派执行, 并将判定后处理为 ARIS 的策略用语。不 vendoring,也不 fork。
🔁 执行频率约束(
shared-references/external-cadence.md):此技能用于支持带有判定结果的决策。不要将它包装在/loop//schedule中 — 绝不能用于“反复修改,直到不再触发标记”(见下文的唯一禁止循环)。
常量
- ANTI_AR_REPO =
https://github.com/wanshuiyin/Anti-Autoresearch.git - ANTI_AR_COMMIT =
b47af6f983b38347b6d2110379e266400597cf66— SHA 固定值。 启动器绝不跟踪上游 HEAD;修改此常量必须经过评审 (见固定版本更新检查清单)。 - CLONE_DIR =
~/.aris/anti-autoresearch— 固定版本的工作副本。刻意采用与主机无关的路径: ARIS 也运行在 DeepSeek Harness、Codex CLI、Cursor、Trae、 Antigravity 和 Copilot CLI 上,在这些环境中,~/.claude/指向用户并未安装的产品。~/.claude/anti-autoresearch下的旧克隆不会使用; 只有为了让离线确定性模式运行,才需将其及其.aris_eval_ok_*回执移至新位置, 否则可随时删除。 - NO REVIEWER KNOBS. 此启动器不提供审稿模型/工作量参数,也绝不将 ARIS 的
— effort:映射到上游设置。 固定版本的上游会严格按其固定配置运行(gpt-6-astra+xhigh,这是上游自身的设计决策)。 通过启动器覆盖上游审稿策略,会形成第二个无法审计的配置入口。 - GATE_HELPER =
forensics_gate.py— 通过规范链解析 (shared-references/integration-contract.md§2):.aris/tools/→tools/→$ARIS_REPO/tools/→ 通过~/.aris/repo指向的$ARIS_REPO/tools/。 失败策略 A(必需):若在assurance: submission时无法解析此文件,立即停止 — 绝不临时拼凑门禁。
步骤 0 — 初始化固定版本(幂等)
CLONE_DIR="$HOME/.aris/anti-autoresearch"
ANTI_AR_COMMIT="b47af6f983b38347b6d2110379e266400597cf66"
mkdir -p "$HOME/.aris"
if [ ! -d "$CLONE_DIR/.git" ]; then
git clone --no-checkout https://github.com/wanshuiyin/Anti-Autoresearch.git "$CLONE_DIR"
fi
# fetch ONLY if the pin isn't already present — a cached, validated pin works offline
git -C "$CLONE_DIR" cat-file -e "$ANTI_AR_COMMIT^{commit}" 2>/dev/null \
|| git -C "$CLONE_DIR" fetch -q origin
git -C "$CLONE_DIR" checkout -qf "$ANTI_AR_COMMIT" || {
echo "FATAL: cannot checkout pinned commit $ANTI_AR_COMMIT"; exit 1; }
# Force a PRISTINE tree at the pin — local tampering with the clone (edited
# adjudicator, injected module, even one hidden inside a NESTED git repo,
# which single-f clean skips) must not survive bootstrap and run under the
# official pin's name. Every step is checked; then the tree is verified.
git -C "$CLONE_DIR" reset --hard -q "$ANTI_AR_COMMIT" || {
echo "FATAL: reset to pin failed"; exit 1; }
git -C "$CLONE_DIR" clean -ffdxq || {
echo "FATAL: clean failed"; exit 1; }
[ -z "$(git -C "$CLONE_DIR" status --porcelain)" ] || {
echo "FATAL: clone is not pristine after reset+clean — refusing to run"; exit 1; }
# One-time-per-pin validation: the upstream eval gate (8 injected-defect
# classes, 100% recall + zero clean false positives) must PASS before this
# pin is allowed to produce a verdict. NEVER skip; NEVER proceed on failure.
# The marker lives OUTSIDE the clone: a marker inside a tamperable tree proves
# nothing (and `git clean` above would erase it, forcing re-eval every run).
MARKER="${CLONE_DIR}.aris_eval_ok_${ANTI_AR_COMMIT}"
if [ ! -f "$MARKER" ]; then
( cd "$CLONE_DIR" && python3 eval/run_eval.py ) || {
echo "FATAL: upstream eval gate FAILED at pin $ANTI_AR_COMMIT — refusing to"
echo " use an unvalidated forensics pin for verdicts."; exit 1; }
touch "$MARKER"
fi
echo "anti-autoresearch pinned at $ANTI_AR_COMMIT (eval gate: validated)"
步骤 1 — 委派:原样运行上游扫描
在目标上从头到尾打开并遵循 $CLONE_DIR/workflows/anti-autoresearch/SKILL.md。启动器只额外添加以下两条封装规则:
- 工作目录。 上游技能通过
git rev-parse --show-toplevel定位自身。 运行每个上游 bash 代码块前,都先执行cd "$CLONE_DIR"— 必须执行 cd, 不能只导出ROOT(上游代码块会自行重新推导 ROOT,并覆盖该值)— 并使用论文的绝对路径, 否则上游会将 ARIS 仓库解析为 ROOT,并找到错误的 Python 主干。 - Codex 调用必须带上
approval-policy: never+sandbox: read-only(会话卫生要求;上游已指定每个维度使用新线程、串行执行及自身的模型固定配置 — 不要更改)。
其他所有内容 — 证据账本、coverage.json 状态机、九个审计维度、反驳环节、确定性摘要 — 都属于上游契约。绝不重写、弱化或重新映射其输出
(report.json + REPORT.md,判定结果 ∈ CLEAN_GIVEN_EVIDENCE / SOFT_FLAGS /
HARD_FLAGS / REVIEW_UNAVAILABLE)。可观测级别(L0/L1/L2)由上游根据现有产物推导 — 不要承诺一定达到 L2。
第 2 步 — 类型化门控 + 义务(ARIS 侧后处理)
# Resolve $GATE_HELPER via the canonical chain (integration-contract §2), then
# ONE atomic call (update + gate in a single locked transaction — the gate only
# ever speaks for the report the ledger has folded, sha-bound):
python3 "$GATE_HELPER" evaluate --report "$PAPER_DIR/report.json" --paper-dir "$PAPER_DIR" \
--anti-ar-commit "$ANTI_AR_COMMIT" --executor-model "<this pipeline's executor>"
# exit 0 = WARN / NO_NEW_BLOCKER · exit 1 = BLOCK
门控会将判定结果转换为策略,但不会重新标注判定结果:
| 上游判定结果 | 策略 |
|---|---|
HARD_FLAGS | 阻止 — 审计员提出了某项关键问题,供你审阅;绝不能说成“机器发现了欺诈” |
REVIEW_UNAVAILABLE | 阻止 — 不完整的审查不能让文件蒙混过关 |
SOFT_FLAGS | 警告 — 由人工处置。也要查看未运行列表:只有在本应判定为无问题时,上游判定结果才会将不完整性纳入考量,因此即使判定为警告,也可能有包含决定判定结果的维度未运行。evaluate 和 fresh 都会打印这些维度 |
CLEAN_GIVEN_EVIDENCE | 没有新增阻止项 — 绝不称为通过或已接受:它表示“现有证据中未发现标记”,并非无罪判定 |
| 任何其他结果 | 阻止(默认拒绝) |
此外:任何未解决的关键义务 → 阻止;任何未解决的义务 → 至少警告;没有回执却已关闭的账本条目或状态未知的条目 → 阻止(手动编辑 "status": "RESOLVED" 并不能打开门控)。
gate.json 还会记录 paper_fingerprint(对论文的编译输入和交付物计算的 sha,包括 .tex/.bib/.sty/.cls/图表/PDF)。下游预检只需运行一条命令:
python3 "$GATE_HELPER" fresh --paper-dir "$PAPER_DIR" --anti-ar-commit "$ANTI_AR_COMMIT"
— 退出码为 0 ⟺ 门控是在当前固定版本下生成的 ∧ 门控存在 ∧ 论文此后未更改 ∧ 门控与当前义务账本一致 ∧ 判定结果 — 根据已通过 sha 验证的归档报告(last_report.json)和实时账本重新计算,绝不读取门控中存储的令牌 — 具备通过条件(WARN / NO_NEW_BLOCKER)。其他任何情况 — 缺少门控、门控生成后有编辑或重新编译、账本或归档未绑定、重新计算结果不匹配、BLOCK、令牌未知 — 均会以 1 退出:重新运行审查和 evaluate。每次修改账本(update/resolve/waive)都会删除现存的 gate.json,因此中断的运行绝不会留下过期的通过结果;而且 evaluate 会拒绝比任何论文文件更旧的报告(过期报告不能用于审阅其从未审计过的文本)。审查完成后立即运行 evaluate,然后再修改任何论文文件。
门控产物还会记录真实的来源信息:上游审计员使用 GPT 系列模型,因此对于 Claude 执行器,这些发现带有 cross-family 提案来源;对于 Codex 执行器,则带有 same-family 提案来源。无论哪种情况,此门控都只会标记问题 — 它无权授予接受,因此这种区别仅供参考,并非漏洞。
步骤 3 — 修复发现的问题(履行义务,而不是反复润色)
每项 OPEN 义务都必须处理——修复,或明确豁免。上游现在会报告审计员提出的每项建议,而不再自行判断哪些不算数,因此,与 2026-08 之前开展的审查相比,预计会出现更多义务,其中有些建议你可能并不同意。waive 是正式且预期会出现的处理结果——“这是模型提出的建议,而我这个人认为它不对”在这里是正常的处理方式,并非最后手段。请结合报告中的各列权衡每项建议:Anchored、Observability、FP-risk、Surface、Ext-check。
对于确实存在的问题,请使用合适的处理方式:
| 发现类别 | 修复路径 |
|---|---|
| A — 数值自洽性 | 根据 RESULT FILES(/paper-claim-audit 证据链)重新计算;修正数字,而不是句子 |
| D — 实验完整性 | 返回 /experiment-audit / 重新运行 |
| E — 引用 | 使用 /citation-audit 的 KEEP/FIX/REPLACE 机制 |
| G — 证明与推导 | 使用 /proof-checker 的修复循环 |
| B / C / H — 范围、基线、评估设计 | 科学层面:将发现作为审稿人输入提供给 /auto-review-loop,或交由人工处理 |
| AIS / advisory(权重为零) | 可作为 /auto-paper-improvement-loop 的可选背景信息;绝不作为门槛 |
明确关闭每项义务——回执有类型且经过哈希:
python3 "$GATE_HELPER" resolve --paper-dir "$PAPER_DIR" --obligation-id <id> \
--fix-type corrected-from-results|claim-narrowed|claim-withdrawn|citation-replaced \
--evidence <path-to-the-ground-truth-that-backs-the-fix> \
--verified-by "human:<name>" | "checker:<tool>" | "cross-family-review:<thread-id>"
# or, with HUMAN sign-off only:
python3 "$GATE_HELPER" waive --paper-dir "$PAPER_DIR" --obligation-id <id> \
--approver "human:<name>" --reason "<why this stands as-is>"
台账以机械方式强制执行的规则(tests/test_forensics_gate.py):
- 仅追加——重新运行审查可以新增义务,但绝不能关闭义务;
- 某项发现若在后续报告中消失,仍保持 OPEN,并会标记为
UNRESOLVED_DISAPPEARANCE——改写文本片段不算修复; claim-withdrawn是诚实的修复(删除无依据的主张 是合理的解决方式——需提供删除差异作为证据);- 豁免不等于解决:须经人工批准并永久记录, 原始发现快照不可更改;
- 执行者填写的
fix_type标签只是回执,不是判定结果——要关闭 一项关键发现,必须经过类别检查器、新一轮跨类别审查或人工确认 (--verified-by要求提供有类型的来源信息,并会被记录;填写一位 未批准此操作的人员姓名属于虚假记录,并会留下永久记录); - 回执会重新验证,而非仅凭记忆确认:每次后续门禁检查时, 证据文件必须仍然存在,且其哈希值仍与关闭时记录的值一致—— 关闭后编辑证据会重新触发 BLOCK;
resolve/waive(和update一样)会使现有的gate.json失效—— 完成步骤 3 时,须重新运行审查并执行evaluate,确保下游预检读取的 门禁状态反映修复后的情况。
唯一禁止的循环
绝不要运行“编辑 → 重新审查 → 重复,直到 CLEAN”。 这种目标函数会教会编辑者如何绕过检测器——删除有锚定的文本片段比修正数字更快消除标记,最终得到的论文会被自己的审计洗白。修复后的重新运行旨在确认差异(DISCREPANCY)已消失(并发现新的差异);是否开放门禁由义务台账决定,而非判定结果。
信任边界(哪些内容由程序计算,哪些属于协议)
- 程序计算(门禁会通过机制强制执行这些内容):判定结果→策略映射、
仅追加的账本生命周期、SHA 绑定(报告 ↔ 账本 ↔ 归档)、
回执重新哈希、论文指纹、固定版本/版本匹配,以及
重新计算的决策(
fresh绝不信任已存储的令牌)。 - 协议(刻意采用指令评定):扫描是否确实针对这篇论文,在固定版本的克隆上运行。门禁提高了要求 —
结构性底线(报告必须注明裁定者并包含覆盖映射)、过期报告 mtime 防护 — 到此为止。报告与论文之间没有
加密绑定,这是刻意为之:这是研究工作流门禁,不是溯源系统;诚实的说法是,
有心的执行者可以提交一份过期报告。同样,
human:/checker:/cross-family-review:标签是 责任追踪,而非身份验证:虚假标签就是一条明确且永久的虚假记录。 - 不在范围内:拥有 Shell 访问权限的一方若一致地改写
.aris/工件,就拥有所有者权限(他们甚至可以直接删除整个目录)。 门禁防范的是马虎或偷工减料的执行者,以及意外崩溃/竞态/恢复操作 — 而非机器的所有者。
固定版本升级检查清单(维护者)
- 设置新的
ANTI_AR_COMMIT;不要删除任何标记(评估门禁会自动针对新的 SHA 重新运行)。 - 将上游的
schemas/report.schema.json和判定词汇与 门禁的策略表进行比较;如果上游有所变动,必须在升级前扩展tools/forensics_gate.py。 - 旧发现/义务仍然有效(指纹基于范围/哈希,而非 ID)— 但由旧版裁定者生成的发现必须 重新审计,而非重新裁定(遵循上游自身的迁移规则)。
- 如果升级改变了用户必须处置的内容,请告知用户。
fresh会以PIN_MISMATCH拒绝所有使用旧固定版本的已存储gate.json,因此升级本身就会强制所有人重新扫描 — 应将上游变更合并到一次升级中,而非分两次进行,否则重新扫描的成本会付两次。
2026-08 升级(
98a75fc)— 预计会有更多未解决义务。 上游从裁定提案转为报告提案:过去会被其误报风险、 可观测性、表面范围和外部检查需求门禁降为info的发现,现在会以高于 info 的级别出现,因此会产生义务。论文本身没有变差;只是现在能看到审计人员所说内容中的更多部分。对你认为错误的提案予以豁免,是预期的处置方式;报告中每条发现对应的列(Anchored、Observability、FP-risk、Surface、Ext-check)就是你权衡时应参考的内容。上游还在同一时期删除了报告自身绑定哈希 — 这里从未使用过这些哈希。
Codex 原生说明(镜像)
上游没有提供 Codex 原生套件;其审计员技能是 Claude-Code 契约。Codex 原生会话可以运行上游的仅确定性模式(数值核心 + 裁定者,并使用全为 review_unavailable 的覆盖映射 — 诚实地限定范围:它可以标记问题,但绝不会给出 CLEAN)。完整的九维扫描需要能够原样执行上游 Claude-Code 契约的宿主 — 已知的有 Claude Code 和 DeepSeek Harness 上的 dsh-aris 套件。临时将上游审阅者调用转换为
spawn_agent,属于重写上游契约 — 禁止这样做。
审查追踪
上游会将各维度的追踪记录保存在论文的
.aris/traces/ 下。启动器只添加 .aris/forensics/ 工件:
gate.json(固定 anti_ar_commit + 报告/账本哈希 + 论文文本指纹)、
obligations.json(仅追加的账本),以及
last_report.json(经 SHA 验证的折叠报告归档,
fresh 会据此重新计算)。