Skip to content

fix(e2e): repair historical gateway upgrades - #7362

Merged
apurvvkumaria merged 5 commits into
mainfrom
codex/fix-legacy-upgrade-fixture
Jul 22, 2026
Merged

fix(e2e): repair historical gateway upgrades#7362
apurvvkumaria merged 5 commits into
mainfrom
codex/fix-legacy-upgrade-fixture

Conversation

@prekshivyas

@prekshivyas prekshivyas commented Jul 22, 2026

Copy link
Copy Markdown
Collaborator

Summary

Repair the historical gateway-upgrade adapter after E2E main run 29890967158 exposed four deterministic failures.
The adapter now matches each pinned release's advisory-audit shape and stores the reviewed OpenClaw archive in the source subtree preserved by frozen optimized build contexts.

Related Issue

Follow-up to #7360.

Changes

  • Bind the historical adapter to the three current gateway-upgrade consumers: v0.0.36 and v0.0.55 require zero advisory-audit statements, while v0.0.74 requires one.
    A direct one-count rule cannot support the older frozen Dockerfiles because they predate the mcporter audit block.
    The E2E-support test covers every reviewed profile and rejects unknown profiles or mismatched counts.
  • Store the reviewed OpenClaw archive under nemoclaw/src and update the injected Dockerfile COPY path.
    Each frozen optimized-context builder copies that subtree, while none copies arbitrary source-root files.
    The E2E-support test stages the preserved subtree and verifies that the archive remains available.
  • Update the OpenClaw dependency review note with the exact staging path, per-release audit boundary, and v0.0.74 signature-verification scope.

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: This changes only historical E2E fixture construction. The internal security review note is updated to keep the reviewed boundary accurate.
  • 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: Maintainer security review is pending on this PR.
  • Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue:

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

  • 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 — npx vitest run --project e2e-support test/e2e/support/openshell-gateway-upgrade-old-installer.test.ts passed 11 tests.
  • Applicable broad gate passed — the full local E2E-support project exposed one unrelated e2e-phase-lifecycle missing-log failure after serial confirmation. The four other parallel timeout failures passed serially.
  • Quality Gates section completed with required justifications or waivers — sensitive-path review is pending.
  • No secrets, API keys, or credentials committed
  • npm run docs builds without warnings (doc changes only) — the build passed with two existing Fern warnings.
  • 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

  • Bug Fixes
    • Improved legacy gateway upgrade fixture patching with deterministic, reviewed per-profile installer selection and stricter validation (including profile-specific advisory-audit occurrence handling and correct conditional “skip” behavior).
    • Updated historical archive wiring to use the documented installer archive context path, with runtime checks, while preserving installer/fixture contents when validation fails.
  • Tests
    • Expanded end-to-end coverage with pinned fixture identity, Dockerfile assertion of archive-context COPY wiring and install commands, and tighter negative cases for mismatched or unsupported profile inputs.
  • Documentation
    • Refined legacy fixture pins documentation for archive storage location, installation behavior, and per-version advisory-audit expectations.

@prekshivyas prekshivyas self-assigned this Jul 22, 2026
@coderabbitai

coderabbitai Bot commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 9a272c1b-1b3b-47b0-8432-e541551942c9

📥 Commits

Reviewing files that changed from the base of the PR and between 9b5f7db and 2679a4b.

📒 Files selected for processing (1)
  • test/e2e/support/openshell-gateway-upgrade-old-installer.test.ts

📝 Walkthrough

Walkthrough

The legacy installer fixture adapter now validates exact reviewed NemoClaw/OpenClaw profiles, stages historical archives under the frozen build context, applies profile-specific advisory-audit handling, and verifies successful and rejected fixture executions.

Changes

Legacy installer fixture updates

Layer / File(s) Summary
Reviewed profile and audit contracts
docs/security/openclaw-2026.6.10-dependency-review.md, test/e2e/live/openshell-gateway-upgrade-old-installer.ts
Defines exact reviewed identity tuples, per-profile advisory-audit counts, archive placement, and fail-closed validation rules.
Versioned archive and Dockerfile patching
test/e2e/live/openshell-gateway-upgrade-old-installer.ts
Stages archives under the exported context path, updates Dockerfile copying, and conditionally rewrites advisory audits.
Historical fixture execution and integration wiring
test/e2e/live/openshell-gateway-upgrade.test.ts, test/e2e/live/openshell-gateway-upgrade-helpers.ts, test/e2e/support/openshell-gateway-upgrade-old-installer.test.ts
Passes pinned identities, validates profiles, extracts historical sources, stages build contexts, runs installers, and verifies generated Dockerfiles.
Acceptance and rejection coverage
test/e2e/support/openshell-gateway-upgrade-old-installer.test.ts, test/e2e/support/openshell-gateway-upgrade-workflow-boundary.test.ts
Covers reviewed releases, audit boundaries, unchanged files after failures, and mutated or unreviewed fixture identities.

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

Sequence Diagram(s)

sequenceDiagram
  participant UpgradeTest
  participant FixtureValidator
  participant FixturePatcher
  participant BuildContext
  participant InstallerDockerfile
  UpgradeTest->>FixtureValidator: validate reviewed fixture identity
  FixtureValidator->>FixturePatcher: pass exact profile
  FixturePatcher->>BuildContext: stage historical archive
  FixturePatcher->>InstallerDockerfile: inject archive COPY and audit handling
  InstallerDockerfile->>BuildContext: install reviewed OpenClaw archive
Loading

Suggested reviewers: cv, apurvvkumaria

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 9.09% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title is concise and accurately reflects the main change: fixing historical gateway-upgrade E2E behavior.
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.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/fix-legacy-upgrade-fixture

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

@github-actions

Copy link
Copy Markdown
Contributor

@github-code-quality

github-code-quality Bot commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Overview

Languages: TypeScript

TypeScript / code-coverage/plugin

The overall coverage in commit 2679a4b in the codex/fix-legacy-upg... branch remains at 96%, unchanged from commit fdad045 in the main branch.

TypeScript / code-coverage/cli

The overall coverage in commit 2679a4b in the codex/fix-legacy-upg... branch remains at 80%, unchanged from commit 6b29277 in the main branch.

Show a code coverage summary of the most impacted files.
File main 6b29277 codex/fix-legacy-upg... 2679a4b +/-
src/lib/state/m...-acquisition.ts 87% 84% -3%
src/lib/sandbox...rce-identity.ts 87% 87% 0%
src/lib/state/m...ock-identity.ts 95% 95% 0%
src/lib/state/m...lock-storage.ts 97% 97% 0%
src/lib/domain/.../connect-env.ts 89% 97% +8%

Updated July 22, 2026 05:27 UTC

@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 `@test/e2e/support/openshell-gateway-upgrade-old-installer.test.ts`:
- Around line 125-135: Replace the manual fs.mkdirSync/fs.cpSync staging in the
test with the real frozen optimized-context builder used by the upgrade flow,
then assert that its staged output contains OLD_INSTALLER_ARCHIVE_CONTEXT_PATH
with the expected content. Keep the test’s existing fixture and archive
assertions intact while exercising the builder boundary rather than recreating
its copy behavior.
🪄 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: 4a9f6fa4-ad8a-4260-8983-e313ae721743

📥 Commits

Reviewing files that changed from the base of the PR and between 6b29277 and bb76cb6.

📒 Files selected for processing (4)
  • docs/security/openclaw-2026.6.10-dependency-review.md
  • test/e2e/live/openshell-gateway-upgrade-old-installer.ts
  • test/e2e/live/openshell-gateway-upgrade.test.ts
  • test/e2e/support/openshell-gateway-upgrade-old-installer.test.ts

Comment thread test/e2e/support/openshell-gateway-upgrade-old-installer.test.ts Outdated

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

One blocking release-safety issue remains on this security-sensitive fixture boundary:

patchOldInstallerFixture() selects the allowed advisory-audit shape from NEMOCLAW_OLD_NEMOCLAW_REF, but the installer and Dockerfile being patched are selected independently by NEMOCLAW_OLD_NEMOCLAW_COMMIT. validateLegacyGatewayUpgradeFixture() currently validates only field formats, not the exact reviewed ref/commit/OpenClaw tuple. A mixed tuple can therefore apply the 0-audit policy for one release to another release's Dockerfile, weakening the fail-closed review boundary and allowing the regression lane to validate the wrong historical payload.

Please bind the policy to the full pinned commit SHA, or require an exact reviewed { ref, commit, openclawVersion } profile and pass that profile through to the adapter. The support success cases should use the real reviewed tuple for each release rather than pairing v0.0.36/v0.0.55 with OpenClaw 2026.5.27.

I reviewed the remaining implementation against all three frozen stagers. The nemoclaw/src archive path survives v0.0.36, v0.0.55, and v0.0.74, the 0/0/1 audit counts match the pinned Dockerfiles, and v0.0.74 retains signature verification. The manual staging copy noted by CodeRabbit is worth replacing with the real/frozen stager contract, but it is fix-forward rather than blocking for these three immutable profiles because direct inspection confirms their copy behavior.

@github-actions

github-actions Bot commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

PR Review Advisor — Informational

Advisor assessment: Informational / high confidence
Next action: No advisor follow-up needed.
Findings: 0 blockers · 0 warnings · 0 suggestions
Status: No actionable findings remain in the canonical review ledger.

Model lanes

  • GPT-5.6 Terra (primary): Completed · high confidence · 0 blockers · 0 warnings · 0 suggestions
  • Nemotron 3 Ultra (second opinion): Completed · high confidence · 0 blockers · 0 warnings · 0 suggestions
  • Model comparison: normalized findings match; normalized E2E selections match; severity counts match.

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-onboard, credential-sanitization, security-posture, openshell-gateway-upgrade

2 optional E2E recommendations
  • upgrade-stale-sandbox
  • rebuild-openclaw

Workflow run details

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

@prekshivyas

Copy link
Copy Markdown
Collaborator Author

Addressed the requested release-safety binding in 9b5f7db. The fixture validator and installer adapter now both require an exact reviewed { NemoClaw ref, full commit SHA, OpenClaw version } tuple before selecting the audit policy or patching. Mixed ref/commit/version cases fail closed, and the success cases use each release’s real reviewed tuple plus real tagged optimized-context builder. Verification: focused E2E-support tests 17/17 passed; source-shape/test-size hooks passed; npm run docs passed with the two existing Fern warnings.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (1)
test/e2e/support/openshell-gateway-upgrade-old-installer.test.ts (1)

120-151: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Staged path relies on raw stdout as the only IPC channel.

stageFrozenOptimizedBuildContext captures result.stdout verbatim as the staged context path. Any incidental console.log/stdout write inside the dynamically-imported historical module (now or in the future) would corrupt this value and break fs.readFileSync(path.join(stagedContext, ...)) downstream. Consider writing the result to a temp file (or taking only the last line) instead of trusting raw stdout.

♻️ Proposed fix: relay the staged path via a file instead of stdout
 function stageFrozenOptimizedBuildContext(
   sourceRoot: string,
   nemoclawRef: ReviewedHistoricalRef,
 ): string {
   const modulePath = path.join(sourceRoot, HISTORICAL_BUILD_CONTEXT_MODULES[nemoclawRef]);
+  const outputFile = path.join(os.tmpdir(), `nemoclaw-staged-context-${crypto.randomUUID()}.txt`);
   const runner = String.raw`
 import { pathToFileURL } from "node:url";
+import { writeFileSync } from "node:fs";
 
 const modulePath = process.argv[1];
 const sourceRoot = process.argv[2];
 const temporaryRoot = process.argv[3];
+const outputFile = process.argv[4];
 const buildContext = await import(pathToFileURL(modulePath).href);
 const staged = buildContext.stageOptimizedSandboxBuildContext(sourceRoot, temporaryRoot);
-process.stdout.write(staged.buildCtx);
+writeFileSync(outputFile, staged.buildCtx);
 `;
   const result = spawnSync(
     process.execPath,
     [
       "--no-warnings",
       "--experimental-strip-types",
       "--input-type=module",
       "--eval",
       runner,
       modulePath,
       sourceRoot,
       path.dirname(sourceRoot),
+      outputFile,
     ],
     { encoding: "utf8" },
   );
   expect(result.status, result.stderr).toBe(0);
-  return result.stdout;
+  return fs.readFileSync(outputFile, "utf8");
 }
🤖 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/openshell-gateway-upgrade-old-installer.test.ts` around
lines 120 - 151, Update stageFrozenOptimizedBuildContext to relay the staged
build-context path through a temporary file rather than treating result.stdout
as the sole IPC channel. Pass the file location to the spawned runner, have the
runner write staged.buildCtx there, then read and return that file’s contents
while preserving the existing nonzero-status assertion and cleanup.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@test/e2e/support/openshell-gateway-upgrade-old-installer.test.ts`:
- Around line 102-118: Update the OpenShell gateway upgrade job checkout in the
e2e workflow to fetch tags, using fetch-depth: 0 or fetch-tags: true, so
extractReviewedHistoricalSource can resolve historical refs such as v0.0.36,
v0.0.55, and v0.0.74 in shallow checkouts.

---

Nitpick comments:
In `@test/e2e/support/openshell-gateway-upgrade-old-installer.test.ts`:
- Around line 120-151: Update stageFrozenOptimizedBuildContext to relay the
staged build-context path through a temporary file rather than treating
result.stdout as the sole IPC channel. Pass the file location to the spawned
runner, have the runner write staged.buildCtx there, then read and return that
file’s contents while preserving the existing nonzero-status assertion and
cleanup.
🪄 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: 9f72bc97-e820-4278-bd5b-c18eaca91f31

