Skip to content

test(e2e): migrate test-hermes-sandbox-secret-boundary.sh to vitest - #5607

Merged
cv merged 8 commits into
mainfrom
e2e-migrate-test-hermes-sandbox-secret-boundary
Jun 23, 2026
Merged

test(e2e): migrate test-hermes-sandbox-secret-boundary.sh to vitest#5607
cv merged 8 commits into
mainfrom
e2e-migrate-test-hermes-sandbox-secret-boundary

Conversation

@jyaunches

@jyaunches jyaunches commented Jun 22, 2026

Copy link
Copy Markdown
Contributor

Summary

Migrate test/e2e/test-hermes-sandbox-secret-boundary.sh with the simplest equivalent live Vitest coverage.

Related Issues

Refs #5098

Assertion parity

ID Legacy assertion/check Replacement Vitest assertion Boundary preserved Status
A1 Docker CLI and daemon are required; prebuilt image env vars must reference inspectable images. test/e2e-scenario/live/hermes-sandbox-secret-boundary.test.ts calls docker info and docker image inspect through DockerProbe.expect(...). Real Docker daemon/image boundary on ubuntu-latest. covered
A2 Build the real Hermes base/production image unless NEMOCLAW_HERMES_TEST_IMAGE is supplied. buildHermesImageIfNeeded(...) runs docker build -f agents/hermes/Dockerfile.base and docker build -f agents/hermes/Dockerfile --build-arg BASE_IMAGE=.... Real Docker build of Hermes image. covered
A3 Build the managed-tool Hermes image with NEMOCLAW_HERMES_TOOL_GATEWAY_BROKER=1 and managed presets unless NEMOCLAW_HERMES_MANAGED_TEST_IMAGE is supplied. buildManagedImageIfNeeded(...) runs the managed docker build with broker and preset build args. Real Docker build of managed-tool Hermes image. covered
A4 /sandbox/.hermes/.env must be a regular file, not missing or symlinked; /sandbox/.hermes/config.yaml must exist. IMAGE_INSPECTION_SCRIPT and MANAGED_TOOL_INSPECTION_SCRIPT assert file/symlink state inside docker run --entrypoint python3. In-container filesystem. covered
A5 Raw secret-shaped .env keys are forbidden unless allow-listed (API_SERVER_HOST, API_SERVER_PORT), blank, stripped marker, OpenShell resolver, or Slack resolver alias. Both inspection scripts implement the legacy parser and expect exitCode === 0; violations fail with key/line output. In-container Hermes .env parsing. covered
A6 platform_toolsets.api_server must exist, include Hermes remote toolsets, and not include no_mcp. inspectImageBoundary(...) asserts the parsed api_server toolset includes the legacy required set and excludes no_mcp. In-container Hermes config.yaml parsing. covered
A7 Managed-tool image must preserve expected gateway URL env lines and config fragments. inspectManagedToolBoundary(...) checks all required env lines and config fragments. In-container managed-tool env/config. covered
A8 Managed-tool image must not expose TOOL_GATEWAY_USER_TOKEN, NEMOCLAW_HERMES_TOOL_GATEWAY_REFRESH_TOKEN=, or raw-refresh-token in .env/config. MANAGED_TOOL_INSPECTION_SCRIPT rejects those forbidden strings in .env or config.yaml. In-container managed-tool auth boundary. covered
A9 Startup rejects .env raw secret entries DEVTEST_API_TOKEN, INTERNAL_API, and OPENAI_API_KEY=sk-OPENSHELL-PROXY-REWRITE, names the key, mentions raw secret-shaped values, and does not print the raw value. expectStartupRejectsEnvFileEntry(...) runs docker run --user sandbox --entrypoint /bin/bash ... /usr/local/bin/nemoclaw-start true and asserts non-zero exit, message text, key, and value absence. Real nemoclaw-start process inside Hermes image. covered
A10 Startup rejects runtime env raw secret entries DEVTEST_API_TOKEN and NEMOCLAW_HERMES_TOOL_GATEWAY_REFRESH_TOKEN, names the key, mentions process environment, and does not print the raw value. expectStartupRejectsRuntimeEnvEntry(...) runs docker run --user sandbox --env ... --entrypoint /usr/local/bin/nemoclaw-start ... true and asserts non-zero exit, message text, key, and value absence. Real Docker process env + nemoclaw-start. covered
A11 Generated images are uniquely named and cleaned up after the run. The Vitest test uses per-run image tags and CleanupRegistry removes generated images with docker rmi -f. Docker image cleanup/idempotency. covered

