이 절차는 로컬 실행 기록을 공개 증거로 승격합니다. 게시 대상은 append-only Git/PR 저장소인 geode-eval-artifacts입니다. 전체 artifact 트리를 복사하지 않고 검토된 trajectory release 디렉터리 하나만 게시합니다.
1. SQLite 정본에서 export
geode session export-trajectory session-123 \ --out trajectory-local.json \ --sil-eval run.eval \ --digest-content
--sil-eval은 Inspect .eval의 SHA-256을 evidence_refs와 artifact_digests에 연결합니다.--digest-content는 비허용 payload body를 digest로 바꾸므로 결과가 scope-complete여도 replay-incomplete일 수 있습니다. SIL 실행에서만 --sil-eval을 지정합니다.
이 명령의 결과는 privacy.review_state=local인 로컬 artifact입니다. staging 명령은 이를 자동으로 승인하지 않습니다.
2. 별도의 공개 후보 검토
| 산출물 | 역할 | 규칙 |
|---|---|---|
trajectory-local.json | 로컬 export | 보존하며 직접 공개하지 않음 |
trajectory-public.json | allowlist 기반 공개 후보 | 공개 바이트를 검토한 뒤 privacy.review_state=reviewed로 표시 |
privacy-review.json | release 범위 attestation | scope가 CLI --scope와 정확히 같아야 함 |
공개 후보에서 로컬 경로, 사용자 식별자, credential, raw prompt/tool body를 검토합니다. sealed Crucible pack, 선택 row identity, selection salt, 환경 파일은 공개 후보에 넣지 않습니다. 검토는 실제 공개 바이트를 대상으로 하며 review_state 값만 바꾸는 행위를 허용하지 않습니다.
{
"reviewer": "release owner or review team",
"reviewed_at": "2026-08-01T12:00:00Z",
"method": "allowlist review plus secret and identity scan",
"scope": "campaign-2026-08-01",
"attestation": "Only the declared normalized trajectories are approved."
}staging은 이 다섯 필드를 canonicalize한 뒤record_sha256을 계산합니다. trajectory 자체의 privacy review와 release 범위 review 둘 다 필요합니다.
3. 공개 release staging
geode session stage-trajectory-release trajectory-public.json \ --destination /tmp/geode-trajectory-releases \ --source sil \ --scope campaign-2026-08-01 \ --privacy-review privacy-review.json \ --source-artifact run.eval=/absolute/path/to/run.eval \ --allow-replay-incomplete
| 게이트 | 조건 |
|---|---|
| Scope | 모든 trajectory의 scope_complete=true |
| Replay | 기본 replay_complete=true; private body digest인 검토본만 --allow-replay-incomplete |
| Source bytes | 모든 artifact_digests.path에 대응하는 --source-artifact REF=PATH와 SHA-256 일치 |
| Identity | trajectory ID와 release 경로가 고유하며 기존 디렉터리를 덮어쓰지 않음 |
| Privacy | reviewed 상태, 구조화 attestation, secret/identity scan 0건 |
--allow-replay-incomplete는 scope 누락을 허용하지 않습니다. source artifact는 digest 검증에만 사용되며 자동으로 공개 디렉터리에 복사되지 않습니다.
4. 로컬 검증과 append-only PR
새 release의 manifest.json SHA-256을 staging 디렉터리 밖에 기록한 뒤 검증합니다.
geode session verify-trajectory-release <release-dir> \ --expected-manifest-sha256 <digest-recorded-before-copy>
geode-eval-artifacts의 새 branch/worktree를 만듭니다.- content-addressed release 디렉터리 하나만 복사합니다.
- PR에서 manifest, 공개 바이트, privacy attestation을 리뷰합니다.
- 병합 후 exact merge commit에서 release를 새 디렉터리로 다시 읽습니다.
- 복사 전에 기록한 manifest SHA-256으로 같은 검증 명령을 다시 실행합니다.
- 점수·문서에는 불변 merge commit의 blob/tree 링크를 기록합니다.
staging 디렉터리를 한 번 더 읽는 것은 remote read-back 증거가 아닙니다. 병합된 원격 바이트를 독립적으로 내려받아야 합니다.
5. SIL·Crucible authority
모든 external reference는 kind, schema_id,authority, reference를 가지며 파일을 가리키면path와 sha256을 함께 둡니다.
| Reference | 생성 조건 | 정본 |
|---|---|---|
sil_eval / inspect_ai.eval@native | export-trajectory --sil-eval | Inspect .eval score와 SIL mutation/attribution ledger |
native_receipt / tau2.results@native | tau2 결과 export마다 | tau2 results.json |
crucible_evidence | frozen contract ID와 identity preflight가 모두 존재할 때만 | crucible.evidence.v3, experiment contract, executable verifier |
GEODE release manifest는 verdict를 소유하거나 candidate를 승격하지 않습니다. 외부 루프는 PostVerify의 typedevidence_refs로 이 정본들을 연결하고 accept/revise/escalate만 결정합니다.
Schema 정본
실패 시 확인
- not scope-complete: missing correlation, ordinal gap, orphan tool result를 먼저 수정합니다.
- not replay-complete: 실제 privacy reduction인지 확인한 뒤에만 명시적 waiver를 사용합니다.
- source digest mismatch: trajectory가 참조한 원본 바이트를 매핑합니다.
- privacy scan failed: finding을 지운 새 public candidate를 만들며 기존 release를 덮어쓰지 않습니다.