Skip to content

test(e2e): migrate test-openshell-version-pin.sh to free-standing Vitest live test#5107

Merged
cv merged 10 commits into
mainfrom
e2e-migrate/test-openshell-version-pin
Jun 10, 2026
Merged

test(e2e): migrate test-openshell-version-pin.sh to free-standing Vitest live test#5107
cv merged 10 commits into
mainfrom
e2e-migrate/test-openshell-version-pin

Conversation

@jyaunches

@jyaunches jyaunches commented Jun 10, 2026

Copy link
Copy Markdown
Contributor

Migration: test-openshell-version-pin.sh → free-standing Vitest live test

Refs: #4355 (owner issue), #3474 (regression target), #4990 (E2E architecture contract)

What landed in this PR

A free-standing Vitest live test at test/e2e-scenario/live/openshell-version-pin.test.ts plus a discrete openshell-version-pin-vitest job in .github/workflows/e2e-vitest-scenarios.yaml, modeled on #5049's free-standing pattern. The legacy bash guard test/e2e/test-openshell-version-pin.sh remains in place; deletion is a follow-up PR with #4357 approval per the migration freeze policy.

Architecture notes (course-correction during the loop)

The first pass of this migration tried to land the test in test/install-openshell-version-check.test.ts under the existing installer-integration Vitest project. It even passed CI twice there (commit a95edc02e, runs 27251976992 and 27252048411). The argument was that this is a hermetic installer-script unit test, not a scenario, and sister tests already live in that file.

That argument lost to an explicit project contract: test/e2e-scenario/framework-tests/e2e-migration-inventory.test.ts enforces that every entry in targetVitestScenarios for a covered legacy script must match ^test/e2e-scenario/live/.+\.test\.ts$. The schema is the binding architectural decision; the project has already chosen test/e2e-scenario/live/ as the canonical home for migrated tests, regardless of whether they exercise the scenario framework's primitives. The pivot adopts that decision.

Commits in this PR walk that history:

  1. 873aaa2ee — mark inventory bridge-probe (initial in-flight state)
  2. a95edc02e — first sketch under installer-integration (rejected by schema)
  3. 4670cb556 — empty commit (verification dispatch trigger from the rejected approach)
  4. 9215a4f1f — revert (2)
  5. 920876546 — final sketch: free-standing live test + discrete CI job
  6. 3d9c01931 — inventory mark covered pointing at the new live test

Shape

  • Shape: free-standing live test (not registry-driven)
  • Family: hermetic installer-script behavioral test
  • Runner: ubuntu-latest
  • Registry-driven: no — does not fit from(scenario.environment, env) → from(scenario.expectedStateId, instance)
  • Free-standing job: openshell-version-pin-vitest in e2e-vitest-scenarios.yaml

Assertion chain (mapped from the bash script's four [PASS] checks)

  1. installer-exits-zeroresult.status === 0 (happy path completes; no "above the maximum" hard-fail).
  2. download-log-contains-v0.0.44 — pinned release tag was requested.
  3. download-log-excludes-v0.0.45 — too-new sticky version is never re-fetched.
  4. replaced-openshell-reports-0.0.44 — binary on disk in active install dir overwritten with pinned build.

Failing-test-first contract

  • First-dispatch outcome predicted: GREEN. The framework already covers the regression target (scripts/install-openshell.sh:272-275 implements the v0.0.44 reinstall path; sister tests in test/install-openshell-version-check.test.ts already cover the entry-point invariants). This migration's residual coverage is the happy-path completion, exercised via stubbed PATH binaries.
  • Skill 5.8 false-pass guard: two consecutive GREEN dispatches required of the new openshell-version-pin-vitest job before convergence is recorded in the inventory entry's frozenAtSha / convergenceEvidence fields.
  • Local vitest run --project e2e-scenarios-live test/e2e-scenario/live/openshell-version-pin.test.ts passes; inventory schema-lock test passes.

Suite separation honored

  • regression-e2e.yaml (bash) untouched. Legacy script remains in place; deletion is a follow-up PR with Phase 11: Final Audit Reconciliation (E2E audit-coverage) #4357 approval.
  • e2e-vitest-scenarios.yaml gains a discrete free-standing job; matrix path unchanged.
  • vitest.config.ts:e2e-scenarios-live project picks up the new test file via the test/e2e-scenario/live/**/*.test.ts glob with no project-list edit.

Inventory delta

status: not-migrated → covered
targetVitestScenarios: [] → ["test/e2e-scenario/live/openshell-version-pin.test.ts"]
deletionReady: false (deletion is a follow-up PR; #4357 approval required)

Next steps after this PR merges

  • Drive two consecutive GREEN runs of openshell-version-pin-vitest (one is happening on this PR; the second is enforced post-merge by re-dispatch on main).
  • Follow-up PR with #4357 approval to delete test/e2e/test-openshell-version-pin.sh from regression-e2e.yaml and the bash file itself, transitioning the inventory entry from coveredretired.

Convergence

  • First dispatch GREEN (post-pivot): openshell-version-pin-vitest job 80480862915 on commit 3d9c01931.
  • Verification dispatch GREEN: openshell-version-pin-vitest job 80481579156 on the same commit. Two consecutive GREENs rule out false-pass.
  • Legacy regression-e2e baseline GREEN: last 2 dispatches that ran openshell-version-pin-e2e succeeded (runs 26720769662, 26718460056). Bash guard untouched.
  • 🔒 Frozen at: 3d9c01931f598cf2450bd88028cb3b44bcf367b0. Inventory entry now records frozenAtSha and convergenceEvidence.

Assertions resolved (in order)

  1. installer-exits-zeroresult.status === 0 (commit 920876546)
  2. download-log-contains-v0.0.44expect(downloads).toContain("v0.0.44") (commit 920876546)
  3. download-log-excludes-v0.0.45expect(downloads).not.toContain("v0.0.45") (commit 920876546)
  4. replaced-openshell-reports-0.0.44 — re-run $fakeBin/openshell --version; assert 0.0.44 and not 0.0.45 (commit 920876546)

All four legacy [PASS] assertions translated faithfully. No deferred assertions.

Note for reviewers

First-dispatch passed (in both pre- and post-pivot homes). This is the duplicative case the migration skill anticipates: install-openshell.sh:272-275 already lands the v0.0.44 reinstall path, and sister tests already covered the entry point. The legacy bash guard's value-add was the happy-path completion through download + extraction + binary replacement, which is now expressed as a Vitest live test. Please sanity-check the assertion list above against the four [PASS] lines in test/e2e/test-openshell-version-pin.sh — if equivalence is confirmed, the migration is complete and the bash guard can be retired in a follow-up PR with #4357 approval.

Summary by CodeRabbit

  • Tests
    • Added a live end-to-end Vitest to validate OpenShell version-pin behavior and prevent regressions, capturing installer output and download activity as artifacts.
  • CI
    • Added a dedicated CI job to run the new live test and upload related artifacts for troubleshooting.
  • Chores
    • Marked the legacy test as covered in the migration inventory and recorded convergence evidence and frozen revision metadata.

Migration target: test/install-openshell-version-check.test.ts (installer-integration
Vitest project), not test/e2e-scenario/live/. The legacy script is a hermetic
installer-script unit test - sister tests already live in install-openshell-version-check.test.ts.

Refs #4355, #3474
@copy-pr-bot

copy-pr-bot Bot commented Jun 10, 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 Jun 10, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Warning

Review limit reached

@cv, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 42 minutes and 1 second. Learn how PR review limits work.

Your organization has run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 6112c121-8965-4222-b02c-4947ff598153

📥 Commits

Reviewing files that changed from the base of the PR and between 34936a3 and 766dae2.

📒 Files selected for processing (5)
  • .github/workflows/e2e-vitest-scenarios.yaml
  • test/e2e-scenario/framework-tests/e2e-scenarios-workflow.test.ts
  • test/e2e-scenario/live/openshell-version-pin.test.ts
  • test/e2e-scenario/migration/legacy-inventory.json
  • tools/e2e-scenarios/workflow-boundary.mts
📝 Walkthrough

Walkthrough

Adds a hermetic Vitest e2e test that verifies OpenShell version pinning, a CI job to run that test and collect artifacts, and updates the migration inventory to mark the legacy test as covered with convergence evidence.

Changes

OpenShell version pinning test migration

Layer / File(s) Summary
OpenShell test setup and stubs
test/e2e-scenario/live/openshell-version-pin.test.ts
Module setup and hermetic stubbing helpers; implements download/install stubs (gh, curl, uname, gateway/sandbox helpers) that log downloads and simulate assets.
Extraction and probe stubs
test/e2e-scenario/live/openshell-version-pin.test.ts
tar and strings stubs simulate extraction by writing an openshell binary reporting pinned v0.0.44 and exposing the capability probe marker.
Fixture wiring and installer execution
test/e2e-scenario/live/openshell-version-pin.test.ts
Creates temporary bin/downloads.log, installs sticky and replacement stubs (0.0.45 and 0.0.44), runs scripts/install-openshell.sh with PATH overrides, persists stdout/stderr and downloads.log, asserts downloads contain v0.0.44 only and verifies installed openshell --version.
CI workflow job
.github/workflows/e2e-vitest-scenarios.yaml
Adds openshell-version-pin-vitest job that runs the specific Vitest test and uploads artifacts under e2e-artifacts/vitest/openshell-version-pin/ with if: always() and if-no-files-found: ignore.
Migration inventory record
test/e2e-scenario/migration/legacy-inventory.json
Updates legacy test record to covered, links to the Vitest scenario via targetVitestScenarios, and adds frozenAtSha and convergenceEvidence documenting green runs and assertion ordering.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

  • NVIDIA/NemoClaw#5052: Updates legacy e2e inventory records to track migration coverage and convergence evidence using the same migration-inventory scheme.

Suggested labels

area: e2e, chore

Poem

🐰 In stubbed PATH I nudge and spin,
I log each curl and fang the bin,
The tar wrote worlds and wrote a song,
A cozy 0.0.44 belongs,
CI hums — the rabbit hops along.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and specifically describes the main change: migrating a legacy bash e2e test to a free-standing Vitest live test, with the target test path included.
Docstring Coverage ✅ Passed Docstring coverage is 87.50% which is sufficient. The required threshold is 80.00%.
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-openshell-version-pin

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

@github-actions

github-actions Bot commented Jun 10, 2026

Copy link
Copy Markdown
Contributor

E2E Advisor Recommendation

Required E2E: openshell-version-pin-vitest, ubuntu-no-docker-preflight-negative
Optional E2E: openshell-version-pin-e2e

Dispatch hint: scenarios=ubuntu-no-docker-preflight-negative

Workflow run

Full advisor summary

E2E Recommendation Advisor

Base: origin/main
Head: HEAD
Confidence: high

Required E2E

  • openshell-version-pin-vitest (low): Required because the PR adds this E2E job and its live Vitest test for OpenShell installer version pinning. It should prove the new workflow job, fixture gating, artifact root, and migrated installer assertions work on CI.
  • ubuntu-no-docker-preflight-negative (medium): Required as a minimal registry-driven live-scenarios matrix row to validate that the modified e2e-vitest-scenarios workflow still generates and runs the standard matrix path while the new free-standing job is present.

Optional E2E

New E2E recommendations

  • None.

Dispatch hint

  • Workflow: .github/workflows/e2e-vitest-scenarios.yaml
  • jobs input: scenarios=ubuntu-no-docker-preflight-negative

@github-actions

github-actions Bot commented Jun 10, 2026

Copy link
Copy Markdown
Contributor

E2E Scenario Advisor Recommendation

Required scenario E2E: e2e-scenarios-all
Optional scenario E2E: None

Dispatch required scenario E2E:

  • gh workflow run e2e-vitest-scenarios.yaml --ref <pr-head-ref>

Workflow run

Full scenario advisor summary

E2E Scenario Advisor

Base: origin/main
Head: HEAD
Confidence: high

Required scenario E2E

  • e2e-scenarios-all: The PR changes the canonical Vitest scenario workflow and its workflow-boundary validation, and adds a free-standing live scenario test under test/e2e-scenario/live/. Per scenario E2E policy, workflow/runtime/live-test surface changes require the full e2e-vitest-scenarios fan-out rather than a targeted typed scenario dispatch.
    • Dispatch: gh workflow run e2e-vitest-scenarios.yaml --ref <pr-head-ref>

Optional scenario E2E

  • None.

Relevant changed files

  • .github/workflows/e2e-vitest-scenarios.yaml
  • test/e2e-scenario/framework-tests/e2e-scenarios-workflow.test.ts
  • test/e2e-scenario/live/openshell-version-pin.test.ts
  • test/e2e-scenario/migration/legacy-inventory.json
  • tools/e2e-scenarios/workflow-boundary.mts

@github-actions

github-actions Bot commented Jun 10, 2026

Copy link
Copy Markdown
Contributor

PR Review Advisor

Findings: 0 needs attention, 0 worth checking, 0 nice ideas
Since last review: 6 prior items resolved, 0 still apply, 0 new items found

Workflow run details

This is an automated advisory review. A human maintainer must make the final merge decision.

jyaunches added 6 commits June 9, 2026 23:53
Migrates the four [PASS] assertions of test/e2e/test-openshell-version-pin.sh
into an installer-integration Vitest test. End-to-end harness stubs uname,
openshell, openshell-gateway/sandbox helpers, gh, curl, tar, and strings so
install-openshell.sh runs through download, checksum verify, extraction, and
install-bins onto the writable active-bin dir.

Assertions translated:
- installer-exits-zero: result.status === 0
- download-log-contains-v0.0.44: pinned tag was requested
- download-log-excludes-v0.0.45: too-new sticky version never re-fetched
- replaced-openshell-reports-0.0.44: binary on disk overwritten with pinned
  build (and not still 0.0.45)

Refs #4355, #3474
Per nemoclaw-e2e-legacy-migrate Phase 5.8: first dispatch passed
(installer-integration job 80478221325 succeeded). Skill requires a second
consecutive PASS to confirm convergence and rule out false-pass.

Refs PR #5107
…ash guard"

This reverts a95edc0. Pivoting per skill Phase 5 architectural-fix
diagnostics: the legacy-inventory.json schema lock test (e2e-migration-inventory.test.ts)
asserts targetVitestScenarios paths match ^test/e2e-scenario/live/.+\.test\.ts$.
Adding the migrated test to test/install-openshell-version-check.test.ts violated
that contract. Re-homing the test as a free-standing live test in a follow-up
commit, with a discrete dispatch job in e2e-vitest-scenarios.yaml.

Refs #4355, #3474, PR #5107
…-pin

Migrates test/e2e/test-openshell-version-pin.sh (regression guard for #3474)
to a free-standing Vitest live test under test/e2e-scenario/live/.

The legacy script is a hermetic installer-script behavioral test: it runs
scripts/install-openshell.sh under a stubbed PATH where the already-installed
openshell reports a too-new version (0.0.45) and the downloaded archives
produce a binary that reports the pinned 0.0.44. It does not exercise the
registry-driven steady-state probe model, so it lives outside baseline.ts as
a free-standing live test (per #5049).

Four [PASS] assertions translated faithfully:
- installer-exits-zero (result.status === 0)
- download-log-contains-v0.0.44
- download-log-excludes-v0.0.45
- replaced-openshell-reports-0.0.44

CI: discrete openshell-version-pin-vitest job in e2e-vitest-scenarios.yaml
runs on workflow_dispatch alongside the registry-driven matrix.

Bash guard retained in regression-e2e.yaml; deletion is a follow-up PR with
#4357 approval per the migration freeze policy.

Refs #4355, #3474
targetVitestScenarios -> test/e2e-scenario/live/openshell-version-pin.test.ts
deletionReady -> false (deletion of bash guard requires #4357 approval)

frozenAtSha and convergenceEvidence will be set in a follow-up commit once
the new openshell-version-pin-vitest CI job has two consecutive GREEN runs
(skill Phase 5.8 false-pass guard).

Refs #4355, #3474, PR #5107
Two consecutive GREEN dispatches of openshell-version-pin-vitest in the
correct post-pivot home (test/e2e-scenario/live/openshell-version-pin.test.ts):
- run 27252871283 / job 80480862915
- run 27253022534 / job 80481579156

Sets frozenAtSha and convergenceEvidence per skill Phase 6.

Refs #4355, #3474, PR #5107
@jyaunches jyaunches marked this pull request as ready for review June 10, 2026 04:39
@jyaunches jyaunches changed the title test(e2e): migrate test-openshell-version-pin.sh to installer-integration Vitest test(e2e): migrate test-openshell-version-pin.sh to free-standing Vitest live test Jun 10, 2026

@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-scenario/live/openshell-version-pin.test.ts (1)

29-284: ⚡ Quick win

Consider extracting stub-creation logic into helper functions.

The test body is ~255 lines, violating the "keep function complexity low" guideline. While the sequential setup is straightforward, extracting stub-creation logic (e.g., createFakeUname(), createFakeGh(), createFakeCurl(), etc.) would improve readability and maintainability.

♻️ Example refactor for `uname` stub
+function createFakeUname(binDir: string): void {
+  writeExecutable(
+    path.join(binDir, "uname"),
+    `#!/usr/bin/env bash
+if [ "\${1:-}" = "-m" ]; then echo "x86_64"; else echo "Linux"; fi`,
+  );
+}
+
 test(
   "openshell-version-pin: replaces sticky too-new openshell with pinned 0.0.44 end-to-end",
   async ({ artifacts }) => {
     // ...
-    writeExecutable(
-      path.join(fakeBin, "uname"),
-      `#!/usr/bin/env bash
-if [ "\${1:-}" = "-m" ]; then echo "x86_64"; else echo "Linux"; fi`,
-    );
+    createFakeUname(fakeBin);

Apply the same pattern for gh, curl, tar, strings, and the OpenShell binaries.

🤖 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/openshell-version-pin.test.ts` around lines 29 - 284,
The test function is too large and repeats stub-creation code; extract each stub
setup into small helpers (e.g., createFakeUname, createFakeGh, createFakeCurl,
createFakeTar, createFakeStrings, createFakeOpenshell, createFakeHelperBinaries)
that accept the tmp/fakeBin and downloadLog paths and call the existing
writeExecutable helper, then replace the inline blocks in the test with calls to
those helpers and keep the spawnSync/assertion logic unchanged; reference the
test name string "openshell-version-pin: replaces sticky too-new openshell with
pinned 0.0.44 end-to-end", the INSTALL_SCRIPT invocation and writeExecutable
usages to locate where to extract the code.

Source: Coding guidelines

🤖 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-scenario/live/openshell-version-pin.test.ts`:
- Around line 29-284: The test function is too large and repeats stub-creation
code; extract each stub setup into small helpers (e.g., createFakeUname,
createFakeGh, createFakeCurl, createFakeTar, createFakeStrings,
createFakeOpenshell, createFakeHelperBinaries) that accept the tmp/fakeBin and
downloadLog paths and call the existing writeExecutable helper, then replace the
inline blocks in the test with calls to those helpers and keep the
spawnSync/assertion logic unchanged; reference the test name string
"openshell-version-pin: replaces sticky too-new openshell with pinned 0.0.44
end-to-end", the INSTALL_SCRIPT invocation and writeExecutable usages to locate
where to extract the code.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 8a3231c7-80ce-4fdb-8a84-0997c72c46d0

📥 Commits

Reviewing files that changed from the base of the PR and between b3c295a and 455bdc6.

📒 Files selected for processing (3)
  • .github/workflows/e2e-vitest-scenarios.yaml
  • test/e2e-scenario/live/openshell-version-pin.test.ts
  • test/e2e-scenario/migration/legacy-inventory.json

CI's static-checks job auto-fixed test() arg layout (single arrow function with
destructured first arg, no trailing arg). Mirrors the project's house style.
No behavior change.

Refs PR #5107
Addresses CodeRabbit's CHILL nitpick on the migrated live test: the test()
body was ~280 lines of inline shell-script string literals. Extracted each
stub into a small named helper at module scope:

- createFakeUname(binDir)
- createFakeStickyOpenshell(binDir, version)
- createFakeHelperBinaries(binDir)
- createFakeGh(binDir, downloadLog)
- createFakeCurl(binDir, downloadLog)
- createFakeTar(binDir, replacementVersion)
- createFakeStrings(binDir)

Plus a SHARED_DOWNLOAD_BASH_HELPERS constant deduplicating the
write_asset / sha256_digest / write_checksum bash functions shared between
the gh and curl stubs.

The test() body shrinks from ~250 lines of stub setup to ~10 lines of helper
calls. Behavior is byte-equivalent: same stubs, same env, same assertions.
Local Vitest runs in both 'e2e-scenarios-live' and 'cli' projects pass.

Refs PR #5107, #4355, #3474
@cv

cv commented Jun 10, 2026

Copy link
Copy Markdown
Collaborator

Migration framing note

This PR is a good place to make the updated framing concrete: the goal is not to create a second class of E2E, and it is not to preserve a parallel bash harness indefinitely.

For this migration, the durable target is a Vitest E2E test. If the behavior being tested is installer or shell behavior, the Vitest test should invoke the real shell boundary (bash install-openshell.sh, PATH stubs, etc.) rather than reimplementing it in TypeScript. That still satisfies the “one E2E system” target because Vitest owns the harness, reporting, artifacts, and CI job.

So I would read the legacy bash script’s retention here as convergence/deletion sequencing only:

  • keep the bash guard until the Vitest job has proven equivalent and the deletion gate is satisfied;
  • do not treat the bash file as a permanent peer suite once the Vitest harness covers the same contract;
  • keep shell commands inside the Vitest test where they are the actual user/system boundary.

Related clarification is now on #4941, #5098, and #4999.

@cv

cv commented Jun 10, 2026

Copy link
Copy Markdown
Collaborator

Cross-linking the proposed post-#5106 migration path from #5098: #5098 (comment)

For this PR, the desired shape is exactly the one-E2E-system model: the durable replacement is a Vitest E2E, and any shell/installer behavior should be invoked as the real boundary from that test. The legacy bash script should be retained only as convergence sequencing until the PR proves equivalent coverage and deletes or retires the old harness.

Also worth noting for review: legacy-inventory.json should not become the durable roadmap/audit ledger. The PR and linked issue should carry the replacement evidence; any repo-level machinery should be a lightweight deletion guard, not a second source of truth.

@copy-pr-bot

copy-pr-bot Bot commented Jun 10, 2026

Copy link
Copy Markdown

This pull request requires additional validation before any workflows can run on NVIDIA's runners.

Pull request vetters can view their responsibilities here.

Contributors can view more details about this message here.

@cv cv left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Conflicts resolved and reviewer/advisor feedback addressed. I verified the focused local tests, the automatic PR checks, and the required e2e-vitest-scenarios fan-out on run 27262317232.

@cv cv merged commit 5f60ed6 into main Jun 10, 2026
34 checks passed
@cv cv deleted the e2e-migrate/test-openshell-version-pin branch June 10, 2026 08:14
@cv cv added the v0.0.63 Release target label Jun 10, 2026
jyaunches added a commit that referenced this pull request Jun 10, 2026
Discrete free-standing job for the typed migration of
test/e2e/test-onboard-resume.sh, mirroring the openshell-version-pin-vitest
precedent from #5107. Uses bash install.sh to bootstrap openshell CLI and
node, then runs the live Vitest scenario with NVIDIA_API_KEY exposed.

Bash script remains scheduled under nightly-e2e `onboard-resume-e2e`;
this job runs only on workflow_dispatch until typed coverage soaks per
epic #5098 policy.

Refs: #4348, #5098
jyaunches added a commit that referenced this pull request Jun 10, 2026
…+ workflow job

Ports the live block of test/openclaw-tui-chat-correlation.test.ts into the
typed scenario framework as a free-standing live test (#5049 pattern), plus
a discrete openclaw-tui-chat-correlation-vitest job in
e2e-vitest-scenarios.yaml modeled on #5107's openshell-version-pin-vitest.

Coverage:
- Onboards a fresh cloud OpenClaw sandbox via OnboardingPhaseFixture.from
  with the cloud-openclaw profile (already in SUPPORTED_ONBOARDING).
- Asserts the pinned 2026.5.27 OpenClaw version (host-side probe via
  openshell sandbox exec ... openclaw --version). Override via
  E2E_OPENCLAW_TUI_CORRELATION_PINNED_VERSION when bumping.
- Idempotent in-sandbox gateway start on port 18789 via SandboxClient.execShell.
- Uploads the websocket repro driver via SandboxClient.upload, runs it via
  execShell with the gateway auth token read from /sandbox/.openclaw/openclaw.json.
- Asserts the #2603 + #3145 contract: no empty finals for submitted runs,
  no uncorrelated replies, no missing/duplicate replies, no missing/duplicate
  user turns. Preserves the looksLikeEventCaptureFailure retry-once guard
  (OpenClaw-side observability race; remove when the runtime exposes a
  deterministic chat readiness ack).

Inventory: bridge-probe entry for test/e2e/test-openclaw-tui-chat-correlation.sh
now references this file as its bridge probe (satisfies the inventory invariant
that bridge-probe entries have non-empty bridgeProbes pointing at real paths).

Bash workflow (nightly-e2e.yaml openclaw-tui-chat-correlation-e2e job)
remains untouched per the migration freeze policy; deletion is a follow-up
PR with #4357 approval after typed scenario soaks.

Refs: #4347 #2603 #3145 #5098 #5049 #5107
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

v0.0.63 Release target

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants