Skip to content

chore(OMN-16815): repin omnibase-infra 0.38.11 and retire the OMN-16767 chain-gate xfail - #2176

Merged
jonahgabriel merged 2 commits into
devfrom
jonah/omn-16815-repin-infra-0-38-11
Aug 28, 2026
Merged

jonahgabriel merged 2 commits into
devfrom
jonah/omn-16815-repin-infra-0-38-11

Conversation

@jonahgabriel

@jonahgabriel jonahgabriel commented Aug 28, 2026 •

Copy link
Copy Markdown
Contributor

Closes OMN-16815.

What this does

Two changes that must land together, because the first makes the second fail.

  1. uv.lock: omnibase-infra 0.38.10 -> 0.38.11 (single-package upgrade, uv lock --upgrade-package omnibase-infra; the >=0.38.3,<0.39.0 range in pyproject.toml already admitted it, so nothing else moved — the diff is 3 lines).
  2. tests/chains/: retire the broken_by="OMN-16767" strict-xfail marker, and invert the arm-selection assertion it was paired with.

Why now

omnibase_infra v0.38.11 was cut and published today from dev SHA 4529c3486a8bb49a45a623a008e4bbfa2a3a3148. It is the first release carrying the delegation-arm fixes:

  • omnibase_infra#2937 — db_io must not steal a typed def-B handler into the projection arm (OMN-16767)
  • omnibase_infra#2943 — the type-scoping predicate must agree with the dispatch it scopes (OMN-16767)
  • omnibase_infra#2949 — db_io must not suppress result delivery; no consume commits with no effect (OMN-16798)
  • omnibase_infra#2951 — a record already on a dead-letter topic must not be re-DLQ'd onto itself (OMN-16798)

The delegation-routing-reducer row in tests/chains/test_event_chain_gate.py was xfail(strict=True) and its own comment named the trigger: "Fix in flight: omnibase_infra#2937. This row turns RED the moment the pin picks that up." It did — verified before the edit:

FAILED tests/chains/test_event_chain_gate.py::test_chain_reaches_terminal_and_never_quarantines[delegation-routing-reducer]
[XPASS(strict)] OMN-16767: chain is dead today. STRICT — this turns RED (XPASS) the moment the fix lands, which is the signal to delete this marker.

That XPASS is the proof the chain is alive: the row drives the real MessageDispatchEngine from the real contract.yaml and requires a ModelRoutingDecision terminal on onex.evt.omnibase-infra.routing-decision.v1 with nothing on quarantine. The marker is gone; the row is now an ordinary passing row with nothing to hide behind if the chain dies again.

The arm assertion is inverted, not deleted

tests/chains/test_projection_arm_constructs.py asserted that wiring selects the projection arm. Under 0.38.10 it did — and that is precisely the OMN-16767 defect (a typed def-B handler handed a raw input_data dict). Post-#2937 the correct arm is the typed def-B arm, so keeping the old assertion would mean asserting the defect. All seven profiles failed on the bump:

AssertionError: [onex-prod] expected the PROJECTION arm (_make_projection_dispatch_callback.<locals>._callback),
got '_make_dispatch_callback.<locals>._callback'

Arm identity is still pinned in both directions: the projection arm is now asserted against by name as the OMN-16767 regression signature, so a silent flip back fails here with the cause spelled out.

The OMN-16794 constructibility claim did not evaporate

Because #2937 clears db_tables for a typed def-B handler, wiring no longer reaches _resolve_projection_database_target for this contract — the call that raised under 0.38.9. Rather than let that coverage disappear as a side effect of an arm change, the claim is now asserted directly against that resolver under all seven topology profiles (test_projection_binding_resolves_under_every_topology_profile), alongside the existing resolver-level pin in test_overlay_table_resolves_to_its_physical_grant_schema. Neither goes through wiring, so neither is hostage to the next arm-selection change.

Non-vacuity proven, not assumed. Monkeypatching physical_grant_schema_for_table back to 0.38.9 behaviour (lambda schema, name: schema) makes the new assertion raise the original error under all seven profiles:

