Skip to content

feat(onboard): declare runtime host mount support - #8368

Merged
cv merged 32 commits into
mainfrom
feat/runtime-host-mount-capability-8343
Aug 15, 2026
Merged

feat(onboard): declare runtime host mount support#8368
cv merged 32 commits into
mainfrom
feat/runtime-host-mount-capability-8343

Conversation

@ericksoa

@ericksoa ericksoa commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Summary

Declare read-only host-mount support through the selected runtime-provider contract and reject unsupported providers or host platforms before onboarding mutates durable session state. Docker remains supported on Linux and WSL, while Kubernetes, Podman, and OpenShell MXC fail closed with provider-specific reasons. This builds on merged #8280.

Related Issue

Fixes #8343. Builds on merged #8280.

Changes

  • Require every runtime-provider bundle to declare read-only host-mount support or an explicit unsupported reason, including qualified host platforms for supported providers.
  • Resolve and enforce that capability for CLI requests and persisted resume state before session mutation.
  • Declare the merged base branch's dormant Podman provider unsupported and reject host mounts for both portable-profile selection paths before session or runtime mutation.
  • Document the current Docker, Kubernetes, Podman, and MXC support matrix plus the qualification checklist for future provider implementations.
  • Keep the abstraction because onboarding has multiple runtime providers and a direct Docker-only platform check cannot protect persisted mounts when runtime selection changes. Runtime-provider contract tests protect registration and the support matrix; command and session-bootstrap tests protect requested and persisted fail-closed paths.

Type of Change

  • Code change (feature, bug fix, or refactor)
  • Code change with doc updates
  • Doc only (prose changes, no code sample modifications)
  • Doc only (includes code sample changes)

Quality Gates

  • Tests added or updated for changed behavior
  • Existing tests cover changed behavior — justification:
  • Tests not applicable — justification:
  • Docs updated for user-facing behavior changes
  • Docs not applicable — justification:
  • Sensitive paths changed (security, policy, credentials, preflight, onboarding, inference, runner, sandbox, or messaging)
  • Sensitive-path review completed or maintainer-approved waiver recorded — reviewer/approval link/justification: Maintainer nine-category security review completed at commit ff20cc572; no findings remain.
  • Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue:

Security Review

  • Input validation and untrusted input: pass. Provider declarations are validated as a strict supported/unsupported union; supported platform lists must be non-empty, unique, and valid Node.js host platforms.
  • Runtime trust boundaries: pass. Runtime selection is resolved before accepting requested or persisted mounts, including fail-closed portable-profile handling for Podman.
  • Filesystem safety and TOCTOU: pass. This change preserves absolute-path, no-symlink, directory, target-containment, duplicate, and final source-identity revalidation protections.
  • Command and configuration injection: pass. No new shell/process execution or string-built command path is introduced.
  • Authorization and capability enforcement: pass. Unsupported providers and unqualified host platforms throw before durable state or runtime mutation; no provider fallback is allowed.
  • Secrets and logging: pass. Capability diagnostics contain only provider/platform reasons and do not expose mount contents or credentials.
  • Network exposure: not applicable. No listener, route, policy, or network-permission change is introduced.
  • State ordering and rollback: pass. Fresh and resumed session paths enforce support before clear, save, update, or recovery operations.
  • Dependencies and supply chain: not applicable. No dependency or lockfile changes are introduced.

Documentation Writer Review

  • Documentation writer subagent reviewed the completed changes
  • Result: docs-updated
  • Evidence: docs/manage-sandboxes/workspace-files.mdx documents the Docker, Kubernetes, Podman, and OpenShell MXC read-only host-mount support matrix, fail-closed provider and host-platform checks, Docker fallback prohibition, and qualification requirements for future runtime-provider implementations in the OpenClaw, Hermes, and LangChain Deep Agents Code guide variants. Independent review of commit fa0020af0 confirmed that the PR-owned patch is unchanged after merging main at 68323e2ef, the documentation matches the runtime-provider declarations and enforcement paths, and requested or persisted unsupported mounts are rejected before session or runtime mutation. Recorded validation includes 251 earlier tests passing, the final locked-runtime regression passing 2/2, npm run build:cli, npm run typecheck:cli, and npm run test-conditionals:scan -- --top 25 passing. npm run docs passed with 0 errors and 2 existing warnings. Ten other test invocations did not start because the isolated clone lacked generated shared and catalog artifacts; GitHub CI remains required.
  • Agent: Codex Desktop

DGX Station Hardware Evidence

  • Tested on DGX Station
  • Tested commit:
  • Station profile/scenario:
  • Result:
  • Supporting evidence:

Verification

  • PR description includes a Signed-off-by: line and every pushed commit appears as Verified in GitHub
  • npm run validate:pr completed applicable checks, but the local dependency tree could not import the /oxfmt package required by oxfmt.config.ts; GitHub CI remains required
  • npm run build:cli and npm run typecheck:cli passed
  • Earlier feature validation passed 251 tests. The final locked-runtime regression passed 2/2. Ten other invocations did not start because the isolated clone lacked generated shared and catalog artifacts; they were not repeated, and GitHub CI remains required.
  • npm run test-conditionals:scan -- --top 25 passed
  • Applicable broad gate passed — GitHub CI must complete the full repository gate.
  • Quality Gates section completed with required justifications or waivers
  • No secrets, API keys, or credentials committed
  • npm run docs builds without warnings (doc changes only) — 0 errors; 2 pre-existing hidden-page warnings remain
  • Doc pages follow the style guide (doc changes only)
  • New doc pages include SPDX header and frontmatter (new pages only)

Signed-off-by: Aaron Erickson aerickson@nvidia.com

Summary by CodeRabbit

  • New Features

    • Added runtime capability checks for read-only host mounts during onboarding and session resume.
    • Docker on Linux and WSL2 is supported; unsupported providers and platforms now show clear rejection reasons.
    • Host-mount validation includes platform qualification and revalidation requirements.
  • Documentation

    • Expanded host-mount guidance with supported platforms, provider limitations, capability checks, and configuration requirements.
  • Bug Fixes

    • Improved compatibility when resuming legacy sessions with missing or invalid machine state.
    • Removed outdated SSH dashboard access guidance from sandbox status information.

ericksoa and others added 15 commits August 4, 2026 18:28
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
@ericksoa ericksoa added area: onboarding Onboarding FSM, provider setup, sandbox launch, or first-run flow area: sandbox OpenShell sandbox lifecycle, runtime, config, or recovery area: security Security controls, permissions, secrets, or hardening feature PR adds or expands user-visible functionality platform: container Affects Docker, containerd, Podman, or images platform: k8s Affects Kubernetes deployments platform: wsl Affects Windows Subsystem for Linux area: architecture Architecture, design debt, major refactors, or maintainability v0.0.103 release-target labels Aug 5, 2026
@ericksoa ericksoa self-assigned this Aug 5, 2026
@coderabbitai

coderabbitai Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 2c31b48e-b925-4bc5-9cd2-af55fa771094

📥 Commits

Reviewing files that changed from the base of the PR and between 0a8a6d0 and 8415b24.

📒 Files selected for processing (31)
  • docs/manage-sandboxes/workspace-files.mdx
  • src/lib/actions/sandbox/status-flow.test.ts
  • src/lib/actions/sandbox/status-snapshot.ts
  • src/lib/actions/sandbox/status-text.ts
  • src/lib/actions/sandbox/status.test.ts
  • src/lib/onboard/checkpoint-resume-guard.test.ts
  • src/lib/onboard/command.ts
  • src/lib/onboard/docker-driver-gateway-config.ts
  • src/lib/onboard/docker-driver-gateway-env.ts
  • src/lib/onboard/docker-driver-gateway-launch.test.ts
  • src/lib/onboard/host-mount/host-mount.test.ts
  • src/lib/onboard/host-mount/index.ts
  • src/lib/onboard/managed-workload-rebuild-transaction.test.ts
  • src/lib/onboard/resume-config.ts
  • src/lib/onboard/runtime-provider/access.ts
  • src/lib/onboard/runtime-provider/contract.ts
  • src/lib/onboard/runtime-provider/docker.ts
  • src/lib/onboard/runtime-provider/mxc.test.ts
  • src/lib/onboard/runtime-provider/mxc.ts
  • src/lib/onboard/runtime-provider/podman.test.ts
  • src/lib/onboard/runtime-provider/podman.ts
  • src/lib/onboard/runtime-provider/registry.ts
  • src/lib/onboard/runtime-provider/runtime-provider-contract.test.ts
  • src/lib/onboard/session-bootstrap.test.ts
  • src/lib/onboard/session-bootstrap.ts
  • src/lib/state/onboard-session-station-express.test.ts
  • src/lib/state/onboard-session.test.ts
  • src/lib/state/onboard-session.ts
  • src/lib/state/registry.ts
  • test/helpers/runtime-provider-bundle.ts
  • test/support/status-flow-test-harness.ts
💤 Files with no reviewable changes (2)
  • src/lib/state/onboard-session.ts
  • src/lib/onboard/docker-driver-gateway-env.ts
🚧 Files skipped from review as they are similar to previous changes (27)
  • test/helpers/runtime-provider-bundle.ts
  • src/lib/onboard/runtime-provider/docker.ts
  • src/lib/onboard/managed-workload-rebuild-transaction.test.ts
  • src/lib/onboard/runtime-provider/mxc.ts
  • src/lib/actions/sandbox/status.test.ts
  • src/lib/onboard/session-bootstrap.test.ts
  • src/lib/onboard/docker-driver-gateway-config.ts
  • src/lib/onboard/resume-config.ts
  • src/lib/actions/sandbox/status-text.ts
  • src/lib/onboard/checkpoint-resume-guard.test.ts
  • src/lib/onboard/runtime-provider/registry.ts
  • src/lib/actions/sandbox/status-flow.test.ts
  • src/lib/onboard/host-mount/host-mount.test.ts
  • docs/manage-sandboxes/workspace-files.mdx
  • src/lib/onboard/runtime-provider/access.ts
  • test/support/status-flow-test-harness.ts
  • src/lib/onboard/host-mount/index.ts
  • src/lib/actions/sandbox/status-snapshot.ts
  • src/lib/onboard/docker-driver-gateway-launch.test.ts
  • src/lib/onboard/session-bootstrap.ts
  • src/lib/state/onboard-session-station-express.test.ts
  • src/lib/onboard/runtime-provider/podman.ts
  • src/lib/onboard/runtime-provider/contract.ts
  • src/lib/onboard/runtime-provider/podman.test.ts
  • src/lib/onboard/runtime-provider/mxc.test.ts
  • src/lib/state/registry.ts
  • src/lib/onboard/runtime-provider/runtime-provider-contract.test.ts

📝 Walkthrough

Walkthrough

The change adds runtime-provider capability checks for read-only host mounts, validates them during onboarding and session preparation, simplifies sandbox state handling, removes obsolete gateway and remote-access behavior, and updates related tests and documentation.

Changes

Sandbox runtime and state changes

Layer / File(s) Summary
Runtime-provider host-mount capability contract
src/lib/onboard/runtime-provider/..., test/helpers/runtime-provider-bundle.ts
Runtime providers now declare read-only host-mount support, supported platforms, or rejection reasons. Registry validation and provider tests cover these capabilities.
Onboarding host-mount validation
docs/manage-sandboxes/workspace-files.mdx, src/lib/onboard/host-mount/..., src/lib/onboard/command.ts, src/lib/onboard/session-bootstrap.ts, src/lib/onboard/*test.ts
Onboarding and session preparation validate host mounts against the selected runtime provider before state changes. Portable profiles and unsupported providers are rejected.
Session and registry state simplification
src/lib/onboard/resume-config.ts, src/lib/state/onboard-session.ts, src/lib/state/onboard-session.test.ts, src/lib/state/registry.ts
Sandbox recovery uses completed session state and default-agent rules. CUA readiness mutation and step-rejection handling are removed. Legacy session normalization tests are added.
Status and gateway cleanup
src/lib/actions/sandbox/..., src/lib/onboard/docker-driver-gateway-*.ts, test/support/status-flow-test-harness.ts
Status output uses persisted host-mount normalization and no longer generates dashboard remote-access guidance. Gateway namespace and Podman socket handling are removed.

Estimated code review effort: 4 (Complex) | ~45 minutes

Merge Risk: 🔵 Low · up to 8415b

Portable host-mount requests may receive a generic Docker-driver error instead of the documented provider-specific diagnostic. The request is still rejected safely, so the PR is mergeable with owner awareness or follow-up to make the delegated validator the sole failure path.

Possibly related PRs

  • NVIDIA/NemoClaw#8920: Both PRs modify Docker gateway configuration and onboarding behavior.
  • NVIDIA/NemoClaw#9010: Both PRs modify runtime-provider admission and host-mount support validation.
  • NVIDIA/NemoClaw#9011: Both PRs cover host-mount onboarding support and Linux/WSL2 validation documentation.

Suggested labels: area: providers, platform: ubuntu

Suggested reviewers: cv, senthilr-nv

Sequence Diagram(s)

sequenceDiagram
  participant User
  participant OnboardCommand
  participant SessionBootstrap
  participant RuntimeProviderRegistry
  participant RuntimeProvider
  User->>OnboardCommand: start onboarding with host mounts
  OnboardCommand->>SessionBootstrap: prepare fresh or resumed session
  SessionBootstrap->>RuntimeProviderRegistry: resolve provider capability
  RuntimeProviderRegistry->>RuntimeProvider: check readOnlyHostMounts and host platform
  RuntimeProvider-->>SessionBootstrap: capability or selection error
  SessionBootstrap-->>OnboardCommand: create or reject session
Loading
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 24.59% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main change: declaring runtime-provider support for host mounts during onboarding.
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/runtime-host-mount-capability-8343

Comment @coderabbitai help to get the list of available commands.

@github-code-quality

github-code-quality Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Overview

Languages: TypeScript

TypeScript / code-coverage/plugin

The overall coverage in commit fa0020a in the feat/runtime-host-mo... branch remains at 96%, unchanged from commit 68323e2 in the main branch.

TypeScript / code-coverage/cli

The overall coverage in commit fa0020a in the feat/runtime-host-mo... branch remains at 82%, unchanged from commit a1ecf39 in the main branch.

Show a code coverage summary of the most impacted files.
File main a1ecf39 feat/runtime-host-mo... fa0020a +/-
src/lib/onboard...der/snapshot.ts 83% 75% -8%
src/lib/onboard...an-preflight.ts 96% 90% -6%
src/lib/onboard...al-inference.ts 85% 80% -5%
src/lib/onboard...press-resume.ts 82% 79% -3%
src/lib/onboard...der/registry.ts 93% 96% +3%
src/lib/state/o...d-checkpoint.ts 86% 90% +4%
src/lib/cua/run...ime-manifest.ts 84% 91% +7%
src/lib/cua/bounded-file.ts 84% 94% +10%
src/lib/agent/candidate.ts 0% 96% +96%
src/lib/agent/c...test-fixture.ts 0% 100% +100%

Updated August 15, 2026 13:20 UTC

Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
@coderabbitai

coderabbitai Bot commented Aug 13, 2026

Copy link
Copy Markdown
Contributor

Note

GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer.

@coderabbitai

coderabbitai Bot commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

Note

GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer.

@prekshivyas prekshivyas left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Reviewed current head 29d0ab3a3e24e306a47f20102d6a109b0d3db6c9.

This PR creates a user-visible runtime-provider host-mount capability contract and canonical support documentation across Docker, Podman, and OpenShell MXC, but it has no linked accepted issue or design decision defining ownership, lifecycle, compatibility, security, and qualification expectations. The repository product-scope gate blocks that supported surface until maintainers establish those decisions.

The effective diff is also stale against current main: it removes unrelated current sandbox-status SSH guidance and associated safety tests while introducing the host-mount changes. Refresh without reverting current behavior. Then either scope the change to an accepted current consumer or record the product decision, and rerun security, behavior, documentation, and required CI review on the resulting exact head.

@senthilr-nv senthilr-nv left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Review of commit 29d0ab3a3e24e306a47f20102d6a109b0d3db6c9: this PR is not approval-ready.

Although the linked issue was accepted, the implementation is stale against current onboarding and gateway behavior. Five required checks are missing, and CodeRabbit still has an unresolved major security finding in src/lib/onboard/docker-driver-gateway-config.ts. The branch also moved relative to main during gate evaluation.

Reconstruct the accepted host-mount behavior from current main, resolve the security finding, add regression evidence for the current gateway lifecycle, and rerun every required gate. Do not mechanically refresh this branch because the surrounding behavior has changed.

@github-actions

Copy link
Copy Markdown
Contributor

@cv
cv dismissed stale reviews from prekshivyas, senthilr-nv, and themself August 15, 2026 13:42

Later signed commits address the findings from this earlier revision. All review threads are resolved, and CI passes for commit fa0020a.

@cv cv left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

I reviewed commit fa0020a. The runtime host mount capability remains within the accepted scope of issue #8343, all review findings are resolved, the documentation receipt is current, and CI passes.

@cv
cv merged commit 2197426 into main Aug 15, 2026
55 checks passed
@cv
cv deleted the feat/runtime-host-mount-capability-8343 branch August 15, 2026 13:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: architecture Architecture, design debt, major refactors, or maintainability area: onboarding Onboarding FSM, provider setup, sandbox launch, or first-run flow area: sandbox OpenShell sandbox lifecycle, runtime, config, or recovery area: security Security controls, permissions, secrets, or hardening feature PR adds or expands user-visible functionality platform: container Affects Docker, containerd, Podman, or images platform: k8s Affects Kubernetes deployments platform: wsl Affects Windows Subsystem for Linux release-target

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Generalize read-only host mounts behind runtime-provider capabilities

5 participants