Repository navigation
feat(OMN-19507): dev-202 publishes its verify ports on the docker bridge gateway so a runner container reaches them - #4109
Conversation
…ibase_infra#4109 (#11238) * evidence(OMN-19507): author OCC companion for OmniNode-ai/omnibase_infra#4109 OCC companion by node_pr_lifecycle_fix_effect (OMN-13317 F1 / OMN-13990 / OMN-14285). Product PR head df83c4fe89e948abf59f416e69eff905993ebcf7. * evidence(OMN-19507): self-bind OCC#11238 + rebind contract_sha256 --------- Co-authored-by: omnimarket-bot <bot@omninode.ai>
|
| 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) | No |
Powered by omniintelligence.review_pairing.cli_review — multi-model adversarial review: qwen3-review, qwen3-review-b, glm-review (OMN-8468/OMN-8524/OMN-17492)
…dge gateway so a runner container reaches them A per-merge verify job runs in a runner container and reads the lane at host.docker.internal, which resolves to the docker bridge gateway (172.17.0.1 on .202). The dev-202 overlay bound every port to loopback only, which refuses that alias. Runtime main 61085, effects 61086 and projection API 61002 are now published on loopback and on the gateway; everything else stays loopback-only and nothing binds all interfaces or the LAN. Tests assert both directions.
df83c4f to
0d55bc2
Compare
There was a problem hiding this comment.
Hostile Reviewer — adversarial findings (OMN-17492)
Models succeeded: glm-review
Models failed: codex
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]
docker/docker-compose.dev-202.yml, VERIFY-RUNNER REACH comment block(glm-review) — Gateway bind exposes ports to every container on the host, not just the verify runner | 172.17.0.1 is the default bridge gateway, but it is reachable from any container on any Docker network on .202 t - [MINOR]
docker/docker-compose.dev-202.yml; tests/ci/test_dev_202_lane_boundary_omn19505.py(glm-review) — Hardcoded 172.17.0.1 is an environment snapshot, not a contract | The address is correct only while the daemon defines no host-gateway-ip, the default address pool still allocates 172.17.0.0/16 to the - [MINOR]
tests/ci/test_dev_202_lane_boundary_omn19505.py, _bindings and test_dev_202_lane_boundary_every_port_entry_names_a_host_address(glm-review) — Port-entry regex and split parsing admit malformed entries silently | The cross-check regex([^"]*:\d+)matches any colon-suffixed string, and_bindingscallsline.split(":")with fixed unpackin - [MINOR]
tests/ci/test_dev_202_lane_boundary_omn19505.py(glm-review) — GATEWAY_REACHED_PORTS duplicates deploy_lane_routing.yaml with no consistency check | The set {61085, 61086, 61002} is transcribed from config/deploy_lane_routing.yaml into a hardcoded test constant. - [MINOR]
tests/ci/test_dev_202_lane_boundary_omn19505.py(glm-review) — Boundary tests validate compose text only, never the listening sockets | All three port tests assert on the YAML source of the overlay. Docker Compose can render a!overridedifferently than expecte
|
Lab proof on .202 at this head, taken before landing (rule 24), under the omni_home ledger HOLD of lane dev-202-bringup for surface 202-compose-dev:
|
OMN-19507: dev-202 verify ports reachable from a runner container
Ticket: OMN-19507 (AC3 prerequisite), epic OMN-19500. Authority: operator RULING 2026-09-25T06:57:54Z in the omni_home rolling ledger (line 3238): the dev-202 overlay binds the docker bridge gateway address, not all interfaces and not the LAN, so fleet runners reach it via host.docker.internal.
Stacked on omnibase_infra#4095. This branch carries #4095's commits until it lands; the change here is the single commit
df83c4fe8. Once #4095 lands, that commit is rebased onto dev (a clean replay: #4095's squash has the same tree as its branch head).What changes
A per-merge verify job runs in a runner container, where localhost is the container itself. It reads a lane at
host.docker.internal, the runner's host-gateway alias, which resolves to the default bridge gateway: 172.17.0.1 on .202 (read 2026-09-25 withdocker network inspect bridge; daemon.json there sets no host-gateway-ip).docker/docker-compose.dev-202.yml: runtime main 61085, effects 61086 and projection API 61002 are published on loopback AND on 172.17.0.1. Loopback stays because the deploy agent's own health probe readslocalhost:<port>. Every other port (Postgres, Valkey, Redpanda, consumers, phoenix) stays loopback-only; a verify job reads those through the docker socket. Nothing binds all interfaces or the LAN address.deploy/lane-census/lane-manifest.yaml: comment updated to say the same.tests/ci/test_dev_202_lane_boundary_omn19505.py: the loopback-only test is replaced by three tests: (1) every port entry names a host address; (2) every port binds only loopback or the gateway, and every port is on loopback; (3) exactly {61085, 61086, 61002} are on the gateway.RED first: with the new tests and the old overlay, test (3) failed (1 failed, 15 passed); with the overlay change all 16 pass. Focused runs: the boundary file plus lane-census manifest parity, sim-202 boundary and host-scope tests, all passing.
Rendered the compose triple (infra + dev-lane + dev-202,
--profile runtime) locally with stub env values: 18 published entries across 28 services; the only non-loopback entries are the three gateway binds above.Mechanism measured on .202 with throwaway containers on port 61999/61998 (removed after; 0 containers, 0 networks, 0 listeners left): a container on a user-defined network carrying
host.docker.internal:host-gatewaygot PONG from a gateway-published port, got connection refused from a loopback-only one (reproducing the open finding), and the host's LAN address refused the port.Not in this PR
config/deploy_lane_routing.yamlthat lists this as an open choice is updated in the route-row PR.Evidence-Ticket: OMN-19507
Evidence-Source: OCC#11238