公開ライフサイクル (v0.7.0)
ARI v0.7.0 は EAR を「checkpoint をまるごと ear/ に放り込む」方式から、digest 固定の公開チェーン に進化させました。著者は小さな ear/publish.yaml を書くだけで、digest 計算と転送は ari-core が引き受けます。digest は論文に焼き付けられ (\codedigest{...})、registry が無くなっても任意の場所で検証可能です。
generate_ear ──▶ {checkpoint}/ear/ (著者のフルレポ)
+ ear/publish.yaml (allowlist + license/visibility)
│
▼ ear_curate (transform-skill)
▼
{checkpoint}/ear_published/ + manifest.lock ({path,sha256,size} 正規化 JSON の sha256)
│
▼ ear_publish (transform-skill, 任意)
▼
backend.publish ──▶ ari-registry / gh / zenodo / local-tarball
│
▼ publish_record.json を書き出す
│
│ (並行して、write_paper が full_paper.tex を出力すると
│ 既定 ON の Story2Proposal claim-evidence ループが論文本文に対し走る:)
│
│ write_paper ──▶ full_paper.tex
│ │
│ ▼ link_paper_claims (draft) ──▶ paper_claim_links.json
│ ▼ claim_evidence_hard_gate (draft, 非ブロッキング)
│ │ ──▶ evaluation/claim_evidence_hard_gate_draft.json
│ ▼ review_paper / evidence_grounded_semantic_review (非ブロッキング)
│ ▼ merge_reviews
│ ▼ paper_refine (anchor 保持 — % CLAIM anchor を維持)
│ ▼ render_paper (refine 後の .tex を再コンパイル ──▶ full_paper.pdf)
│ ▼ link_paper_claims (final) ──▶ paper_claim_links_final.json
│ ▼ claim_evidence_hard_gate (FINAL) ──▶ evaluation/claim_evidence_hard_gate_final.json
│ │ (strict モードでは finalize をブロック)
▼ ▼
└────────┴──▶ finalize_paper (paper-skill: inject_code_availability)
ear_publish と FINAL hard gate の両方に DEPENDS
▼
full_paper.tex に \codeavailability{} \codedigest{} \coderef{}
│
▼ ari clone <ref> --expect-sha256 <baked digest>
▼
読者の手元: バンドルバイトを digest 検証、コード実行は無しClaim-evidence ゲート (Story2Proposal ループ)
論文ビルドのたびに、既存の論文ステージに加えて、決定的な claim-evidence hard gate、非ブロッキングの evidence-grounded semantic review、そして anchor 保持の refine/render ループ が走るようになりました。本ループは 論文の % CLAIM anchor を記録済み結果に紐付け (link_paper_claims)、 実験データと突き合わせて検証し (claim_evidence_hard_gate。draft で 1 回、 refine 後の論文で再度実行)、hard gate と semantic review の双方をマージ済み レビューにスレッドし、claim anchor を保持したまま suggested revision を適用し (paper_refine)、refine 後の .tex を再コンパイルします (render_paper)。 動作は ari-core/config/workflow.yaml の claim_gate_policy ブロックで制御され、 既定で warn (report-only) モードが ON です — gate は検出結果を記録するだけで ビルドをブロックしません。claim_gate_policy.mode: strict (または ARI_CLAIM_GATE_MODE=strict) を設定すると、FINAL gate がブロッキングエラー (数値不一致、未解決オペランド、エビデンス欠落) のときに finalize_paper を ブロックします。
ループの誠実さは 4 つの堅牢化が end-to-end で支えます:
block は客観的虚偽に限定。 gate の always-block 層には決定論的に 検査できる所見だけが入ります(run 自身のデータと矛盾する数値、 不変条件違反、run 内のどこにも証拠が無い宣言済み claim)。主観的 所見 — LLM semantic review の overclaim / interpretation 警告 — は 設計上 advisory に留めます。LLM の判定は再現可能でないため、論文に 対する拒否権を持たせてはならないからです。主観的所見への対処は上記 review→refine ループで行い、post-refine review の生の解消数デルタで 「強制でなく計測」します。
レビューフィードバックは確実に届く。
merge_reviewsは semantic review の すべての warning を advisory な revision エントリとしてpaper_refineに転送します (対応する suggested revision を持たない warning は refiner に届かず、件数が 減りようがなかったため)。報告されるresolved_overclaim_countは前回−今回の 生の差分です — 負値は refine 後に件数が増えたことを意味し、0 に clamp せず 回帰としてそのまま表面化します。数値検証は科学的記数法を理解する。 numeric-mention スキャナ (
ari-skill-paper/src/claim_links.pyと ari-core のclaim_gate/latex.pyにミラー) は仮数 × 10^指数形 (4.44 \times 10^{-16}、x/\times/\cdot対応) と 付随する e 記法 (文末も含む) をパースし、数字を含むトークンを保持し、単位の 特定では\( \)を数式デリミタとして扱います — こうした値での偽のnumeric_mismatch検出を排除します。巨大な指数はスキップされ、gate を 落とすことはありません。writer 宣言はパース時に正規化される。 指示だけでは安定しなかったため、 典型的な癖はパーサ側で吸収します: formula の同義語 (
value/raw/abs…) は レジストリ名に正規化、bare なk=vトークン前のoperands=ラベル接頭辞は 除去、全 anchor が 1 つの id を共有する場合 (例: 全行が% CLAIM:Cw:NCw) は 行ごとに曖昧性を解消し、各宣言を独立に検証します。metric contract は一度だけ mint される。 claims を持つ contract を最初に 生成した
make_metric_spec呼び出しが{checkpoint}/metric_contract.jsonとして 永続化し、以後の呼び出しはそのファイルを verbatim に返します (レスポンスにcontract_frozen: trueが付く)。LLM の命名は参照的に安定せず、run 途中の 再生成はエビデンス語彙を変え、旧名で emit 済みの sibling evidence を exact-match gate から隠してしまいます (実 run で観測)。per-node の spec フィールド (scoring guide 等) は従来どおり呼び出しごとに計算され、claims の 無い scaffold-only contract は freeze しません。
成果物: paper_claim_links.json (draft) / paper_claim_links_final.json、および evaluation/claim_evidence_hard_gate_{draft,final}.json。
トラストモデル: トラストアンカーは registry ではなく論文そのものです。 ari clone は再計算した digest が --expect-sha256 (または manifest.lock の 宣言) と一致しないバンドルを hard-fail させます。registry が消えても、別の場所 (S3・Zenodo・gh release・ローカルミラー) に pin された同じバンドルなら検証できます。 これは バンドル完全性 (digest 一致) です。FINAL hard gate はさらに クレーム完全性 を加えます — 論文が報告する数値を記録済み結果から再導出し、 許容誤差を外れたものをフラグします。
ari clone resolvers
| Scheme | 解決先 | 備考 |
|---|---|---|
file://<path> | ローカルファイル/ディレクトリ | オフライン・ミラー |
https://<url> / http://<url> | tarball ダウンロード | 任意の HTTPS ホスト |
ari://<id> | ari-registry クライアント | registries.yaml から endpoint/token を取得。解決順: $ARI_REGISTRIES_FILE → {checkpoint}/.ari/registries.yaml → ./.ari/registries.yaml。$HOME/.ari/ 配下のレガシー設定は v0.5.0 で廃止され、DeprecationWarning を経て v1.0 で削除予定。 |
gh:<user>/<repo> | GitHub repo / release | API + tarball |
doi:<doi> | Zenodo deposition | DOI → ファイル一覧 → bundle |
ari registry (任意のセルフホスト)
ari/registry/ の最小 FastAPI サーバ。SQLite トークンストア、${ARI_REGISTRY_DATA}/artifacts/<id>/{bundle.tar.gz, manifest.lock, meta.json} のコンテンツアドレス保存。可視性は単調で staged → unlisted / public のみ (降格は拒否)。デプロイは uvicorn (laptop) / docker-compose (production) / Apptainer (HPC)。詳細は docs/reference/registry.md。
再現性サンドボックス補強
_run_env.json—ari/agent/run_env.pyが work_dir ごとに hostname / SLURM job/partition/nodelist / CPU model/threads/MHz/arch / mem_total / コンパイラバージョンを 実行プロセス内で 書き出し、SLURM ジョブ (エージェントとは別ノードで動く) でも正確なハードウェア情報を残します。node_reportビルダは reports にこのデータを付与し、論文・再現性ステージは「実行 partition、hostname X、CPU model …で実行」のような事実を blank artefact から推測することなく取り戻せます。- Git shim (
ari/agent/shims/git.sh) — 再現性サンドボックスにPATH=<sandbox>/.shims:<orig_path>で組み込まれます。論文のcode_availability_refに一致する URL のgit cloneだけをインターセプトし、それ以外は本物の git に素通し。すべての clone 試行を<sandbox>/repro_clone_log.jsonlに記録します。ARI_REPRO_CLONE_POLICY=passthrough|deny|warnで動作切替。