All legacy assertions are covered or intentionally stronger in Vitest. No row is missing, partial, or candidate only.

Contract mapping

  • Legacy assertion family: Hermes sandbox image and startup secret boundary.
    • Replacement: test/e2e-scenario/live/hermes-sandbox-secret-boundary.test.ts assertions A1-A11.
    • Boundary preserved: real Docker builds, in-container file/config inspection, and real /usr/local/bin/nemoclaw-start execution.

Simplicity check

  • Test shape: simple live Vitest test.
  • Original runner/lane: nightly-e2e.yaml job hermes-secret-boundary-e2e, reusable e2e-script.yaml, runs-on: ubuntu-latest, 60-minute timeout, Docker required, no app secrets required.
  • Replacement runner: e2e-vitest-scenarios.yaml job hermes-sandbox-secret-boundary-vitest, runs-on: ubuntu-latest, 60-minute timeout.
  • New shared helpers: none; local helpers plus existing DockerProbe/fixtures only.
  • New framework/registry/ledger: none.
  • Workflow changes: add discrete free-standing Vitest job and selector metadata; legacy shell deletion/workflow retirement deferred to Epic: Migrate legacy bash E2E into the Vitest E2E system #5098 Phase 11.
  • Selective dispatch: gh workflow run e2e-vitest-scenarios.yaml --repo NVIDIA/NemoClaw --ref e2e-migrate-test-hermes-sandbox-secret-boundary -f jobs=hermes-sandbox-secret-boundary-vitest -f pr_number=5607.

Pre-push parity gate

  • Legacy script: test/e2e/test-hermes-sandbox-secret-boundary.sh
  • Assertion rows inventoried: 11
  • Covered/stronger rows: 11
  • Missing/partial/candidate-only rows: 0
  • Direct reference only rows: 0
  • Runner/resource boundary matched: yes — nightly-e2e.yaml hermes-secret-boundary-e2e on ubuntu-latest + Docker, replaced by e2e-vitest-scenarios.yaml hermes-sandbox-secret-boundary-vitest on ubuntu-latest + Docker.

Verification

Summary by CodeRabbit

  • Tests

    • Added a Docker-based end-to-end Hermes “secret-boundary” scenario that inspects sandbox/managed-tool image boundaries and confirms startup rejection when secrets are injected via .env or process environment.
    • Enhanced assertions to verify rejection messaging while preventing raw secret values from appearing in stored output; added dedicated DockerProbe secret-hygiene coverage.
    • Added a support test to verify the live scenario correctly maps to the corresponding free-standing Vitest job.
  • Chores

    • Introduced free-standing Hermes Vitest jobs (sandbox, Slack, Discord) and extended PR reporting to include their results.
    • Strengthened e2e workflow boundary validation for secure job setup and artifact publication.

@coderabbitai

coderabbitai Bot commented Jun 22, 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
📝 Walkthrough

Walkthrough

Adds a new hermes-sandbox-secret-boundary-vitest free-standing CI job with a live Vitest e2e test that validates Hermes Docker image boundaries against raw secret values. The test builds Hermes and managed-tool images, inspects configuration files using embedded Python scripts, and verifies startup-time rejection of secrets injected via both .env files and runtime env flags. Extends DockerProbe to support parameterized redaction and raw-result return. Also adds hermes-slack-vitest and hermes-discord-vitest jobs with Docker auth isolation, updates the report-to-pr job to aggregate results from all three, introduces a workflow-boundary validator enforcing job structure and secret prohibition, and includes a dispatch selector support test verifying scenario-to-job routing.

Changes

Hermes Sandbox Secret-Boundary E2E Vitest Job and Free-Standing Hermes Jobs