local RAISES: Projection binding 'tenant_projection' principal 'tenant_projection_writer' lacks declared ...
test RAISES: ...
onex-dev RAISES: ...
stability-test RAISES: ...
prod RAISES: ...
judge RAISES: ...
onex-prod RAISES: ...
  • Installed version, not just the range: uv run python -c "from importlib.metadata import version; print(version('omnibase-infra'))" -> 0.38.11
  • uv run pytest tests/chains/ -q -> 17 passed (was 8 failed / 2 passed immediately after the lock bump)
  • uv run ruff format src/ tests/ + uv run ruff check --fix src/ tests/ -> All checks passed
  • uv run mypy src/omnimarket/ --strict -> Success: no issues found in 3044 source files
  • pre-commit run --all-files -> exit 0, zero failures
  • Pre-push: the governed impacted-test selector ran and passed ([prepush-smart-tests] impacted tests passed; allowing push) — no PREPUSH_FULL_SUITE, no -k filter, no bypass.

Release provenance: PyPI omnibase-infra 0.38.11 (info.version confirmed after the ~60s index lag), GitHub release https://github.com/OmniNode-ai/omnibase_infra/releases/tag/v0.38.11.

Evidence-Ticket: OMN-16815
Evidence-Source: OCC#7356


Correction — the first push was green for the wrong reason (2nd commit, 60df58a8)

The local 17 passed above was environment-dependent, and CI caught it. The Event Chain Gate went RED on the runner:

ProtocolConfigurationError: [ONEX_CORE_041_INVALID_CONFIGURATION]
No tier has a configured endpoint for task_type='summarization'.

Nothing about the chain differed. My shell carried live cloud credentials (GEMINI_API_KEY, LLM_GLM_API_KEY, OPEN_ROUTER_API_KEY), which made the cheap_cloud rung routable locally; the runner has none, and the local rung (local-reasoner, where summarization routes first) was unroutable on both because its endpoint_url is null in the repo default — site-specific and overlay-supplied by design (OMN-12815 / OMN-15807).

So the gate's verdict was a function of the ambient environment. That is the OMN-16796 defect class, inside the suite written to catch chains dying silently — worth naming plainly rather than patching quietly.

Reproduced locally before fixing, by stripping the environment CI does not have:

env -u GEMINI_API_KEY -u LLM_GLM_API_KEY -u OPEN_ROUTER_API_KEY ... uv run pytest tests/chains/ -q
  -> 1 failed, 16 passed   (same ProtocolConfigurationError)

Fix: a module-level autouse fixture writes a minimal BIFROST overlay giving local-reasoner a complete but deliberately unreachable chat-completions URL (127.0.0.1:9, the discard port). The node under gate is a routing reducer — it emits ModelRoutingDecision and never opens a connection — so an unreachable address costs nothing and keeps the gate server-free and credential-free. tests/conftest.py::_ensure_bifrost_contract_path clears BIFROST_OVERLAY_PATH unconditionally; a module-level autouse fixture runs after it and wins, which is that fixture's own documented override path.

Verified both ways after the fix:

uv run pytest tests/chains/ -q                                  -> 17 passed   (developer env intact)
env -u <every cloud key> -u <every BIFROST_* binding> ...  -> 17 passed   (the CI shape)

Note this does not weaken the gate: the row still requires a real ModelRoutingDecision terminal on onex.evt.omnibase-infra.routing-decision.v1 with nothing on quarantine. It only removes the machine from the answer.

…67 chain-gate xfail

omnibase_infra v0.38.11 is the first release carrying the delegation-arm
fixes (#2937, #2943, #2949, #2951). Resolving the lock to it makes the
delegation-routing-reducer chain-gate row XPASS under its strict xfail,
which is exactly the signal the marker was written to produce, so the
marker goes with the bump.

The arm-selection assertion in test_projection_arm_constructs.py is
INVERTED, not deleted: post-#2937 the correct arm for a handler with a
concrete BaseModel input is the typed def-B arm, and the projection arm
is now named as the OMN-16767 regression signature. Because wiring no
longer reaches _resolve_projection_database_target for this contract,
the OMN-16794 constructibility claim is re-asserted directly against
that resolver under all seven topology profiles rather than left to
evaporate as a side effect of the arm change.
@coderabbitai

coderabbitai Bot commented Aug 28, 2026 •

Copy link
Copy Markdown

Warning

Review limit reached

Next included review available in 9 minutes.

View limit details

Limit details: You’ve used the included review currently available. Your 131 included PR review attempts over the past 7 days set your current allowance at 1 review per hour.

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: c565ea6d-485a-4cf9-b541-f9e6e100245d

📥 Commits

Reviewing files that changed from the base of the PR and between de13368 and 60df58a.

⛔ Files ignored due to path filters (1)
  • uv.lock is excluded by !**/*.lock
📒 Files selected for processing (2)
  • tests/chains/test_event_chain_gate.py
  • tests/chains/test_projection_arm_constructs.py

Comment @coderabbitai help to get the list of available commands.

@github-actions

Copy link
Copy Markdown

✅ Hostile Reviewer — PASSED

Blocking findings (critical/error): 0
Total findings: 0
Models succeeded: qwen3-review,qwen3-review-b


Gate semantics

Verdict Meaning Blocks merge?
passed >=2 models succeeded, no critical/error findings No
blocked CRITICAL or ERROR findings found Yes
degraded Fewer than 2 models succeeded (infra unavailable/timeout) Yes (OMN-15110)

Powered by omniintelligence.review_pairing.cli_review — node-based adversarial review via HandlerLlmCliSubprocess (OMN-8524)

@github-actions

Copy link
Copy Markdown

✅ Architectural Review — PASSED

Errors: 0
Warnings: 0

What this checks

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

No architectural violations found.

Static architectural lint — no model inference (OMN-14176).

@jonahgabriel
jonahgabriel enabled auto-merge (squash) August 28, 2026 01:52
…ambient

The gate passed on a laptop and failed on the CI runner at this pin:

  ProtocolConfigurationError: [ONEX_CORE_041_INVALID_CONFIGURATION]
  No tier has a configured endpoint for task_type='summarization'.

Nothing about the chain differed. The laptop shell carried live cloud
credentials (GEMINI_API_KEY / LLM_GLM_API_KEY / OPEN_ROUTER_API_KEY), so
the cheap_cloud rung was routable there; the runner has none, and the
local rung was unroutable on both because local-reasoner's endpoint_url
is null in the repo default (site-specific, overlay-supplied per
OMN-12815/OMN-15807). The gate's verdict was therefore a function of the
ambient environment — the OMN-16796 defect class, inside the suite
written to catch chains dying silently.

A module-level autouse fixture now writes a minimal BIFROST overlay
giving local-reasoner a complete but deliberately unreachable
chat-completions URL (127.0.0.1:9, the discard port). The node under
gate is a routing REDUCER: it emits ModelRoutingDecision and never opens
a connection, so an unreachable address costs nothing and keeps the gate
server-free. tests/conftest.py clears BIFROST_OVERLAY_PATH
unconditionally; a module-level autouse fixture runs after it and wins,
which is that fixture's own documented override path.

Verified both ways: green with the developer environment intact, and
green under `env -u` of every cloud key and every BIFROST_* binding
(the CI shape, which reproduced the failure before this change).
jonahgabriel pushed a commit to OmniNode-ai/onex_change_control that referenced this pull request Aug 28, 2026
…imarket#2176 (#7356)

* evidence(OMN-16767, OMN-16815): author OCC companion for OmniNode-ai/omnimarket#2176

OCC companion by node_pr_lifecycle_fix_effect (OMN-13317 F1 / OMN-13990 / OMN-14285). Product PR head 1984879f4152b48ec9cf4c2a6ec926a7712f5bd2.

* evidence(OMN-16767, OMN-16815): self-bind OCC#7356 + rebind contract_sha256

---------

Co-authored-by: omnimarket-bot <bot@omninode.ai>
auto-merge was automatically disabled August 28, 2026 02:19

Pull request was closed

@jonahgabriel jonahgabriel reopened this Aug 28, 2026
@jonahgabriel
jonahgabriel merged commit ab13bc9 into dev Aug 28, 2026
201 of 213 checks passed
@jonahgabriel
jonahgabriel deleted the jonah/omn-16815-repin-infra-0-38-11 branch August 28, 2026 03:04
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