Skip to content

fix: certification corpus selection supports fresh-capture snapshots - #178

Merged
ezutfen merged 1 commit into
mainfrom
162d-select-cross-snapshot
Sep 5, 2026
Merged

fix: certification corpus selection supports fresh-capture snapshots#178
ezutfen merged 1 commit into
mainfrom
162d-select-cross-snapshot

Conversation

@ezutfen

@ezutfen ezutfen commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Follow-up to #177 (#162D machinery), found by verifying the selection gate against the real spent artifacts: both the #162B dev tranche and #162C holdout manifest derive from ONE snapshot (239 proposals, digest 1d1de9f7…), so the original gate's same-identity requirement would reject every fresh capture.

Changes:

  • select_certification_corpus now allows a fresh capture (different snapshot identity) when prior_snapshot is supplied; resolves the spent corpora's content hashes from it (key-independent identities).
  • Exclusion and the disjointness proof run on BOTH sample IDs and content hashes — a re-keyed capture cannot launder a spent case back into the pool; shared content hash fails closed (certification_content_hash_overlaps_*).
  • Manifest schema v2 records spent_snapshot_identities, same_snapshot_as_spent, and identity_basis; the freeze gate validates the basis.
  • CLI gains --prior-snapshot. 3 new tests (39 total passing); ruff + mypy --strict clean.

The #162B/#162C spent corpora derive from one snapshot (239 proposals,
digest 1d1de9f7...). A fresh certification capture has a different snapshot
identity and, with a different snapshot key, non-comparable HMAC sample IDs.
Selection now: allows the fresh capture, requires the prior snapshot to
resolve spent content hashes, excludes and proves disjointness on BOTH
sample IDs and content hashes (a re-keyed capture cannot launder a spent
case back in), and records the identity basis in the manifest. The
freeze gate validates the basis.
@ezutfen
ezutfen merged commit 0d5474e into main Sep 5, 2026
8 checks passed
@ezutfen
ezutfen deleted the 162d-select-cross-snapshot branch September 5, 2026 19:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant