- analyze_jet_cv_continuation: samples are analyzed only if the sibling
re*_s*.json receipt is the same case with run_status COMPLETE and
source_recheck UNCHANGED; receipts without run_status (pre-recheck
runners) are refused unless --legacy-receipts, and labelled
LEGACY_NO_FINAL_SOURCE_RECHECK. Results carry receipt_gate.
- V3: receipts are schema 2 and need source_recheck UNCHANGED; a missing
recheck is accepted only for frozen-mode schema 1 receipts whose
run_case.py hash is one of the pre-recheck runners (9805383, 2cf9853,
db3d098; hashes checked against git history in a test).
- V1/V3 refuse --output inside the checkout before source checks or CUDA
(shared source_provenance.reject_output_inside).
- A failing recheck is recorded as RECHECK_FAILED (still invalid); the
in-run V1 receipt write is tmp+replace.
Negative host tests for each gate. No threshold, solver or evidence edits.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Both runners now re-derive the recorded source identity after the run
(source_provenance.final_source_check) and only then mark the receipt
complete. A changed source, or a recheck that fails, rewrites the receipt
as invalid and raises:
- V1: in-run receipts carry run_status=INCOMPLETE; finish_receipt sets
COMPLETE or INVALID_SOURCE_CHANGED (+ source_recheck/source_after).
- V3: completed stays False, invalid=SOURCE_CHANGED_DURING_RUN, no
screening_pass; the assessor requires source_recheck UNCHANGED (frozen
mode still accepts receipts from before the field existed).
Interrupted runs keep INCOMPLETE / completed=False. Host tests cover
unchanged, changed and failed rechecks and incomplete runs. No threshold
or solver change.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
run_case --current-checkout records the clean checkout (HEAD, src
fingerprint, harness hashes, pinned build-capture helper) labelled
current_checkout instead of requiring the frozen a135252 tree; receipts
carry numerical_revision=None. assess --current-checkout applies the same
gates to such receipts. Frozen mode is unchanged and now rejects any
receipt with source_mode, so the two never cross-qualify. A missing a135252
object is reported as unavailable history instead of a source diff.
check_projected_pairs.py is untouched, so its pinned hash and existing
receipts keep their meaning.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>