Repository navigation
feat(OMN-19543): declare the dev-200 lane on .200 with its own compose overlay on the 42xxx block - #4116
Conversation
…e overlay on the 42xxx block Onex-Lane: dev-200-lane Onex-Session: 50705c397acd4413bdee8c1379652cf8
|
No OCC evidence companion was minted for this PR. this PR is already bound to OCC#11258; its evidence companion exists and nothing needs authoring To clear this: Nothing to do — the companion already exists. Reported by |
…ibase_infra#4116 (#11258) * evidence(OMN-19543): author OCC companion for OmniNode-ai/omnibase_infra#4116 OCC companion by node_pr_lifecycle_fix_effect (OMN-13317 F1 / OMN-13990 / OMN-14285). Product PR head f7e80c80bc99a89ad22439df6a3f8aea4c521a1d. * evidence(OMN-19543): self-bind OCC#11258 + rebind contract_sha256 --------- Co-authored-by: omnimarket-bot <bot@omninode.ai>
✅ Hostile Reviewer — REVIEWEDCritical findings: 0
Semantics (OMN-17492 — the model finds, thread resolution gates)
Powered by omniintelligence.review_pairing.cli_review — multi-model adversarial review: qwen3-review, qwen3-review-b, glm-review (OMN-8468/OMN-8524/OMN-17492) |
There was a problem hiding this comment.
Hostile Reviewer — adversarial findings (OMN-17492)
Models succeeded: qwen3-review, qwen3-review-b, glm-review
Models failed: none
New finding threads: 4
Deduped (already posted on this PR): 0
Below quorum (one model only, reported not threaded): 15
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: 15 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/ci/test_dev_200_lane_boundary_omn19543.py(qwen3-review) — Regex in _published_port_lines matches only 3-part port entries, breaking loopback-only test | The helper _published_port_lines uses the regex r'^\s+-\s+"([^"]:\d+:\d+)"\s$' which requires exactly t - [MAJOR]
docker/docker-compose.dev-200.yml(qwen3-review) — Redpanda external listeners bind 0.0.0.0 inside container, exposed via loopback host port | The Redpanda service overrides its command to bind external listeners on 0.0.0.0:19092 and 0.0.0.0:18082 ins - [MAJOR]
tests/ci/test_dev_200_lane_boundary_omn19543.py(qwen3-review) — Test asserts BIFROST_LANE_OVERLAY_PATH count is 4, but overlay mounts it in 4 services; verify count matches actual services | The test test_dev_200_lane_boundary_reaches_nothing_on_201 asserts that t - [MAJOR]
tests/ci/test_dev_200_lane_boundary_omn19543.py, test_dev_200_lane_boundary_reaches_nothing_on_201(qwen3-review-b) — Test asserts 4 Bifrost overlay mounts but overlay defines 5 | The testtest_dev_200_lane_boundary_reaches_nothing_on_201asserts that the string `./lane-overlays/dev-200.bifrost.yaml:/app/config/del - [MAJOR]
tests/ci/test_dev_200_lane_boundary_omn19543.py, test_dev_200_lane_boundary_declares_every_dev_service_under_its_name(qwen3-review-b) — DEV_TO_DEV_200 mapping omits services present in manifest | The testtest_dev_200_lane_boundary_declares_every_dev_service_under_its_nameasserts that the set of services declared in thedevlane - [MAJOR]
docker/docker-compose.dev-200.yml, x-omninode-contract-overlay and redpanda command(glm-review) — Redpanda advertises 127.0.0.1 to clients that are not on the macOS host | The advertised external Kafka/proxy addresses are 127.0.0.1:42192 and 127.0.0.1:42182. Metadata returned to any client resolve - [MAJOR]
tests/ci/test_dev_200_lane_boundary_omn19543.py(glm-review) — No parity test between overlay container_name and manifest service names | The census test synthesizes container rows from the manifest (via _healthy_dev_200_rows) rather than from the rendered compos - [MINOR]
tests/ci/test_dev_200_lane_boundary_omn19543.py(qwen3-review) — DEV_TO_DEV_200 mapping omits several services declared in the dev lane | The test test_dev_200_lane_boundary_declares_every_dev_service_under_its_name asserts that the set of services declared in the - [MINOR]
tests/ci/test_dev_200_lane_boundary_omn19543.py(qwen3-review) — Lane manifest declares dev-200 as optional, but the test asserts optional is True | The lane manifest declares dev-200 with optional: true, and the test test_dev_200_lane_boundary_manifest_declares_la - [MINOR]
docker/docker-compose.dev-200.yml(qwen3-review) — Redpanda memory set to 2G with 7000 partitions per shard may cause performance issues | The Redpanda service is configured with --memory 2G and --set topic_partitions_per_shard=7000. This is a high pa - [MINOR]
docker/docker-compose.dev-200.yml, redpanda service(qwen3-review-b) — Redpanda admin port exposed on loopback | The Redpanda admin port (42644) is published on 127.0.0.1. While loopback-only binding is safer than exposing on all interfaces, the admin port provides full - [MINOR]
docker/docker-compose.dev-200.yml, redpanda service(qwen3-review-b) — Redpanda memory limit may be too low for parallel lanes | The Redpanda memory limit is set to 2G by default (${DEV_200_REDPANDA_MEMORY:-2G}). The comment notes that the Docker Desktop VM on .200 is - [MINOR]
docker/docker-compose.dev-200.yml(glm-review) — Lane label coverage is inconsistent across the overlay's services | Some services carry com.omninode.lane: dev-200 (forward-migration, cloud-migrations, onex-api, tenant-projection-writer, infra-routi - [MINOR]
docker/docker-compose.dev-200.yml, ports blocks(glm-review) — Loopback publish still exposes unauthenticated Postgres, Valkey and Redpanda to every local process | Binding to 127.0.0.1 confines exposure to the host, but on a shared lab workstation every local pr - [MINOR]
docker/docker-compose.dev-200.yml, port block comment(glm-review) — Reserved port 42090 sits in the declared block but has no enforcement | The comment reserves 42090 for onex-api, which is disabled on this lane, so nothing binds it. If onex-api is later enabled with
Findings not anchored to a changed file
-
[MINOR] hostile-reviewer (qwen3-review-b)
Test relies on regex parsing of YAML, fragile to formatting changes | The test
_published_port_lines()uses a regex to parse port entries from the YAML file. This is fragile to formatting changes, such as changes in indentation, quotes, or the order of fields. If the YAML is reformatted, the test may fail even if the port bindings are correct. Consider using a YAML parser to extract port bindings instead of regex. | Evidence: In tests/ci/test_dev_200_lane_boundary_omn19543.py, the function `_published_porResolve this thread when addressed — the
Hostile Review Thread Gateblocks while hostile-reviewer threads are unresolved (OMN-17492). -
[MINOR] hostile-reviewer (glm-review)
Port checks parse YAML with regex and count a port that can never bind | _published_port_lines and _bindings scrape raw text with regex, so the disabled onex-api's 127.0.0.1:42090:8000 entry is counted as a binding. The loopback test then asserts a set that includes a port Docker will never publish while the service is profile-gated, making the test's claim ("every published port binds loopback only") vacuously include an unbindable port. Regex parsing also silently passes if a future entry uses flow style,
Resolve this thread when addressed — the
Hostile Review Thread Gateblocks while hostile-reviewer threads are unresolved (OMN-17492).
Findings demoted from threads (anchor rejected)
-
[MINOR] hostile-reviewer (qwen3-review)
Test for .201 dev container on .200 uses a hardcoded container name that may not match the actual dev lane container name | The test test_dev_200_lane_boundary_a_201_dev_container_on_200_is_a_finding creates a row with the container name 'omninode-runtime' and project 'omnibase-infra'. This assumes that the .201 dev lane's container name is 'omninode-runtime' and its project is 'omnibase-infra'. If the .201 dev lane uses a different container name or project, the test will not correctly simulate a .201 dev
Resolve this thread when addressed — the
Hostile Review Thread Gateblocks while hostile-reviewer threads are unresolved (OMN-17492). -
[MINOR] hostile-reviewer (qwen3-review)
No test verifies that the dev-200 lane's network is isolated from other lanes' networks | The overlay defines a custom network omnibase-infra-dev-200-network, but there is no test that verifies this network is not shared with any other lane's network. If another lane's compose file also defines a network with the same name, or if a service in another lane is attached to this network, the isolation assumption is broken. A test that scans all compose files for network definitions and asserts that no other lan
Resolve this thread when addressed — the
Hostile Review Thread Gateblocks while hostile-reviewer threads are unresolved (OMN-17492). -
[MINOR] hostile-reviewer (qwen3-review-b)
Missing test for volume isolation | The test suite verifies port bindings, service naming, and census behavior, but does not explicitly test that volumes are isolated between lanes. The overlay defines volumes with
omnibase-infra-dev-200-andomninode-dev-200-prefixes, but there is no test that asserts no volume name collides with other lanes' volumes. A collision could lead to data corruption or unexpected behavior. | Evidence: The test filetests/ci/test_dev_200_lane_boundary_omn19543.pydoes not iResolve this thread when addressed — the
Hostile Review Thread Gateblocks while hostile-reviewer threads are unresolved (OMN-17492). -
[MINOR] hostile-reviewer (glm-review)
Cross-lane port clarity check has false positives and misses non-compose files | test_dev_200_lane_boundary_block_is_clear_of_every_other_lane greps all other compose files for the literal pattern 42\d{3}; any occurrence of such a number in a comment, image tag, or memory value in another file blocks the lane even with no port conflict. Conversely it only scans docker/docker-compose*.yml, so a conflicting port declared in a lane overlay file, a script, or a kustomize manifest is invisible. | Evidence: for p
Resolve this thread when addressed — the
Hostile Review Thread Gateblocks while hostile-reviewer threads are unresolved (OMN-17492).
…0-lane # Conflicts: # deploy/lane-census/lane-manifest.yaml # scripts/generate_claude_lane_block.py # tests/unit/scripts/test_lane_census_manifest_parity.py
There was a problem hiding this comment.
Hostile Reviewer — adversarial findings (OMN-17492)
Models succeeded: qwen3-review, qwen3-review-b, glm-review
Models failed: none
New finding threads: 6
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]
docker/docker-compose.dev-200.yml, deploy/lane-census/lane-manifest.yaml(qwen3-review) — Redpanda external Kafka port collides with existing isolated prover stack | The lane manifest's own verified comment for dev-200 records that the .200 host already has an 'isolated prover stack' liste - [MAJOR]
docker/docker-compose.dev-200.yml(qwen3-review) — Mounting /dev/null as a read-only secret file is a silent failure mode | The overlay mounts/dev/null:/run/secrets/vertex_access_token:rofor omninode-runtime, runtime-effects, and runtime-worker. T - [MAJOR]
tests/ci/test_dev_200_lane_boundary_omn19543.py(qwen3-review) — Missing test for the Bifrost overlay's refusal to bind local backends | The Bifrost overlaydev-200.bifrost.yamlsetslocale: cloudandbackends: []. The comment says 'the renderer disables ever - [MINOR]
docker/docker-compose.dev-200.yml(qwen3-review) — Redpanda memory allocation of 2G may be insufficient for the partition count | The Redpanda command sets--memory 2Gandtopic_partitions_per_shard=7000. With 7000 partitions per shard and a singl - [MINOR]
docker/docker-compose.dev-200.yml(qwen3-review-b) — Redpanda external listeners bind 0.0.0.0 inside the container | The Redpanda command overrides set --kafka-addr internal://0.0.0.0:9092,external://0.0.0.0:19092 and --pandaproxy-addr internal://0.0.0. - [MINOR]
docker/lane-overlays/dev-200.bifrost.yaml(qwen3-review-b) — Bifrost overlay with empty backends may cause silent delegation failures | The dev-200 Bifrost overlay sets locale: cloud and backends: []. The comment states that no cloud credential is supplied, so - [MINOR]
tests/ci/test_dev_200_lane_boundary_omn19543.py(qwen3-review-b) — Census test uses synthetic rows that may not match real container output | The census tests (test_dev_200_lane_boundary_census_on_200_reads_clean and test_dev_200_lane_boundary_census_still_reports_a_
Findings demoted from threads (anchor rejected)
-
[MAJOR] hostile-reviewer (qwen3-review)
Test regex for port entries is fragile and may miss multi-line or differently-formatted entries | The test
_published_port_lines()uses the regex^\s+-\s+"([^"]*:\d+:\d+)"\s*$withre.MULTILINE. This matches lines like- "127.0.0.1:42436:5432". However, the testtest_dev_200_lane_boundary_every_port_entry_names_a_host_addresscomparessorted(entries)(which matches the two-part formhost-port:container-port) againstsorted(_published_port_lines())(which matches the three-part form). TResolve this thread when addressed — the
Hostile Review Thread Gateblocks while hostile-reviewer threads are unresolved (OMN-17492). -
[MAJOR] hostile-reviewer (qwen3-review-b)
Regex for published port lines misses unquoted entries | The helper _published_port_lines() uses the pattern r'^\s+-\s+"([^"]:\d+:\d+)"\s$' which requires the port entry to be wrapped in double quotes. If any port entry in the overlay is written without quotes (e.g., - 127.0.0.1:42436:5432), the regex will not match it, and the test test_dev_200_lane_boundary_every_published_port_binds_loopback_only will silently pass with an incomplete set of bindings. The test test_dev_200_lane_boundary_every_port_entry
Resolve this thread when addressed — the
Hostile Review Thread Gateblocks while hostile-reviewer threads are unresolved (OMN-17492). -
[MINOR] hostile-reviewer (qwen3-review)
The test
test_dev_200_lane_boundary_relabels_every_dev_lane_labeluses a fragile line-by-line regex | The test parses the dev-lane and dev-200 compose files line by line with a regex to find service names and labels. This is fragile: if a service name is on the same line as its colon (e.g.,service:instead ofservice:on its own line), the regex will miss it. The regex^ ([A-Za-z0-9_.-]+):\s*$requires the service name to be on a line by itself with exactly two leading spaces. This is a common YAMResolve this thread when addressed — the
Hostile Review Thread Gateblocks while hostile-reviewer threads are unresolved (OMN-17492). -
[MINOR] hostile-reviewer (qwen3-review)
No test for the
optional: trueflag's effect on census findings | The manifest setsoptional: truefor dev-200. The comment says 'a declared lane with nothing running yields no finding, and one with any declared service running is reconciled in full'. There is no test that verifies this behavior. The testtest_dev_200_lane_boundary_census_on_200_reads_cleantests the case where all services are running, but there is no test for the case where no services are running (which should yield no finding dueResolve this thread when addressed — the
Hostile Review Thread Gateblocks while hostile-reviewer threads are unresolved (OMN-17492). -
[MINOR] hostile-reviewer (qwen3-review-b)
Test does not verify that disabled services are not started | The test test_dev_200_lane_boundary_declares_no_forbidden_service checks that keycloak and infisical have the dev-200-disabled profile and no container_name. However, it does not verify that the profile dev-200-disabled is not activated in the compose invocation. If a future deploy script accidentally activates that profile, the services would start. The test suite should include a check that the deploy command (documented in the overlay header)
Resolve this thread when addressed — the
Hostile Review Thread Gateblocks while hostile-reviewer threads are unresolved (OMN-17492). -
[MINOR] hostile-reviewer (qwen3-review-b)
Port block collision test only scans committed compose files | The test test_dev_200_lane_boundary_block_is_clear_of_every_other_lane scans all docker-compose*.yml files in the docker/ directory for 42xxx port literals. This is a static check that only covers committed files. If a new compose file is added in a future PR that uses a 42xxx port, the test will catch it. However, if a port is allocated dynamically at runtime (e.g., via a script that picks a free port in the 42000-42999 range), the test will no
Resolve this thread when addressed — the
Hostile Review Thread Gateblocks while hostile-reviewer threads are unresolved (OMN-17492).
Resolves the routing table against #4105 (verify: blocks) and #4116 (the dev-200 lane declaration): dev-202 keeps its lane: and verify: blocks, and dev-200 gets a verify: block on its 42xxx ports with receipt lane compose-dev-200 (EnumLabLane.COMPOSE_DEV_200, the same hunk as #4118). No route names dev-200: no runner carries host-200 yet. Onex-Lane: lab-200-deploy-83 Onex-Session: c2d0be217b2d4bc7b90c63f1e06e5adc
What
Declares dev-200, the third deployed dev lane, on the .200 host (hostname
Stickybeatz-Studio). Ticket OMN-19543, epic OMN-19500. Authority: omni_home ledger RULING 2026-09-25T10:22:22Z (one deploy slot per lab host), amended by the CORRECTION 2026-09-25T10:22:36Z ("well for parllelism anyway"). The plan's verdict for .200 is VIABLE (lane lab-deploy-lanes-plan, TERMINAL 2026-09-25T10:29:02Z).This PR follows the dev-202 template (#4095), with two differences, both because .200 runs macOS with Docker Desktop:
sysctl net.inet.ip.portrange). The block was claimed in the omni_home ledger STATUS row 2026-09-25T10:33:16Z, andlsofread no listener in it. The runtime is on 42085, effects on 42086 and the projection API on 42002. The full list is in the overlay header.host.docker.internalto the macOS host's loopback. I measured this on .200 with throwaway containers. A server published on127.0.0.1:42999answered a busybox container athost.docker.internal:42999both with and without thehost-gatewayalias. The LAN address192.168.86.200:42999refused the same server.Changed files:
docker/docker-compose.dev-200.ymlis the overlay. It renames the project, every container, the network and every volume, and republishes every port.docker/lane-overlays/dev-200.bifrost.yamlsets cloud locale with no local backend. It binds nothing on the .201 model server and nothing on .200's planner on port 8130.deploy/lane-census/lane-manifest.yamladds thedev-200entry onlab-200, withoptional: trueand a freshverified:line.scripts/generate_claude_lane_block.pyadds the dev-200 row.GOVERNED_LANESandGRANT_INTERLOCK_LANES.Tests
tests/ci/test_dev_200_lane_boundary_omn19543.py, adapted from the dev-202 boundary test. It checks:lab-200only;dev-200anddogfood;test_lane_census_manifest_parity.pyaddsdev-200to the compose-lane ratchet.test_lane_census_host_scope_omn19088.pyaddsdev-200to the lanes that do not apply on the .101 and .105 dogfood hosts.origin/dev, 15 tests fail. A path checkout restored the files.Lab
The lab run happened before this PR opened, under the ledger HOLD
2026-09-25T10:47:49Z-dev-200-laneon surface200-compose-dev. The lane ran from the stacked branch head63376a979, which carries this commit.compose upofomnibase-infra-dev-200ran from 10:54:16Z to 10:56:00Z./healthreturned 200 on 42085, 42086 and 42002 at 11:16Z. Runtime and effects werehealthywithRestartCount 0.scripts/lane-census-check.sh --jsonat 11:17Z read hostlab-200, lanes checkeddogfoodanddev-200,has_drift false.omnimarket-dev-200-projection-tenant-registry-writeris unhealthy becauseonex.tenant.eventsdoes not exist on the lane's own broker. dev-202's copy of this writer was restarting at the same moment (read-onlydocker pson .202, 11:16Z). So the gap belongs to the template: an isolated lane broker never gets that topic.Runtime classification
This PR is runtime-affecting, because it adds a compose overlay. It changes nothing on .201: no .201 lane reads the new files.
Landing order
Evidence-Ticket: OMN-19543
Evidence-Source: OCC#11258