候補の採択とリリースの権限は、別々の判定。
Crucibleはポリシー探索とは別の実験カーネルです。候補コミットを許可されたサーフェスと凍結された契約で検証し、別の測定用checkoutでペアのタスクを集計して、KEEP、REJECT、INVALIDのいずれかとします。
trainの判定
許可されたサーフェス内の候補1つを、隔離されたcheckoutで固定した契約のもとに測定し、事前登録されたルールでKEEP、REJECT、INVALIDを決めます。
propose → preflight
search/supervisor.py実行 · 判定: 候補を要求search/producers探索のsupervisorがプロデューサーに候補を要求します。r14の候補は、replay producerが以前の候補(r13)を再適用したもので、LLMが新たに生成したものではありません。
search/producersデータ: 候補コミット1つpropose → preflight
search/supervisor.pyプロデューサーは、許可されたパスの範囲内で候補コミットを1つ返します。
propose → preflight
search/supervisor.py実行 · 判定: 許可されたサーフェス · diffの検査許可されたサーフェス · candidate diffcontract.pycandidate diffが契約で許可されたサーフェスの範囲内にあるかを確認し、frozen evaluatorを検証します。r14とr35で許可された対象はtau2_agent_policy.mdの1ファイルで、coreとCrucibleの実装はevaluatorのパスとして固定されていました。
evaluate → decide → record
search/supervisor.py実行 · 判定: 隔離されたcheckoutプロデューサーから隔離measurement checkoutプロデューサーから隔離された測定用checkoutで候補を検査します。
プロデューサーから隔離
measurement checkout実行 · 判定: 固定した契約で実行tau2の実行 · receiptassays/ベースラインと候補を、同じ契約・シード・タスクで実行します。
tau2の実行 · receipt
assays/データ: actor · userの対話tau2環境GEODEエージェント(actor)が、tau2のタスク環境で、evaluatorが所有するシミュレートされたユーザーと対話します。
tau2の実行 · receipt
assays/データ: モデル呼び出しactor · userモデルr14とr35では、actorとシミュレートされたユーザーのどちらもgpt-5.4/high(サブスクリプション)でした。
タスクの検証器
assays/データ: paired evidenceペア · task · familyの集計promotion.pyタスクの検証器の結果を、ベースラインと候補のペアとして保持します。
frozen evaluator · 事前登録
contract.py実行 · 判定: 事前登録された集計ペア · task · familyの集計promotion.pyペアの結果をtaskと事前登録されたfamilyの単位で集計し、予算・カバレッジ・インフラ・安全の条件は別に確認します。
KEEP · REJECT · INVALID
promotion.py実行 · 判定: KEEP · headの移動search/* headrefs/crucibleKEEPの場合、refs/crucible/search/*の次のheadが候補になります。trainの判定のpromotion_authorityはnoneです。
却下 · 無効 · フィードバック
REJECTとINVALIDはheadを維持し、次の候補には失敗コードと固定されたtrainタスクIDだけを返します。INVALIDは0点ではありません。
タスクの検証器
assays/データ: paired evidenceペア · task · familyの集計promotion.pyタスクの検証器の結果を、ベースラインと候補のペアとして保持します。
frozen evaluator · 事前登録
contract.py実行 · 判定: 事前登録された集計ペア · task · familyの集計promotion.pyペアの結果をtaskと事前登録されたfamilyの単位で集計し、予算・カバレッジ・インフラ・安全の条件は別に確認します。
KEEP · REJECT · INVALID
promotion.pyデータ: REJECT · INVALID失敗コード · trainタスクIDattempt/feedback.json却下または無効の場合は以前のheadがそのまま残り、候補とその記録は保持されます。INVALIDの平均は0ではなくnullです。
失敗コード · trainタスクID
attempt/feedback.jsonデータ: 失敗コード · タスクIDsearch/producers次の候補へのフィードバックは、失敗コードと固定されたtrainタスクIDに限られます。evaluatorの実行記録や正解は渡しません。
sealedの適格性 · 権限の分離
trainのKEEPは探索のheadを動かすだけです。sealedの適格性もeligible refまでで、製品のリリースとデプロイはCrucibleの外にある別の権限です。
evaluate → decide → record
search/supervisor.pyデータ: record · ref receipttrain bundle · 再計算したKEEPattestation/bundle.pytrain bundleは、契約、ベースラインと候補の根拠、再計算したKEEP、提案の系譜、supervisorの記録、適用されたrefのreceiptがすべてつながったときにだけ成立します。改善の別名ではありません。
train bundle · 再計算したKEEP
attestation/bundle.py実行 · 判定: train bundleのみ · 1回disjoint test pack · 1回のみ使用attestation/sealed.pysealed評価はtrainと重ならないtest packを1回だけ使い、インフラの再試行は0回です。
ELIGIBLE · release_authority none
attestation/sealed.py実行 · 判定: eligible refまでeligible/*refs/crucibleELIGIBLEでもrefs/crucible/eligible/*に書き込むだけで、release_authorityはnoneに固定されています。
公開記録 · r14 · r35
r14はtrainでKEEPの後、sealedでREJECTでした。r35(2026年7月13日)はカバレッジ不足とインフラの汚染によりINVALID(ペア0行、平均null)で、headは変わりませんでした。
KEEP · REJECT · INVALID
promotion.pyデータ: 公開版verdict.jsongeode-eval-artifacts公開成果物は、23e3428に固定された正規化済みの記録です。r14の事前登録されたtrain configのハッシュは公開されたconfigのバイト列と異なるため、元のチェーン全体を再認証したわけではありません。
attestation/sealed.pyデータ: sealed decision.jsonr14 · train KEEP → sealed REJECT
geode-eval-artifactsr14:telecom trainの6タスク × 1試行(ペア6行、昇格権限なし)でKEEP、その後の別のsealed判定でREJECT(リリース権限なし)でした。
すべての接続を同じ太さで表示します。フローを選ぶと、その経路だけを番号付きで強調します。
- 実線 · リクエスト・候補・結果が流れる方向
- 破線 · 実行・判定・認可・設定
- 太い黒線 · 選んだフロー。番号は順序
- ボックス · コードまたは記録の境界、見出しにパス
- 内側のチップ · その境界内の構成要素
- 破線ボックス · その境界の外
- 探索のsupervisor
- 契約 · 判定 · 証明
- ref · 記録
- プロデューサー · 実行
CrucibleはSILとは別のカーネルで、2つの探索は互いの候補を昇格させる1本のパイプラインではありません。製品リリースのボックスには、入ってくる接続がありません。
- 3つの権限
- trainのKEEPは探索のheadを動かし、sealedのELIGIBLEはeligible refを記録し、製品リリースはCrucibleの外の別の判断です。先の判定が後の権限を与えることはありません。
- nullは0ではない
- r35は9タスク × 3試行(armあたり27行)を計画しましたが、比較できるペアが0だったため、平均と改善値はnullです。27タスクの失敗や成功率0%ではありません。