Layer / File(s) Summary
DockerProbe redaction support and test
test/e2e-scenario/fixtures/docker-probe.ts, test/e2e-scenario/support-tests/docker-probe.test.ts
Adds DockerProbeRunOptions type to support artifactRedactionValues parameter and optional returnRaw flag. Refactors DockerProbe.run to construct raw result, apply redaction using provided values, and return either raw or redacted result based on options. Updates DockerProbe.expect to delegate to run. Adds test verifying returned stderr is unredacted when returnRaw: true, while persisted artifacts remain redacted with [REDACTED] markers.
Live test implementation: inspection scripts and Docker orchestration
test/e2e-scenario/live/hermes-sandbox-secret-boundary.test.ts
Implements live e2e test with test constants (timeouts, sentinel tokens), two embedded Python inspection scripts validating Hermes sandbox .env existence/non-symlink status and secret-shaped value scanning with allowlists, and managed-tool image validation of gateway env lines and forbidden token surfaces. Includes Docker build/reuse helpers for Hermes and managed-tool images with conditional prebuilt image inspection, container-side inspection runners asserting successful exit codes, and startup rejection test helpers for both env-file and runtime-env injection modes with output redaction assertions.
Main live test scenario orchestration
test/e2e-scenario/live/hermes-sandbox-secret-boundary.test.ts
Orchestrates the full scenario: writes scenario.json, conditionally reuses/builds both Hermes image variants based on env vars, inspects image boundaries via Docker container Python inspection, runs startup rejection tests across multiple secret-shaped inputs including raw refresh tokens, and writes scenario-result.json with per-assertion boolean flags and boundary verification results.
Workflow-boundary validator
tools/e2e-scenarios/workflow-boundary.mts
Introduces validateHermesSandboxSecretBoundaryVitestJob enforcing runner (ubuntu-latest), timeout/minutes, required free-standing selector wiring, required env vars (NEMOCLAW_RUN_E2E_SCENARIOS, E2E_ARTIFACT_DIR), forbidden secrets at job and step levels (NVIDIA_INFERENCE_API_KEY, DOCKERHUB_USERNAME, DOCKERHUB_TOKEN), forbidden Docker auth usage, required checkout/setup-node pinning (commit SHAs, persist-credentials: false), Vitest invocation constraints (no ${{ inputs. interpolation), and artifact upload options. Registered in validateE2eVitestScenariosWorkflowBoundary alongside explicit selector validation for hermes-discord-vitest.
CI workflow job definitions and report-to-PR
.github/workflows/e2e-vitest-scenarios.yaml
Adds hermes-sandbox-secret-boundary-vitest job with dispatch-selector if: gate, free-standing env variables, Vitest invocation targeting the live test, and artifact upload to job-specific directory. Adds hermes-slack-vitest and hermes-discord-vitest jobs with Docker auth isolation (DOCKER_CONFIG, Docker Hub authentication with retry/anonymous fallback, cleanup/logout). Updates report-to-pr needs list to include all three new Hermes jobs, ensuring their outcomes appear in the PR comment results table.
Dispatch selector support test
test/e2e-scenario/support-tests/hermes-secret-boundary-workflow.test.ts
Verifies that the hermes-sandbox-secret-boundary scenario maps to the free-standing job hermes-sandbox-secret-boundary-vitest, validates evaluateE2eVitestWorkflowDispatchSelectors returns valid routing and correct job selection for both scenario-based and job-name-based dispatch inputs, and confirms no live scenarios are triggered.

Sequence Diagram

sequenceDiagram
  participant Test as liveTest()
  participant Docker as Docker daemon
  participant HermesImage as Hermes image
  participant ManagedImage as Managed-tool image
  Test->>Docker: build/reuse Hermes image
  Docker->>HermesImage: build with BASE_IMAGE arg
  Test->>Docker: inspect Hermes boundary
  Docker->>HermesImage: run Python inspection script
  HermesImage-->>Docker: exit 0 or 1
  Docker-->>Test: captured exit + stdout/stderr
  Test->>Docker: build/reuse managed image
  Docker->>ManagedImage: build with gateway broker
  Test->>Docker: inspect managed boundary
  Docker->>ManagedImage: run Python inspection script
  ManagedImage-->>Docker: exit 0 or 1
  Test->>Docker: run startup rejection tests
  Docker->>HermesImage: inject secrets via .env or --env
  HermesImage-->>Docker: nemoclaw-start exits non-zero
  Test->>Test: assert category mentioned, key named, no raw value printed
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related issues

  • NVIDIA/NemoClaw#5098: This PR fulfills Phase 7 of the Epic by migrating the Hermes sandbox secret-boundary bash e2e test (test-hermes-sandbox-secret-boundary.sh) into the Vitest e2e system, adding a TypeScript replacement test with Docker-based validation, wiring it into .github/workflows/e2e-vitest-scenarios.yaml, and establishing a workflow-boundary validator—exactly as prescribed by the conversion governance.

Possibly related PRs

  • NVIDIA/NemoClaw#5605: This PR introduces the hermes-slack-vitest free-standing job with Docker auth isolation, artifact upload, and report-to-pr integration, directly overlapping with the same job definition added to the current PR's workflow file.
  • NVIDIA/NemoClaw#5610: This PR adds the hermes-discord-vitest free-standing job with Docker auth setup and workflow-boundary selector validation, directly overlapping with the Discord job definition and selector enforcement in the current PR.

Poem

🐇 A boundary so firm, no secret shall pass,
The .env stands guarded, like stone or like glass.
The Python script checks every key with great care,
If raw tokens lurk—rejection's declared right there!
The bunny hops proudly through CI's green gate,
No secrets in sandbox—the workflow is great! 🎉

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
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 (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main change: migrating a shell-based Hermes sandbox secret boundary test to Vitest.
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.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch e2e-migrate-test-hermes-sandbox-secret-boundary

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

@jyaunches

Copy link
Copy Markdown
Contributor Author

Dispatched same-runner selective Vitest run for hermes-sandbox-secret-boundary-vitest: https://github.com/NVIDIA/NemoClaw/actions/runs/27982738529

@github-code-quality

github-code-quality Bot commented Jun 22, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Overview

Languages: TypeScript

TypeScript / code-coverage/plugin

The overall coverage in the e2e-migrate-test-her... branch is 96%. Coverage data for the main branch is not yet available.

Show a code coverage summary of the most covered files.
File main e2e-migrate-test-her... 7befde6 +/-
nemoclaw/src/se...cret-scanner.ts 100%
nemoclaw/src/commands/slash.ts 100%
nemoclaw/src/li...bprocess-env.ts 100%
nemoclaw/src/bl...eprint/state.ts 98%
nemoclaw/src/onboard/config.ts 98%
nemoclaw/src/bl...int/snapshot.ts 97%
nemoclaw/src/bl...print/runner.ts 95%
nemoclaw/src/co...ration-state.ts 94%
nemoclaw/src/bl...ate-networks.ts 94%
nemoclaw/src/index.ts 94%

TypeScript / code-coverage/cli

The overall coverage in the e2e-migrate-test-her... branch is 46%. Coverage data for the main branch is not yet available.

Show a code coverage summary of the most covered files.
File main e2e-migrate-test-her... 7befde6 +/-
src/lib/state/o...oard-session.ts 91%
src/lib/inference/local.ts 76%
src/lib/sandbox/config.ts 72%
src/lib/actions...dbox/rebuild.ts 67%
src/lib/onboard/preflight.ts 64%
src/lib/actions...licy-channel.ts 56%
src/lib/state/sandbox.ts 55%
src/lib/onboard...er-gpu-patch.ts 50%
src/lib/policy/index.ts 49%
src/lib/onboard.ts 18%

Updated June 23, 2026 06:38 UTC
Code Coverage is in Public Preview. Learn more and provide us with your feedback.

@github-actions

github-actions Bot commented Jun 22, 2026

Copy link
Copy Markdown
Contributor

E2E Advisor Recommendation

Required E2E: hermes-sandbox-secret-boundary
Optional E2E: hermes-root-entrypoint-smoke, rebuild-hermes, diagnostics

Dispatch hint: hermes-sandbox-secret-boundary-vitest

Workflow run

Full advisor summary

E2E Recommendation Advisor

Base: origin/main
Head: HEAD
Confidence: high

Required E2E

  • hermes-sandbox-secret-boundary (high): This PR adds and wires the Hermes sandbox secret-boundary live scenario itself; it should run to prove the new workflow job, Docker image build/inspection path, startup rejection assertions, artifact redaction, and cleanup all work end-to-end.

Optional E2E

  • hermes-root-entrypoint-smoke (medium): Adjacent confidence check for Hermes Docker image build and entrypoint behavior. Useful because the new scenario also builds Hermes images and invokes container entrypoints, but no runtime Hermes source was changed.
  • rebuild-hermes (medium): Optional coverage for Hermes image rebuild flow that shares Docker build assumptions with the new secret-boundary scenario.
  • diagnostics (medium): Optional confidence for Docker-backed artifact/log redaction paths after DockerProbe gained raw-output support with redacted artifacts.

New E2E recommendations

  • None.

Dispatch hint

  • Workflow: .github/workflows/e2e-vitest-scenarios.yaml
  • jobs input: hermes-sandbox-secret-boundary-vitest

@github-actions

github-actions Bot commented Jun 22, 2026

Copy link
Copy Markdown
Contributor

Vitest E2E Scenario Recommendation

Required Vitest E2E scenarios: hermes-sandbox-secret-boundary-vitest
Optional Vitest E2E scenarios: None

Dispatch required Vitest E2E scenarios:

  • gh workflow run e2e-vitest-scenarios.yaml --ref <pr-head-ref> --field jobs=hermes-sandbox-secret-boundary-vitest

Workflow run

Full Vitest E2E advisor summary

Vitest E2E Scenario Advisor

Base: origin/main
Head: HEAD
Confidence: high

Required Vitest E2E scenarios

  • hermes-sandbox-secret-boundary-vitest: Focused free-standing Vitest job wired for changed live test test/e2e-scenario/live/hermes-sandbox-secret-boundary.test.ts.
    • Dispatch: gh workflow run e2e-vitest-scenarios.yaml --ref <pr-head-ref> --field jobs=hermes-sandbox-secret-boundary-vitest

Optional Vitest E2E scenarios

  • None.

Relevant changed files

  • .github/workflows/e2e-vitest-scenarios.yaml
  • test/e2e-scenario/fixtures/docker-probe.ts
  • test/e2e-scenario/live/hermes-sandbox-secret-boundary.test.ts
  • test/e2e-scenario/support-tests/docker-probe.test.ts
  • test/e2e-scenario/support-tests/hermes-secret-boundary-workflow.test.ts
  • tools/e2e-scenarios/workflow-boundary.mts

@github-actions

Copy link
Copy Markdown
Contributor

Vitest E2E Scenario Results — ✅ All requested jobs passed

Run: 27982738529
Workflow ref: e2e-migrate-test-hermes-sandbox-secret-boundary
Requested scenarios: (default — all supported)
Requested jobs: hermes-sandbox-secret-boundary-vitest
Summary: 1 passed, 0 failed, 0 cancelled, 0 skipped

Job Result
hermes-sandbox-secret-boundary-vitest ✅ success

@github-actions

github-actions Bot commented Jun 22, 2026

Copy link
Copy Markdown
Contributor

PR Review Advisor — No blocking findings

Merge posture: No blocking advisor findings
Primary next action: No advisor follow-up required beyond maintainer review.
Open items: 0 required · 0 warnings · 0 suggestions · 0 test follow-ups
Since last review: 1 prior item resolved · 0 still apply · 0 new items found

Workflow run details

This is an automated, non-binding review; it still expects maintainers and agents to respond to each required or warning item. Treat suggestions as current-PR improvements when they touch changed code; defer only with maintainer rationale or a linked follow-up. A human maintainer must make the final merge decision.

@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: 1

🧹 Nitpick comments (1)
test/e2e-scenario/live/hermes-sandbox-secret-boundary.test.ts (1)

22-141: 🧹 Nitpick | 🔵 Trivial | 💤 Low value

Consider extracting shared Python helpers.

The unquote and env_violations functions along with their regex/constant dependencies are duplicated between IMAGE_INSPECTION_SCRIPT and MANAGED_TOOL_INSPECTION_SCRIPT. However, since these are self-contained scripts passed to Docker containers via stdin, consolidation would add complexity (string concatenation or shared module mounting).

Keeping them duplicated but identical is acceptable for this migration—just be aware that future changes to the validation logic need to be applied in both places.

Also applies to: 143-239

🤖 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-scenario/live/hermes-sandbox-secret-boundary.test.ts` around lines
22 - 141, The Python validation helpers and their dependencies (the unquote
function, env_violations function, and regex patterns like secret_key_re,
slack_alias_re, along with constants like allowed_nonsecret_keys and
allowed_literals) are duplicated between IMAGE_INSPECTION_SCRIPT and
MANAGED_TOOL_INSPECTION_SCRIPT. While keeping them duplicated is acceptable for
this migration since these are self-contained Docker scripts, be aware that any
future modifications to the validation logic in either script must be
consistently applied to both IMAGE_INSPECTION_SCRIPT and
MANAGED_TOOL_INSPECTION_SCRIPT to prevent them from diverging and causing
validation inconsistencies.
🤖 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-scenario/live/hermes-sandbox-secret-boundary.test.ts`:
- Line 20: The test file has triggered a conditional complexity guardrail with 7
if statements and ternaries scoring 43 points total. Extract the
environment-dependent conditional logic into separate fixture helper functions
to keep the test code declarative. Create a new fixture file
(test/e2e-scenario/fixtures/hermes-image.ts or similar) and move the
conditionals from lines 20, 261-269, 277, 285, 314, 326, and 517 into helper
functions that return configured values or behaviors (such as a function that
returns whether to skip the test, a function that checks Docker availability and
handles CI vs. local behavior, and a function that determines image build
strategies). Then replace the inline conditionals in the test file with calls to
these helper functions, keeping test bodies focused on assertions rather than
branching logic.

---

Nitpick comments:
In `@test/e2e-scenario/live/hermes-sandbox-secret-boundary.test.ts`:
- Around line 22-141: The Python validation helpers and their dependencies (the
unquote function, env_violations function, and regex patterns like
secret_key_re, slack_alias_re, along with constants like allowed_nonsecret_keys
and allowed_literals) are duplicated between IMAGE_INSPECTION_SCRIPT and
MANAGED_TOOL_INSPECTION_SCRIPT. While keeping them duplicated is acceptable for
this migration since these are self-contained Docker scripts, be aware that any
future modifications to the validation logic in either script must be
consistently applied to both IMAGE_INSPECTION_SCRIPT and
MANAGED_TOOL_INSPECTION_SCRIPT to prevent them from diverging and causing
validation inconsistencies.
🪄 Autofix (Beta)

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: 1999f028-327e-4732-9361-c5eb65bbbb25

📥 Commits

Reviewing files that changed from the base of the PR and between b241036 and 7c8e8e7.

📒 Files selected for processing (4)
  • .github/workflows/e2e-vitest-scenarios.yaml
  • test/e2e-scenario/live/hermes-sandbox-secret-boundary.test.ts
  • test/e2e-scenario/support-tests/hermes-secret-boundary-workflow.test.ts
  • tools/e2e-scenarios/workflow-boundary.mts

Comment thread test/e2e-scenario/live/hermes-sandbox-secret-boundary.test.ts
@github-actions

Copy link
Copy Markdown
Contributor

Vitest E2E Scenario Results — ✅ All requested jobs passed

Run: 27983244409
Workflow ref: e2e-migrate-test-hermes-sandbox-secret-boundary
Requested scenarios: (default — all supported)
Requested jobs: hermes-sandbox-secret-boundary-vitest
Summary: 1 passed, 0 failed, 0 cancelled, 0 skipped

Job Result
hermes-sandbox-secret-boundary-vitest ✅ success

…es-sandbox-secret-boundary

# Conflicts:
#	tools/e2e-scenarios/workflow-boundary.mts
@github-actions

Copy link
Copy Markdown
Contributor

Vitest E2E Scenario Results — ✅ All requested jobs passed

Run: 27995985272
Workflow ref: e2e-migrate-test-hermes-sandbox-secret-boundary
Requested scenarios: (default — all supported)
Requested jobs: hermes-sandbox-secret-boundary-vitest
Summary: 1 passed, 0 failed, 0 cancelled, 0 skipped

Job Result
hermes-sandbox-secret-boundary-vitest ✅ success

@github-actions

Copy link
Copy Markdown
Contributor

Vitest E2E Scenario Results — ✅ All requested jobs passed

Run: 27996805089
Workflow ref: e2e-migrate-test-hermes-sandbox-secret-boundary
Requested scenarios: (default — all supported)
Requested jobs: hermes-sandbox-secret-boundary-vitest
Summary: 1 passed, 0 failed, 0 cancelled, 0 skipped

Job Result
hermes-sandbox-secret-boundary-vitest ✅ success

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

🧹 Nitpick comments (1)
.github/workflows/e2e-vitest-scenarios.yaml (1)

1804-1810: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Inconsistent cleanup variable reference compared to hermes-slack-vitest.

Line 1809 uses "${DOCKER_CONFIG:-}" while the equivalent cleanup in hermes-slack-vitest (line 1661) uses "${DOCKER_CONFIG}". Both approaches work since DOCKER_CONFIG is always set earlier, but standardizing on one pattern improves maintainability.

🔧 Suggested standardization

Choose one pattern for both jobs. The :- variant is slightly more defensive:

-          rm -rf "${DOCKER_CONFIG}"
+          rm -rf "${DOCKER_CONFIG:-}"

Or remove :- from discord to match slack's simpler approach (both work in practice).

🤖 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 @.github/workflows/e2e-vitest-scenarios.yaml around lines 1804 - 1810, The
Docker config variable reference in the "Clean up Docker auth" step uses the
parameter expansion default syntax `"${DOCKER_CONFIG:-}"` while the equivalent
cleanup in the hermes-slack-vitest job uses the simpler `"${DOCKER_CONFIG}"`
pattern. Standardize both cleanup blocks to use the same variable reference
pattern by either removing the `:-` from the current cleanup to match the
simpler approach, or adding `:-` to both for consistency.
🤖 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.

Nitpick comments:
In @.github/workflows/e2e-vitest-scenarios.yaml:
- Around line 1804-1810: The Docker config variable reference in the "Clean up
Docker auth" step uses the parameter expansion default syntax
`"${DOCKER_CONFIG:-}"` while the equivalent cleanup in the hermes-slack-vitest
job uses the simpler `"${DOCKER_CONFIG}"` pattern. Standardize both cleanup
blocks to use the same variable reference pattern by either removing the `:-`
from the current cleanup to match the simpler approach, or adding `:-` to both
for consistency.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: f971c888-2c6b-4600-b832-e913e219c85e

📥 Commits

Reviewing files that changed from the base of the PR and between 4800f80 and f6d2c63.

📒 Files selected for processing (2)
  • .github/workflows/e2e-vitest-scenarios.yaml
  • tools/e2e-scenarios/workflow-boundary.mts
💤 Files with no reviewable changes (1)
  • tools/e2e-scenarios/workflow-boundary.mts

Signed-off-by: Carlos Villela <cvillela@nvidia.com>
@github-actions

Copy link
Copy Markdown
Contributor

Vitest E2E Scenario Results — ✅ All requested jobs passed

Run: 28004252023
Workflow ref: e2e-migrate-test-hermes-sandbox-secret-boundary
Requested scenarios: (default — all supported)
Requested jobs: hermes-sandbox-secret-boundary-vitest
Summary: 1 passed, 0 failed, 0 cancelled, 0 skipped

Job Result
hermes-sandbox-secret-boundary-vitest ✅ success

Signed-off-by: Carlos Villela <cvillela@nvidia.com>
@github-actions

Copy link
Copy Markdown
Contributor

Vitest E2E Scenario Results — ✅ All requested jobs passed

Run: 28005803794
Workflow ref: e2e-migrate-test-hermes-sandbox-secret-boundary
Requested scenarios: (default — all supported)
Requested jobs: hermes-sandbox-secret-boundary-vitest
Summary: 1 passed, 0 failed, 0 cancelled, 0 skipped

Job Result
hermes-sandbox-secret-boundary-vitest ✅ success

Signed-off-by: Carlos Villela <cvillela@nvidia.com>
@github-actions

Copy link
Copy Markdown
Contributor

Vitest E2E Scenario Results — ✅ All requested jobs passed

Run: 28007556800
Workflow ref: e2e-migrate-test-hermes-sandbox-secret-boundary
Requested scenarios: (default — all supported)
Requested jobs: hermes-sandbox-secret-boundary-vitest
Summary: 1 passed, 0 failed, 0 cancelled, 0 skipped

Job Result
hermes-sandbox-secret-boundary-vitest ✅ success

@cv
cv merged commit 95b6627 into main Jun 23, 2026
108 of 109 checks passed
@cv
cv deleted the e2e-migrate-test-hermes-sandbox-secret-boundary branch June 23, 2026 06:50
@cv cv added the v0.0.67 label Jun 23, 2026
@wscurran wscurran added area: ci CI workflows, checks, release automation, or GitHub Actions area: e2e End-to-end tests, nightly failures, or validation infrastructure area: sandbox OpenShell sandbox lifecycle, runtime, config, or recovery chore Build, CI, dependency, or tooling maintenance integration: hermes Hermes integration behavior labels Aug 1, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: ci CI workflows, checks, release automation, or GitHub Actions area: e2e End-to-end tests, nightly failures, or validation infrastructure area: sandbox OpenShell sandbox lifecycle, runtime, config, or recovery chore Build, CI, dependency, or tooling maintenance integration: hermes Hermes integration behavior

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants