후보 채택과 배포 권한을 서로 다른 판정으로 나눕니다.
Crucible은 정책 탐색과 별개의 실험 커널입니다. 후보 커밋을 허용 표면과 고정 계약으로 검증하고, 별도 측정 체크아웃에서 쌍 과제를 집계해 KEEP · REJECT · INVALID 중 하나로 판정합니다.
train 판정
허용 표면 안의 후보 하나를 분리된 체크아웃에서 고정 계약으로 재고, 사전 등록된 규칙으로 KEEP · REJECT · INVALID를 정합니다.
propose → preflight
search/supervisor.py실행 · 판정: 후보 요청search/producers탐색 supervisor가 생산자에게 후보를 요청합니다. r14의 후보는 replay producer가 이전 후보(r13)를 다시 적용한 것이며, 새 LLM 후보 생성 실적이 아닙니다.
search/producers데이터: 후보 commit 1개propose → preflight
search/supervisor.py생산자는 허용 경로 안의 단일 candidate commit을 냅니다.
propose → preflight
search/supervisor.py실행 · 판정: 허용 표면 · diff 검사허용 표면 · candidate diffcontract.pycandidate diff가 계약이 허용한 표면 안에 있는지와 frozen evaluator를 검사합니다. r14 · r35에서 허용 대상은 tau2_agent_policy.md 한 파일이었고, core와 Crucible 구현은 evaluator 경로로 고정됐습니다.
evaluate → decide → record
search/supervisor.py실행 · 판정: 분리 체크아웃생산자와 분리 · 후보 commitmeasurement checkout생산자와 분리된 측정 체크아웃에서 후보를 검사합니다.
생산자와 분리 · 후보 commit
measurement checkout실행 · 판정: 고정 계약으로 실행tau2 실행 · receiptassays/baseline과 candidate를 같은 계약 · seed · 과제로 실행합니다.
tau2 실행 · receipt
assays/데이터: actor · 사용자 대화tau2 환경GEODE agent(actor)가 tau2 과제 환경에서 evaluator 소유의 시뮬레이션 사용자와 대화합니다.
tau2 실행 · receipt
assays/데이터: 모델 호출actor · user 모델r14 · r35는 actor와 시뮬레이션 사용자 모두 gpt-5.4/high(구독)였습니다.
과제 verifier
assays/데이터: paired evidencepaired · task · family 집계promotion.py과제 verifier의 결과를 baseline과 candidate의 쌍으로 남깁니다.
frozen evaluator · 사전 등록
contract.py실행 · 판정: 사전 등록 집계 규칙paired · task · family 집계promotion.pytask와 사전 등록된 family 단위로 쌍 결과를 집계하고, 예산 · coverage · 인프라 · 안전 조건을 따로 봅니다.
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점이 아닙니다.
과제 verifier
assays/데이터: paired evidencepaired · task · family 집계promotion.py과제 verifier의 결과를 baseline과 candidate의 쌍으로 남깁니다.
frozen evaluator · 사전 등록
contract.py실행 · 판정: 사전 등록 집계 규칙paired · task · family 집계promotion.pytask와 사전 등록된 family 단위로 쌍 결과를 집계하고, 예산 · coverage · 인프라 · 안전 조건을 따로 봅니다.
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의 trajectory나 정답을 넘기지 않습니다.
sealed 적격 · 권한 분리
train KEEP은 탐색 head만 옮깁니다. sealed 적격도 eligible ref까지이며, 제품 릴리스와 배포는 Crucible 밖의 별도 권한입니다.
evaluate → decide → record
search/supervisor.py데이터: record · ref receipttrain bundle · 재계산 KEEP · 계보attestation/bundle.pytrain bundle은 계약, baseline · candidate 근거, 다시 계산한 KEEP, 제안 계보, supervisor 기록, 적용된 ref receipt가 이어져야 성립합니다. 성능 상승의 다른 이름이 아닙니다.
train bundle · 재계산 KEEP · 계보
attestation/bundle.py실행 · 판정: train bundle만 · 1회disjoint test pack · 1회 소비attestation/sealed.pysealed 평가는 train과 겹치지 않는 test pack을 한 번만 쓰며, 인프라 재시도는 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.07.13)는 coverage 부족과 인프라 오염으로 INVALID(쌍 0행, 평균 null)였고 head는 그대로였습니다.
KEEP · REJECT · INVALID
promotion.py데이터: verdict.json 공개본geode-eval-artifacts공개 산출물은 23e3428에 고정된 정규화 기록입니다. r14의 사전 등록 train config hash가 공개 config bytes와 달라, 원본 체인 전체를 다시 인증한 것은 아닙니다.
attestation/sealed.py데이터: sealed decision.jsonr14 · train KEEP → sealed REJECT
geode-eval-artifactsr14: telecom train 6과제 × 1회(쌍 6행)에서 KEEP(승격 권한 없음) 뒤 별도 sealed 판정이 REJECT(release 권한 없음)였습니다.
모든 연결을 같은 굵기로 보여 줍니다. 흐름을 고르면 그 경로만 번호와 함께 강조됩니다.
- 실선 · 요청 · 후보 · 결과가 흐르는 방향
- 파선 · 실행 · 판정 · 권한 · 설정
- 굵은 검은 선 · 고른 흐름, 번호는 순서
- 상자 · 코드 · 기록 경계, 머리말에 경로
- 안쪽 칩 · 그 경계의 구성 요소
- 점선 상자 · 그 경계 밖
- 탐색 supervisor
- 계약 · 판정 · 증명
- ref · 기록
- 생산자 · 실행
Crucible은 SIL과 별개의 커널이며, 두 탐색이 서로의 후보를 자동으로 승격시키는 하나의 파이프라인이 아닙니다. 제품 릴리스 상자에는 들어오는 연결이 없습니다.
- 세 권한
- train KEEP은 탐색 head 이동, sealed ELIGIBLE은 eligible ref 기록, 제품 릴리스는 Crucible 밖의 별도 결정입니다. 앞의 판정이 뒤의 권한을 주지 않습니다.
- null은 0이 아님
- r35는 계획 9과제 × 3회(arm당 27행) 가운데 비교할 쌍이 0행이라 평균과 개선값이 null입니다. 27개 과제 실패나 성공률 0%로 읽지 않습니다.