Skip to content

feat(OMN-19215): the dev overlay spreads delegation across the two Qwen3.8-27B hosts - #4134

Merged
jonahgabriel merged 13 commits into
devfrom
jonah/omn-19215-spread-placement
Sep 28, 2026
Merged

jonahgabriel merged 13 commits into
devfrom
jonah/omn-19215-spread-placement

Conversation

@jonahgabriel

@jonahgabriel jonahgabriel commented Sep 25, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

OMN-19215 AC4, omnibase_infra half. The omnimarket half is omnimarket#2913. This lets the lab's second Qwen3.8-27B host (.202) take a share of first-choice delegation traffic on the dev lane instead of idling behind .201. It answers the operator's delegation fan-out ruling (the parent delegation fan-out ticket, ledger RULING row 4257).

This branch is built on omnibase_infra#3999 (placement passthrough, same ticket), with origin/dev merged in. Its diff therefore shows #3999's commits plus the one commit below. When #3999 merges first, the diff shrinks to that commit.

  • Schema. ModelBifrostLaneBackendPlacement gains mode (EnumBifrostLanePlacementMode: fallback by default, or spread). An unknown mode is refused.
  • Renderer. Writes the placement with exclude_defaults, so a fallback placement renders the same bytes feat(OMN-19215): carry a lane-added backend's tier placement through the bifrost renderer #3999 renders and that the released omnimarket accepts. Only spread adds a mode key.
  • Dev overlay. local-omnipc2-chat (.202:8000) keeps its placement behind local-coder and local-heavy-reasoning with mode: spread. The routing authority picks .201 or .202 per request by a stable hash of the correlation id, and a transport failure on either retries the other. A prompt over 32768 tokens stays on .201. Each engine keeps its own four-slot limit: .201 vLLM --max-num-seqs 4, .202 llama.cpp --parallel 4.

Is an overlay change enough? (the operator's question)

Not on its own. Read at code:

  1. The only callable delegate lanes are dev and dogfood (omnimarket/config/ci_bus_lanes.yaml). The dev-202, dev-200 and dev-105 overlays declare locale: cloud with zero backends by design. Adding lanes spreads orchestration, not inference.
  2. A backend the overlay adds reaches routing only through a placement (omnimarket#2803 plus feat(OMN-19215): carry a lane-added backend's tier placement through the bifrost renderer #3999). The placement was failover-only: the reducer's _select_model_for_task is first-match in declaration order.
  3. Both the delegate-skill orchestrator and the inference effect admitted 4 records. With 8 in flight on the lab, exactly 4 ran on .201 and 0 on .202.

This PR plus omnimarket#2913 closes points 2 and 3. Point 1 is unchanged on purpose.

Lab proof

The .201 dev lane was hot-patched with this branch's renderer files and dev overlay, plus the omnimarket#2913 files, under ledger HOLD row 4528 and RELEASE row 4620. The rendered contract read back mode: spread, and the runtime logged max_in_flight_records=8. Eight concurrent long-output delegations (150-integer oracle, 8/8 correct in both configs):

  • control: peak 4 running on .201, wall median 53.6 s, max 63.8 s
  • spread: 3 on .201 and 4 on .202 at once, wall median 44.4 s, max 46.6 s

Short oracle-rubric prompts are dominated by orchestration overhead and showed no measurable latency change. Across the spread rounds 16 of 46 requests were served by .202, attributed per correlation id from the routing log. The full table is in omnimarket#2913. Evidence is in omni_home .claude_scratch/reports/delegation-fanout-2026-09-25/.

Tests

  • tests/unit/runtime/test_bifrost_lane_overlay_placement_omn19215.py: 3 new tests. A spread placement passes its mode through; an explicit fallback renders with no mode key (the pre-mode bytes); an unknown mode is refused. 12 passed.
  • Focused, green: placement unit tests, test_dev_overlay_places_omnipc2_omn19215, serialization round-trip, lane-overlay CI, renderer and committed-lab-overlay render suites. 78 passed. mypy --strict is clean on the changed modules and the test. Pre-commit passed at commit.

Landing order (required)

  1. omnimarket#2913 merges and its auto-release publishes.
  2. omnibase_infra#3999 lands. It is independent of feat(OMN-16036): gateway_attach verification check_type (attach + detach proof) #2913 and renders fallback placements only.
  3. This PR lands only after the dev-lane image carries the omnimarket release from step 1. An omnimarket without feat(OMN-16036): gateway_attach verification check_type (attach + detach proof) #2913 refuses the mode key, and the dev lane's delegation config would fail to load.

After landing, re-run the fan-out harness against the deployed lane (no hot-patch) as the post-merge lab readback. Re-run C13, C14 and C29 as #3999's body lists.

Ticket: OMN-19215 (parent: the delegation fan-out ticket).

.202 back in routing (2026-09-27)

The stop-using-.202 pause on this PR is released: operator RULING 2026-09-27T20:32:19Z lane=omnipc2-routing-restore (ledger:11849, "ok, looks fine I think. put it back into routing"), RELEASE rows ledger:11850, 11851 and 11855. .202 was rebuilt on its boot NVMe.

Serving profile reconciled, no change needed. .202 now serves Qwen3.8-27B-MTP-Q3_K_M.gguf with a q8_0 KV cache through a systemd drop-in (profile in the internal planning corpus). Read live 2026-09-27T20:3xZ: GET .202:8000/v1/models id and alias Qwen3.8-27B, meta.n_ctx 32768, ftype Q3_K - Medium; /props total_slots 4; /slots n_ctx 32768 on each of 4 slots; the unit still runs -c 32768 --parallel 4 --kv-unified exactly as before the rebuild. From inside omninode-runtime-effects on the .201 dev lane, GET .202:8000/v1/models returns 200 with Qwen3.8-27B, and a real chat completion to .202 returns model: Qwen3.8-27B. This PR encodes the served id, the 32768 window and the four-slot limit, all unchanged; it encodes no model file, quant or KV type. Only the quant (IQ4_XS to Q3_K_M) and KV type (f16 to q8_0) changed, which no identity or health probe here checks.

Lab pass still owed, with .202 live. The earlier hotpatch proof ran while .202 was down. Path: this reaches the lane only after an omnimarket release containing omnimarket#2913 is in the dev-lane image (the lane's omnimarket 0.4.245 refuses placement.mode). Then (1) the lab-pool proof on the head before it lands; (2) the compose-dev lab receipt keyed by the merged sha on the .201 dev lane; (3) the spread pair through onex-api on the .201 dev lane: runs hashed to local-omnipc2-chat complete on .202 in one attempt, rung-hashed runs on .201, and an unmodified control on .201. This PR's commits contain every commit of omnibase_infra#3999.

Branch updated from dev 2026-09-27; the dev-overlay placement test's minimal base contract now declares local-embedding, which the dev overlay binds since omnibase_infra#4207 (commit 423eb90). Focused suites green locally at that head: 106 passed (placement unit and integration tests, renderer, lane-overlay model, committed-lab-overlay render, served-id render, typed-decision render, model roundtrip); ruff, mypy --strict and pre-commit clean on the changed file.

State at 2026-09-28T02:25Z (lane fix-202-followups-83)

Landing order steps 1 and 2 are done. omnimarket#2913 is merged as da3555861 and is in the omnimarket tags v0.4.259 and v0.4.260. omnibase_infra#3999 merged as 7f88ed3 at 2026-09-28T01:17Z. The .201 dev lane runs the image built from 7f88ed3 (label org.opencontainers.image.revision), and both runtime containers run omnimarket 0.4.261, which carries enum_backend_placement_mode.py from #2913. Read 2026-09-28T01:58Z.

Step 3's premise holds. The placement this branch renders for local-omnipc2-chat, {tier: local, fallback_for: [local-coder, local-heavy-reasoning], max_context_tokens: 32768, mode: spread}, was validated by ModelDelegationBackendPlacement.model_validate inside omninode-runtime on the .201 dev lane (omnimarket 0.4.261). It was accepted with mode: spread. This was read only: the dict was piped to docker exec -i ... python -, and no file was written in the container.

Branch updated from dev after #3999's squash. The squash conflicted with the copies of #3999's commits carried here in four files: the dev overlay, the placement model, the renderer and the placement unit test. Each was resolved to this branch's side, which is a strict superset of dev's side: dev's only differing lines were the pre-mode comment and the model_dump call without exclude_defaults. The diff against dev is now exactly the spread delta: 5 files, +86/-4. Focused suites are green locally at 063c522: 189 passed and 1 skipped (placement unit and integration, renderer, added-backend, parameter-count, lane-overlay model and CI, served-id, committed-lab-overlay and typed-decision renders, model round-trip). ruff and mypy --strict are clean on the three changed modules, and pre-commit passed at commit.

Lab pool readback (OMN-18893)

LAB PROOF PASS: omnibase_infra#4134 head 063c5223fa on lab-202 (192.168.86.202), isolated project omnibase-infra-local, 2026-09-28T02:05:53Z to 2026-09-28T02:21:49Z
  ok   head_matches
  ok   stack_built
  ok   image_identity      (enum_bifrost_lane_placement_mode.py, model_bifrost_lane_backend_placement.py, render_bifrost_delegation_contract.py: image sha = build-tree sha)
  ok   health_8085
  ok   health_8086
  ok   migration_gate_healthy
  ok   no_wiring_failures
  ok   focused_tests       (73 passed)
  note: omnibase-infra-local-omninode-runtime: 27 contract(s) fail to wire at dev too (base control)
  note: omnibase-infra-local-runtime-effects: 7 contract(s) fail to wire at dev too (base control)
  note: base control run at dev on the same host
  restored=yes (containers=0 volumes=0 networks=0 images=0 listeners=0 workdir=gone, snapshot-diff=0)
  method: scripts/runtime_build/prepr_runtime_pool.py (OMN-18893)
  ledger: HOLD id=2026-09-28T02:05:46Z-fix-202-followups-83, RELEASE 2026-09-28T02:25:32Z lane=fix-202-followups-83 surface=202-runtime result=PASS restored=yes

Still owed after merge (unchanged from the section above): (2) the compose-dev lab receipt keyed by the merged sha on the .201 dev lane, and (3) the spread pair through onex-api on that lane. Runs hashed to local-omnipc2-chat should complete on .202 in one attempt, rung-hashed runs on .201, and an unmodified control on .201. Then re-run the fan-out harness and C13, C14 and C29.

Integration test (head fdd93c7)

Integration Test Coverage was red on 063c522 because the PR changed no test under tests/integration. fdd93c7 adds two cases to tests/integration/runtime/test_dev_overlay_places_omnipc2_omn19215.py, both driving the committed dev overlay through the real renderer. The first checks that the omnipc2 placement renders with mode: spread. The second is a negative control: with mode: fallback the render carries no mode key and matches the pre-mode shape. Focused: 16 passed (this file and tests/unit/runtime/test_bifrost_lane_overlay_placement_omn19215.py). ruff and mypy --strict are clean on the file.

The only change since the lab-proven head 063c522 is this test file. src/ and the dev overlay are byte-identical, so the lab-pool PASS on lab-202 still describes the runtime this head builds. Hold note: the delegation-fanout ordering row of 2026-09-25T17:22:10Z is met. omnibase_infra#3999 is merged, and omnimarket#2913 is in omnimarket v0.4.259 (the .201 dev lane runs 0.4.261). The decision is recorded in the drain's hold revalidation (lane infra-backlog-83).

Evidence-Ticket: OMN-19215
Evidence-Source: OCC#11316

Lab pool readback (OMN-18893)

LAB PROOF PASS: omnibase_infra#4134 head dfd92b273d on lab-201-prepr-1 (192.168.86.201), pre-PR slot project omnibase-infra-prepr-1, 2026-09-28T13:25:01Z to 2026-09-28T14:00:15Z
  ok   head_matches
  ok   stack_built
  ok   image_identity
  ok   health_28085
  ok   health_28086
  ok   migration_gate_healthy
  ok   no_wiring_failures
  ok   focused_tests
  note: slot teardown verdict INCOMPLETE
  note: base control run at dev on the same host
  note: base control left residue: containers=0 volumes=0 networks=0 images=0 listeners=0 workdir=gone, snapshot-diff=0
  restored=no (containers=0 volumes=0 networks=0 images=0 listeners=0 workdir=gone, snapshot-diff=0)
  method: scripts/runtime_build/prepr_runtime_pool.py (OMN-18893)
  ledger: HOLD id=2026-09-28T13:23:26Z-prove-omnibase_infra-4134-84c, RELEASE 2026-09-28T14:01:35Z lane=prove-omnibase_infra-4134-84c surface=prepr-1-201 result=PASS restored=no

…ugh to the rendered contract

The lane overlay binding accepts an optional placement {tier, fallback_for,
max_context_tokens} on an ADDED backend only, refuses one larger than the
backend's context_window, and the renderer passes it through unchanged. The
routing authority in omnimarket mirrors the backend into that tier after the
rungs it backs. An added backend with no placement renders exactly as before.

Onex-Lane: pc2-delegation-load
Onex-Session: 94b52a596fd34760ac199e09d09305b1
…ier behind the two .201 rungs

Held: merge only after the omnimarket placement change is released into the dev
lane image, since an older omnimarket refuses the placement key.

Onex-Lane: pc2-delegation-load
Onex-Session: 94b52a596fd34760ac199e09d09305b1
…h ProtocolConfigurationError

Onex-Lane: pc2-delegation-load
Onex-Session: 94b52a596fd34760ac199e09d09305b1
…s intact, and an oversized one is refused

Onex-Lane: pc2-delegation-load
Onex-Session: 94b52a596fd34760ac199e09d09305b1
…oice traffic

A placement gains mode (fallback, the default, or spread). The renderer writes
mode only when it is not the default, so a fallback placement renders the bytes
a routing authority without the field accepts. The dev overlay places the .202
omnipc2 backend as a spread peer of the two .201 rungs (RULING ledger:4257).
@jonahgabriel
jonahgabriel enabled auto-merge (squash) September 25, 2026 17:21
jonahgabriel pushed a commit to OmniNode-ai/onex_change_control that referenced this pull request Sep 25, 2026
#11316)

* evidence: OCC companion pass 1 for OmniNode-ai/omnibase_infra#4134

* evidence: OCC companion self-bind for #11316

---------

Co-authored-by: node-occ-companion-effect <occ-companion-effect@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, qwen3-review-b, glm-review
Models failed: none
New finding threads: 2
Deduped (already posted on this PR): 0
Below quorum (one model only, reported not threaded): 14
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: 14 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] src/omnibase_infra/runtime/render_bifrost_delegation_contract.py (qwen3-review) — Missing validation of fallback_for rung existence in renderer | The renderer passes the placement object through to the rendered contract without validating that the fallback_for rungs actually ex
  • [MAJOR] src/omnibase_infra/runtime/render_bifrost_delegation_contract.py (qwen3-review) — exclude_defaults=True may omit required fields if defaults are non-null | The renderer uses binding.placement.model_dump(mode="json", exclude_defaults=True). This excludes fields that have their def
  • [MAJOR] docker/lane-overlays/dev.bifrost.yaml (placement comment) and enum_bifrost_lane_placement_mode.py docstring (glm-review) — Spread hash selection contradicts the documented retry behavior | The overlay comment and the enum docstring assert two behaviors that are mutually inconsistent as described: selection is 'a stable ha
  • [MAJOR] src/omnibase_infra/runtime/models/model_bifrost_lane_backend_binding.py (_validate_binding) (glm-review) — Renderer defers all rung-name validation despite knowing the backend set | The renderer validates that max_context_tokens fits context_window but does not check that every fallback_for rung names a ba
  • [MINOR] tests/integration/runtime/test_dev_overlay_places_omnipc2_omn19215.py (qwen3-review) — Integration test relies on committed dev overlay file | The integration test test_dev_overlay_places_omnipc2_omn19215.py reads the committed dev.bifrost.yaml file. This couples the test to the spe
  • [MINOR] src/omnibase_infra/runtime/models/model_bifrost_lane_backend_placement.py (qwen3-review) — No validation that fallback_for rungs are in the same tier | The placement model does not validate that the fallback_for rungs are in the same tier as the tier field. If a lane overlay specifies `
  • [MINOR] src/omnibase_infra/runtime/models/model_bifrost_lane_backend_placement.py (qwen3-review-b) — No validation of tier/rung names against actual routing ladder | The placement model accepts arbitrary tier and fallback_for rung names without validating them against the actual routing ladder. The c
  • [MINOR] docker/lane-overlays/dev.bifrost.yaml (qwen3-review-b) — Spread mode may cause uneven load distribution | The spread mode uses a stable hash of the correlation id to pick between rungs. This can lead to uneven load distribution if the correlation ids are no
  • [MINOR] tests/unit/runtime/test_bifrost_lane_overlay_placement_omn19215.py (qwen3-review-b) — No test for spread mode with multiple rungs | The tests only cover spread mode with a single rung in fallback_for. There is no test that verifies the behavior when spread mode is used with multiple ru
  • [MINOR] src/omnibase_infra/runtime/models/model_bifrost_lane_backend_binding.py (qwen3-review-b) — max_context_tokens validation does not consider max_tokens | The validator checks that placement.max_context_tokens is not greater than the backend's context_window, but it does not consider the backe
  • [MINOR] src/omnibase_infra/runtime/render_bifrost_delegation_contract.py (_added_backend_entry) (glm-review) — exclude_defaults couples render shape to future field defaults | entry["placement"] = binding.placement.model_dump(mode="json", exclude_defaults=True) is used to omit the default mode, but exclude_def
  • [MINOR] docker/lane-overlays/dev.bifrost.yaml (glm-review) — No test that spread mode survives context-window routing assumptions | The committed overlay sets max_context_tokens: 32768 on a spread placement mirroring rungs with a 131072-token window. The commen
  • [MINOR] tests/integration/runtime/test_dev_overlay_places_omnipc2_omn19215.py (_write_base_contract, first test) (glm-review) — Integration test relies on endpoint binding without pinning environment behavior | test_the_committed_dev_overlay_renders_the_omnipc2_omn19215 calls the renderer with environ={} against a base contrac
  • [MINOR] src/omnibase_infra/runtime/models/model_bifrost_lane_backend_placement.py (glm-review) — Cross-package contract enforced only by comment in the producing package | ModelBifrostLaneBackendPlacement states that omnimarket validates tier and rung names, but the schema this package renders an

Findings demoted from threads (anchor rejected)

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

    Placement validation on base-declared backends is dead code | The validator in ModelBifrostLaneBackendBinding._validate_binding raises an error if a base-declared backend carries a placement. However, the test test_a_base_backend_cannot_be_given_a_placement_by_a_lane passes a placement to _base_binding, which constructs a dict for the overlay. The overlay is merged into the base contract. If the base contract already declares 'local-coder', the overlay's binding for 'local-coder' is treated as a modificatio

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

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

    Placement validation on base-declared backends is dead code | The validator in ModelBifrostLaneBackendBinding._validate_binding raises an error if a base-declared backend carries a placement. However, the renderer's _added_backend_entry function is only called for backends that the lane overlay adds (i.e., where declares_new_backend is True). The test test_a_base_backend_cannot_be_given_a_placement_by_a_lane attempts to trigger this by passing a placement on a base binding, but the renderer likely ignores p

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

@github-actions

github-actions Bot commented Sep 25, 2026 •

Copy link
Copy Markdown
Contributor

✅ Hostile Reviewer — REVIEWED

Critical findings: 1
Major findings: 3
Total findings: 12
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)

…he overlay still declares

omnibase_infra#4005 (OMN-19251) deleted the dead .200 local-ds-v4-flash row from
docker/lane-overlays/dev.bifrost.yaml. The test's minimal base contract still named
that rung, so both tests raised KeyError once dev was merged into this branch.
Drop it from the base-contract fixture and type the overlay loader's return.

@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.

  • [MAJOR] src/omnibase_infra/runtime/render_bifrost_delegation_contract.py (qwen3-review) — exclude_defaults=True silently drops explicit fallback mode, breaking the documented contract | The renderer uses model_dump(mode='json', exclude_defaults=True) to serialize the placement. The docstri
  • [MAJOR] src/omnibase_infra/runtime/models/model_bifrost_lane_backend_placement.py (qwen3-review) — Placement tier and fallback_for names are not validated against the routing ladder at render time | The model docstring explicitly defers tier and rung name validation to the routing authority (omnima
  • [MAJOR] tests/unit/runtime/test_bifrost_lane_overlay_placement_omn19215.py (qwen3-review) — No test for spread mode with multiple fallback_for rungs | The integration test and unit tests only exercise single-rung fallback_for lists. The spread mode's stable-hash routing across multiple rungs
  • [MAJOR] src/omnibase_infra/runtime/models/model_bifrost_lane_backend_binding.py (qwen3-review) — max_context_tokens validation only checks against context_window, not against the actual serving capacity | The validator ensures placement.max_context_tokens <= binding.context_window, but the YAML c
  • [MINOR] src/omnibase_infra/runtime/models/model_bifrost_lane_backend_placement.py (qwen3-review) — Placement model is frozen but the binding is not, creating asymmetric mutability | ModelBifrostLaneBackendPlacement uses ConfigDict(frozen=True), but ModelBifrostLaneBackendBinding does not. This mean
  • [MINOR] tests/integration/runtime/test_dev_overlay_places_omnipc2_omn19215.py (qwen3-review) — Integration test uses a hardcoded env var mapping that may drift from the base contract | The integration test hardcodes _ENDPOINT_URL_ENV with specific env var names for local-coder and local-heavy-r
  • [MINOR] tests/integration/runtime/test_dev_overlay_places_omnipc2_omn19215.py (qwen3-review) — No test for placement with fallback_for referencing a backend not in the rendered contract | The integration test asserts that every rung in fallback_for is bound in the rendered contract, but there i
  • [MINOR] docker/lane-overlays/dev.bifrost.yaml (qwen3-review) — Stable-hash routing by correlation id may cause hot spots under skewed correlation id distributions | The spread mode uses a stable hash of the correlation id to pick between rungs. If correlation ids

@jonahgabriel

Copy link
Copy Markdown
Collaborator Author

Lab readback, .201 dev lane, 2026-09-27 (OMN-19215 stack, with .202 down)

Lane delegation-fix-omnipc2-202-disk-and-routing-83. The hotpatch window ran from 11:46:09Z to 12:04:16Z; this lane's ledger rows carry both stamps.

What ran. I hotpatched omnimarket#2913 at aba970c69 (7 files, merged cleanly onto the lane's omnimarket 655b57e) and omnibase_infra#4134 at b6b141b00 (the renderer, the binding model, the placement model and the enum, on the lane's 889afaa1c) into omninode-runtime and omninode-runtime-effects. Before patching, every original file hashed equal to those base commits. I then re-rendered the bifrost contract inside each container from #4134's docker/lane-overlays/dev.bifrost.yaml. The rendered file carries placement: {tier: local, fallback_for: [local-coder, local-heavy-reasoning], max_context_tokens: 32768, mode: spread}. Its sha256 is bf181ea5b798fc79…, byte-identical to an offline render with the same code.

Condition. .202 is down. Its /data disk failed and llama-server cannot load its model (OMN-19863), so :8000 refuses connections.

Result. I made six onex delegate "Reply with exactly the word: pong" --bus kafka --lane dev --locus deployed-lane runs. Every one completed with pong, provider local, model Qwen3.8-27B and 0 escalations. The group index is SHA-256 of the correlation id, and it predicted the runtime log's delegation spread: pick in all six cases:

run correlation spread pick (runtime log) attempts exec ms
a7f52bf3 8dce28b9 local-omnipc2-chat, then local-heavy-reasoning 2 (1st: [Errno 111] Connection refused) 3918
fa5640bb b50f5519 local-omnipc2-chat, then local-heavy-reasoning 2 (same) 2951
14463add 0e1b2bfd local-omnipc2-chat, then local-heavy-reasoning 2 (same) 3365
fd665c92 b1c8bcfa local-heavy-reasoning 1 3265
b656ad55 37aca0a1 local-heavy-reasoning 1 3374
828af182 7e949072 local-heavy-reasoning 1 3554

A dead spread peer costs one refused connection and a same-tier sibling retry, not a failed delegation. So .202 does not need to come out of the overlay while its disk is out.

Restore. The originals went back at 11:53:18Z. The deploy agent then recreated both containers from image 889afaa1c at 11:56:20Z. Readback: all 8 patched files and the rendered contract (6b5c5ba09018) match their pre-hotpatch hashes, and the 3 added files are absent. Control run fbdcfd22 completed on local Qwen with 1 attempt and 0 delegation spread: lines.

Ordering hazard, measured. The lane's released omnimarket (0.4.245, the dev lane's current install) refuses the contract #4134 renders: placement.mode: Extra inputs are not permitted, so every delegation would fail to load its routing config. #4134's "Landing order required" (omnimarket#2913 released into the dev-lane image first) is therefore load-bearing, not advisory. #3999 alone renders no mode key and is safe against the current image.

Not proven here. These runs did not prove .202 answering (OMN-19215 AC2). That waits on OMN-19863. The receipts cannot show which host answered: both attempts carry the model-derived backend_id, and the refused attempt's failure_class is null. That is OMN-19234.

@onexbot-occ-writer

Copy link
Copy Markdown
Contributor

OCC autobind rebound this PR's evidence-source stamp line to OCC#11315.

The receipt gate's own eligibility validator, run against the change-control tree the gate pins for OCC#11315, returned eligible for head 69e788ef2615944b7bf9133f6e400d7809608f36. The body now carries exactly one stamp line. Displaced: OCC#11316.

Reported by occ_companion_emitter (OMN-18853).

@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: 2
Deduped (already posted on this PR): 0
Below quorum (one model only, reported not threaded): 10
Nit-level findings suppressed: 0

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: 10 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] src/omnibase_infra/runtime/render_bifrost_delegation_contract.py (gpt-oss-review) — Runtime asserts used for required fields in _added_backend_entry | The function _added_backend_entry relies on assert statements to guarantee that binding.provider, binding.tier and binding.credential
  • [MAJOR] src/omnibase_infra/runtime/models/enum_bifrost_lane_placement_mode.py (qwen3-review) — Spread mode enables traffic splitting without per-request authz check | The 'spread' placement mode causes the routing authority to distribute first-choice traffic across rungs by a stable hash of the
  • [MAJOR] src/omnibase_infra/runtime/render_bifrost_delegation_contract.py (qwen3-review) — exclude_defaults=True may omit non-default mode values in edge cases | The renderer uses binding.placement.model_dump(mode='json', exclude_defaults=True) to omit the mode key when it is the default (F
  • [MAJOR] src/omnibase_infra/runtime/render_bifrost_delegation_contract.py (qwen3-review) — No validation that fallback_for rungs exist in the rendered contract | The renderer passes placement through without verifying that the rung names in fallback_for actually correspond to backends in th
  • [MINOR] tests/unit/runtime/test_bifrost_lane_overlay_placement_omn19215.py (qwen3-review) — No test for placement on a backend with context_window=None | The unit tests cover the oversized-placement rejection and the pass-through, but no test exercises the case where an added backend has con
  • [MINOR] src/omnibase_infra/runtime/models/model_bifrost_lane_backend_placement.py (qwen3-review) — Frozen model with extra=forbid prevents forward-compatible overlay evolution | ModelBifrostLaneBackendPlacement uses ConfigDict(frozen=True, extra='forbid'). This means any future addition of a field
  • [MINOR] src/omnibase_infra/runtime/render_bifrost_delegation_contract.py (qwen3-review) — model_dump called on every render even when placement is absent | The code path 'if binding.placement is not None: entry["placement"] = binding.placement.model_dump(...)' is correct, but the surroundi
  • [MINOR] tests/unit/runtime/test_bifrost_lane_overlay_placement_omn19215.py (qwen3-review) — No test that spread mode with multiple rungs renders correctly | The unit test test_a_spread_placement_passes_its_mode_through uses a single-rung placement. The dev overlay uses two rungs (local-coder
  • [MINOR] tests/integration/runtime/test_dev_overlay_places_omnipc2_omn19215.py (qwen3-review) — Integration test base contract omits tier and timeout_ms fields | The write_base_contract helper in the integration test writes a minimal base contract with only backend_id, model_name, endpoint_url
  • [MINOR] src/omnibase_infra/runtime/models/model_bifrost_lane_backend_binding.py (gpt-oss-review) — Missing validation of placement.tier against base contract tiers | ModelBifrostLaneBackendPlacement validates its internal fields but does not verify that the specified tier exists in the base contrac

Findings demoted from threads (anchor rejected)

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

    Placement validation bypassed when context_window is None | The validator in ModelBifrostLaneBackendBinding._validate_binding compares self.placement.max_context_tokens > self.context_window. If the backend binding's context_window field is None (which is permitted by the model definition, as it is an optional field), this comparison will raise a TypeError at runtime rather than a controlled ValidationError. The guard only checks 'if self.placement is not None' before the comparison, not whether context_win

    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)

    Inconsistent exception type for placement validation in ModelBifrostLaneBackendBinding | The _validate_binding method raises ValueError when placement constraints are violated, while callers and tests expect ProtocolConfigurationError (or ValidationError) for configuration problems. This mismatch can lead to uncaught ValueError exceptions propagating to callers that only handle ProtocolConfigurationError, resulting in unexpected crashes. | Evidence: src/omnibase_infra/runtime/models/model_bifrost_lane_backe

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

…res local-embedding

omnibase_infra#4207 (OMN-17099) bound local-embedding in the dev overlay. The
minimal base contract this test writes declared only the two chat rungs, so
after dev was merged in the render refused local-embedding as an undeclared
added backend. Declare it with the real base contract's env hint, as the
sibling OMN-18570 and OMN-18626 tests already do.
@onexbot-occ-writer

Copy link
Copy Markdown
Contributor

OCC autobind rebound this PR's evidence-source stamp line to OCC#11316.

The receipt gate's own eligibility validator, run against the change-control tree the gate pins for OCC#11316, returned eligible for head 423eb90587cbf9ffc7ea09f7fe4a8bb5c1f69bfa. The body now carries exactly one stamp line. Displaced: OCC#11315.

Reported by occ_companion_emitter (OMN-18853).

jonahgabriel pushed a commit that referenced this pull request Sep 27, 2026
…es the current dev overlay

omnibase_infra#4207 (OMN-17099) bound local-embedding in the dev overlay, and
omnibase_infra#4005 (OMN-19251) removed local-ds-v4-flash from it. After dev was
merged in, the minimal base contract this test writes still declared ds-v4-flash
(a KeyError on the served-id lookup) and not local-embedding (the render refused
it as an undeclared added backend). Declare the three base backends the overlay
binds today, as omnibase_infra#4134 does, and type _dev_overlay's return so the
file passes mypy --strict. The file is now byte-identical to #4134's.

Onex-Lane: pc2-delegation-load
Onex-Session: 94b52a596fd34760ac199e09d09305b1

@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: 2
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.

  • [MAJOR] src/omnibase_infra/runtime/render_bifrost_delegation_contract.py (qwen3-review) — No validation that fallback_for rungs exist in the rendered contract | The renderer passes placement through without verifying that the rungs named in fallback_for are actually present in the render
  • [MAJOR] src/omnibase_infra/runtime/render_bifrost_delegation_contract.py (qwen3-review) — exclude_defaults=True may omit non-default mode values in edge cases | The renderer uses binding.placement.model_dump(mode="json", exclude_defaults=True). Pydantic's exclude_defaults excludes fiel
  • [MAJOR] src/omnibase_infra/runtime/models/model_bifrost_lane_backend_placement.py (gpt-oss-review) — fallback_for length not enforced | ModelBifrostLaneBackendPlacement defines fallback_for as a tuple with Field(min_length=1). In Pydantic v2, min_length does not apply to tuple types, so an empty list
  • [MAJOR] src/omnibase_infra/runtime/render_bifrost_delegation_contract.py (gpt-oss-review) — render_bifrost_delegation_contract may not translate ValueError to ProtocolConfigurationError | Tests expect ProtocolConfigurationError when placement.max_context_tokens exceeds context_window. The va
  • [MINOR] src/omnibase_infra/runtime/models/model_bifrost_lane_backend_binding.py (qwen3-review) — No test for placement on a backend with serving=False | The renderer's _added_backend_entry sets endpoint_url to None when binding.serving is False. A placement on a non-serving backend is seman
  • [MINOR] tests/integration/runtime/test_dev_overlay_places_omnipc2_omn19215.py (qwen3-review) — Integration test relies on mutable global overlay file without isolation | The integration test test_dev_overlay_places_omnipc2_omn19215.py reads the committed dev.bifrost.yaml directly from the r
  • [MINOR] src/omnibase_infra/runtime/models/model_bifrost_lane_backend_placement.py (qwen3-review) — Placement validation split across renderer and routing authority creates a gap | The renderer validates only max_context_tokens <= context_window and that the backend is lane-added. The tier and run
  • [MINOR] src/omnibase_infra/runtime/render_bifrost_delegation_contract.py (gpt-oss-review) — render function uses variable annotation that may shadow built‑in name | render_bifrost_delegation_contract replaces a direct return dict with an annotated assignment `entry: dict[object, object] = {.

Findings demoted from threads (anchor rejected)

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

    Placement validation bypassed when context_window is None | In _validate_binding, the check if self.placement.max_context_tokens > self.context_window will raise a TypeError if self.context_window is None. The ModelBifrostLaneBackendBinding model likely allows context_window to be optional or None for some backend types. If a lane-added backend omits context_window but provides a placement, the comparison int > None will crash with a TypeError instead of a clean ValidationError or ProtocolConfiguratio

    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)

    placement validation may raise TypeError when context_window is missing | ModelBifrostLaneBackendBinding._validate_binding compares placement.max_context_tokens to self.context_window without confirming that context_window is set. If a binding omits context_window, the comparison triggers a TypeError, bypassing the intended ValueError and causing an uncaught exception during model validation. | Evidence: src/omnibase_infra/runtime/models/model_bifrost_lane_backend_binding.py:115-122 performs the comparison

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

@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): 5
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: 5 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] src/omnibase_infra/runtime/models/model_bifrost_lane_backend_binding.py, tests/unit/runtime/test_bifrost_lane_overlay_placement_omn19215.py (qwen3-review) — Placement validation on base-declared backends is unreachable in the renderer | The validator in ModelBifrostLaneBackendBinding._validate_binding raises an error if a placement is present on a backend
  • [MAJOR] src/omnibase_infra/runtime/models/model_bifrost_lane_backend_binding.py (gpt-oss-review) — Placement validation method lacks Pydantic validator decorator | The method _validate_binding in model_bifrost_lane_backend_binding.py contains logic that should enforce placement constraints (e.g
  • [MAJOR] tests/unit/runtime/test_bifrost_lane_overlay_placement_omn19215.py (gpt-oss-review) — Test expects ValidationError but code raises ValueError or bypasses validation | Unit tests in test_bifrost_lane_overlay_placement_omn19215.py assert that oversized placement specifications raise `p
  • [MINOR] docker/lane-overlays/dev.bifrost.yaml (qwen3-review) — Placement mode 'spread' may allow traffic distribution to unauthorized backends | The 'spread' mode allows the routing authority to share first-choice traffic with the added backend. The comment state
  • [MINOR] tests/unit/runtime/test_bifrost_lane_overlay_placement_omn19215.py (qwen3-review) — No test for placement on a backend with a context_window smaller than the placement's max_context_tokens | The test test_a_placement_larger_than_the_context_window_fails_naming_the_backend tests that

…-placement

# Conflicts:
#	docker/lane-overlays/dev.bifrost.yaml
#	src/omnibase_infra/runtime/models/model_bifrost_lane_backend_placement.py
#	src/omnibase_infra/runtime/render_bifrost_delegation_contract.py
#	tests/unit/runtime/test_bifrost_lane_overlay_placement_omn19215.py

@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): 7
Nit-level findings suppressed: 0

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] src/omnibase_infra/runtime/render_bifrost_delegation_contract.py (qwen3-review) — exclude_defaults=True silently drops all default-valued placement fields, not just mode | The renderer change replaces an unconditional model_dump(mode="json") with model_dump(mode="json", exclude_def
  • [MAJOR] tests/unit/runtime/test_bifrost_lane_overlay_placement_omn19215.py (qwen3-review) — No test verifies that a non-default value for a non-mode field is still rendered | The test suite covers: spread mode passes through, fallback mode is omitted, and an unknown mode is rejected. There i
  • [MAJOR] src/omnibase_infra/runtime/render_bifrost_delegation_contract.py (gpt-oss-review) — Backward‑compatibility relies on omission of default mode field | The new mode attribute is added to the placement model and rendered with exclude_defaults=True so that a fallback placement is byt
  • [MINOR] docker/lane-overlays/dev.bifrost.yaml (qwen3-review) — Spread-mode routing semantics are documented in a comment but not enforced or tested at the model layer | The YAML comment describes spread-mode behavior in detail: stable hash of correlation id, retr
  • [MINOR] src/omnibase_infra/runtime/models/model_bifrost_lane_backend_placement.py (qwen3-review) — exclude_defaults=True on a str-Enum may behave unexpectedly with Pydantic v2 serialization | EnumBifrostLanePlacementMode is a str-Enum. In Pydantic v2, model_dump(mode="json") serializes enum members
  • [MINOR] docker/lane-overlays/dev.bifrost.yaml (qwen3-review) — No test for the YAML overlay file itself | The diff modifies dev.bifrost.yaml to add mode: spread to a backend's placement. There is no test that loads this specific YAML file and validates it against
  • [MINOR] src/omnibase_infra/runtime/render_bifrost_delegation_contract.py (gpt-oss-review) — Potential loss of explicit default values when using exclude_defaults | exclude_defaults=True removes any field whose value matches the model's default, not only the mode field. If future defaul

@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): 6
Nit-level findings suppressed: 0

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: 6 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] src/omnibase_infra/runtime/render_bifrost_delegation_contract.py (qwen3-review) — exclude_defaults=True drops all default-valued fields, not just mode | The renderer now calls model_dump(mode="json", exclude_defaults=True). This excludes every field whose value equals its Pydantic
  • [MAJOR] docker/lane-overlays/dev.bifrost.yaml (qwen3-review) — Spread mode changes traffic distribution without rate-limit or quota enforcement | The YAML comment states that under mode: spread the routing authority picks .201 or .202 per request by a stable ha
  • [MAJOR] tests/unit/runtime/test_bifrost_lane_overlay_placement_omn19215.py (qwen3-review) — No test verifies that spread mode actually changes routing behavior | The three new tests verify serialization round-trip: spread renders with the key, fallback omits it, and an unknown value is rejec
  • [MINOR] src/omnibase_infra/runtime/render_bifrost_delegation_contract.py (qwen3-review) — exclude_defaults=True is unsafe if Pydantic model gains a default-valued required field | The model currently has no fields with defaults other than mode. The exclude_defaults=True flag is a Pydan
  • [MINOR] docker/lane-overlays/dev.bifrost.yaml (qwen3-review) — No test for the interaction between spread mode and max_context_tokens overflow | The YAML comment states 'A prompt larger than 32768 tokens always stays on .201.' This is a critical routing invariant
  • [MINOR] src/omnibase_infra/runtime/models/enum_bifrost_lane_placement_mode.py (qwen3-review) — Enum is a str-Enum but the model field uses the enum type, not str | EnumBifrostLanePlacementMode inherits from both str and Enum. The model field is typed as EnumBifrostLanePlacementMode, not str. Py

…ent as spread, and a fallback mode renders no mode key

Integration Test Coverage refused the PR as a feature change with no
integration test. Both cases drive the committed dev overlay through the
real renderer; the fallback case is the negative control that keeps the
pre-mode bytes for an older routing authority.

@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): 9
Nit-level findings suppressed: 0

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: 9 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] src/omnibase_infra/runtime/render_bifrost_delegation_contract.py (qwen3-review) — exclude_defaults=True drops non-default scalar fields, breaking the byte-identical guarantee | The renderer now calls model_dump(mode="json", exclude_defaults=True). Pydantic's exclude_defaults exclud
  • [MAJOR] src/omnibase_infra/runtime/render_bifrost_delegation_contract.py (qwen3-review) — exclude_defaults=True also drops tier, fallback_for, max_context_tokens if they ever get defaults | The comment in the model docstring states that the renderer writes mode only when it is not the defa
  • [MAJOR] tests/integration/runtime/test_dev_overlay_places_omnipc2_omn19215.py (qwen3-review) — No test verifies that spread placements include all placement fields, not just mode | The unit test test_a_spread_placement_passes_its_mode_through asserts that the rendered placement equals the input
  • [MAJOR] src/omnibase_infra/runtime/models/model_bifrost_lane_backend_placement.py (gpt-oss-review) — Addition of mode field changes public model contract | The new mode attribute in ModelBifrostLaneBackendPlacement extends the JSON schema of the placement object. Existing routing authorities th
  • [MINOR] docker/lane-overlays/dev.bifrost.yaml (qwen3-review) — Comment in overlay YAML describes routing behavior that is not enforced by this codebase | The updated comment in dev.bifrost.yaml describes the routing authority's behavior in detail: stable hash of
  • [MINOR] tests/integration/runtime/test_dev_overlay_places_omnipc2_omn19215.py (qwen3-review) — No test for the case where mode is explicitly set to fallback in a spread-capable context | The unit test test_a_fallback_placement_renders_without_a_mode_key sets mode to fallback explicitly and veri
  • [MINOR] src/omnibase_infra/runtime/models/model_bifrost_lane_backend_placement.py (qwen3-review) — No validation that spread mode is only used with compatible rungs | The enum allows any placement to set mode: spread, but the routing authority's behavior (hash-based distribution across rungs) may o
  • [MINOR] src/omnibase_infra/runtime/render_bifrost_delegation_contract.py (gpt-oss-review) — Use of exclude_defaults=True adds serialization overhead | exclude_defaults=True forces Pydantic to compare each field against its default value during model_dump, which can increase CPU usage w
  • [MINOR] tests/unit/runtime/test_bifrost_lane_overlay_placement_omn19215.py (gpt-oss-review) — Missing test for schema compatibility with strict validators | Current tests verify that fallback placements omit the mode key, but they do not assert behavior when a downstream consumer enforces st

@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): 11
Nit-level findings suppressed: 0

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: 11 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] src/omnibase_infra/runtime/render_bifrost_delegation_contract.py (qwen3-review) — exclude_defaults=True drops non-default fields beyond mode, breaking byte-identical contract | The renderer now calls model_dump(mode="json", exclude_defaults=True) on the entire placement model. The
  • [MAJOR] docker/lane-overlays/dev.bifrost.yaml (qwen3-review) — Spread mode with stable hash on correlation id enables traffic steering attacks | The comment in the YAML states that spread mode routes by a stable hash of the correlation id. An attacker who control
  • [MAJOR] tests/integration/runtime/test_dev_overlay_places_omnipc2_omn19215.py (qwen3-review) — No test verifies that spread mode is rejected by a routing authority that does not know the field | The negative control test (test_a_fallback_mode_in_the_dev_overlay_renders_the_pre_mode_bytes) verif
  • [MAJOR] src/omnibase_infra/runtime/models/model_bifrost_lane_backend_placement.py (gpt-oss-review) — Unbounded max_context_tokens allows resource exhaustion | The ModelBifrostLaneBackendPlacement model validates max_context_tokens only with gt=0, lacking an upper bound. An attacker could supply an ex
  • [MAJOR] src/omnibase_infra/runtime/models/model_bifrost_lane_backend_placement.py (gpt-oss-review) — Default mode field serialized inconsistently across code paths | The model sets mode default to FALLBACK, but the renderer omits the field only when exclude_defaults=True. Other serialization path
  • [MAJOR] plan (gpt-oss-review) — Versioning risk introduced by optional placement mode field | Adding mode changes the contract shape for lane placements. The current approach relies on omission of the default to preserve backward
  • [MINOR] src/omnibase_infra/runtime/models/model_bifrost_lane_backend_placement.py (qwen3-review) — exclude_defaults=True on a model with a str-Enum default may behave unexpectedly across Pydantic versions | The mode field is a str-Enum with default FALLBACK. Pydantic's exclude_defaults compares the
  • [MINOR] tests/unit/runtime/test_bifrost_lane_overlay_placement_omn19215.py (qwen3-review) — No test for the interaction between spread mode and the max_context_tokens overflow rule | The YAML comment states that a prompt larger than 32768 tokens always stays on .201, even in spread mode. Thi
  • [MINOR] docker/lane-overlays/dev.bifrost.yaml (qwen3-review) — Spread mode couples routing policy to a single correlation id hash without a fallback for hash collisions | The design states that a transport failure on either engine retries the other. However, the
  • [MINOR] tests/integration/runtime/test_dev_overlay_places_omnipc2_omn19215.py (gpt-oss-review) — No test for max_context_tokens upper‑bound enforcement | The new upper‑bound validation is absent, yet the test suite only checks that an oversized placement is refused without confirming the specific
  • [MINOR] src/omnibase_infra/runtime/render_bifrost_delegation_contract.py (gpt-oss-review) — Missing explicit error handling around model_dump | render_bifrost_delegation_contract calls binding.placement.model_dump without a try/except block. If the model contains invalid data (e.g., unknow

@jonahgabriel
jonahgabriel added this pull request to the merge queue Sep 28, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Sep 28, 2026
@jonahgabriel
jonahgabriel added this pull request to the merge queue Sep 28, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Sep 28, 2026
@jonahgabriel
jonahgabriel added this pull request to the merge queue Sep 28, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Sep 28, 2026

@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): 12
Nit-level findings suppressed: 0

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: 12 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] src/omnibase_infra/runtime/render_bifrost_delegation_contract.py (qwen3-review) — exclude_defaults=True silently drops required fields from rendered placement | The renderer now calls model_dump(mode="json", exclude_defaults=True) on ModelBifrostLaneBackendPlacement. Pydantic's exc
  • [MAJOR] src/omnibase_infra/runtime/render_bifrost_delegation_contract.py (qwen3-review) — exclude_defaults=True also excludes 'tier' if it ever acquires a default, breaking required-field contract | The use of exclude_defaults=True is a latent correctness hazard. Pydantic excludes any fiel
  • [MAJOR] tests/unit/runtime/test_bifrost_lane_overlay_placement_omn19215.py (qwen3-review) — No test verifies that required placement fields survive the exclude_defaults rendering | The new tests verify that 'mode' is present for spread and absent for fallback, and that the fallback placement
  • [MAJOR] docker/lane-overlays/dev.bifrost.yaml, src/omnibase_infra/runtime/render_bifrost_delegation_contract.py (gpt-oss-review) — Addition of mode field breaks backward compatibility for older routing authorities | The new mode attribute is added to ModelBifrostLaneBackendPlacement and rendered into the overlay when set to
  • [MINOR] docker/lane-overlays/dev.bifrost.yaml (qwen3-review) — Spread mode distributes traffic by correlation-id hash without documented collision or fairness guarantees | The comment states the routing authority picks .201 or .202 'by a stable hash of the correl
  • [MINOR] docker/lane-overlays/dev.bifrost.yaml (qwen3-review) — Spread mode with 4-slot limit on both engines may not improve throughput under sustained load | The comment states each engine enforces its own four-slot limit (.201 vLLM --max-num-seqs 4, .202 llama.
  • [MINOR] tests/integration/runtime/test_dev_overlay_places_omnipc2_omn19215.py (qwen3-review) — No test for the retry-on-transport-failure path between .201 and .202 | The comment states 'a transport failure on either retries the other'. No test in the diff exercises this retry path. The spread
  • [MINOR] docker/lane-overlays/dev.bifrost.yaml (qwen3-review) — No test for the 32768-token boundary condition in spread mode | The comment states 'A prompt larger than 32768 tokens always stays on .201'. No test verifies that a prompt of exactly 32768 tokens is r
  • [MINOR] tests/integration/runtime/test_dev_overlay_places_omnipc2_omn19215.py (qwen3-review) — Mode field is a string enum but the rendered output is a string, not an enum, creating a type mismatch at the boundary | The model uses EnumBifrostLanePlacementMode (a str, Enum) for the 'mode' field,
  • [MINOR] tests/unit/runtime/test_bifrost_lane_overlay_placement_omn19215.py (gpt-oss-review) — Missing test for omission of mode field when default fallback is used | The test suite verifies that a fallback placement renders without a mode key, but there is no test covering the scenario whe
  • [MINOR] src/omnibase_infra/runtime/render_bifrost_delegation_contract.py (gpt-oss-review) — exclude_defaults=True adds overhead to model serialization | Switching to model_dump(..., exclude_defaults=True) forces Pydantic to compare each field against its default value during serializatio
  • [MINOR] src/omnibase_infra/runtime/models/model_bifrost_lane_backend_placement.py (gpt-oss-review) — mode field default not marked as optional may cause strict validation failures | mode is defined with a default value but the field is not declared as optional. Some Pydantic configurations treat

@jonahgabriel
jonahgabriel added this pull request to the merge queue Sep 28, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Sep 28, 2026
@jonahgabriel
jonahgabriel added this pull request to the merge queue Sep 28, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Sep 28, 2026
@jonahgabriel
jonahgabriel added this pull request to the merge queue Sep 28, 2026
Merged via the queue into dev with commit 23b5242 Sep 28, 2026
179 of 186 checks passed
@jonahgabriel
jonahgabriel deleted the jonah/omn-19215-spread-placement branch September 28, 2026 16:20
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