Skip to content

test(e2e): consolidate priority 2 live seams - #7665

Merged
prekshivyas merged 10 commits into
mainfrom
codex/7615-consolidate-live-e2e-seams
Jul 30, 2026
Merged

test(e2e): consolidate priority 2 live seams#7665
prekshivyas merged 10 commits into
mainfrom
codex/7615-consolidate-live-e2e-seams

Conversation

@prekshivyas

@prekshivyas prekshivyas commented Jul 27, 2026

Copy link
Copy Markdown
Collaborator

Summary

Consolidate the Priority 2 live E2E seams after auditing the retained fast and live coverage. This PR stages rebuild-selector retirement without deleting the trusted jobs or live tests: active candidates still run the dedicated live tests, while a follow-up removal can route those selectors to focused compatibility evidence.

Related Issue

Part of #7615

Changes

  • Stage the sandbox-rebuild and upgrade-stale-sandbox retirement. Keep their live jobs and tests in this PR so the trusted main workflow can execute this candidate. Each job classifies the checked-out candidate: it runs the live test while the file exists and defers evidence to focused compatibility replacements after the file is removed. Route the upgrade/rebuild risk-plan floor to rebuild-openclaw.
  • Retire the hosted rows from the OpenClaw and Hermes inference-switch matrices while retaining the Anthropic-compatible transition for each agent.
  • Retire the Hermes Bedrock shard while retaining the OpenClaw adapter, TLS, routing, Converse API, streaming, and credential-leak coverage.
  • Update workflow inventory, reporting, risk-plan, runner-comparison, trusted-swap, mock-parity, and internal E2E documentation contracts.
  • Require the retired-selector bridge to check out the candidate, invoke the replacement helper, and upload immutable compatibility evidence. Mutation tests protect each boundary.

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: No supported product behavior changes. The internal E2E README documents both active and retired selector states.
  • 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: The codebase audit and retained coverage are recorded in #7615. Secret scope, workflow boundaries, runner telemetry, trusted swap, and replacement suites pass their focused checks.
  • 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: test/e2e/README.md; the review verified the legacy-file retirement condition and the active and retired selector behavior. No user-facing docs/, Fern, guide-variant, or AI Markdown-route changes are needed.
  • 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 commit appears as Verified in GitHub
  • Normal pre-commit, commit-msg, and pre-push hooks passed, or npm run check:diff passed when hooks were skipped or unavailable
  • Targeted behavior tests pass for the current change set, or tests are marked not applicable above — justification: 100 focused E2E-support tests and 9 mock-parity tests passed. Semantic-phase coverage found 116 tests across 73 files, and exact Vitest project membership found 1,940 candidates across seven projects. The current-main refresh preserves the reviewed effective patch and passed 100 focused E2E-support tests, 59 focused CLI tests, 9 mock-parity tests, semantic phase coverage, exact project membership, and diff checks.
  • Applicable broad gate passed — npm test for broad runtime/test-harness changes; npm run check for repo-wide validation/coverage changes — command/result: The full E2E-support project completed with 1,816 passed and 12 skipped; five macOS host-specific tests failed in lifecycle-user-service.test.ts and trusted-hermes-swap-workflow-boundary.test.ts. Targeted transition-contract tests pass.
  • 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)

Signed-off-by: Prekshi Vyas prekshiv@nvidia.com

Summary by CodeRabbit

  • New Features

    • Added compatibility handling for transitioning sandbox-rebuild and upgrade-stale-sandbox checks.
    • Added focused replacement testing when legacy E2E checks are retired.
    • Updated rebuild and upgrade planning to use rebuild-openclaw as the canonical check.
  • Bug Fixes

    • Improved recovery for multiple stale sandboxes sharing a route.
    • Prevented hosted credentials from being exposed in Anthropic inference checks.
  • Maintenance

    • Simplified inference and runner-comparison test coverage.
    • Updated E2E validation, workflow safeguards, documentation, and expectations for the revised test matrix.

Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com>
@prekshivyas prekshivyas self-assigned this Jul 27, 2026
@copy-pr-bot

copy-pr-bot Bot commented Jul 27, 2026

Copy link
Copy Markdown

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.

@coderabbitai

coderabbitai Bot commented Jul 27, 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

The PR consolidates E2E coverage by removing hosted inference variants, narrowing Bedrock coverage, restoring standalone rebuild jobs with retirement detection, routing retired selectors through replacement tests, and replacing upgrade-stale-sandbox deterministic coverage with rebuild-openclaw.

Changes

E2E consolidation and compatibility routing

