test(e2e): migrate test-runtime-overrides.sh to vitest#5229
Conversation
|
Note Reviews pausedIt 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 Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughAdds a Vitest E2E scenario that builds a NemoClaw runtime sandbox image, runs containers with environment-driven runtime config overrides, validates emitted openclaw.json and .config-hash (including invalid/rejected cases), and adds a GitHub Actions job plus workflow-boundary validator to run and report artifacts. ChangesRuntime Config Overrides E2E Test
Sequence Diagram(s)sequenceDiagram
participant Dispatcher as WorkflowDispatcher
participant GitHubActions as ActionsRunner
participant Validator as WorkflowBoundary
participant VitestJob as runtime-overrides-vitest
participant DockerBuild as DockerImageBuilder
participant DockerContainer as RuntimeContainer
Dispatcher->>GitHubActions: workflow_dispatch (inputs.jobs)
GitHubActions->>Validator: validate workflow boundary & allowed_jobs
GitHubActions->>VitestJob: schedule runtime-overrides-vitest job
VitestJob->>DockerBuild: build runtime sandbox image
DockerBuild->>DockerContainer: run ENTRYPOINT with env overrides
DockerContainer->>VitestJob: emit openclaw.json and .config-hash
VitestJob->>GitHubActions: upload artifacts (e2e-artifacts/vitest/runtime-overrides/)
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Possibly related PRs
Suggested labels
Suggested reviewers
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
|
This repository limits contributors to 10 open pull requests. Please close or merge existing PRs before opening new ones. |
E2E Advisor RecommendationRequired E2E: Dispatch hint: Full advisor summaryE2E Recommendation AdvisorBase: Required E2E
Optional E2E
New E2E recommendations
Dispatch hint
|
Vitest E2E Scenario RecommendationRequired Vitest E2E scenarios: Dispatch required Vitest E2E scenarios:
Full Vitest E2E advisor summaryVitest E2E Scenario AdvisorBase: Required Vitest E2E scenarios
Optional Vitest E2E scenarios
Relevant changed files
|
PR Review AdvisorFindings: 0 needs attention, 2 worth checking, 0 nice ideas Review findings🛠️ Needs attention
🔎 Worth checking
🌱 Nice ideas
Consider writing more tests for
Since last review detailsCurrent findings:
This is an automated advisory review. A human maintainer must make the final merge decision. |
|
Addressed PR advisor findings in d813a53:\n- added positive live coverage for valid NEMOCLAW_INFERENCE_API_OVERRIDE=anthropic-messages and hash validation;\n- redacted docker.log through the E2E SecretStore before writing artifacts;\n- wired the new free-standing runtime-overrides Vitest job into e2e-vitest-scenarios.yaml.\n\nValidation:\n- NEMOCLAW_RUN_E2E_SCENARIOS=1 npx vitest run --project e2e-scenarios-live test/e2e-scenario/live/runtime-overrides.test.ts --silent=false --reporter=default (Docker unavailable locally, records skip)\n- npx vitest run --project e2e-vitest-support test/e2e-scenario/support-tests/e2e-scenarios-workflow.test.ts --silent=false --reporter=default\n- npm run typecheck:cli\n- git diff --check |
|
This repository limits contributors to 10 open pull requests. Please close or merge existing PRs before opening new ones. |
|
This repository limits contributors to 10 open pull requests. Please close or merge existing PRs before opening new ones. |
|
Follow-up c621d1f resolves the remaining PR advisor workflow item by removing Docker Hub login from the new runtime-overrides-vitest job. I also updated the PR body to accurately list the Vitest workflow job wiring and note that legacy shell deletion/workflow retirement are still deferred to #5098 Phase 11. |
There was a problem hiding this comment.
🧹 Nitpick comments (1)
test/e2e-scenario/live/runtime-overrides.test.ts (1)
347-380: ⚡ Quick winCollapse repeated invalid-override assertions into a table-driven loop.
Line 347 through Line 380 repeats the same assertion shape six times, which unnecessarily increases function complexity. Converting this block into case-table iteration keeps the scenario easier to extend and aligns with the repo’s “low complexity” guidance.
♻️ Suggested refactor
- expect( - runOverrideStderr(dockerLog, image, "invalid model override", { - NEMOCLAW_MODEL_OVERRIDE: "bad\u0001model", - }), - ).toContain("control characters"); - expect( - runOverrideStderr(dockerLog, image, "invalid context window", { - NEMOCLAW_MODEL_OVERRIDE: "test", - NEMOCLAW_CONTEXT_WINDOW: "notanumber", - }), - ).toContain("must be a positive integer"); - expect( - runOverrideStderr(dockerLog, image, "invalid max tokens", { - NEMOCLAW_MODEL_OVERRIDE: "test", - NEMOCLAW_MAX_TOKENS: "abc", - }), - ).toContain("must be a positive integer"); - expect( - runOverrideStderr(dockerLog, image, "invalid reasoning", { - NEMOCLAW_MODEL_OVERRIDE: "test", - NEMOCLAW_REASONING: "maybe", - }), - ).toContain('must be "true" or "false"'); - expect( - runOverrideStderr(dockerLog, image, "invalid CORS origin", { - NEMOCLAW_CORS_ORIGIN: "ftp://evil.com", - }), - ).toContain("must start with http"); - expect( - runOverrideStderr(dockerLog, image, "invalid inference API", { - NEMOCLAW_MODEL_OVERRIDE: "test", - NEMOCLAW_INFERENCE_API_OVERRIDE: "graphql", - }), - ).toContain("openai-completions"); + const invalidCases: Array<{ + label: string; + env: Record<string, string>; + expected: string; + }> = [ + { + label: "invalid model override", + env: { NEMOCLAW_MODEL_OVERRIDE: "bad\u0001model" }, + expected: "control characters", + }, + { + label: "invalid context window", + env: { NEMOCLAW_MODEL_OVERRIDE: "test", NEMOCLAW_CONTEXT_WINDOW: "notanumber" }, + expected: "must be a positive integer", + }, + { + label: "invalid max tokens", + env: { NEMOCLAW_MODEL_OVERRIDE: "test", NEMOCLAW_MAX_TOKENS: "abc" }, + expected: "must be a positive integer", + }, + { + label: "invalid reasoning", + env: { NEMOCLAW_MODEL_OVERRIDE: "test", NEMOCLAW_REASONING: "maybe" }, + expected: 'must be "true" or "false"', + }, + { + label: "invalid CORS origin", + env: { NEMOCLAW_CORS_ORIGIN: "ftp://evil.com" }, + expected: "must start with http", + }, + { + label: "invalid inference API", + env: { + NEMOCLAW_MODEL_OVERRIDE: "test", + NEMOCLAW_INFERENCE_API_OVERRIDE: "graphql", + }, + expected: "openai-completions", + }, + ]; + + for (const c of invalidCases) { + expect(runOverrideStderr(dockerLog, image, c.label, c.env)).toContain(c.expected); + }As per coding guidelines, “Keep function complexity low in JavaScript and TypeScript code.”
🤖 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/runtime-overrides.test.ts` around lines 347 - 380, Replace the six repeated expect(...) assertions with a table-driven loop: create an array of test cases (each containing a label/description, env object like {NEMOCLAW_MODEL_OVERRIDE: "...", ...}, and expected substring) and iterate (e.g., forEach or for..of) calling runOverrideStderr(dockerLog, image, description, env) and asserting the returned stderr contains the expected substring; update the block around the existing runOverrideStderr, dockerLog, and image usages so each case uses the same call site and assertion pattern to reduce duplication.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/runtime-overrides.test.ts`:
- Around line 347-380: Replace the six repeated expect(...) assertions with a
table-driven loop: create an array of test cases (each containing a
label/description, env object like {NEMOCLAW_MODEL_OVERRIDE: "...", ...}, and
expected substring) and iterate (e.g., forEach or for..of) calling
runOverrideStderr(dockerLog, image, description, env) and asserting the returned
stderr contains the expected substring; update the block around the existing
runOverrideStderr, dockerLog, and image usages so each case uses the same call
site and assertion pattern to reduce duplication.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: 67e23d94-e66e-4cf3-87ef-57c5da56a549
📒 Files selected for processing (2)
.github/workflows/e2e-vitest-scenarios.yamltest/e2e-scenario/live/runtime-overrides.test.ts
…ime-overrides-simple # Conflicts: # .github/workflows/e2e-vitest-scenarios.yaml
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 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 @.github/workflows/e2e-vitest-scenarios.yaml:
- Around line 505-506: Replace direct template interpolation of inputs into JS
by setting them as environment variables in the workflow and reading them from
process.env inside the script: stop using the expressions that assign to
prNumberInput and requestedScenarios via ${{ toJSON(inputs.pr_number) }} and ${{
toJSON(inputs.scenarios) }}, instead expose inputs.pr_number and
inputs.scenarios into env (e.g., JOB_PR_NUMBER, JOB_SCENARIOS) and change the
script to read process.env.JOB_PR_NUMBER and process.env.JOB_SCENARIOS into
prNumberInput and requestedScenarios (with defaults and explicit
sanitization/parsing as needed) so no untrusted input is directly interpolated
into code execution context.
- Around line 482-493: The report-to-pr job's needs array (job: report-to-pr) is
missing the newly added runtime-overrides-vitest dependency; update the needs
list for the report-to-pr job to include runtime-overrides-vitest so the report
waits for and aggregates that job's results (add runtime-overrides-vitest
alongside the existing entries in the needs array).
- Around line 393-474: The job "gateway-guard-recovery" lacks the selective
job-run filter used by other Vitest jobs, so add the same `if` condition that
checks github.event.inputs.jobs (e.g., using contains(...,
'gateway-guard-recovery') or contains(..., 'all')) to the gateway-guard-recovery
job header to match the pattern used by jobs at lines near other Vitest jobs;
update the job declaration named gateway-guard-recovery to include that `if`
guard so it only runs when selected via inputs.jobs.
🪄 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: dbfc6753-dbcb-4006-aadf-bec59fdb63cc
📒 Files selected for processing (2)
.github/workflows/e2e-vitest-scenarios.yamltools/e2e-scenarios/workflow-boundary.mts
There was a problem hiding this comment.
Caution
Inline review comments failed to post. This is likely due to GitHub's internal server error or limits when posting large numbers of comments. If you are seeing this consistently it is likely a permissions issue. Please check "Moderation" -> "Code review limits" under your organization settings.
Actionable comments posted: 3
🤖 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 @.github/workflows/e2e-vitest-scenarios.yaml:
- Around line 505-506: Replace direct template interpolation of inputs into JS
by setting them as environment variables in the workflow and reading them from
process.env inside the script: stop using the expressions that assign to
prNumberInput and requestedScenarios via ${{ toJSON(inputs.pr_number) }} and ${{
toJSON(inputs.scenarios) }}, instead expose inputs.pr_number and
inputs.scenarios into env (e.g., JOB_PR_NUMBER, JOB_SCENARIOS) and change the
script to read process.env.JOB_PR_NUMBER and process.env.JOB_SCENARIOS into
prNumberInput and requestedScenarios (with defaults and explicit
sanitization/parsing as needed) so no untrusted input is directly interpolated
into code execution context.
- Around line 482-493: The report-to-pr job's needs array (job: report-to-pr) is
missing the newly added runtime-overrides-vitest dependency; update the needs
list for the report-to-pr job to include runtime-overrides-vitest so the report
waits for and aggregates that job's results (add runtime-overrides-vitest
alongside the existing entries in the needs array).
- Around line 393-474: The job "gateway-guard-recovery" lacks the selective
job-run filter used by other Vitest jobs, so add the same `if` condition that
checks github.event.inputs.jobs (e.g., using contains(...,
'gateway-guard-recovery') or contains(..., 'all')) to the gateway-guard-recovery
job header to match the pattern used by jobs at lines near other Vitest jobs;
update the job declaration named gateway-guard-recovery to include that `if`
guard so it only runs when selected via inputs.jobs.
🪄 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: dbfc6753-dbcb-4006-aadf-bec59fdb63cc
📒 Files selected for processing (2)
.github/workflows/e2e-vitest-scenarios.yamltools/e2e-scenarios/workflow-boundary.mts
🛑 Comments failed to post (3)
.github/workflows/e2e-vitest-scenarios.yaml (3)
393-474:
⚠️ Potential issue | 🟠 Major | ⚡ Quick win
gateway-guard-recoveryjob missing required job filter condition.All free-standing Vitest jobs in this workflow have a job filter condition (e.g., line 188, 228, 272, 315) to support selective execution via
inputs.jobs. The newgateway-guard-recoveryjob does not have anifcondition, so it will always run even wheninputs.jobsselects other specific jobs.🔧 Proposed fix to add job filter
gateway-guard-recovery: + if: ${{ inputs.jobs == '' || contains(format(',{0},', inputs.jobs), ',gateway-guard-recovery,') }} runs-on: ubuntu-latest
Potential scope creep:
gateway-guard-recoverynot mentioned in PR objectives.The PR objectives describe migrating
test-runtime-overrides.shto Vitest and adding theruntime-overrides-vitestjob. Thegateway-guard-recoveryjob (lines 393-474) and associated recovery scenario appear unrelated to runtime config overrides. Consider splitting unrelated features into separate PRs for clearer review and history.🤖 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 393 - 474, The job "gateway-guard-recovery" lacks the selective job-run filter used by other Vitest jobs, so add the same `if` condition that checks github.event.inputs.jobs (e.g., using contains(..., 'gateway-guard-recovery') or contains(..., 'all')) to the gateway-guard-recovery job header to match the pattern used by jobs at lines near other Vitest jobs; update the job declaration named gateway-guard-recovery to include that `if` guard so it only runs when selected via inputs.jobs.
482-493:
⚠️ Potential issue | 🟠 Major | ⚡ Quick win
report-to-prjob missingruntime-overrides-vitestin needs array.The
report-to-prjob aggregates results from scenario jobs but does not listruntime-overrides-vitestin itsneedsarray (lines 484-492), even though that job was added in this PR. The report will not wait for or include the runtime-overrides job results.📋 Proposed fix to add runtime-overrides-vitest to needs
needs: [ generate-matrix, live-scenarios, openshell-version-pin-vitest, onboard-negative-paths-vitest, + runtime-overrides-vitest, openclaw-tui-chat-correlation-vitest, gateway-guard-recovery, ]📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.report-to-pr: runs-on: ubuntu-latest needs: [ generate-matrix, live-scenarios, openshell-version-pin-vitest, onboard-negative-paths-vitest, runtime-overrides-vitest, openclaw-tui-chat-correlation-vitest, gateway-guard-recovery, ] if: ${{ always() && github.event_name == 'workflow_dispatch' }}🤖 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 482 - 493, The report-to-pr job's needs array (job: report-to-pr) is missing the newly added runtime-overrides-vitest dependency; update the needs list for the report-to-pr job to include runtime-overrides-vitest so the report waits for and aggregates that job's results (add runtime-overrides-vitest alongside the existing entries in the needs array).
505-506:
⚠️ Potential issue | 🟠 Major | ⚡ Quick winTemplate injection vulnerability flagged by static analysis.
Lines 505 and 506 directly interpolate
inputs.pr_numberandinputs.scenariosinto JavaScript code via${{ toJSON(...) }}without sanitization. WhiletoJSONprovides some safety, untrusted workflow_dispatch inputs expanded into code contexts can enable code injection attacks.The current pattern on line 505:
const prNumberInput = ${{ toJSON(inputs.pr_number) }} || '';Should assign inputs to environment variables first, then read them from
process.envin the script:🛡️ Recommended mitigation
- name: Post Vitest scenario results to PR uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 + env: + PR_NUMBER_INPUT: ${{ inputs.pr_number }} + REQUESTED_SCENARIOS: ${{ inputs.scenarios }} with: script: | const needs = ${{ toJSON(needs) }}; const runUrl = `${context.serverUrl}/${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}`; const workflowBranch = context.ref.replace('refs/heads/', ''); - const prNumberInput = ${{ toJSON(inputs.pr_number) }} || ''; - const requestedScenarios = ${{ toJSON(inputs.scenarios) }} || ''; + const prNumberInput = process.env.PR_NUMBER_INPUT || ''; + const requestedScenarios = process.env.REQUESTED_SCENARIOS || '';🧰 Tools
🪛 zizmor (1.25.2)
[error] 505-505: code injection via template expansion (template-injection): may expand into attacker-controllable code
(template-injection)
[error] 506-506: code injection via template expansion (template-injection): may expand into attacker-controllable code
(template-injection)
🤖 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 505 - 506, Replace direct template interpolation of inputs into JS by setting them as environment variables in the workflow and reading them from process.env inside the script: stop using the expressions that assign to prNumberInput and requestedScenarios via ${{ toJSON(inputs.pr_number) }} and ${{ toJSON(inputs.scenarios) }}, instead expose inputs.pr_number and inputs.scenarios into env (e.g., JOB_PR_NUMBER, JOB_SCENARIOS) and change the script to read process.env.JOB_PR_NUMBER and process.env.JOB_SCENARIOS into prNumberInput and requestedScenarios (with defaults and explicit sanitization/parsing as needed) so no untrusted input is directly interpolated into code execution context.Source: Linters/SAST tools
Vitest E2E Scenario Results — ✅ All jobs passedRun: 27358255067
|
…ime-overrides-simple # Conflicts: # .github/workflows/e2e-vitest-scenarios.yaml # tools/e2e-scenarios/workflow-boundary.mts
Vitest E2E Scenario Results — ✅ All jobs passedRun: 27360616676
|
…ime-overrides-simple # Conflicts: # .github/workflows/e2e-vitest-scenarios.yaml
There was a problem hiding this comment.
🧹 Nitpick comments (1)
.github/workflows/e2e-vitest-scenarios.yaml (1)
66-70: ⚡ Quick winSkip matrix generation for jobs-only runs.
When
inputs.jobsis set,live-scenariosis skipped, butgenerate-matrixstill performs setup and matrix computation. Adding an equivalent gate (or dependency short-circuit viavalidate-jobs) will cut unnecessary CI time and reduce noisy runs.Suggested change
generate-matrix: + if: ${{ inputs.jobs == '' }} runs-on: ubuntu-latestAlso applies to: 118-121
🤖 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 66 - 70, The generate-matrix job currently always runs even when a jobs-only run is requested; add a gate so matrix computation is skipped when workflow_dispatch input "jobs" is provided (e.g., add a job-level conditional using the workflow input like if: ${{ !github.event.inputs.jobs }} or make generate-matrix depend on validate-jobs and short-circuit via an output/flag from validate-jobs), update the generate-matrix job declaration (job name generate-matrix) and apply the same conditional to the other affected job block mentioned (the second matrix-generation block around lines 118-121) so matrix setup is bypassed for jobs-only runs.
🤖 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 66-70: The generate-matrix job currently always runs even when a
jobs-only run is requested; add a gate so matrix computation is skipped when
workflow_dispatch input "jobs" is provided (e.g., add a job-level conditional
using the workflow input like if: ${{ !github.event.inputs.jobs }} or make
generate-matrix depend on validate-jobs and short-circuit via an output/flag
from validate-jobs), update the generate-matrix job declaration (job name
generate-matrix) and apply the same conditional to the other affected job block
mentioned (the second matrix-generation block around lines 118-121) so matrix
setup is bypassed for jobs-only runs.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: d6744b85-f148-4789-a5a3-cca687981a2c
📒 Files selected for processing (2)
.github/workflows/e2e-vitest-scenarios.yamltools/e2e-scenarios/workflow-boundary.mts
Vitest E2E Scenario Results — ✅ All jobs passedRun: 27375571851
|
…ime-overrides-simple # Conflicts: # .github/workflows/e2e-vitest-scenarios.yaml # tools/e2e-scenarios/workflow-boundary.mts
Vitest E2E Scenario Results — ✅ All jobs passedRun: 27376207423
|
…ime-overrides-simple # Conflicts: # .github/workflows/e2e-vitest-scenarios.yaml # tools/e2e-scenarios/workflow-boundary.mts
Vitest E2E Scenario Results — ✅ All jobs passedRun: 27378767806
|
There was a problem hiding this comment.
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 `@tools/e2e-scenarios/workflow-boundary.mts`:
- Around line 732-740: The validation currently blocks DOCKERHUB_* env keys but
does not prevent docker login via inline secrets in step.run; update the runtime
override checks to also scan each step.run for docker login usage and for
secrets interpolation patterns. Add or call a helper like
requireNoDockerHubAuthInRun(errors, stepName, step.run) (or extend
requireNoDispatchInputInterpolation) to detect patterns such as
/docker\s+login/i and interpolation tokens like /secrets\.[A-Za-z0-9_]+/ or
/\${{\s*secrets\.[^}]+}}/ and push an error when found, alongside the existing
requireEnvDoesNotExposeSecret and asSteps/asRecord usage. Ensure this runs
inside the same loop over steps (runtime-overrides-vitest step '<name>') so
inline runs cannot bypass the DOCKERHUB auth ban.
🪄 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: 9cebcd96-b228-4f67-84d8-85c33622c766
📒 Files selected for processing (2)
.github/workflows/e2e-vitest-scenarios.yamltools/e2e-scenarios/workflow-boundary.mts
🚧 Files skipped from review as they are similar to previous changes (1)
- .github/workflows/e2e-vitest-scenarios.yaml
…ime-overrides-simple # Conflicts: # .github/workflows/e2e-vitest-scenarios.yaml # tools/e2e-scenarios/workflow-boundary.mts
Vitest E2E Scenario Results — ✅ All jobs passedRun: 27379912291
|
Vitest E2E Scenario Results — ✅ All jobs passedRun: 27379993075
|
Summary
Migrate
test/e2e/test-runtime-overrides.shwith focused live Vitest coverage.Related Issues
Refs #5098
Refs #759
Refs #719
Refs #2653
Contract mapping
.config-hashmatches.test/e2e-scenario/live/runtime-overrides.test.tscaptures/sandbox/.openclaw/openclaw.jsonand runssha256sum -c .config-hashinside a short-lived container.nemoclaw-startENTRYPOINT.NEMOCLAW_*env vars and asserts the patched config fields, including validNEMOCLAW_INFERENCE_API_OVERRIDE=anthropic-messages./sandbox/.openclaw/openclaw.json.NEMOCLAW_CORS_ORIGINextendsgateway.controlUi.allowedOrigins.Simplicity check
runtime-overrides-vitestjob to.github/workflows/e2e-vitest-scenarios.yamlso the new Vitest migration runs in CI. Legacy shell deletion and shell workflow retirement are deferred to Epic: Migrate legacy bash E2E into the Vitest E2E system #5098 Phase 11.Verification
NEMOCLAW_RUN_E2E_SCENARIOS=1 npx vitest run --project e2e-scenarios-live test/e2e-scenario/live/runtime-overrides.test.ts --silent=false --reporter=default(local Docker daemon unavailable, test records Docker-required skip)npx vitest run --project e2e-vitest-support test/e2e-scenario/support-tests/e2e-scenarios-workflow.test.ts --silent=false --reporter=defaultnpm run build:clinpm run typecheck:cligit diff --checkSummary by CodeRabbit