Skip to content

fix(OMN-15645): bind DELEGATION_ROUTING_TIERS_PATH in runtime-worker catalog - #4758

Merged
jonahgabriel merged 3 commits into
devfrom
fix/omn15645-worker-tiers-lab-fill-10090550
Oct 9, 2026
Merged

jonahgabriel merged 3 commits into
devfrom
fix/omn15645-worker-tiers-lab-fill-10090550

Conversation

@jonahgabriel

@jonahgabriel jonahgabriel commented Oct 9, 2026 •

Copy link
Copy Markdown
Collaborator

Ticket: OMN-15645

This change addresses the catalog worker omission by hardcoding DELEGATION_ROUTING_TIERS_PATH=/app/config/delegation/routing_tiers.yaml in docker/catalog/services/runtime-worker.yaml. This explicit deployment pin matches other runtime kernels and resolves the RED cause: "runtime/runtime-worker must bind DELEGATION_ROUTING_TIERS_PATH to /app/config/delegation/routing_tiers.yaml; got None".

The falsified premise that an unset key causes a current boot failure is corrected: on live h201 worker omnimarket 0.4.307, a separate process with the key blank called real _get_config() and exited 0, using packaged bootstrap tiers for blank/unset keys. The remaining omission was that CatalogResolver and generate_compose rendered runtime-worker with DELEGATION_ROUTING_TIERS_PATH absent for both runtime and runtime-infrastructure bundles with RUNTIME_PROFILE=workers.

Lab: host=h201 lane=lab-fill-omn15645-10090550 command=uv run --frozen pytest tests/unit/docker/test_delegation_routing_tiers_path_binding_omn15645.py -q --no-cov observed=15 passed

Read-only live loader proof: docker exec using the inherited deployment environment on omnibase-infra-runtime-worker-1 loaded ModelDelegationConfig; bound file exists and SHA256 matches packaged omnimarket copy: 5a54e42d851e911275a58e7f7177990db2f03aa838cabf0533a6b5b7886689da.

The focused tests changed from 2 failed and 13 passed to 15 passed. The existing guard now covers workers in both bundles and runs as delegation-routing-tiers-binding before commit and in the compose-required-env-coverage CI job. The new hook, yamlfmt, end-of-file-fixer, Ruff lint and format checks passed.

Config-only Docker Compose renders for dev, stability-test, judge and prod returned exit 0 with the expected pin on each runtime kernel in that profile. Renders used isolated labfill-omn15645-render-* project names, the repository's lane overlays and synthetic test fixture values; judge used its judge profile. They did not recreate a runtime.

Acceptance evidence remains partial: this branch has not had a fresh runtime bring-up, the historical unset-key refusal cannot be reproduced on the current worker, and this lane has not checked the prod image's file in a container. The loader probe used a fresh process in the existing worker with its inherited deployment binding; it did not deploy this branch. Full repository hooks and new-PR CI remain pending. The launching runner must commit, push, open the PR and hand it off.

OMN-15645: Launching runner commit was refused by ci-live-contact because the changed CI workflow lacked recorded contact evidence. Real h201 worker omnibase-infra-runtime-worker-1 was probed using its inherited deployment environment, without an env override. The real _get_config() loaded ModelDelegationConfig; bound and packaged file hashes matched. Captured result and source/capture provenance are stored in tests/fixtures/omn15645_worker_tiers_live_contact.json. The existing catalog binding test now consumes this recording through recorded_response and a pytest.mark.live_contact marker, comparing generated runtime pins with the recorded deployed worker pin. The deployment-binding hook also triggers on changes to the recording. ci-live-contact and delegation-routing-tiers-binding hooks passed; the focused test file has 15 passed; Ruff lint and format checks passed. Five changed files are staged. Commit message is unchanged. The launching runner still owns commit, push, PR creation and handoff. Fresh branch runtime bring-up remains pending.

Evidence-Ticket: OMN-15645
Evidence-Source: OCC#13388

@jonahgabriel
jonahgabriel enabled auto-merge October 9, 2026 06:28
jonahgabriel pushed a commit to OmniNode-ai/onex_change_control that referenced this pull request Oct 9, 2026
…13388)

* evidence(OMN-15645): author OCC companion for OmniNode-ai/omnibase_infra#4758

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

* evidence(OMN-15645): self-bind OCC#13388 + rebind contract_sha256

---------

Co-authored-by: omnimarket-bot <bot@omninode.ai>

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hostile Reviewer — adversarial findings (OMN-17492)

Models succeeded: qwen3-review, gpt-oss-review
Models failed: none
New finding threads: 0
Deduped (already posted on this PR): 0
Below quorum (one model only, reported not threaded): 8
Nit-level findings suppressed: 1

The model is the FINDER, never the gate: merge is gated only by the
deterministic Hostile Review Thread Gate, which blocks while
hostile-reviewer threads are unresolved. Resolve each thread after
addressing (or rejecting, with a reply) its finding.

Below quorum: 8 finding(s) raised by one model only (OMN-18479)

These are reported and NOT dropped, but they get no thread and do not block: a single model's finding no other model reproduced is not evidence enough to stop a merge. Read them; act on them if they are right.

  • [CRITICAL] tests/unit/docker/test_delegation_routing_tiers_path_binding_omn15645.py (gpt-oss-review) — Fixture assertion contradicts parametrize scope | The test test_catalog_runtime_services_bind_the_packaged_tiers_path is parametrized to cover multiple service names, including omninode-runtime an
  • [MAJOR] tests/unit/docker/test_delegation_routing_tiers_path_binding_omn15645.py (qwen3-review) — Fixture assertion contradicts parametric service coverage | The test test_catalog_runtime_services_bind_the_packaged_tiers_path is parametrized over seven (bundle, service_name) pairs, including `om
  • [MAJOR] tests/fixtures/omn15645_worker_tiers_live_contact.json (qwen3-review) — SHA256 hash in fixture is not verified against source of truth | The fixture omn15645_worker_tiers_live_contact.json contains a hardcoded file_sha256 and packaged_sha256 value. The test asserts
  • [MAJOR] tests/unit/docker/test_delegation_routing_tiers_path_binding_omn15645.py (gpt-oss-review) — Hardcoded SHA256 in fixture creates brittle integrity check | The test asserts recorded_response["file_sha256"] == recorded_response["packaged_sha256"]. Both values are hardcoded in the JSON fixture
  • [MINOR] .pre-commit-config.yaml (qwen3-review) — Pre-commit hook regex may not cover all relevant files | The pre-commit hook delegation-routing-tiers-binding uses a regex to match files that should trigger the test. The regex includes `docker/(Do
  • [MINOR] tests/unit/docker/test_delegation_routing_tiers_path_binding_omn15645.py (qwen3-review) — Test does not verify that the path is actually baked into the image | The test test_catalog_runtime_services_bind_the_packaged_tiers_path checks that the compose file generated by the catalog resolv
  • [MINOR] tests/fixtures/omn15645_worker_tiers_live_contact.json (qwen3-review) — Fixture provenance is not machine-verifiable | The fixture includes a _provenance field with a command that was used to capture the data. This command is a complex one-liner that runs `docker exec
  • [MINOR] tests/unit/docker/test_delegation_routing_tiers_path_binding_omn15645.py (gpt-oss-review) — Missing coverage for 'runtime-infrastructure' bundle in other tests | The new parametrization includes ("runtime-infrastructure", "runtime-worker"). However, the other tests in the file (e.g., `test

@github-actions

github-actions Bot commented Oct 9, 2026 •

Copy link
Copy Markdown
Contributor

✅ Hostile Reviewer — REVIEWED

Critical findings: 0
Major findings: 3
Total findings: 9
Models succeeded: qwen3-review,gpt-oss-review
Models unavailable: none

Action required: findings were posted as review threads. Address or reject each one, then resolve its thread — the Hostile Review Thread Gate fails while hostile-reviewer threads are unresolved (OMN-17492).


Semantics (OMN-17492 — the model finds, thread resolution gates)

Surface Meaning Blocks merge?
Review threads Per-finding, posted by the reviewer No (informational)
Hostile Review Thread Gate Deterministic: unresolved hostile-reviewer threads exist Fails until resolved (not yet a required context)
degraded verdict Fewer than 2 models succeeded (infra) Fails this job with a named reason

Powered by omniintelligence.review_pairing.cli_review — multi-model adversarial review: qwen3-review (Qwen3.8-27B), gpt-oss-review (gpt-oss-120b) (OMN-8468/OMN-8524/OMN-17492)

repo-evidence / dod-verify failed on this pull request with "pull request cites
OMN-15645 but carries no contracts/OMN-15645.yaml". This commit adds
contracts/OMN-15645.yaml with one test_passes item running
tests/unit/docker/test_delegation_routing_tiers_path_binding_omn15645.py.
The contract covers this pull request's catalog binding only and does not claim
the ticket's lab readback, cold bring-up or mechanism criteria. On lab host
h202 the test file gives 15 passed, and 2 failed with the dev
runtime-worker.yaml; node_dod_verify on the contract returned status verified.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hostile Reviewer — adversarial findings (OMN-17492)

Models succeeded: qwen3-review, gpt-oss-review
Models failed: none
New finding threads: 3
Deduped (already posted on this PR): 0
Below quorum (one model only, reported not threaded): 7
Nit-level findings suppressed: 2

The model is the FINDER, never the gate: merge is gated only by the
deterministic Hostile Review Thread Gate, which blocks while
hostile-reviewer threads are unresolved. Resolve each thread after
addressing (or rejecting, with a reply) its finding.

Below quorum: 7 finding(s) raised by one model only (OMN-18479)

These are reported and NOT dropped, but they get no thread and do not block: a single model's finding no other model reproduced is not evidence enough to stop a merge. Read them; act on them if they are right.

  • [MAJOR] .pre-commit-config.yaml (qwen3-review) — Pre-commit hook regex does not cover the new fixture file | The pre-commit hook delegation-routing-tiers-binding has a files: regex that includes `tests/fixtures/omn15645_worker_tiers_live_contact
  • [MAJOR] tests/fixtures/omn15645_worker_tiers_live_contact.json (gpt-oss-review) — Hardcoded SHA256 hash in fixture is brittle and unverifiable | The fixture omn15645_worker_tiers_live_contact.json contains a hardcoded file_sha256 and packaged_sha256 value. The test asserts th
  • [MINOR] tests/fixtures/omn15645_worker_tiers_live_contact.json (qwen3-review) — Fixture contains a full shell command with embedded Python | The _provenance.command field in the fixture contains a full docker exec command with an inline Python script. While this is for proven
  • [MINOR] tests/unit/docker/test_delegation_routing_tiers_path_binding_omn15645.py (qwen3-review) — Fixture SHA256 values are not validated against a known-good source | The fixture contains file_sha256 and packaged_sha256 fields that are asserted to be equal in the test. However, there is no in
  • [MINOR] contracts/OMN-15645.yaml (qwen3-review) — Contract file claims a scope that the tests do not fully cover | The contract OMN-15645.yaml states that the evidence requirement is 'Catalog resolver and generator tests show main, effects and work
  • [MINOR] .pre-commit-config.yaml (gpt-oss-review) — Pre-commit hook regex may not cover all relevant catalog files | The pre-commit hook delegation-routing-tiers-binding uses a regex that includes catalog/.*\.ya?ml but does not explicitly cover `do
  • [MINOR] tests/fixtures/omn15645_worker_tiers_live_contact.json (gpt-oss-review) — Test fixture is not validated against the actual deployment environment | The fixture omn15645_worker_tiers_live_contact.json is described as a 'live contact' captured from a real container, but the

Findings demoted from threads (anchor rejected)

  • [MAJOR] hostile-reviewer (qwen3-review)

    Test asserts against fixture data instead of the constant | The test test_catalog_runtime_services_bind_the_packaged_tiers_path now asserts that the generated environment variable equals recorded_response["tiers_path"] instead of the module-level constant _EXPECTED_PATH. While the fixture currently contains the same value, this creates a circular dependency: the test validates the catalog output against a recorded fixture rather than the known-correct constant. If the fixture is corrupted or updated w

    Resolve this thread when addressed — the Hostile Review Thread Gate blocks while hostile-reviewer threads are unresolved (OMN-17492).

  • [MAJOR] hostile-reviewer (qwen3-review)

    Fixture fixture is required for all parametrized cases, not just worker | The recorded_response fixture is marked with @pytest.mark.live_contact and is injected into every parametrized invocation of test_catalog_runtime_services_bind_the_packaged_tiers_path, including cases for omninode-runtime and runtime-effects in the runtime-core, runtime, and local bundles. The fixture file is specifically named omn15645_worker_tiers_live_contact.json and its provenance states it was captured from a w

    Resolve this thread when addressed — the Hostile Review Thread Gate blocks while hostile-reviewer threads are unresolved (OMN-17492).

  • [MAJOR] hostile-reviewer (gpt-oss-review)

    Fixture path assertion contradicts test parametrization | The test test_catalog_runtime_services_bind_the_packaged_tiers_path asserts recorded_response["runtime_profile"] == "workers" for all parametrized cases. However, the parametrization includes omninode-runtime and runtime-effects services, which are not worker profiles. The fixture omn15645_worker_tiers_live_contact.json contains "runtime_profile": "workers". This assertion will fail for non-worker services, causing the test to be incorrec

    Resolve this thread when addressed — the Hostile Review Thread Gate blocks while hostile-reviewer threads are unresolved (OMN-17492).

@jonahgabriel

Copy link
Copy Markdown
Collaborator Author

Lab: head=272243122 host=h202 lane=cause-omnibase_infra-ci-summary-9f8b
Commit 2722431 adds contracts/OMN-15645.yaml, which repo-evidence / dod-verify required at this head. On h202, tests/unit/docker/test_delegation_routing_tiers_path_binding_omn15645.py gave 15 passed, and 2 failed with the dev docker/catalog/services/runtime-worker.yaml. node_dod_verify on the contract returned status verified.

Add requirements block req-omn15645 with AC1 and DELEGATION_ROUTING_TIERS_PATH binding.
Bind dod-omn-15645-worker-tiers-binding to AC1 in contracts/OMN-15645.yaml.
Use focused pytest file as falsifier for the binding.
Only the contract file changes.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hostile Reviewer — adversarial findings (OMN-17492)

Models succeeded: qwen3-review, gpt-oss-review
Models failed: none
New finding threads: 4
Deduped (already posted on this PR): 0
Below quorum (one model only, reported not threaded): 4
Nit-level findings suppressed: 1

The model is the FINDER, never the gate: merge is gated only by the
deterministic Hostile Review Thread Gate, which blocks while
hostile-reviewer threads are unresolved. Resolve each thread after
addressing (or rejecting, with a reply) its finding.

Below quorum: 4 finding(s) raised by one model only (OMN-18479)

These are reported and NOT dropped, but they get no thread and do not block: a single model's finding no other model reproduced is not evidence enough to stop a merge. Read them; act on them if they are right.

  • [MAJOR] tests/fixtures/omn15645_worker_tiers_live_contact.json (qwen3-review) — SHA256 hash in fixture is not verified against actual file | The fixture omn15645_worker_tiers_live_contact.json contains a hardcoded SHA256 hash `5a54e42d851e911275a58e7f7177990db2f03aa838cabf0533a
  • [MINOR] tests/unit/docker/test_delegation_routing_tiers_path_binding_omn15645.py (qwen3-review) — Fixture design couples test to specific service type | The recorded_response fixture is designed to read a worker-specific contact file, but is used in a test that covers multiple service types. Thi
  • [MINOR] tests/unit/docker/test_delegation_routing_tiers_path_binding_omn15645.py (qwen3-review) — Fixture marker assertion is fragile | The fixture asserts marker is not None and len(marker.args) == 1, but does not validate that the marker argument is a valid file path or that the file exists. I
  • [MINOR] tests/fixtures/omn15645_worker_tiers_live_contact.json (gpt-oss-review) — Hardcoded SHA256 in fixture without verification mechanism | The fixture omn15645_worker_tiers_live_contact.json contains hardcoded file_sha256 and packaged_sha256 values. The test asserts these

Findings demoted from threads (anchor rejected)

  • [MAJOR] hostile-reviewer (qwen3-review)

    Fixture assertion contradicts test parametrization | The test test_catalog_runtime_services_bind_the_packaged_tiers_path is parametrized across multiple services including omninode-runtime and runtime-effects, but the recorded_response fixture asserts recorded_response["runtime_profile"] == "workers" for every parametrized case. The fixture file omn15645_worker_tiers_live_contact.json contains "runtime_profile": "workers". This assertion will fail for the omninode-runtime and `runtime-effect

    Resolve this thread when addressed — the Hostile Review Thread Gate blocks while hostile-reviewer threads are unresolved (OMN-17492).

  • [MAJOR] hostile-reviewer (gpt-oss-review)

    Fixture assertion mismatch for non-worker services | The test test_catalog_runtime_services_bind_the_packaged_tiers_path is parameterized to include omninode-runtime and runtime-effects services, but it asserts that recorded_response["runtime_profile"] == "workers". The fixture omn15645_worker_tiers_live_contact.json contains "runtime_profile": "workers". This assertion will pass for the worker service, but the test logic implies that the fixture is being used to validate the environment binding

    Resolve this thread when addressed — the Hostile Review Thread Gate blocks while hostile-reviewer threads are unresolved (OMN-17492).

  • [MINOR] hostile-reviewer (qwen3-review)

    Missing test coverage for local bundle worker service | The test parametrization includes ("runtime", "runtime-worker") and ("runtime-infrastructure", "runtime-worker"), but does not include ("local", "runtime-worker"). The local bundle is included for omninode-runtime and runtime-effects, but not for runtime-worker. This is an incomplete test matrix. If the local bundle also includes a runtime-worker service, it should be tested. If it does not, the omission should be documented. | Eviden

    Resolve this thread when addressed — the Hostile Review Thread Gate blocks while hostile-reviewer threads are unresolved (OMN-17492).

  • [MINOR] hostile-reviewer (gpt-oss-review)

    Missing test for 'local' bundle worker service | The parameterized test includes ("runtime", "runtime-worker") and ("runtime-infrastructure", "runtime-worker") but does not include ("local", "runtime-worker"). The local bundle is tested for omninode-runtime and runtime-effects, but not for runtime-worker. If the local bundle is intended to support the worker service, this is a missing test case. If it is not, the omission is not documented. | Evidence: @pytest.mark.parametrize(
    ("bundle"

    Resolve this thread when addressed — the Hostile Review Thread Gate blocks while hostile-reviewer threads are unresolved (OMN-17492).

@jonahgabriel
jonahgabriel added this pull request to the merge queue Oct 9, 2026
Merged via the queue into dev with commit 8c1e010 Oct 9, 2026
174 checks passed
@jonahgabriel
jonahgabriel deleted the fix/omn15645-worker-tiers-lab-fill-10090550 branch October 9, 2026 08:59
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