Skip to content

feat(models): cross-plane promotion decision + RunReceipt (fail-closed, replayable) - #274

Merged
mdheller merged 1 commit into
mainfrom
feat/model-promotion
Aug 3, 2026
Merged

feat(models): cross-plane promotion decision + RunReceipt (fail-closed, replayable)#274
mdheller merged 1 commit into
mainfrom
feat/model-promotion

Conversation

@mdheller

@mdheller mdheller commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

The governance capstone — closes the champion/challenger loop with a deterministic, examiner-replayable promotion.

  • tools/promote_model.pydecide_promotion(), the one promotion contract both planes (cloud lattice + local agent-machine) call. A challenger promotes only if it beats the champion and passes the eval gate; a regulated target additionally needs examiner sign-off; nothing self-promotes (eval_passed/signed_off default False). Verdict ∈ promote|hold|shadow|blocked, plus a PSI-drift flag.
  • Emits a RunReceipt whose hash is deterministic over the decision inputs — re-run the inputs, get the same receipt. Examiner-replayable.
  • 8 tests + a new tools-tests CI workflow that gates the promotion + surface-feed tests (previously ungated). Cross-linked from the governed-model-plane doc.

Verified: 17 tools tests pass together (promotion + feeds).

…d, replayable)

decide_promotion() is the one promotion contract both planes call: a challenger promotes
only if it beats the champion AND passes the eval gate; regulated targets need examiner
sign-off; nothing self-promotes (eval_passed/signed_off default False). Emits a RunReceipt
whose hash is deterministic over the decision inputs — a promotion is examiner-replayable.
8 tests + a tools-tests CI workflow (gates promotion + surface-feed tests, previously ungated).
@mdheller
mdheller merged commit 156afbb into main Aug 3, 2026
9 checks passed
@mdheller
mdheller deleted the feat/model-promotion branch August 3, 2026 21:45
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