Skip to content

refactor(e2e): remove Jetson dispatch backend - #8871

Merged
sandl99 merged 5 commits into
mainfrom
refactor/e2e-remove-jetson-backend
Aug 12, 2026
Merged

refactor(e2e): remove Jetson dispatch backend#8871
sandl99 merged 5 commits into
mainfrom
refactor/e2e-remove-jetson-backend

Conversation

@sandl99

@sandl99 sandl99 commented Aug 12, 2026

Copy link
Copy Markdown
Collaborator

Summary

Remove the Jetson dispatch backend from NemoClaw after the operator-owned service completed recovery and a trusted GitHub proof run. NemoClaw continues to own the GitHub controller, strict versioned HTTP client contract, dispatch receipts, artifacts, and live Jetson target.

The backend is moving to the operator-owned nemoclaw-colossus-jetson-tunnel project. This link records the migration destination for this change; NemoClaw documentation describes the backend as operator-owned infrastructure.

Related Issue

Closes #8142

Changes

  • Remove the dispatch service, worker, lifecycle and cleanup programs, deployment and systemd assets, backend tests, and Colossus operator runbook.
  • Keep the trusted e2e.yaml controller, GitHub OIDC token use, JETSON_DISPATCH_URL, receipt and artifact handling, and jetson-nvmap-gpu live target.
  • Keep contract version 1.0.0 and a static compatibility vector in NemoClaw because the controller cannot depend on an operator backend package at build time. jetson-dispatch-client.test.ts protects every request, status, artifact, OIDC, response-bound, and cancellation behavior at that boundary.
  • Document only the controller-owned HTTP and GitHub configuration surface. Backend deployment, recovery, device lifecycle, and tunnel operation remain operator-owned.

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: Independent Codex CLI review covered the workflow, OIDC client, HTTP validation, receipts, artifacts, and operator-ownership boundary; no blocking findings remain.
  • Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue:

Documentation Writer Review

  • Documentation writer subagent reviewed the completed changes
  • Result: docs-updated
  • Evidence: .agents/skills/nemoclaw-maintainer-e2e/SKILL.md, .github/workflows/e2e.yaml, test/e2e/README.md, test/e2e/docs/README.md, deleted test/e2e/docs/jetson-colossus-dispatch.md, and new test/e2e/docs/jetson-dispatch.md
  • Agent: Codex CLI

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 commit appears as Verified in GitHub
  • Normal pre-commit, commit-msg, and pre-push hooks passed, or npm run validate:pr passed after refreshing origin/main when hooks were skipped or unavailable
  • Targeted behavior tests pass for the current change set, or tests are marked not applicable above — command/result or justification: retained controller, workflow, and artifact boundary 77/77; review repair controller/workflow tests 82/82; maintainer/watch tests 34/34; main-refresh gateway fixture tests 33/33 with one unrelated host-tool skip; CLI type-check passed.
  • Applicable broad gate passed — npm test for broad runtime/test-harness changes; npm run check for repo-wide validation/coverage changes — command/result: full E2E-support reached 2,358 passing tests; three unrelated OpenShell user-service tests failed because this host rejects the untrusted nvidia/openshell Homebrew tap.
  • 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)
  • Doc pages follow the style guide (doc changes only)
  • New doc pages include SPDX header and frontmatter (new pages only)

External rollout proof: GitHub Actions run 31571534932 dispatched candidate 5aaf22b948162d0d697d408f91b2d3b8549860c9 as job e8494d0e5b9a9fb49657cfb92426d9b0d8b31c558bafb45065c2e881507a053f. NemoClaw and job-local OpenShell installation passed, cleanup succeeded, and the run reached the separately scoped /dev/nvmap GID 44 versus 998 failure.


Signed-off-by: San Dang sdang@nvidia.com

Summary by CodeRabbit

  • New Features

    • Added a versioned Jetson Dispatch Controller contract for requests, status updates, artifacts, validation, and size limits.
    • Added support for operator-managed HTTPS Jetson dispatch using repository configuration.
    • Added safeguards for device identity, job matching, response validation, and bounded artifact downloads.
  • Documentation

    • Added setup and contract guidance for the Jetson Dispatch Controller.
    • Updated E2E instructions to use the operator-managed dispatch workflow.
  • Tests

    • Expanded coverage for dispatch requests, polling, artifacts, security, and contract compatibility.

Signed-off-by: San Dang <sdang@nvidia.com>
@sandl99 sandl99 self-assigned this Aug 12, 2026
@coderabbitai

coderabbitai Bot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

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: c1d25b09-0dd3-4248-9ec0-f1aef7fa8bef

📥 Commits

Reviewing files that changed from the base of the PR and between 57e1a30 and 0c06125.

📒 Files selected for processing (2)
  • test/nemoclaw-start-gateway-health.test.ts
  • test/openclaw-2026-7-startup-compat.test.ts

📝 Walkthrough

Walkthrough

The PR replaces Colossus-specific Jetson dispatch with an operator-owned HTTP contract and client. It adds v1 contract fixtures, validation tests, workflow-boundary updates, and operator documentation. It removes the former Colossus deployment, service, worker, lifecycle, and cleanup components.

Changes

Jetson dispatch migration

Layer / File(s) Summary
Versioned dispatch contract and validation
tools/e2e/contracts/v1/jetson-dispatch.json, tools/e2e/jetson-dispatch-contract.mts
Defines contract version 1.0.0, request and response schemas, deterministic job IDs, lifecycle validation, device identity checks, and artifact limits.
Dispatcher client flow and coverage
tools/e2e/jetson-dispatch-client.mts, test/e2e/support/jetson-dispatch-client.test.ts, test/helpers/vitest-watch-triggers.ts, test/vitest-watch-triggers.test.ts
Uses shared parsers, injectable HTTP and token providers, request-bound job validation, polling, cancellation, artifact parsing, and contract-triggered tests.
Workflow boundaries and operator guidance
.github/workflows/e2e.yaml, tools/e2e/workflow-boundary.mts, test/e2e/docs/jetson-dispatch.md, test/e2e/README.md, test/e2e/docs/README.md, .agents/skills/nemoclaw-maintainer-e2e/SKILL.md, test/e2e/support/jetson-workflow-boundary.test.ts, test/maintainer-e2e-skill.test.ts, tools/advisors/risk-plan.mts
Updates Jetson opt-in, HTTPS URL requirements, concurrency and step names, documentation, planning terminology, and boundary tests for the operator-owned backend.
Retired Colossus dispatch path and workflow support
test/e2e/docs/jetson-colossus-dispatch.md, tools/e2e/colossus-jetson-dispatch-deploy.sh, tools/e2e/colossus-jetson-dispatch.environment, tools/e2e/jetson-dispatch-cleanup.sh, tools/e2e/jetson-dispatch-lifecycle.mts, tools/e2e/jetson-dispatch-service.mts, tools/e2e/jetson-dispatch-worker.mts, tools/e2e/nemoclaw-jetson-dispatch.service, test/e2e/support/colossus-jetson-dispatch-deploy.test.ts, test/e2e/support/jetson-dispatch-contract.test.ts, test/e2e/support/jetson-dispatch-worker.test.ts, tools/e2e/cli-artifact-workflow-boundary.mts, test/nemoclaw-start-gateway-marker.test.ts
Removes the Colossus deployment, service, worker, lifecycle, cleanup, and related test harnesses. Refreshes the workflow contract hash and includes the gateway launch helper in an isolated test script.

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

Sequence Diagram(s)

sequenceDiagram
  participant GitHubActions
  participant dispatcherRequest
  participant JetsonDispatchController
  participant JetsonDispatchContract
  GitHubActions->>dispatcherRequest: submit dispatch request
  dispatcherRequest->>JetsonDispatchController: authenticated HTTP request
  JetsonDispatchController-->>dispatcherRequest: queued job status
  dispatcherRequest->>JetsonDispatchController: poll job status
  JetsonDispatchController-->>dispatcherRequest: completed status and artifact
  dispatcherRequest->>JetsonDispatchContract: parse status and artifact
  JetsonDispatchContract-->>GitHubActions: validated dispatch result
Loading

Possibly related PRs

Suggested labels: area: e2e, platform: jetson, area: ci, area: docs, chore

Suggested reviewers: cv, jyaunches

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Out of Scope Changes check ⚠️ Warning Gateway startup test fixture changes are unrelated to Jetson dispatch backend removal and the linked issue objectives. Move the gateway test fixture changes to a separate pull request, or document their direct dependency on this refactor.
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly states that the Jetson dispatch backend is removed, which is the primary change described by the pull request.
Linked Issues check ✅ Passed The PR preserves the controller, versioned contract, trusted workflow, target, receipts, and bounded results while moving backend operations to the operator-owned service [#8142].
✨ 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 refactor/e2e-remove-jetson-backend

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

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

Actionable comments posted: 3

🧹 Nitpick comments (2)
test/e2e/support/jetson-dispatch-client.test.ts (2)

256-276: 🔒 Security & Privacy | 🔵 Trivial | ⚡ Quick win

Cover the streaming byte bound, not only the Content-Length short circuit.

This test sets a Content-Length header of 65537, so it exercises only the header pre-check in dispatcherRequest. dispatcherRequest has a second bound that accumulates responseBytes while reading the body and throws when the total passes maxBytes.

The streaming bound is the branch that matters more. Content-Length comes from the dispatcher, so a backend can omit it; the streaming accumulator is then the only limit. Add a case that returns a body stream with no Content-Length.

💚 Proposed additional case
+  it("rejects an oversized streamed response without Content-Length (`#8142`)", async () => {
+    const chunk = new TextEncoder().encode("x".repeat(4096));
+    const fetchImpl = vi.fn(
+      async () =>
+        new Response(
+          new ReadableStream({
+            pull(controller) {
+              controller.enqueue(chunk);
+            },
+          }),
+          { status: 202 },
+        ),
+    );
+
+    await expect(
+      dispatcherRequest({
+        baseUrl: new URL("https://dispatch.test/"),
+        method: "GET",
+        path: "v1/jobs",
+        maxBytes: 8 * 1024,
+        fetchImpl,
+        tokenProvider: async () => "oidc-token",
+      }),
+    ).rejects.toThrow("Jetson dispatcher response is too large");
+  });
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@test/e2e/support/jetson-dispatch-client.test.ts` around lines 256 - 276,
Extend the dispatcherRequest rejection tests with a case that omits
Content-Length and returns a Response body stream whose accumulated chunks
exceed maxBytes. Assert that reading the stream rejects with "Jetson dispatcher
response is too large", covering the responseBytes enforcement branch rather
than the header pre-check.

57-59: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Assert the rejection reason, not just that an error was thrown.

Lines 58, 103, and 163 use a bare toThrow(). That assertion passes for any thrown error, including one raised for an unintended reason. Two cases are sensitive to this:

  • Line 85 builds {...completedStatus, device: undefined} to test the "successful result must include device identity" rule. requireFields lists device as optional, so the intended error comes from line 257 of tools/e2e/jetson-dispatch-contract.mts. If device were ever dropped from the optional list, the test would still pass on the unknown-field error instead.
  • Line 144 supplies a mismatched expectedJobId. Any earlier validation failure would satisfy the assertion.

The file already uses the stronger form at lines 67 and 133. Add an expected message per case so each test pins the rule it claims to exercise.

♻️ Proposed change for the status cases
   it.each([
     {
       name: "an extra status field",
       value: { ...(vectors.queuedResponse as { job: object }).job, command: "untrusted" },
+      expectedError: "queued Jetson dispatch status fields do not match",
     },
     {
       name: "a successful result without device identity",
       value: { ...(vectors.completedStatus as Record<string, unknown>), device: undefined },
+      expectedError: "successful Jetson dispatch must include device identity",
     },
-  ])("rejects $name (`#8142`)", ({ value }) => {
-    expect(() => parseJetsonDispatchStatus(value)).toThrow();
+  ])("rejects $name (`#8142`)", ({ expectedError, value }) => {
+    expect(() => parseJetsonDispatchStatus(value)).toThrow(expectedError);
   });
As per path instructions: "Flag copied production algorithms, broad mocks that bypass the behavior under test, and conditionals that make a test pass without exercising its claim."

Also applies to: 102-104, 160-164

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@test/e2e/support/jetson-dispatch-client.test.ts` around lines 57 - 59,
Replace the bare toThrow() assertions in the invalidRequests, status, and
mismatched expectedJobId cases with message-specific expectations, matching the
existing stronger assertion style used in the file. Use the exact contract error
message for each scenario so the tests verify the intended validation rule
rather than any unrelated thrown error.

Source: Path instructions

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@test/e2e/README.md`:
- Line 800: Update the sentence describing the `jetson-nvmap-gpu` skip condition
to name the workflow input explicitly as `allow_jetson_dispatch` instead of
referring to “its dispatch flag,” matching the terminology used elsewhere in the
document.

In `@test/maintainer-e2e-skill.test.ts`:
- Line 225: Update the test description for the full dispatch scenario to use
the repository’s established “operator-owned” terminology instead of
“operator-backend,” matching risk-plan.mts and the PR wording.