📥 Commits

Reviewing files that changed from the base of the PR and between 82b7c7c and 7d40f21.

📒 Files selected for processing (1)
  • test/e2e/support/openshell-gateway-upgrade-old-installer.test.ts

Comment thread test/e2e/support/openshell-gateway-upgrade-old-installer.test.ts
Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com>
@apurvvkumaria
apurvvkumaria merged commit 09a0593 into main Jul 22, 2026
76 of 78 checks passed
@apurvvkumaria
apurvvkumaria deleted the codex/fix-legacy-upgrade-fixture branch July 22, 2026 05:39
cv pushed a commit that referenced this pull request Jul 22, 2026
<!-- markdownlint-disable MD041 -->
## Summary

Add the canonical `v0.0.91` changelog entry that was missed before the
release tag was cut. Correct the custom-image compatibility guidance
because the tagged code still accepts the legacy inference route
selector instead of removing it in v0.0.91.

## Changes

- Add `docs/changelog/2026-07-22.mdx` with the release summary and
detailed security, rebuild, Hermes, DGX Station, and
historical-validation changes from the published v0.0.91 announcement.
- Link shipped behavior to the most specific published OpenClaw and
Hermes documentation routes.
- Correct the v0.0.90 changelog and command reference so they match the
compatibility fallback present in the tagged v0.0.91 code without
inventing a new removal version.
- Keep the immutable v0.0.91 release tag unchanged; this is the
documented post-release recovery path.

Source summary:

- [#7332](#7332),
[#7289](#7289), and
[#7294](#7294) ->
`docs/changelog/2026-07-22.mdx`: Summarize completed-image `node-tar`
remediation and current and historical container verification.
- [#7213](#7213),
[#7363](#7363),
[#7366](#7366), and
[#7369](#7369) ->
`docs/changelog/2026-07-22.mdx`: Summarize trusted base preparation,
backup reuse, deletion convergence, and rebuild confidence.
- [#7212](#7212) ->
`docs/changelog/2026-07-22.mdx`: Summarize the Hermes API bearer-token
lifecycle and supported retrieval command.
- [#7327](#7327) and
[#7328](#7328) ->
`docs/changelog/2026-07-22.mdx`: Summarize qualified DGX Station
guidance and reproducible coding-agent installation instructions.
- [#7355](#7355),
[#7360](#7360),
[#7362](#7362), and
[#7364](#7364) ->
`docs/changelog/2026-07-22.mdx`: Summarize restored historical OpenClaw
upgrade and Hermes rebuild validation.
- [#7189](#7189) ->
`docs/changelog/2026-07-20.mdx`, `docs/reference/commands.mdx`: Correct
its forward-looking removal deadline after v0.0.91 shipped with the
documented legacy fallback still present.
- [#7282](#7282),
[#7306](#7306), and
[#7341](#7341) need no additional
user-guide update because they already update their owned contributor or
user-facing text directly.

## 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 dated changelog structure, SPDX
syntax, version ordering, 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:

## DGX Station Hardware Evidence

- [ ] Tested on DGX Station
- Tested commit: Not applicable; this documentation-only PR does not
change Station preparation or runtime behavior.
- 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 check:diff` passed when hooks were skipped or unavailable
- [x] Targeted behavior tests pass for the current change set, or tests
are marked not applicable above — `npx vitest run
test/changelog-docs.test.ts` (6 passed).
- [ ] Applicable broad gate passed — `npm test` for broad
runtime/test-harness changes; `npm run check` for repo-wide
validation/coverage changes — not run; this is a focused
documentation-only change.
- [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) —
completed with 0 errors and 2 existing site-wide 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)
— the native changelog entry uses the required parser-safe MDX SPDX
comment and intentionally has no frontmatter.

---
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>


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

## Summary by CodeRabbit

* **Documentation**
* Updated v0.0.91 guidance for custom Dockerfiles, including continued
legacy compatibility and recommended migration to
`NEMOCLAW_INFERENCE_PROVIDER_ID`.
* Added release notes covering image security scanning, safer rebuild
behavior, token management, DGX Station guidance, and deterministic
release validation.
* Clarified that existing custom images may continue using the legacy
selector temporarily, with fallback removal planned for a future
release.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Co-authored-by: cjagwani <cjagwani@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 bug-fix PR fixes a bug or regression integration: openclaw OpenClaw integration behavior labels Jul 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: ci CI workflows, checks, release automation, or GitHub Actions area: e2e End-to-end tests, nightly failures, or validation infrastructure bug-fix PR fixes a bug or regression integration: openclaw OpenClaw integration behavior

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants