Repository navigation
fix(inference): admit private IPv6 host bridges (#13544) - #13582
Conversation
Give new host-alias profiles a dual-stack boundary and a distinct identity. Preserve recorded IPv4 permissions and use the existing selection transaction to replace them safely. Signed-off-by: Deepak Jain <deepujain@gmail.com>
|
Auto-sync is disabled for draft pull requests in this repository. Workflows must be run manually. Contributors can view more details about this message here. |
Code coverage overviewLanguages: TypeScript TypeScript / code-coverage/plugin
View coverage of the 10 most impacted files.
ℹ️ Calculations represent line coverage. Results may change as calculations are updated. Updated |
|
NemoClaw-E2E-Growth: approve 90b021fd5c15eac87cc230ec2310b4b81fcbf2e7ce50c08b31775232d1dbc38e |
Add a WSL Docker scenario that rejects IPv4 fallback and verifies native chat admission plus IPv6 policy denials. Keep resolver parsing and fixture checks in the support lane, and bind the live assertion growth to its recorded maintainer approval. Signed-off-by: Deepak Jain <deepujain@gmail.com>
Model conditional registration in the baseline fixture mock so importing IPv6 coverage preserves the existing baseline checks. Exercise those checks on both WSL and ordinary Linux host identities. Signed-off-by: Deepak Jain <deepujain@gmail.com>
Run TC-INF-19 in the existing WSL live lane and retain artifacts for the tested revision when either live suite fails. Reject skipped IPv6 evidence and describe Ubuntu and WSL coverage separately. Move the IPv6 scenario allowance from the Ubuntu target to the WSL shard. Signed-off-by: Deepak Jain <deepujain@gmail.com>
Include the public NVIDIA model selection fix from #13583 so the inference-switch E2E uses Super VL instead of the retired model that returns HTTP 404. Preserve the private IPv6 policy repair and existing live assertions. Signed-off-by: Deepak Jain <deepujain@gmail.com>
Show that approved host aliases can resolve to an IPv6 unique-local address. Retain the address and endpoint restrictions, and distinguish DNS resolution from host-service reachability. Signed-off-by: Deepak Jain <deepujain@gmail.com>
|
🌿 Preview your docs: https://nvidia-preview-pr-13582.docs.buildwithfern.com/nemoclaw |
|
PR Review Advisor finished for commit Request review only when Require no Advisor blockers is green. |
|
Ready for review at New local-inference profiles allow approved Docker host aliases to resolve to private IPv6 addresses, including CI, the container images, E2E, the Advisor and CodeRabbit are green on this head, all commits are verified and no review threads are open. |
prekshivyas
left a comment
There was a problem hiding this comment.
Found one blocking workflow issue in commit a5133fa: the WSL job requires IPv6-only host-alias resolution without configuring that network prerequisite. Validation: 166 focused tests passed across six suites. WSL live execution was not run.
| uname -a > "`$E2E_ARTIFACT_DIR/platform.txt" | ||
| docker info --format '{{.OperatingSystem}} {{.Architecture}} {{.ServerVersion}}' > "`$E2E_ARTIFACT_DIR/docker.txt" | ||
| ipv6_status=0 | ||
| npx vitest run --project e2e-live test/e2e/live/openclaw-inference-switch.test.ts -t '^TC-INF-19' --silent=false --reporter=default --reporter=junit --outputFile.junit=.e2e/wsl-ipv6/junit.xml || ipv6_status=`$? |
There was a problem hiding this comment.
[P1] Configure IPv6 networking before requiring IPv6-only proof
This job installs native Ubuntu docker.io, and Start-WslContainerRuntime only unmasks and starts docker.service. Neither the workflow nor that helper provisions an IPv6 ULA bridge or an IPv6-only mapping for host.openshell.internal. Native Docker therefore supplies an IPv4 bridge address, which the new TC-INF-19 assertion at openclaw-inference-switch.test.ts:1471 explicitly rejects. The mandatory JUnit check then fails the main-branch WSL job even when the policy fix works. Binding the fixture to :: does not change the alias resolution. Configure the required IPv6-only route before invoking this test, or use a runner that supplies it.
The native Docker runner does not provision IPv6-only host aliases. Keep its existing full suite and retain TC-INF-19 for a prepared host. Exercise the workflow shell with native Docker inputs and both full-suite results so an unsupported IPv6 invocation cannot hide the suite result. Signed-off-by: Deepak Jain <deepujain@gmail.com>
prekshivyas
left a comment
There was a problem hiding this comment.
Re-reviewed commit 32f7d71. The previous P1 is addressed: native-Docker WSL CI no longer invokes the incompatible IPv6-only scenario, and executable regression tests preserve full-suite success and failure exit codes. No additional actionable code findings.
Validation: 230 tests passed across eight focused suites covering profile compatibility, selection and rollback, IPv6 fixtures, and workflow behavior.
Approving the code review. CI and automated reviews are still running, and WSL2 ARM Docker Desktop qualification remains unverified. This approval does not waive required checks or establish that platform qualification.
Outcome
Express onboarding can abort with HTTP 403 when a Docker host alias resolves to a private IPv6 address such as
fdc4:f303:9324::254. New local-inference profiles admit that address range while existing sandboxes keep their recorded permissions until the user reselects the local provider.Reason
The host Ollama service and authentication proxy were healthy, but the generated provider policy admitted only private IPv4 addresses. A distinct immutable profile identity lets new selections use IPv6 without changing permissions attached to existing sandboxes.
Related issues
Fixes #13544.
Changes
fc00::/7forhost.openshell.internalandhost.docker.internal. Preserve the selected host, port, paths, methods, executable permissions, and credential reference. Literal private IPv4 endpoints retain their/32restriction.TC-INF-19for a prepared WSL2 Docker Desktop host. It requires IPv6-only ULA resolution, authenticated sandbox chat, and explicit policy denials for public, link-local, and loopback IPv6. Lower-layer tests cover resolution classification and fixture behavior.Verification
a5133fabefore repair. Both native-Docker cases reproduced the defect: full-suite statuses 0 and 17 became 42 when the script invoked the unsupported IPv6 scenario. The same cases pass after repair and preserve their original statuses.NEMOCLAW_TEST_TIMEOUT=60000, this command passed all 82 tests across three suites:fdc4:f303:9324::254was excluded. At3743603, nine focused suites passed all 391 tests. Policy and selection code are unchanged by this workflow repair.a5133fapassed. The Advisor run on that head had no P0/P1 findings, butRequire no Advisor blockersfailed on six unresolved WSL E2E recommendations. Those results do not validate this updated commit. Fresh CI, image checks, automated reviews, and applicable E2E are pending.32f7d712bd10a6ea7a476961acecd8b43a5f3690, normal commit hooks, pre-push publication validation, and CLI TypeScript checks passed. The diff contains no secrets, API keys, credentials, or unrelated dependency changes.Review notes
Decision: accept the existing host-alias policy repair. Reason: the reported private IPv6 bridge falls outside the generated profile. Placement: profile generation and identity, existing selection owners, provider guidance, and the existing IPv6 live test. Validation plan: profile and selection tests, workflow and fixture contracts, publication checks, and WSL2 ARM Docker Desktop qualification. Existing permissions change only through explicit reselection.
The workflow review identified a valid mismatch between the native-Docker runner and the required IPv6-only network. The repair removes that incompatible invocation and its extra timeout and artifact handling. Every live IPv6 assertion remains intact. This preserves the existing workflow trust boundary and full-suite behavior. A new trusted qualification lane remains separate work; this decision neither clears the Advisor gate nor waives the missing live evidence.
Self-review of
32f7d712bd10a6ea7a476961acecd8b43a5f3690covers the workflow repair, executable regression cases, test guidance, and timeout comment. Independent re-review is pending. The sensitive native-local policy, identity, selection, and rollback implementation is unchanged by this repair. The existing eight added live assertion points retain their recorded growth approval. No live assertion or growth record changes here. DGX Station validation is not applicable.Signed-off-by: Deepak Jain deepujain@gmail.com
Summary by CodeRabbit
New Features
Bug Fixes
Documentation