Repository navigation
fix(OMN-19131): omit requested_timeout_seconds from the delegation wire when unset - #2777
Merged
jonahgabriel merged 2 commits intoSep 23, 2026
Conversation
…re when unset The field landed on ModelDelegateSkillRequest without exclude_if, so RuntimeLocal's model_dump_json publish seam emitted "requested_timeout_seconds": null on every delegation, including every caller that never passed --timeout. The model declares extra=forbid, so a consumer baked before the field refuses the record as publisher-malformed. This is the second instance of the OMN-18852 rollout class, whose remedy is documented three fields further down the same file. Lab readback, .201, 2026-09-22 -- each container's own copy of the model validating the exact published bytes: omninode-runtime PRE ACCEPTED POST ACCEPTED omninode-stability-test-runtime PRE REFUSED POST ACCEPTED PRE is refused with requested_timeout_seconds: Extra inputs are not permitted [type=extra_forbidden] -- one producer, one record, accepted on one live lane and refused on another at the same moment. The new test module also spells the permitted wire keyset as a literal. The OMN-18852 guard derives its accepted set from the model under test, so it ratifies any field the model gains next, which is why it was green while this one reached the wire. Onex-Lane: omn19131-timeout-field Onex-Session: 900b19dbb7614ad6962d988b724cb778
✅ Architectural Review — PASSEDErrors: 0 What this checks
No architectural violations found. Static architectural lint — no model inference (OMN-14176). |
✅ Hostile Reviewer — PASSEDBlocking findings (critical/error): 0 Gate semantics
Powered by omniintelligence.review_pairing.cli_review — node-based adversarial review via HandlerLlmCliSubprocess (OMN-8524) |
jonahgabriel
marked this pull request as ready for review
September 22, 2026 19:21
onexbot-occ-writer Bot
added a commit
to OmniNode-ai/onex_change_control
that referenced
this pull request
Sep 22, 2026
…nimarket#2777 The declared checks were executed for real in the OmniNode-ai/omnimarket checkout at the PR head by the product-repo OCC receipt runner, and the results written append-only into this companion. Producer-minted PENDING receipts are superseded by a net-new record; no existing receipt was edited. Ticket: OMN-16859 (AC3b) Onex-Workflow: OCC Receipt Runner Onex-Run: https://github.com/OmniNode-ai/omnimarket/actions/runs/35773286738
jonahgabriel
pushed a commit
to OmniNode-ai/onex_change_control
that referenced
this pull request
Sep 22, 2026
…imarket#2777 (#10822) * evidence(OMN-19131): author OCC companion for OmniNode-ai/omnimarket#2777 OCC companion by node_pr_lifecycle_fix_effect (OMN-13317 F1 / OMN-13990 / OMN-14285). Product PR head 96c7c3e9e7424a4889b7727b0a797f7cbf516620. * evidence(OMN-19131): self-bind OCC#10822 + rebind contract_sha256 * evidence(OMN-16859): executed test_passes receipts for OmniNode-ai/omnimarket#2777 The declared checks were executed for real in the OmniNode-ai/omnimarket checkout at the PR head by the product-repo OCC receipt runner, and the results written append-only into this companion. Producer-minted PENDING receipts are superseded by a net-new record; no existing receipt was edited. Ticket: OMN-16859 (AC3b) Onex-Workflow: OCC Receipt Runner Onex-Run: https://github.com/OmniNode-ai/omnimarket/actions/runs/35773286738 --------- Co-authored-by: omnimarket-bot <bot@omninode.ai> Co-authored-by: onexbot-occ-writer[bot] <307849072+onexbot-occ-writer[bot]@users.noreply.github.com>
jonahgabriel
added a commit
that referenced
this pull request
Sep 22, 2026
…to infra (#2783) * fix(OMN-19194): raise shadow-slice timeout budget and route exit 124 to infra market-drain measured (2026-09-22, OMN-17427): the scoped shadow slice (-m "unit and not kafka") takes 621-663s of pytest time plus ~90s of collection, 711-753s total. The old --timeout 900 left only 150-190s of margin, and a ~25% slower runner (observed on PR #2777/#2779) pushed the same correctly-scoped slice past the wall -- exit 124 -- which this step fell through to the generic "failure" branch on, misreporting reason-graph and product-readiness/evaluate as PRODUCT_FAILED for a hang/timeout, not a real product defect. Two-part fix, matching the OMN-18820 exit-125 precedent: - raise the budget to 1200s, giving 300s+ (27%+) margin over the worst-observed timed-out case -- this is runner-speed variance on an already-narrow slice, unlike the sibling onex_change_control finding under this same ticket, where the slice itself needed narrowing; - mirror the exit-125 branch for exit 124: report product_conclusion=timeout and succeed the step, so a genuine remaining hang still routes to the infra dimension instead of a false PRODUCT_FAILED root. * fix(OMN-19194): declare exit-124 timeout as an explicit INFRA conclusion The exit-124 -> product_conclusion=timeout branch this ticket wires into product-readiness-shadow.yml relies on product_readiness.py's fail-closed default (an unrecognized conclusion falls through to INFRA) rather than an explicit vocabulary entry. OMN-18820 declared runner_crashed explicitly for exactly this reason: its own test (now mirrored here) proves the entry is load-bearing documentation, not a functional no-op, because the fail-closed default could be tightened later with nothing left to catch it. Adds "timeout" to _INFRA_CONCLUSIONS with the same measured justification already in the workflow comment, plus a focused test file mirroring test_omn18820_shadow_runner_crash_class.py's TestConclusionVocabulary and TestReasonGraphRoot classes, scoped to this addition only (the harness's own EXIT_HANG=124 classification is unchanged and already covered by test_run_shadow_slice.py).
jonahgabriel
deleted the
jonah/omn-19131-exclude-unset-requested-timeout-from-the-delegation-wire
branch
September 23, 2026 10:44
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.
OMN-19131
requested_timeout_secondslanded onModelDelegateSkillRequest(omnimarket#2718,ce11a870d, merged 2026-09-22T03:49:58Z) withoutexclude_if.RuntimeLocalpublishes the delegation command record asmodel_payload.model_dump_json().encode("utf-8"), so the field serialises as"requested_timeout_seconds": nullon every delegation — including the overwhelming majority that never passed--timeoutand have no interest in it.The model declares
extra="forbid". A consumer baked before the field declares no such field and refuses the record as publisher-malformed. This is the second instance of the rollout class whose remedy is spelled out three fields further down this same file.Lab readback (rule 24) —
.201, 2026-09-22Each container's own copy of the model validating the exact published bytes, rather than comparing version strings (both sides reported the same version last time, which is why the first instance went undetected):
omninode-runtimeomnibase-infra(dev)omninode-runtime-effectsomnibase-infra(dev)omninode-stability-test-runtimeomnibase-infra-stability-testomninode-stability-test-runtime-effectsomnibase-infra-stability-testextra=forbidRefusal text on the pre-fix bytes:
One producer, one record, accepted on one live lane and refused on another at the same moment. Read-only
docker exec ... python -con both lanes; nothing built, restarted, retagged or otherwise mutated.RED then GREEN
Neighbouring suites after the fix, all green:
test_omn18852_published_at_excluded_when_unset,test_omn18852_queue_wait_accounting,test_models,test_handler_delegate_skill_budget_omn15504,test_runtime_dispatch_port,test_response_contract_conformance_runner_omn18700,test_omn18852_inference_deadline_bound— 85 passing across the two runs.Why the existing guard was green while this reached the wire
test_omn18852_published_at_excluded_when_unsetderives its accepted field set asModelDelegateSkillRequest.model_fields.keys() - {"published_at"}, so it ratifies whatever field the model gains next — exactly the hazard its own docstring warns about, applied to every field but the one it names. The new module therefore spells the permitted wire keyset as a literal, in both directions: a new optional field that forgetsexclude_ifnames itself in the failure, and silently dropping a key an existing consumer requires fails too.Scope
One field gains
exclude_if=lambda value: value is None. No behaviour change for any caller: a request that does set a timeout still serialises it (covered by a positive control), thege=1bound is unchanged, and the handler's ceiling refusal and budget evidence are untouched. The other optional fields on this contract are older than every deployed consumer and are deliberately left on the wire — that is what the literal keyset records.This closes the wire-safety half of Required outcome A. Halves B (AC3/AC4 — a pre-publish validation failure reported as itself rather than as an absent terminal) and AC5 (the cross-repo payload/model contract test) live in
omnibase_infra'scli_delegate.pyand are not touched here.Merge sequencing (OMN-17427): this is runtime-affecting under the canonical deploy-gate path patterns, so it lands only after omnibase_infra#3939 under the 2026-09-21 runtime merge-order ruling. It is ready for review so its change-control companion can mint and every gate can run on a non-draft head; the
hold:auto-mergelabel keeps the auto-merge workflow from arming it. Fresh head merges currentdev, including the OMN-18868 wire-compatibility gate; run locally on that head it reportsWIRE_COMPAT_PASSagainst released consumer v0.4.198.Evidence-Ticket: OMN-19131
Evidence-Source: OCC#10822