In `@tools/e2e/jetson-dispatch-contract.mts`:
- Around line 232-240: Update the completed-result validation around the status
conclusion and cleanup membership checks to require the raw values to be strings
before comparing them against the allowed string literals. Remove the
String(...) coercions while preserving the existing cleanup/conclusion
consistency rule, so values later cast into JetsonDispatchStatus remain valid
declared types.

---

Nitpick comments:
In `@test/e2e/support/jetson-dispatch-client.test.ts`:
- Around line 256-276: Extend the dispatcherRequest rejection tests with a case
that omits Content-Length and returns a Response body stream whose accumulated
chunks exceed maxBytes. Assert that reading the stream rejects with "Jetson
dispatcher response is too large", covering the responseBytes enforcement branch
rather than the header pre-check.
- Around line 57-59: Replace the bare toThrow() assertions in the
invalidRequests, status, and mismatched expectedJobId cases with
message-specific expectations, matching the existing stronger assertion style
used in the file. Use the exact contract error message for each scenario so the
tests verify the intended validation rule rather than any unrelated thrown
error.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 71d176fd-e6bd-4bda-a193-49a302ba7d65

📥 Commits

Reviewing files that changed from the base of the PR and between 5aaf22b and 61be40a.

📒 Files selected for processing (27)
  • .agents/skills/nemoclaw-maintainer-e2e/SKILL.md
  • .github/workflows/e2e.yaml
  • test/e2e/README.md
  • test/e2e/docs/README.md
  • test/e2e/docs/jetson-colossus-dispatch.md
  • test/e2e/docs/jetson-dispatch.md
  • test/e2e/support/colossus-jetson-dispatch-deploy.test.ts
  • test/e2e/support/jetson-dispatch-client.test.ts
  • test/e2e/support/jetson-dispatch-contract.test.ts
  • test/e2e/support/jetson-dispatch-worker.test.ts
  • test/e2e/support/jetson-workflow-boundary.test.ts
  • test/helpers/vitest-watch-triggers.ts
  • test/maintainer-e2e-skill.test.ts
  • test/vitest-watch-triggers.test.ts
  • tools/advisors/risk-plan.mts
  • tools/e2e/cli-artifact-workflow-boundary.mts
  • tools/e2e/colossus-jetson-dispatch-deploy.sh
  • tools/e2e/colossus-jetson-dispatch.environment
  • tools/e2e/contracts/v1/jetson-dispatch.json
  • tools/e2e/jetson-dispatch-cleanup.sh
  • tools/e2e/jetson-dispatch-client.mts
  • tools/e2e/jetson-dispatch-contract.mts
  • tools/e2e/jetson-dispatch-lifecycle.mts
  • tools/e2e/jetson-dispatch-service.mts
  • tools/e2e/jetson-dispatch-worker.mts
  • tools/e2e/nemoclaw-jetson-dispatch.service
  • tools/e2e/workflow-boundary.mts
💤 Files with no reviewable changes (11)
  • tools/e2e/nemoclaw-jetson-dispatch.service
  • test/e2e/docs/jetson-colossus-dispatch.md
  • test/e2e/support/jetson-dispatch-worker.test.ts
  • test/e2e/support/jetson-dispatch-contract.test.ts
  • test/e2e/support/colossus-jetson-dispatch-deploy.test.ts
  • tools/e2e/jetson-dispatch-cleanup.sh
  • tools/e2e/jetson-dispatch-worker.mts
  • tools/e2e/jetson-dispatch-lifecycle.mts
  • tools/e2e/colossus-jetson-dispatch.environment
  • tools/e2e/jetson-dispatch-service.mts
  • tools/e2e/colossus-jetson-dispatch-deploy.sh

Comment thread test/e2e/README.md Outdated
Comment thread test/maintainer-e2e-skill.test.ts Outdated
Comment thread tools/e2e/jetson-dispatch-contract.mts
@github-code-quality

github-code-quality Bot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Overview

Languages: TypeScript

TypeScript / code-coverage/plugin

The overall coverage in commit 0c06125 in the refactor/e2e-remove-... branch remains at 96%, unchanged from commit ba0fbfc in the main branch.

TypeScript / code-coverage/cli

The overall coverage in commit 0c06125 in the refactor/e2e-remove-... branch remains at 82%, unchanged from commit 6174550 in the main branch.

Show a code coverage summary of the most impacted files.
File main 6174550 refactor/e2e-remove-... 0c06125 +/-
src/lib/cua/bounded-file.ts 94% 84% -10%
src/lib/actions...er-lifecycle.ts 94% 85% -9%
src/lib/cua/run...ime-manifest.ts 91% 84% -7%
src/lib/cua/contract.ts 87% 80% -7%
src/lib/trace.ts 94% 90% -4%
src/lib/state/o...d-checkpoint.ts 90% 87% -3%
src/lib/onboard...press-resume.ts 78% 81% +3%
src/lib/securit...ntial-filter.ts 91% 95% +4%
src/lib/onboard/dashboard.ts 72% 79% +7%
src/lib/onboard...der/snapshot.ts 75% 83% +8%

Updated August 12, 2026 09:26 UTC

@github-actions

github-actions Bot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

PR Review Advisor — No blocking findings reported

Advisor assessment: No blocking advisor findings reported
Next action: No advisor follow-up needed.
Findings: 0 blockers · 0 warnings · 0 suggestions

Model lanes

  • GPT-5.6 Terra (primary): Completed · high confidence · 0 blockers · 0 warnings · 0 suggestions
  • Nemotron 3 Ultra (second opinion): Completed · low confidence · 0 blockers · 2 warnings · 1 suggestion
  • Model comparison: normalized findings differ; normalized terminology decisions differ; normalized E2E selections match; Nemotron reported the same number of blockers, 2 more warnings, 1 more suggestion.
4 terminology differences from the second opinion

Advisory only. These are normalized differences from the primary terminology receipt.

  • Jetson Dispatch Controller at test/e2e/docs/jetson-dispatch.md:4: primary classified it as define; the second opinion classified it as justified.
  • operator-owned at .agents/skills/nemoclaw-maintainer-e2e/SKILL.md:246: selected only by the second-opinion lane as justified.
  • HTTP contract at test/e2e/docs/jetson-dispatch.md:21: selected only by the second-opinion lane as established.
  • contract version at test/e2e/docs/jetson-dispatch.md:24: selected only by the second-opinion lane as established.

Second-opinion terminology and E2E selections are advisory. Live E2E does not run automatically for pull requests.

3 semantic terminology decisions

Terminology decisions are advisory. They affect the assessment only when a separate finding identifies concrete semantic impact.

  • established — operator-owned at .github/workflows/e2e.yaml:37: Keep `operator-owned` for infrastructure outside NemoClaw lifecycle control.
  • define — Jetson dispatch controller at test/e2e/docs/jetson-dispatch.md:4: Define the term in the controller document and use it consistently in linked guidance.
  • define — compatibility vectors at test/e2e/docs/jetson-dispatch.md:24: Keep the document definition and identify the vectors' contract role and location.

E2E guidance

Advisory only. A maintainer can dispatch the default E2E suite for the commit under review.

Recommended E2E: None

Manual-only E2E: cloud-inference, cloud-onboard, security-posture
The manual PR workflow does not run these selectors for the commit under review. Run them from reviewed code on main.

Workflow run details

This automated review informs maintainers. Warnings and suggestions do not require a response. A maintainer decides whether to merge.

sandl99 and others added 4 commits August 12, 2026 15:21
Signed-off-by: San Dang <sdang@nvidia.com>
Signed-off-by: Charan Jagwani <cjagwani@nvidia.com>
Signed-off-by: Charan Jagwani <cjagwani@nvidia.com>

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

Approved at exact head 0c06125. Reviewed the retained Jetson dispatch contract/client boundary and backend removal, including all nine security categories. The branch is current with main and cleanly mergeable; the repository gate reports all 51 checks green, no unresolved major/critical CodeRabbit findings, DCO present, and all commits Verified. Exact-head PR Review Advisor reports 0 blockers, 0 warnings, and 0 suggestions in the primary lane; the second opinion has no blockers. The two fixture regressions exposed after refreshing from main were fixed and all affected CLI shards now pass.

@sandl99
sandl99 merged commit ac6adac into main Aug 12, 2026
88 of 93 checks passed
@sandl99
sandl99 deleted the refactor/e2e-remove-jetson-backend branch August 12, 2026 10:06
@github-actions github-actions Bot added the v0.0.108 Release target label Aug 12, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

v0.0.108 Release target

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ci(e2e): establish trusted Jetson execution through Colossus-backed dispatch

3 participants