Files
trex-core/.proofline/criteria/ac-0035.md
T

2.5 KiB

id, status
id status
ac-0035 active

Observed provenance evidence와 개별 gate

Criterion

release_provenance_gate.py는 운영 계층이 제공한 versioned observed evidence JSON을 strict하게 검증하고 그 source를 operator_observed로 표시해야 한다. Schema version 1은 exact field schema_version, target_id, target_kind, image_id, image_digest, oci_revision, observed_at만 허용한다. schema_version은 integer 1, target field는 non-empty string, image 값은 lowercase sha256:<64 hex>, revision은 lowercase 40-hex, 관측 시각은 UTC RFC 3339여야 한다. Schema·duplicate-key·secret validation 실패는 입력을 record에 복사하지 않고 record/receipt 없이 non-zero로 종료해야 한다. 유효 evidence 이후 gate가 직접 관측한 audit checkout HEAD/detached/dirty 상태, revision별 runtime-file blob 일치와 read-only state capture는 caller evidence와 분리하고 REQ-0010의 gate record v1 exact schema로 기록한다. Observed revision과 checkout HEAD가 다르거나 checkout, runtime file 또는 필수 capture가 실패하면 gate.passed=false의 immutable failure record를 남기고 non-zero로 종료해야 한다. Record write 뒤 CLI는 canonical path와 raw bytes SHA-256을 REQ-0010 gate receipt v1 JSON으로 출력한다. Core는 target/runtime을 inspect하거나 caller evidence를 직접 관측값으로 주장하지 않는다.

Verification

  • 성공 조건: 유효한 evidence와 clean detached checkout, 일치 runtime files, 성공 capture를 사용하면 REQ-0010 gate record v1에 source=operator_observed, caller evidence와 gate-observed evidence가 분리되고 gate.passed=true이며 receipt의 SHA-256이 저장된 raw bytes와 같고 CLI가 0으로 종료한다.
  • 실패·경계 조건: 필수 field 각각의 누락, unknown/duplicate key, bool을 포함한 잘못된 type, empty target, uppercase·길이 오류 digest/revision, non-UTC 또는 timezone 없는 timestamp와 secret-like key/value는 record/receipt 없이 non-zero로 종료한다. 유효 evidence 이후 revision mismatch, dirty/attached checkout, runtime-file mismatch와 capture 실패는 immutable failure record·receipt와 non-zero를 만들며 success로 승격되지 않는다.
  • 검사 방법: evidence parser와 collect_release_provenance() 단위 테스트, CLI subprocess/fixture 테스트로 record schema·source 표기·verdict·exit code를 확인하고 legacy unversioned evidence가 거부되는지 검증한다.