Layer / File(s) Summary
Consolidate live E2E matrices
.github/workflows/e2e.yaml, tools/e2e/*workflow-boundary.mts, test/e2e/support/*workflow-boundary.test.ts, test/pr-e2e-gate-*.test.ts
Inference-switch matrices now use Anthropic mode only, Bedrock runtime-compatible Anthropic runs OpenClaw only, and runner-comparison and trusted-swap contracts reflect the reduced topology.
Route retired selectors through compatibility planning
.github/workflows/e2e.yaml, tools/e2e/retired-selector-compatibility.mts, tools/e2e/workflow-plan.mts, tools/e2e/workflow-boundary.mts, test/e2e/support/*, src/lib/actions/*
Retired job and target selectors are classified, mapped to replacement Vitest projects, filtered from workflow plans, and validated through compatibility workflow checks.
Update deterministic coverage contracts
tools/advisors/risk-plan.mts, test/*risk-plan*.test.ts, test/*recommendations*.test.ts, test/pr-*.test.ts, test/e2e/README.md
Risk-plan version 8 and related expectations replace upgrade-stale-sandbox with rebuild-openclaw, while documentation records the revised routing and telemetry scope.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Sequence Diagram(s)

sequenceDiagram
  participant PRGate
  participant WorkflowPlan
  participant E2EWorkflow
  participant CompatibilityController
  participant ReplacementTests
  PRGate->>WorkflowPlan: submit JOBS and TARGETS
  WorkflowPlan->>CompatibilityController: identify retired selectors
  CompatibilityController->>ReplacementTests: run replacement Vitest projects
  WorkflowPlan->>E2EWorkflow: emit filtered or empty matrix
  E2EWorkflow->>CompatibilityController: execute compatibility workflow
Loading

Possibly related issues

  • NVIDIA/NemoClaw issue 7912: Directly covers the E2E retirements and matrix reductions implemented here.

Possibly related PRs

Suggested labels: refactor

Suggested reviewers: cv, cjagwani, ericksoa

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 3.57% 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 The code changes align with the consolidation goals: rebuild-openclaw is retained, hosted variants are removed, and the Hermes Bedrock row is retired.
Out of Scope Changes check ✅ Passed The changes stay within the E2E consolidation scope, with only supporting tests, workflow logic, and docs updated.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title matches the PR’s main theme of consolidating Priority 2 live E2E seams and retiring overlapping live jobs.
✨ 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 codex/7615-consolidate-live-e2e-seams

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

@github-code-quality

github-code-quality Bot commented Jul 27, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Overview

Languages: TypeScript

TypeScript / code-coverage/plugin

The overall coverage in commit 608a31f in the codex/7615-consolida... branch remains at 96%, unchanged from commit ef32617 in the main branch.

TypeScript / code-coverage/cli

The overall coverage in commit 608a31f in the codex/7615-consolida... branch remains at 81%, unchanged from commit ef32617 in the main branch.

Show a code coverage summary of the most impacted files.
File main ef32617 codex/7615-consolida... 608a31f +/-
src/lib/runtime-recovery.ts 100% 100% 0%
src/lib/sandbox...rce-identity.ts 88% 88% 0%
src/lib/tunnel/services.ts 73% 73% 0%
src/lib/inferen...ompatibility.ts 94% 95% +1%
src/lib/onboard...ndbox-create.ts 83% 91% +8%
src/lib/domain/.../connect-env.ts 89% 97% +8%
src/lib/onboard...-create-plan.ts 75% 88% +13%
src/lib/onboard...ndbox-create.ts 33% 83% +50%

Updated July 30, 2026 22:39 UTC

@github-actions

github-actions Bot commented Jul 27, 2026

Copy link
Copy Markdown
Contributor

PR Review Advisor — No blocking findings reported

Advisor assessment: No blocking advisor findings reported
Next action: Review the warnings below.
Findings: 0 blockers · 1 warning · 0 suggestions

Model lanes

  • GPT-5.6 Terra (primary): Completed · high confidence · 0 blockers · 1 warning · 0 suggestions
  • Nemotron 3 Ultra (second opinion): Completed · high confidence · 0 blockers · 0 warnings · 0 suggestions
  • Model comparison: normalized findings differ; normalized E2E selections differ; Nemotron reported the same number of blockers, 1 fewer warning, the same number of suggestions.

Nemotron output stays in workflow artifacts and does not change the assessment above.

E2E guidance

Advisory only. E2E / PR Gate selects and runs jobs independently.

Recommended E2E: cloud-inference, cloud-onboard, security-posture, inference-routing, network-policy

1 warning · 0 suggestions

Warnings

Warnings do not block.

PRA-1 Warning — Define when to remove the retired-selector compatibility layer

  • Location: test/e2e/README.md:91
  • Category: architecture
  • Problem: The selector transition documents when the controller runs, but not the condition that ends this temporary compatibility path.
  • Impact: The workflow can retain obsolete selector routing and replacement mappings after the migration, which increases the trusted E2E control-plane surface and can conceal that callers still use retired selectors.
  • Recommendation: State a measurable removal condition for the compatibility job, selector mappings, and candidate-file guards. Remove the layer when that condition is met.
  • Verification: Read test/e2e/README.md and tools/e2e/retired-selector-compatibility.mts together to confirm that the transition names no end condition.
  • Test coverage: Add a workflow-boundary or helper test that encodes the documented removal criterion and rejects retaining the compatibility mapping after it is satisfied.
  • Evidence: test/e2e/README.md: the new "Retired selector transition" section describes the file-absence fallback and canonical target but gives no removal condition. tools/e2e/retired-selector-compatibility.mts:85-125 defines replacements for sandbox-rebuild and upgrade-stale-sandbox. tools/e2e/retired-selector-compatibility.mts:196-219 verifies only file retirement and replacement-test existence; it has no retirement condition for the compatibility layer.

Workflow run details

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

Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com>
Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com>
Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com>
@wscurran wscurran added area: ci CI workflows, checks, release automation, or GitHub Actions area: e2e End-to-end tests, nightly failures, or validation infrastructure chore Build, CI, dependency, or tooling maintenance labels Jul 28, 2026
@prekshivyas
prekshivyas marked this pull request as ready for review July 30, 2026 16:56

@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)
test/e2e/support/retired-selector-compatibility-workflow-boundary.test.ts (1)

43-49: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Optional: derive the removed gate fragment from the exported allowlist.

The hard-coded inputs.targets fragment mirrors the generator in tools/e2e/workflow-boundary.mts (Line 4095-4097). Building it from RETIRED_CONTROLLER_TARGET_SELECTOR_IDS keeps the mutation valid if the allowlist is reordered or extended.

🤖 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/retired-selector-compatibility-workflow-boundary.test.ts`
around lines 43 - 49, Optionally update the mutate callback for the
retired-selector compatibility workflow to derive the removed selector gate from
the exported RETIRED_CONTROLLER_TARGET_SELECTOR_IDS allowlist instead of
hard-coding the upgrade-stale-sandbox fragment. Preserve the existing job.if
mutation while generating the matching targets expression from the allowlist so
reordered or newly added IDs remain synchronized.
🤖 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 `@test/e2e/support/retired-selector-compatibility-workflow-boundary.test.ts`:
- Around line 43-49: Optionally update the mutate callback for the
retired-selector compatibility workflow to derive the removed selector gate from
the exported RETIRED_CONTROLLER_TARGET_SELECTOR_IDS allowlist instead of
hard-coding the upgrade-stale-sandbox fragment. Preserve the existing job.if
mutation while generating the matching targets expression from the allowlist so
reordered or newly added IDs remain synchronized.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 5ebae834-f002-402a-82e6-7beadb85ded9

📥 Commits

Reviewing files that changed from the base of the PR and between 0b722a4 and a176245.

📒 Files selected for processing (27)
  • .github/workflows/e2e.yaml
  • test/e2e-recommendations.test.ts
  • test/e2e/README.md
  • test/e2e/live/sandbox-rebuild.test.ts
  • test/e2e/live/upgrade-stale-sandbox-helpers.ts
  • test/e2e/live/upgrade-stale-sandbox.test.ts
  • test/e2e/mock-parity.json
  • test/e2e/support/e2e-workflow.test.ts
  • test/e2e/support/inference-switch-workflow-boundary.test.ts
  • test/e2e/support/retired-selector-compatibility-workflow-boundary.test.ts
  • test/e2e/support/retired-selector-compatibility.test.ts
  • test/e2e/support/runner-comparison-workflow-boundary.test.ts
  • test/e2e/support/trusted-hermes-swap-workflow-boundary.test.ts
  • test/e2e/support/workflow-plan.test.ts
  • test/pr-e2e-gate-shards.test.ts
  • test/pr-e2e-gate-signal-shards.test.ts
  • test/pr-e2e-gate.test.ts
  • test/pr-review-advisor-security-boundaries.test.ts
  • test/pr-review-advisor.test.ts
  • test/pr-risk-plan.test.ts
  • tools/advisors/risk-plan.mts
  • tools/e2e/inference-switch-workflow-boundary.mts
  • tools/e2e/retired-selector-compatibility.mts
  • tools/e2e/runner-comparison-workflow-boundary.mts
  • tools/e2e/trusted-hermes-swap-workflow-boundary.mts
  • tools/e2e/workflow-boundary.mts
  • tools/e2e/workflow-plan.mts
💤 Files with no reviewable changes (6)
  • test/e2e/live/upgrade-stale-sandbox.test.ts
  • test/e2e/live/sandbox-rebuild.test.ts
  • tools/e2e/trusted-hermes-swap-workflow-boundary.mts
  • test/e2e/mock-parity.json
  • test/e2e/support/trusted-hermes-swap-workflow-boundary.test.ts
  • test/e2e/live/upgrade-stale-sandbox-helpers.ts

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

Reviewed at PR SHA a176245 (base 0b722a4).

PR findings: no blocking code defect found. The retired selector bridge remains bound to the controller-selected SHA, validates selector syntax, checks out the candidate without persisted credentials, runs the declared replacement suites, and emits exact-head risk signals. The retained rebuild-openclaw live test preserves the old-image rebuild, state, policy, token-rotation, and backup credential-leak boundaries. No new dependency or secret exposure was introduced.

Product-scope verdict: not triggered. This PR changes internal E2E topology and does not create or expand a supported product surface.

Design status, separate from product scope: approval is withheld because linked issue #7615 still carries needs: design. Its canonical-seam comment calls the design proposed and asks maintainers to confirm it. Repository policy defines needs:* as a blocked action. A maintainer must record acceptance of the proposed seam ownership (or the required revision) and remove needs: design when that action is complete. No PR code change is requested for this point.

GitHub merge state, separate from both verdicts: GitHub reports BLOCKED while E2E / PR Gate and E2E / PR Gate Coordination remain IN_PROGRESS. The author must get both checks to a terminal passing result, or record an itemized maintainer exception in the PR template if repository policy permits a non-success result.

Exact-head focused validation:

  • 146 changed E2E-support tests passed.
  • 62 CLI replacement tests passed.
  • 11 affected upgrade-sandboxes integration tests passed; the other focused integration suites also passed.
  • CLI type-checking passed.
  • Semantic E2E phase coverage passed: 112 tests across 71 files.
  • Vitest membership is exact: 1,862 files across 8 projects.
  • Repository checks passed.
  • DCO passed, and all four commits are GitHub Verified.
  • Independent documentation-writer review found no blocking documentation or writing issue; no user-facing docs change is required.

The automated PRA-1 compatibility-lifetime warning is advisory. The current trusted-main controller is the named consumer; the removal boundary can be recorded with the design decision.

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

Approved at PR SHA a176245dc.

Maintainer design acceptance is recorded on #7615, and the needs: design action is resolved. Product scope is not triggered: this PR changes internal E2E test topology and does not create or expand a supported product surface.

No blocking code, security, documentation, or cross-issue findings remain. Exact-head focused checks passed locally, the DCO check passes, and all commits are GitHub Verified.

GitHub's BLOCKED merge state is separate from this approval. The author must resolve E2E / PR Gate and E2E / PR Gate Coordination, or record an itemized maintainer exception if repository policy permits it.

@prekshivyas
prekshivyas enabled auto-merge (squash) July 30, 2026 18:29
@prekshivyas
prekshivyas disabled auto-merge July 30, 2026 18:58
Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com>
@prekshivyas
prekshivyas enabled auto-merge (squash) July 30, 2026 19:21

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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
.github/workflows/e2e.yaml (1)

2060-2090: 🔒 Security & Privacy | 🔴 Critical | 🏗️ Heavy lift

Do not expose repository secrets to the candidate checkout.

This job can check out PR-controlled code and execute it with NVIDIA_INFERENCE_API_KEY in the environment. A malicious PR can modify the helper/test and exfiltrate the key. Restrict this lane to trusted main revisions and route PR coverage through a secret-free replacement or trusted pinned helper.

As per path instructions, trusted workflows must not execute PR-controlled code while holding base-repository secrets or write permissions.

🤖 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.yaml around lines 2060 - 2090, Restrict the
dashboard-remote-bind job’s secret-bearing execution to trusted main-repository
revisions instead of PR-controlled checkouts. Update the job around “Run
dashboard remote-bind live test” so NVIDIA_INFERENCE_API_KEY is not exposed when
checkout uses inputs.checkout_repository or inputs.checkout_sha, and route PR
coverage through an existing secret-free path or trusted pinned helper while
preserving trusted main execution.

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.

Outside diff comments:
In @.github/workflows/e2e.yaml:
- Around line 2060-2090: Restrict the dashboard-remote-bind job’s secret-bearing
execution to trusted main-repository revisions instead of PR-controlled
checkouts. Update the job around “Run dashboard remote-bind live test” so
NVIDIA_INFERENCE_API_KEY is not exposed when checkout uses
inputs.checkout_repository or inputs.checkout_sha, and route PR coverage through
an existing secret-free path or trusted pinned helper while preserving trusted
main execution.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 32795fad-d9a5-4584-bcdf-4d4c6b878a38

📥 Commits

Reviewing files that changed from the base of the PR and between a176245 and d2b7c8f.

📒 Files selected for processing (1)
  • .github/workflows/e2e.yaml

Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com>

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

Approved at PR SHA d2b7c8f.

PR verdict: no blocking code, security, documentation, or cross-issue finding. The merge commit has parents a176245dc and 1ce71fa0f. Its conflict resolution keeps sandbox-rebuild and upgrade-stale-sandbox retired, preserves their controller-selector compatibility path, and retains rebuild-openclaw as the upgrade/rebuild risk target. Product scope remains not triggered; this PR changes internal E2E topology and does not create or expand a supported product surface. The accepted design decision remains recorded in #7615.

Exact-head focused checks passed:

  • CLI build and type-checking.
  • 147 focused E2E-support tests.
  • 184 focused integration tests.
  • Semantic E2E phase coverage: 114 tests across 71 files.
  • Exact Vitest membership: 1,931 files across 7 projects.
  • Diff and conflict-marker checks.
  • Independent documentation writer review; the receipt matches d2b7c8f73 and AGENTS blob c052d60aa.
  • DCO and GitHub verification for the new merge commit.

The CodeRabbit dashboard-remote-bind secret finding is outside this PR's effective diff. Those lines are identical in base 1ce71fa0f and head d2b7c8f, with history at 3aea38c4cb; #7665 neither introduces nor modifies that job. Track that base-branch security concern separately.

GitHub merge state, separate from this PR approval: BLOCKED.

  • E2E / PR Gate and E2E / PR Gate Coordination failed because the trusted base workflow selected sandbox-rebuild and upgrade-stale-sandbox, checked out d2b7c8f, and then found neither retired test file. The author must revise the transition so the required checks pass, or obtain and record an itemized maintainer exception in the PR Quality Gates section for both non-success results.
  • PR review advisor (Nemotron 3 Ultra) failed before analysis because inference configuration did not complete. The author must rerun or otherwise resolve that check.

This approval does not waive those GitHub blockers.

@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

🤖 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 `@src/lib/actions/upgrade-sandboxes-recovery.test.ts`:
- Around line 345-365: Remove the direct commitRebuildRoutePreflight call from
the harness.rebuildSpy mock. Update the test to verify that upgradeSandboxes
forwards the expected rebuild arguments through the production rebuild wiring,
using an injectable state boundary; cover preflight/migration behavior
separately rather than executing it inside the test double.
🪄 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: 19d473f1-d8f9-4419-bc26-ad5ca07c114a

📥 Commits

Reviewing files that changed from the base of the PR and between d2b7c8f and 62bdeb9.

📒 Files selected for processing (3)
  • src/lib/actions/upgrade-sandboxes-recovery.test.ts
  • test/e2e/support/retired-selector-compatibility.test.ts
  • tools/e2e/retired-selector-compatibility.mts

Comment thread src/lib/actions/upgrade-sandboxes-recovery.test.ts Outdated

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

Re-reviewed and approved at exact PR SHA 62bdeb9de53801be59bc89943d20f266704e950a.

This record supersedes the preceding approval text, which raced with the latest push and named d2b7c8f even though GitHub attached that review event to 62bdeb9.

No blocking PR finding remains. The latest commit adds behavior-oriented coverage for two stale sandboxes that share a route, verifies canonical credential-identity migration across the batch, and includes that suite in the upgrade-stale-sandbox retired-selector replacement. It does not change production behavior or product scope.

Latest-delta checks passed:

  • src/lib/actions/upgrade-sandboxes-recovery.test.ts: 38 CLI tests.
  • test/e2e/support/retired-selector-compatibility.test.ts: 5 E2E-support tests.
  • CLI type-checking.
  • Diff validation.
  • Independent documentation writer review; the receipt matches 62bdeb9de5 and AGENTS blob c052d60aa.
  • DCO and GitHub commit verification.

Product-scope verdict: not triggered. The accepted internal E2E seam design remains recorded in #7615.

GitHub merge state remains separate from this approval. The author must obtain passing required checks or record an itemized maintainer exception for each permitted non-success result. This approval does not waive any GitHub check.

Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com>

@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

🤖 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 `@src/lib/actions/upgrade-sandboxes-recovery.test.ts`:
- Around line 318-325: Add an exact call-count assertion for harness.rebuildSpy
in the test covering the --auto recovery flow, requiring exactly two rebuilds in
addition to the existing toHaveBeenNthCalledWith checks. Keep the assertions at
the public behavioral boundary and preserve the existing argument validation.
🪄 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: 50c1a6fc-8d47-428b-a5e7-1b67a54b0526

📥 Commits

Reviewing files that changed from the base of the PR and between 62bdeb9 and c193e47.

📒 Files selected for processing (4)
  • src/lib/actions/sandbox/rebuild-route-preflight.test.ts
  • src/lib/actions/upgrade-sandboxes-recovery.test.ts
  • test/e2e/support/retired-selector-compatibility.test.ts
  • tools/e2e/retired-selector-compatibility.mts

Comment thread src/lib/actions/upgrade-sandboxes-recovery.test.ts
prekshivyas added a commit that referenced this pull request Jul 30, 2026
# Conflicts:
#	.github/workflows/e2e.yaml
#	test/e2e/live/upgrade-stale-sandbox-helpers.ts
#	test/e2e/live/upgrade-stale-sandbox.test.ts
#	test/e2e/support/workflow-plan.test.ts
#	tools/e2e/workflow-boundary.mts
prekshivyas added a commit that referenced this pull request Jul 30, 2026
@prekshivyas
prekshivyas merged commit 818a62f into main Jul 30, 2026
88 of 94 checks passed
@prekshivyas
prekshivyas deleted the codex/7615-consolidate-live-e2e-seams branch July 30, 2026 22:51
prekshivyas added a commit that referenced this pull request Jul 30, 2026
# Conflicts:
#	.github/workflows/e2e.yaml
#	test/e2e/README.md
#	test/e2e/support/retired-selector-compatibility-workflow-boundary.test.ts
#	test/e2e/support/workflow-plan.test.ts
#	tools/e2e/inference-switch-workflow-boundary.mts
#	tools/e2e/workflow-boundary.mts
#	tools/e2e/workflow-plan.mts
prekshivyas added a commit that referenced this pull request Jul 30, 2026
<!-- markdownlint-disable MD041 -->
## Summary

Reduce retained E2E cost without changing the workflow schedule or lane
structure, and finalize the rebuild-selector retirement staged by #7665.
This PR deletes the `sandbox-rebuild` and `upgrade-stale-sandbox` live
jobs and tests after the compatibility controller and focused
replacement coverage land in #7665.

This PR builds on #7665, merged as `818a62f2b`.

The trusted E2E workflow keeps its existing daily `0 0 * * *` schedule
and its single five-row `openshell-gateway-upgrade` job unchanged.

## Related Issue

Fixes #7615
Fixes #7917
Fixes #7921


## Changes

- Delete the `sandbox-rebuild` and `upgrade-stale-sandbox` workflow
jobs, live tests, helper, mock-parity entries, and job-specific workflow
validators. Keep their job and target selectors routed through the
compatibility controller to focused rebuild, route-preflight,
batch-upgrade, and integration replacements. `rebuild-openclaw` remains
the canonical live rebuild and upgrade target.
- Stop `openclaw-plugin-runtime-exdev` after the v2 recreate and
cross-device probe instead of repeating the same state-replacement
boundary with a v3 rebuild. The lifecycle command helper lets the
`e2e-support` test protect the retained onboard, restart, and recreate
sequence without a live runner;
`openclaw-plugin-runtime-exdev-fixture.test.ts` verifies that command
map on the current source-aware fixture boundary.
- Map workflow-wired live tests and their owning helpers to canonical
focused jobs, leave `test/e2e/support/` changes in PR CI, and preserve
the broad cloud floor for unknown, renamed, security, workflow, or
shared-tool paths. The risk-plan and workflow-inventory tests cover
additions, renames, support-only changes, owning helpers, and
cross-cutting changes.
- Let trusted controller selections containing only retired job IDs emit
an empty live plan so the compatibility job can verify their
replacements; per-selector tests protect both retired job paths.
- Reject step-scoped `NEMOCLAW_E2E_USE_HOSTED_INFERENCE` overrides in
the inference-switch workflow boundary, with focused regression
coverage.
- Preserve the existing daily workflow schedule and the existing single
`openshell-gateway-upgrade` lane with all five migration rows.
- Document retired-selector compatibility, the retained EXDEV lifecycle,
and changed-area selection in `test/e2e/README.md`.

## Type of Change

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

## Quality Gates

- [x] Tests added or updated for changed behavior
- [ ] Existing tests cover changed behavior — justification:
- [ ] Tests not applicable — justification:
- [ ] Docs updated for user-facing behavior changes
- [x] Docs not applicable — justification: No supported product behavior
changes. The internal E2E README documents the retired selectors and
retained topology.
- [x] Sensitive paths changed (security, policy, credentials, preflight,
onboarding, inference, runner, sandbox, or messaging)
- [x] Sensitive-path review completed or maintainer-approved waiver
recorded — reviewer/approval link/justification: A maintainer approved
the stacked E2E optimization and #7665 transition. The current merge
preserves the reviewed compatibility boundaries, and their focused
security/workflow tests pass.
- [ ] Non-success, skipped, or missing CI check accepted by maintainer —
check name, approval link, and follow-up issue: No waiver requested.

## Documentation Writer Review

- [x] Documentation writer subagent reviewed the completed changes
- Result: `docs-updated`
- Evidence: `test/e2e/README.md`; the review verified retired-selector
compatibility, `rebuild-openclaw` as the canonical target, the retained
EXDEV lifecycle, focused PR-gate selection, and explanatory text across
the full diff. No user-facing Fern or AI-route documentation is
required.
- Agent: Codex Desktop
<!-- docs-review-head-sha: c579d39 -->
<!-- docs-review-agents-blob-sha: c052d60 -->

## DGX Station Hardware Evidence

- [ ] Tested on DGX Station
- Tested commit: Not applicable.
- Station profile/scenario: Not applicable.
- Result: Not applicable.
- Supporting evidence: Not applicable.

## Verification

- [x] PR description includes a `Signed-off-by:` line and every commit
appears as `Verified` in GitHub
- [x] 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
- [x] Targeted behavior tests pass for the current change set, or tests
are marked not applicable above — command/result or justification: The
post-#7665 resolved state passed 59 focused CLI tests, 99 focused
E2E-support tests, and 9 mock-parity integration tests. The inherited
Launchable integration passed 5/5 with a 30-second local macOS timeout.
Semantic E2E phase coverage found 114 tests across 71 files, exact
Vitest membership found 1,938 files across seven projects, repository
checks passed, and merge hooks passed.
- [ ] Applicable broad gate passed — `npm test` for broad
runtime/test-harness changes; `npm run check` for repo-wide
validation/coverage changes — command/result: Earlier full E2E-support
diagnostics on the stacked changes passed more than 1,800 tests, with
known macOS timing/systemd fixture failures under high parallelism. The
directly affected combined subset passes 92/92.
- [x] Quality Gates section completed with required justifications or
waivers
- [x] No secrets, API keys, or credentials committed
- [ ] `npm run docs` builds without warnings (doc changes only)
- [ ] Doc pages follow the [style
guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md)
(doc changes only)
- [ ] New doc pages include SPDX header and frontmatter (new pages only)

---
Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com>


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Added/updated current OpenClaw plugin runtime lifecycle coverage in
E2E (onboarding, restart, and sandbox recreation).
* Expanded retired-selector compatibility to support target-based
selection and broader replacement coverage.
* **Bug Fixes**
* Updated deterministic risk-plan and PR E2E recommendations to use
`rebuild-openclaw` as the coverage floor.
* Tightened “canonical” Anthropic-compatible inference/mode validation
and reduced hosted coverage.
* **Refactor**
* Removed obsolete E2E live lanes/tests for sandbox rebuild and
stale-sandbox upgrade.
* **Documentation**
* Refreshed E2E operational docs for retired selector compatibility and
updated runner routing/telemetry expectations.
* **Tests**
* Updated and added E2E and workflow boundary tests to match revised
gates and expected job/shard mappings.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Co-authored-by: Apurv Kumaria <akumaria@nvidia.com>
@sandl99 sandl99 mentioned this pull request Jul 31, 2026
23 tasks
sandl99 added a commit that referenced this pull request Jul 31, 2026
<!-- markdownlint-disable MD041 -->
## Summary

Adds the canonical July 30 release entry for `v0.0.99` before the
release tag is captured.
The entry covers all 37 merged PRs since `v0.0.98` and bounds
experimental or dormant work without presenting it as supported
behavior.

## Changes

- Adds `docs/changelog/2026-07-30.mdx` with the exact `## v0.0.99`
heading, parser-safe MDX SPDX comment, summary, detailed release
bullets, and published documentation routes.
- Records user-visible recovery, snapshot, shared-route, Hermes,
readiness, inference, image, documentation, and release E2E changes.
- States that the managed-image selection and startup-profile contracts
remain dormant and do not activate buildless onboarding.

Source summary:

- [#7972](#7972) ->
`docs/changelog/2026-07-30.mdx`: Records restored managed OpenClaw
configuration modes during recovery.
- [#7834](#7834) ->
`docs/changelog/2026-07-30.mdx`: Records clone-bound pairing
verification after snapshot restore.
- [#7975](#7975) ->
`docs/changelog/2026-07-30.mdx`: Records managed startup recovery
coverage.
- [#7960](#7960) ->
`docs/changelog/2026-07-30.mdx`: Records dormant startup-profile
coordination without activating a supported surface.
- [#7856](#7856) ->
`docs/changelog/2026-07-30.mdx`: Records persistence of the
credential-free OpenClaw startup command.
- [#7959](#7959) ->
`docs/changelog/2026-07-30.mdx`: Records dormant startup-profile
construction without changing onboarding.
- [#7946](#7946) ->
`docs/changelog/2026-07-30.mdx`: Records the internal startup-profile
schema and transport contract.
- [#7951](#7951) ->
`docs/changelog/2026-07-30.mdx`: Records platform-pull cleanup before
managed-image validation.
- [#7949](#7949) ->
`docs/changelog/2026-07-30.mdx`: Records rejection of retained Hermes
`uv` build cache metadata.
- [#7597](#7597) ->
`docs/changelog/2026-07-30.mdx`: Records separate command and agent
first-turn latency evidence.
- [#7931](#7931) ->
`docs/changelog/2026-07-30.mdx`: Records focused E2E replacement
evidence for retired selectors.
- [#7950](#7950) ->
`docs/changelog/2026-07-30.mdx`: Records exclusion of build-only
BuildKit telemetry from the Deep Agents Code probe.
- [#7665](#7665) ->
`docs/changelog/2026-07-30.mdx`: Records consolidated priority 2 E2E
coverage.
- [#7911](#7911) ->
`docs/changelog/2026-07-30.mdx`: Records the corrected NVIDIA DORI
installation pin.
- [#7934](#7934) ->
`docs/changelog/2026-07-30.mdx`: Records the staging image-family wait
before Brev Launchable deployment.
- [#7772](#7772) ->
`docs/changelog/2026-07-30.mdx`: Records dormant managed-image selection
contracts without activating buildless onboarding.
- [#7941](#7941) ->
`docs/changelog/2026-07-30.mdx`: Records corrected agent-specific
provider and policy guidance.
- [#7819](#7819) ->
`docs/changelog/2026-07-30.mdx`: Records removal of empty Deep Agents
Code provider-switch sections.
- [#7932](#7932) ->
`docs/changelog/2026-07-30.mdx`: Records independent
credential-generation E2E execution.
- [#7840](#7840) ->
`docs/changelog/2026-07-30.mdx`: Records shared-route preservation and
pre-delete peer validation during upgrades.
- [#7874](#7874) ->
`docs/changelog/2026-07-30.mdx`: Records the split between pre-tag
release entries and post-tag Announcements.
- [#7876](#7876) ->
`docs/changelog/2026-07-30.mdx`: Records the writable Hermes runtime
root within lockdown.
- [#7756](#7756) ->
`docs/changelog/2026-07-30.mdx`: Records validated multi-platform
managed-image publication.
- [#7914](#7914) ->
`docs/changelog/2026-07-30.mdx`: Records accepted `uv` version metadata
in Hermes image validation.
- [#7686](#7686) ->
`docs/changelog/2026-07-30.mdx`: Records the explicitly experimental
Microsoft Entra runtime identity reference.
- [#7869](#7869) ->
`docs/changelog/2026-07-30.mdx`: Records classified gateway relaunch
quarantine and rebuild guidance.
- [#7814](#7814) ->
`docs/changelog/2026-07-30.mdx`: Records state restore into replacement
sandboxes and SQLite write verification.
- [#7839](#7839) ->
`docs/changelog/2026-07-30.mdx`: Records quieter onboarding test
execution without a user-facing behavior claim.
- [#7854](#7854) ->
`docs/changelog/2026-07-30.mdx`: Records generalized agent-selection
guidance.
- [#7845](#7845) ->
`docs/changelog/2026-07-30.mdx`: Records isolated CDI test evidence
without a user-facing behavior claim.
- [#7843](#7843) ->
`docs/changelog/2026-07-30.mdx`: Records the corrected Omni sub-agent
model ID.
- [#7908](#7908) ->
`docs/changelog/2026-07-30.mdx`: Records reviewed Hermes and Deep Agents
Code dependency pins.
- [#7887](#7887) ->
`docs/changelog/2026-07-30.mdx`: Records rejection of a symlinked DGX
Station release marker.
- [#7747](#7747) ->
`docs/changelog/2026-07-30.mdx`: Records the internal compute-driver
separation without a user-facing behavior claim.
- [#7660](#7660) ->
`docs/changelog/2026-07-30.mdx`: Records atomic publication of rebuild
recovery manifests.
- [#7661](#7661) ->
`docs/changelog/2026-07-30.mdx`: Records bounded local inference
health-response retention.
- [#7654](#7654) ->
`docs/changelog/2026-07-30.mdx`: Records state preservation across
supervisor relaunch recovery.

## Type of Change

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

## Quality Gates

- [ ] Tests added or updated for changed behavior
- [x] Existing tests cover changed behavior — justification:
`test/changelog-docs.test.ts` validates the dated changelog contract,
SPDX comment, version heading, and published routes.
- [ ] Tests not applicable — justification:
- [x] 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:
- [ ] Non-success, skipped, or missing CI check accepted by maintainer —
check name, approval link, and follow-up issue:

## Documentation Writer Review

- [x] Documentation writer subagent reviewed the completed changes
- Result: `docs-updated`
- Evidence: `docs/changelog/2026-07-30.mdx`; the documentation-only diff
passed review against `WRITING.md`, the controlled word list, and
`docs/CONTRIBUTING.md`. The review covered terminology, structure,
active voice, release meaning, product-scope boundaries, and link and
code presentation. Changelog tests passed 6/6, and the docs build
reported 0 errors with 2 pre-existing warnings.
- Agent: Codex CLI
<!-- docs-review-head-sha: 200940f -->
<!-- docs-review-agents-blob-sha: c052d60 -->

## DGX Station Hardware Evidence

- [ ] Tested on DGX Station
- Tested commit:
- Station profile/scenario:
- Result:
- Supporting evidence:

## Verification

- [x] PR description includes a `Signed-off-by:` line and every commit
appears as `Verified` in GitHub
- [x] 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
- [x] Targeted behavior tests pass for the current change set, or tests
are marked not applicable above — command/result or justification: `npx
vitest run test/changelog-docs.test.ts` passed 6/6 tests.
- [ ] Applicable broad gate passed — `npm test` for broad
runtime/test-harness changes; `npm run check` for repo-wide
validation/coverage changes — command/result: Not applicable to this
documentation-only release entry.
- [x] Quality Gates section completed with required justifications or
waivers
- [x] No secrets, API keys, or credentials committed
- [ ] `npm run docs` builds without warnings (doc changes only) —
result: Build passed with 0 errors and 2 pre-existing warnings.
- [x] Doc pages follow the [style
guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md)
(doc changes only)
- [ ] New doc pages include SPDX header and frontmatter (new pages only)

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


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Documentation**
* Added release notes for v0.0.99 covering snapshot restoration, sandbox
recovery, gateway route upgrades, and Hermes security updates.
* Documented experimental Microsoft Entra runtime identity support and
enhanced readiness checks.
* Added details on managed image validation, trusted CI image promotion,
and end-to-end release evidence.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
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 chore Build, CI, dependency, or tooling maintenance

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants