2026-06-16-candidate-registry-robustness-sota · iteration 09 · 2026-06-16
A candidate can no longer be promoted on a stale or unprovenanced verdict: each axis verdict is now bound to the exact data + code that produced it, and promotion requires that pin to be complete.
input_lock — data_snapshot_sha + code_git_sha + params_hash + harness_version — plus a subject_digest (a hash of those four). A verdict without all four is 'unpinned'. The new --set-verdict ID AXIS VERDICT command records the verdict + lock as a tamper-evident history event.→ promoting is blocked unless all three axes are PASS and each carries a complete input_lock. Verified on a throwaway copy: three axes PASS but no lock → BLOCKED ('unpinned: parameterless, agnostic, orthogonal'); the same three with a full lock → allowed. So a verdict from a different data window can't quietly carry a promotion./registry:doctor now reports how many all-PASS rows are fully input-locked. The gate is forward-only: existing promoted features (which predate D5) are grandfathered — not retroactively blocked. The real ledger was not mutated (D5 is enforcement + new fields, no backfill needed).--set-verdict appends a hash-chained event; --verify-chain stayed intact after a batch of verdict writes. So the new evidence is itself tamper-evident.num demoted to an auto display ordinal), keeping old cand-NNNN as aliases./registry:check-full, and mark PR #535 ready for review.| field | meaning |
|---|---|
data_snapshot_sha | which exact data the verdict was computed on |
code_git_sha | which code revision produced it |
params_hash | the parameters/config used |
harness_version | the evaluation harness version |
subject_digest | sha256 of the four above — the pin |
→ promoting needs parameterless + agnostic + orthogonal all PASS AND a complete input_lock per axis. Record with --set-verdict ID AXIS PASS --data-snapshot … --code-sha … --params-hash … --harness ….