Repository navigation
fix(OMN-19234): the bus receipt names the backend key that answered, not uuid5 of the model id - #3009
Conversation
…not uuid5 of the model id On the deployed bus path every attempt's backend_id was routing_decision_id, uuid5 of the MODEL id, so local-coder, local-heavy-reasoning (.201) and local-omnipc2-chat (.202) all recorded 61c35979 and no receipt could say which host answered. The routing decision already carries the backend key (selected_backend_ref); it was dropped on the way to the terminal. - ModelDelegationEscalationAttempt gains backend_ref, stamped from the decision in both record helpers, so every rung in escalation_history names its backend. - The delegate-skill terminal maps an attempt's backend_id from backend_ref first, falling back to the old fields for a terminal from an older runtime. The CLI receipt's backend_id is the accepted attempt's backend_id, so it now names the backend key, matching the in-process path. Never an endpoint URL. Onex-Lane: delegation-w1-config-capacity Onex-Session: 45eff6625b864b68a9558539f272a6bc
|
| Rule | Description |
|---|---|
| ARCH-TOPIC-001 | No hardcoded Kafka topic strings in handler code |
| ARCH-DI-001 | No event_bus=None bypass |
| ARCH-DI-002 | No direct Handler instantiation outside workflow_runner/adapters |
| ARCH-DI-003 | No reinvented DI containers |
| ARCH-TOPIC-002 | contract.yaml topics follow `onex.{cmd |
ARCH-DI-002: Direct Handler instantiation (warning)\n\n```\nsrc/omnimarket/nodes/node_delegation_orchestrator/handlers/handler_delegation_workflow.py:1279: loop = HandlerComplianceLoop()
src/omnimarket/nodes/node_delegation_orchestrator/handlers/handler_delegation_workflow.py:2143: HandlerEscalationDecision()\n```\n\nHandler classes should be wired only in workflow_runner.py or adapter modules. Direct instantiation elsewhere bypasses the contract system.\n\n
Static architectural lint — no model inference (OMN-14176).
…nimarket#3009 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/36317622721
✅ Hostile Reviewer — PASSEDBlocking findings (critical/error): 0 Gate semantics
Powered by omniintelligence.review_pairing.cli_review — node-based adversarial review via HandlerLlmCliSubprocess (OMN-8524) |
Lab proof,
|
| run_id | correlation_id | exit | provider | model | attempts[0].backend_id |
escalation_count |
receipt backend_pin_honoured |
|---|---|---|---|---|---|---|---|
3282e836-7d03-497f-88ec-5e85844ce5c2 |
390da9ac-3776-4538-8e93-62d2392e1b5a |
0 | glm | glm-5.3-flash | cloud-glm |
0 | true |
b9fa4149-f18b-429b-98dc-5e50bc02e41f |
29704a39-0d70-4ddb-91d5-963d12fff9fe |
0 | glm | glm-5.3-flash | cloud-glm |
0 | true |
receipt.json for both: {"backend_id": "cloud-glm", "backend_pin_honoured": true, "backend_selection": "pinned", "requested_backend_id": "cloud-glm"} -- the exact false-pin-violation symptom from the OMN-19234 comments (attempt backend_id = a uuid5 hash) is gone; the attempt now names the backend key.
Unpinned control (no regression) -- run ca0dae99-66a7-4258-8ed9-98eb480d5aa2: completed on local-heavy-reasoning, backend_selection: "cheapest_first", backend_pin_honoured: null (no pin requested), as expected.
Restore: all 5 hotpatched files sha256-verified equal to origin/dev on both containers after the run (ae47a2ce... handler_delegation_workflow.py, cbe99275... handler_delegate_skill.py, 4359cead... model_delegation_escalation_attempt.py, d45c5c6a... dogfood_delegation_fault_routes.py, ed5bc64a... service_delegation_dispatch_port.py); both containers healthy (/health 200) with RestartCount: 0 throughout -- no crash loop. An unrelated automated deploy-agent rebuild (triggered by the 12:00Z OMN-19677/OMN-18773 dev merges) recreated all dev-lane containers mid-hotpatch; the hotpatch was reapplied cleanly once that settled.
Ledger: HOLD docs/tracking/ROLLING_WORK_LEDGER.md:10916, RELEASE docs/tracking/ROLLING_WORK_LEDGER.md:10971.
* evidence(OMN-19234): author OCC companion for OmniNode-ai/omnimarket#3009 OCC companion by node_pr_lifecycle_fix_effect (OMN-13317 F1 / OMN-13990 / OMN-14285). Product PR head f905220969a60162fc3907993c828e08aee291f3. * evidence(OMN-19234): self-bind OCC#11629 + rebind contract_sha256 * evidence(OMN-16859): executed test_passes receipts for OmniNode-ai/omnimarket#3009 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/36317622721 --------- Co-authored-by: omnimarket-bot <bot@omninode.ai> Co-authored-by: onexbot-occ-writer[bot] <307849072+onexbot-occ-writer[bot]@users.noreply.github.com>
…pt-cannot-name-the-host-when
What
On the deployed bus path, every escalation attempt's
backend_idwasrouting_decision_id,uuid5(NAMESPACE_DNS, "omninode.ai/backends/{model_id}"). Two backends serving the same model id (local-coder/local-heavy-reasoningon.201,local-omnipc2-chaton.202, all serving Qwen3.8-27B) therefore all recorded the identical hash, and no bus-path receipt could say which host actually answered. The routing decision already carries the backend key asselected_backend_ref(OMN-14402); it was dropped between the decision and the terminal.ModelDelegationEscalationAttemptgainsbackend_ref, stamped fromworkflow.routing_decision.selected_backend_refat both record helpers (_record_escalation_attemptand the winning-rung append), so every rung inescalation_historynames its backend.handler_delegate_skill.py::_attempt_recordsmaps a bus-path attempt'sbackend_idfrombackend_reffirst, falling back to the oldbackend_id/routing_decision_idfields for a terminal produced by a runtime that predates this change. The CLI receipt'sbackend_idis the accepted attempt'sbackend_id, so it now names the backend key, matching the in-process path. Never an endpoint URL (preserves OMN-17013).Why this also matters for OMN-19124/OMN-19765
This is also why
onex delegate --backend-id cloud-glm --bus kafka --lane dev --locus deployed-laneexits 1 as a false pin violation even when the pin is honoured on the deployed lane (comments on OMN-19234, 2026-09-26/27):_backend_pin_defectinomnibase_infra'scli_delegate.pycompares the requested slug against the accepted attempt'sbackend_id, which on the bus path was this uuid5 hash. Once this lands, the bus-path attempt'sbackend_idcarries the real backend key and the existing comparison inomnibase_infraneeds no change.Separate, unrelated-but-adjacent PRs:
omnibase_infra#4170(OMN-19124, the deployed-lane consumer admission guard, unmerged, needs=train) andomnibase_infra#4173(OMN-19765, the BYOK-substitution case, unmerged). Neither is touched here.AC coverage (OMN-19234)
ModelRoutingDecision.selected_backend_ref); covered here by a new test proving two backends serving one model id differ inselected_backend_refwhile sharingselected_backend_id.TestTheTerminalAttemptNamesTheBackendproves two hosts serving one model id produce two different receipt identities, and a terminal predating this change still maps via the old fallback.test_the_backend_key_is_never_an_endpoint_urlasserts the mappedbackend_idis never a URL (no://), preserving OMN-17013.Test plan
tests/unit/delegation/test_backend_identity_on_bus_receipt_omn19234.py-- RED-proven against origin/dev (checked out the 3 pre-fix source files locally, 6 of 8 cases failed with the exact hash-collision symptom, restored, GREEN 8/8 with the fix).test_bus_path_provider_identity_omn17013.py,test_omn19004_the_deciding_rung_sets_the_cause.py,test_local_accept_ends_chain_omn16932.py,test_escalation_metered_cost_reaches_projection_omn13535.py(69 passed),test_handler.pyunder node_delegate_skill_orchestrator (35 passed), and the OMN-19765 substituted-backend tests (5 passed, no interaction with the new field).ruff format --check/ruff checkclean on all touched files.mypy --strictclean on all touched source files..201dev lane: pending a concurrent lane's HOLD on the201-dev-runtimesurface clearing (in force until 12:45Z as of this PR); will be appended to this PR and the ledger once run.OMN-XXXX
Cites OMN-19234 (dod_evidence: this PR plus the lab proof once appended).
Evidence-Ticket: OMN-19234
Evidence-Source: OCC#11629