Repository navigation
feat(OMN-20910): the Hostile Reviewer reads its voters from a contract overlay - #1039
Merged
Merged
Conversation
…t overlay New COMPUTE node node_review_voters_overlay_compute: handle() validates a review_voters_overlay.v1 document and resolves each voter's endpoint from a backend of the lab delegation overlay (bifrost_lane_overlay.v3) or from its own endpoint_url, with model selection, sampling, focus, timeout and a required flag. A refusal is returned as data naming the voter. The file edge is model_registry_loader.load_review_voters. cli_review and retry_budget take --voters-overlay. A required voter that is unreachable or fails exits 2 naming it; no fallback is substituted. The quorum policy stays in model_registry.yaml and is unchanged. The loader and the node import only pydantic and yaml, so the workflow preflight reads the same roster before the dependency install.
… AC1 and AC2 in contracts/OMN-20910.yaml
jonahgabriel
pushed a commit
to OmniNode-ai/onex_change_control
that referenced
this pull request
Oct 10, 2026
#13595) * evidence(OMN-20910): author OCC companion for OmniNode-ai/omniintelligence#1039 OCC companion by node_pr_lifecycle_fix_effect (OMN-13317 F1 / OMN-13990 / OMN-14285). Product PR head e346cb6b841917089cddf1146e0039de2d5fea87. * evidence(OMN-20910): self-bind OCC#13595 + rebind contract_sha256 --------- Co-authored-by: omnimarket-bot <bot@omninode.ai>
…ith handle(request), so the node is born canonical
This was referenced Oct 11, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Ticket: OMN-20910 (parent OMN-20768). Operator RULING 2026-10-10T18:17:37Z: review-voter models are declared in a contract overlay, never in repository variables or workflow files.
What
node_review_voters_overlay_compute:handle(ModelReviewVotersOverlayRequest) -> ModelReviewVoterRostervalidates areview_voters_overlay.v1document and resolves each voter's endpoint from a backend of the lab delegation overlay (bifrost_lane_overlay.v3) or from its ownendpoint_url, with model selection (served or declared), temperature, top_p, focus prompt, timeout, retries and arequiredflag. A refusal is returned as data naming the voter.model_registry_loader.load_review_voters(path). It and the node import only pydantic and yaml, so the workflows' pre-install preflight reads the same roster.cli_review --voters-overlay FILE(excludes--model): the overlay is the roster. No API fallback is substituted. A required voter that is unreachable is named and no voter is called; a required voter that fails its call is named; both exit 2 (no verdict). Each reachable served voter's live model id is printed in the log.retry_budget --voters-overlay FILEbudgets the overlay's own timeouts.register_review_votersrefuses a voter id that shadows amodel_registry.yamlkey.review_quorumstays inmodel_registry.yaml(bounded >= 2) and distinct voters are still counted by endpoint plus model.The overlay file itself is omnibase_infra
docker/lane-overlays/hostile-review-voters.yaml(companion PR); the three hostile-reviewer workflows switch to it after this lands and their omniintelligence pin moves here.Depends on
omniintelligence#1038 (review-voter-diversity-9f8a): this branch is stacked on its commit, which adds the
temperature,top_pandreview_focusfields the overlay entries carry. Land #1038 first; this PR then holds only its own two commits.Proof
tests/unit/review_pairing/test_review_voters_overlay_omn20910.py: 34 tests (loading, validation naming the voter, removed voter not called, overlay-only model swap, unreachable and failing required voters exit 2, optional voter loss, one voter is still no quorum, retry budget).tests/unit/review_pairing/809 passed locally; mypy --strict clean on the changed modules.Lab: 2026-10-10 ~18:45Z, from the operator Mac against the lab,
cli_review --file <plan> --voters-overlay omnibase_infra/docker/lane-overlays/hostile-review-voters.yaml:correctness-> .201:8000 served Qwen3.8-27B succeeded in 23.7s,security-contracts-> .200:8130 served Qwen3.8-27B succeeded in 53.6s, quorum passed (2 distinct reviewers), exit 0. Same run with the second voter pointed at the retired :8131: exit 2,required review voter 'security-contracts' is unreachable (security-contracts at 192.168.86.200:8131), no voter called. An unknown backend id: exit 1 naming the voter and listing the bound backends.Evidence-Ticket: OMN-20910
Evidence-Source: OCC#13595