Skip to content

ci(workflows): consolidate workflow infrastructure - #8632

Merged
cv merged 14 commits into
mainfrom
ci/cleanup-workflow-tests
Aug 9, 2026
Merged

ci(workflows): consolidate workflow infrastructure#8632
cv merged 14 commits into
mainfrom
ci/cleanup-workflow-tests

Conversation

@cv

@cv cv commented Aug 8, 2026

Copy link
Copy Markdown
Collaborator

Summary

Consolidate repeated workflow infrastructure and remove direct YAML source-shape assertions. Preserve security boundaries while making checkout credentials, artifact policies, timeouts, regression selection, dependency installation, base-image publication, and E2E contract metadata explicit.

Changes

  • Move WhatsApp compact QR code coverage into the main E2E workflow and delete the empty regression workflow and selector.
  • Remove direct YAML source-shape assertions and obsolete exact Dockerfile layer-count coverage while retaining executable and mutation-based security validators.
  • Disable persisted checkout credentials and require explicit artifact retention, missing-file behavior, and bounded job timeouts.
  • Cancel stale direct managed-image PR runs without cancelling called main or release runs.
  • Share deterministic root and plugin dependency installation through npm ci with lifecycle scripts disabled.
  • Make the WeChat and reviewed npm audits use the same integrity-verified npm archive installer.
  • Extract repeated base image platform builds and manifest publication into two local composite actions while retaining established job and required-check names; execute four publication failure paths in focused tests.
  • Keep trusted E2E action provenance and explicit job-role exceptions in the workflow boundary policy; derive CLI artifact consumers from workflow behavior.
  • Update the OpenClaw dependency review to match retained checks and the verified npm archive process.

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 internal CI and test coverage only. agents/openclaw/dependency-review.md was corrected to match retained test coverage; no public documentation changes are required.
  • 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

  • Documentation writer subagent reviewed the completed changes
  • Result: docs-updated
  • Evidence: Updated agents/openclaw/dependency-review.md, test/e2e/README.md, and test/e2e/docs/README.md. The guides match workflow ownership, verified npm archive handling, and derived CLI artifact consumers. No public user-facing documentation changed.
  • Agent: Pi CLI

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 validate:pr passed after refreshing origin/main when hooks were skipped or unavailable
  • Targeted behavior tests pass for the current change set, or tests are marked not applicable above — - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — post-merge E2E workflow boundaries: 85 passed; npm run typecheck:cli passed; merge commit hooks passed, including repository checks and E2E semantic phase plans; npm run docs passed with zero errors and two existing warnings.
  • Applicable broad gate passed — npm test for broad runtime/test-harness changes; npm run check for repo-wide validation/coverage changes — GitHub CI will run the broad gates; no completed local broad gate is claimed.
  • 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: Carlos Villela cvillela@nvidia.com

Summary by CodeRabbit

  • New Features

    • Added a focused WhatsApp compact QR end-to-end test target.
    • Improved multi-platform base-image build and publication validation.
  • Security

    • Strengthened dependency installation and package verification.
    • Disabled persistent checkout credentials across automated workflows.
  • Reliability

    • Added job timeouts, concurrency controls, artifact retention, and missing-file checks.
    • Centralized workflow validation and provenance tracking for more consistent checks.
  • Documentation

    • Updated platform end-to-end testing and WeChat runtime dependency guidance.

@cv cv self-assigned this Aug 8, 2026
@coderabbitai

coderabbitai Bot commented Aug 8, 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 centralizes base-image build and publication logic, shares CI dependency installation, adds a WhatsApp E2E job, centralizes E2E workflow contracts, tightens workflow controls, and removes obsolete regression workflows and contract tests.

Changes

CI workflow consolidation

Layer / File(s) Summary
Reusable base-image build and publication actions
.github/actions/build-base-image-platform/action.yaml, .github/actions/publish-base-image-manifest/*, .github/workflows/base-image.yaml
Base-image builds and multi-platform manifest publication now use reusable composite actions with digest validation and managed-base contract artifacts.
Shared CI dependency installation
.github/actions/ci-install-dependencies.sh, .github/actions/ci-*/action.yaml, .github/workflows/pr.yaml, .github/actions/ci-wechat-runtime-audit/action.yaml, test/ci-install-dependencies.test.ts
CI actions share lifecycle-script-free installation, cache both lockfiles, and verify the pinned npm installation path.
Centralized E2E workflow contracts
tools/e2e/workflow-boundary-policy.mts, tools/e2e/*workflow-boundary.mts, test/e2e/support/cli-artifact-workflow-boundary.test.ts
E2E validators use shared action provenance and job policies. CLI artifact consumer validation derives contracts from detected workflow jobs.
WhatsApp E2E coverage
.github/workflows/e2e.yaml, test/e2e/docs/README.md, test/e2e/README.md
The workflow adds the whatsapp-qr-compact job and includes it in result aggregation. Documentation removes the retired regression workflow.
Workflow controls
.github/workflows/*.yaml, tools/e2e/sandbox-images-workflow-boundary.mts
Workflows add checkout credential controls, job timeouts, concurrency, artifact retention, and missing-file failures.
Workflow contract pruning
test/*workflow*.test.ts, test/e2e/support/*, ci/source-shape-test-budget.json, agents/openclaw/dependency-review.md
Obsolete workflow contract tests, regression coverage, and source-shape exceptions were removed. Remaining audit and ShellCheck coverage was retained.

Estimated code review effort: 4 (Complex) | ~60 minutes

Sequence Diagram(s)

sequenceDiagram
  participant BaseImageWorkflow
  participant BuildBaseImagePlatform
  participant PublishBaseImageManifest
  BaseImageWorkflow->>BuildBaseImagePlatform: build and validate platform image
  BuildBaseImagePlatform-->>BaseImageWorkflow: upload digest artifact
  BaseImageWorkflow->>PublishBaseImageManifest: provide platform digest artifacts
  PublishBaseImageManifest-->>BaseImageWorkflow: publish validated manifest and contract
Loading

Possibly related PRs

Suggested reviewers: jyaunches

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
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.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely summarizes the pull request's main change: consolidating CI workflow infrastructure.
✨ 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 ci/cleanup-workflow-tests

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

@github-code-quality

github-code-quality Bot commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Overview

Languages: TypeScript

TypeScript / code-coverage/plugin

The overall coverage in commit 4d926fa in the ci/cleanup-workflow-... branch remains at 96%, unchanged from commit c3bbad7 in the main branch.


Updated August 09, 2026 01:08 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 @.github/workflows/regression-e2e.yaml:
- Around line 52-59: Update the empty-input pattern in the case statement around
the normalized jobs subject to use ,, instead of ,. Keep the whatsapp-qr-compact
match and output behavior unchanged for non-empty selections.
🪄 Autofix

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: e17dec71-130c-4a08-9dab-cb364e6af5fe

📥 Commits

Reviewing files that changed from the base of the PR and between 87f27ae and bc57de5.

📒 Files selected for processing (21)
  • .github/workflows/regression-e2e.yaml
  • agents/openclaw/dependency-review.md
  • ci/source-shape-test-budget.json
  • test/candidate-compat.test.ts
  • test/ci-cli-coverage-pi-tools-workflow.test.ts
  • test/cloudflared-update-check-workflow.test.ts
  • test/code-scanning-workflow.test.ts
  • test/e2e-main-retry-workflow.test.ts
  • test/e2e-release-gate-workflow.test.ts
  • test/e2e/support/e2e-workflow.test.ts
  • test/e2e/support/sandbox-name-workflow-boundary.test.ts
  • test/macos-e2e-workflow-boundary.test.ts
  • test/openclaw-dependency-review.test.ts
  • test/openclaw-locked-install.test.ts
  • test/openshell-e2e-qualification-workflow.test.ts
  • test/pr-limit-policy.test.ts
  • test/pr-workflow-contract.test.ts
  • test/regression-e2e-workflow.test.ts
  • test/release-lkg-brev-image.test.ts
  • test/reviewed-npm-audit-workflow.test.ts
  • test/wechat-runtime-audit-workflow.test.ts
💤 Files with no reviewable changes (18)
  • test/macos-e2e-workflow-boundary.test.ts
  • test/wechat-runtime-audit-workflow.test.ts
  • test/regression-e2e-workflow.test.ts
  • test/openclaw-locked-install.test.ts
  • test/e2e-release-gate-workflow.test.ts
  • test/openshell-e2e-qualification-workflow.test.ts
  • test/openclaw-dependency-review.test.ts
  • test/reviewed-npm-audit-workflow.test.ts
  • test/release-lkg-brev-image.test.ts
  • test/ci-cli-coverage-pi-tools-workflow.test.ts
  • test/e2e/support/e2e-workflow.test.ts
  • test/e2e-main-retry-workflow.test.ts
  • test/candidate-compat.test.ts
  • test/pr-limit-policy.test.ts
  • test/cloudflared-update-check-workflow.test.ts
  • test/code-scanning-workflow.test.ts
  • test/pr-workflow-contract.test.ts
  • ci/source-shape-test-budget.json

Comment thread .github/workflows/regression-e2e.yaml Outdated
@github-actions

github-actions Bot commented Aug 8, 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): Failed after a partial review · low confidence · 0 blockers · 0 warnings · 0 suggestions

Second-opinion terminology and E2E selections are advisory. Live E2E does not run automatically for pull requests.

2 semantic terminology decisions

Terminology decisions are advisory. They affect the assessment only when a separate finding identifies concrete semantic impact.

  • established — platform digest at .github/actions/build-base-image-platform/action.yaml:94: Keep `platform digest` for the architecture-specific image digest.
  • replace — trusted-build jobs at test/e2e/README.md:35: Replace `trusted-build jobs` with `trusted workflow build jobs`, or name `managed-image-protected-runtime` directly.

E2E guidance

Advisory only. A maintainer can dispatch the default E2E suite against this exact revision.

Recommended E2E: cloud-inference, cloud-onboard, managed-image-multiarch-startup, security-posture

1 warning · 0 suggestions

Warnings

Warnings do not block.

PRA-1 Warning — Cover the extracted platform-build action contract

  • Location: .github/actions/build-base-image-platform/action.yaml:94
  • Category: tests
  • Problem: The new platform-build composite action has no focused contract test. Existing tests cover the OpenClaw version guard indirectly, but do not detect a weakened digest-only push, cache scope, or digest-artifact handoff.
  • Impact: A later action edit could publish mutable tags, share a cache across architectures, or omit the validated digest artifact without a focused regression failure.
  • Recommendation: Add a mutation-based test for build-base-image-platform that rejects a missing push-by-digest output, a mutable or cross-architecture cache reference, and invalid architecture or digest-artifact naming.
  • Verification: Inspect a new action-contract test that loads `.github/actions/build-base-image-platform/action.yaml` and mutates the output, cache references, and digest export fields.
  • Test coverage: A focused Vitest action-contract test must fail when the composite action removes `push-by-digest=true`, changes an architecture-scoped cache reference, or accepts an invalid architecture or digest artifact name.
  • Evidence: `.github/actions/build-base-image-platform/action.yaml:94-131` introduces the composite build, cache, digest export, and artifact-upload contract. `test/openclaw-dependency-review.test.ts` exercises only the extracted OpenClaw version guard. `test/publish-base-image-manifest.test.ts` covers manifest publication failures, not platform-build action mutations.

Workflow run details

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

@cv cv changed the title ci(workflows): remove duplicate workflow tests ci(workflows): consolidate workflow infrastructure Aug 8, 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.

Actionable comments posted: 2

🧹 Nitpick comments (4)
.github/actions/build-base-image-platform/action.yaml (1)

63-92: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Validate the OpenClaw version before you use it.

Lines 73-78 build openclaw_build_arg and call scripts/check-production-build-args.sh with the raw input. Lines 82-91 reject CR, LF, and non-dotted-decimal values only after that call. Move the format checks above the first use so the action fails fast and never forwards a malformed version.

♻️ Proposed reordering
         set -euo pipefail
         build_args=()
         openclaw_build_arg=""
         if [ "$AGENT" = "openclaw" ] && [ -n "${OPENCLAW_VERSION_INPUT}" ]; then
+          if [[ "$OPENCLAW_VERSION_INPUT" == *$'\r'* || "$OPENCLAW_VERSION_INPUT" == *$'\n'* ]]; then
+            echo "ERROR: OpenClaw version must not contain CR or LF characters." >&2
+            exit 1
+          fi
+          if [[ ! "$OPENCLAW_VERSION_INPUT" =~ ^[0-9]+([.][0-9]+)*$ ]]; then
+            echo "ERROR: OpenClaw version must be a whole decimal dotted version (for example, 2026.6.10)." >&2
+            exit 1
+          fi
           openclaw_build_arg="OPENCLAW_VERSION=${OPENCLAW_VERSION_INPUT}"
           build_args+=(--build-arg "$openclaw_build_arg")
         fi
         if [ "${`#build_args`[@]}" -gt 0 ]; then
           scripts/check-production-build-args.sh "${build_args[@]}"
         else
           scripts/check-production-build-args.sh
         fi
-        if [ "$AGENT" = "openclaw" ] && [ -n "${OPENCLAW_VERSION_INPUT}" ]; then
-          if [[ "$OPENCLAW_VERSION_INPUT" == *$'\r'* || "$OPENCLAW_VERSION_INPUT" == *$'\n'* ]]; then
-            echo "ERROR: OpenClaw version must not contain CR or LF characters." >&2
-            exit 1
-          fi
-          if [[ ! "$OPENCLAW_VERSION_INPUT" =~ ^[0-9]+([.][0-9]+)*$ ]]; then
-            echo "ERROR: OpenClaw version must be a whole decimal dotted version (for example, 2026.6.10)." >&2
-            exit 1
-          fi
-        fi
         printf 'openclaw_build_arg=%s\n' "$openclaw_build_arg" >> "$GITHUB_OUTPUT"
🤖 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/actions/build-base-image-platform/action.yaml around lines 63 - 92,
Move the OpenClaw version validation checks in the production-build-args step
before constructing openclaw_build_arg or invoking
scripts/check-production-build-args.sh. Keep the existing CR/LF and
dotted-decimal validation rules, then only forward the validated
OPENCLAW_VERSION_INPUT to the build-argument check and GITHUB_OUTPUT.
.github/actions/publish-base-image-manifest/action.yaml (1)

79-103: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Rename the loop-scoped digest variable.

Line 86 assigns the bare platform digest to digest. Line 127 reassigns the same name to the manifest digest with the sha256: prefix. The two values have different formats. Use a distinct name, such as platform_digest, in the loop to prevent an accidental cross-use in later edits.

🤖 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/actions/publish-base-image-manifest/action.yaml around lines 79 -
103, Rename the loop-scoped bare digest variable in the digest_files loop from
digest to platform_digest, and update the source construction and source_digests
assignment to use it. Leave the later manifest digest variable unchanged.
test/managed-image-publication-workflow.test.ts (1)

402-413: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Prove that the inline manifest path is gone.

toMatchObject confirms the publisher job wires ./.github/actions/publish-base-image-manifest with the expected inputs. It does not confirm that the superseded inline steps were removed. A leftover docker buildx imagetools create step, or a second upload of the managed-base contract in the same job, would still pass this assertion. Add a negative assertion over the job steps.

♻️ Proposed additional assertion
       expect(manifest).toMatchObject({
         uses: "./.github/actions/publish-base-image-manifest",
         with: {
           agent: expectedPublisher.agent,
           "display-name": expectedPublisher.displayName,
           image: expectedPublisher.image,
           registry: "${{ env.REGISTRY }}",
           "registry-username": "${{ github.actor }}",
           "registry-password": "${{ secrets.GITHUB_TOKEN }}",
         },
       });
+      for (const inlineStep of basePublisher.steps) {
+        expect(inlineStep.run ?? "", expectedPublisher.job).not.toContain("imagetools create");
+        expect(inlineStep.uses ?? "", expectedPublisher.job).not.toContain("upload-artifact");
+      }

As per path instructions: "Migration tests must prove the superseded path is unreachable or removed, not merely prove that the new path also works."

🤖 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/managed-image-publication-workflow.test.ts` around lines 402 - 413,
Extend the manifest assertions in the test around step(basePublisher, "Publish
validated multi-platform manifest") with a negative check over
basePublisher.steps, verifying no inline docker buildx imagetools create step or
duplicate managed-base upload remains; retain the existing positive action-input
assertions.

Source: Path instructions

test/dcode-base-image-workflow.test.ts (1)

10-14: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Rename this file and share the baseDockerfiles list.

The file no longer asserts anything about the Deep Agents Code workflow. It now checks base Dockerfile dependency contracts for all three images, so the name dcode-base-image-workflow.test.ts misleads readers who search for workflow coverage. Rename it, for example to base-image-dependency-contract.test.ts.

test/bundled-npm-ip-address-dockerfile-contract.test.ts (lines 17-27) already declares an identical repoRoot and baseDockerfiles array. Export one shared list from a test helper and import it in both files so a new base image is added in one place.

The ast-grep path-traversal hint on line 28 is a false positive. dockerfile comes from a local literal array.

Also applies to: 23-28

🤖 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/dcode-base-image-workflow.test.ts` around lines 10 - 14, Rename the test
file to reflect base-image dependency contract coverage rather than Deep Agents
Code workflow coverage. Extract the duplicated repoRoot and baseDockerfiles
definitions into a shared test helper, export the list, and update both this
test and bundled-npm-ip-address-dockerfile-contract.test.ts to import and use
it, preserving the existing Dockerfile entries and local path handling.

Source: Linters/SAST tools

🤖 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/base-image.yaml:
- Around line 196-207: Update the “Build and publish platform digest” step to
remove the openclaw-version input and add the metadata-tags configuration used
by the OpenClaw build rules, preserving the generated image labels such as
org.opencontainers.image.version for Hermes and Deep Agents.

In `@test/ci-install-dependencies.test.ts`:
- Line 31: Update the environment construction in the dependency-install test to
use an empty-string fallback when process.env.PATH is unset, so PATH remains
valid as the bin-prefixed value. Preserve the existing NPM_TRACE and bin path
behavior.

---

Nitpick comments:
In @.github/actions/build-base-image-platform/action.yaml:
- Around line 63-92: Move the OpenClaw version validation checks in the
production-build-args step before constructing openclaw_build_arg or invoking
scripts/check-production-build-args.sh. Keep the existing CR/LF and
dotted-decimal validation rules, then only forward the validated
OPENCLAW_VERSION_INPUT to the build-argument check and GITHUB_OUTPUT.

In @.github/actions/publish-base-image-manifest/action.yaml:
- Around line 79-103: Rename the loop-scoped bare digest variable in the
digest_files loop from digest to platform_digest, and update the source
construction and source_digests assignment to use it. Leave the later manifest
digest variable unchanged.

In `@test/dcode-base-image-workflow.test.ts`:
- Around line 10-14: Rename the test file to reflect base-image dependency
contract coverage rather than Deep Agents Code workflow coverage. Extract the
duplicated repoRoot and baseDockerfiles definitions into a shared test helper,
export the list, and update both this test and
bundled-npm-ip-address-dockerfile-contract.test.ts to import and use it,
preserving the existing Dockerfile entries and local path handling.

In `@test/managed-image-publication-workflow.test.ts`:
- Around line 402-413: Extend the manifest assertions in the test around
step(basePublisher, "Publish validated multi-platform manifest") with a negative
check over basePublisher.steps, verifying no inline docker buildx imagetools
create step or duplicate managed-base upload remains; retain the existing
positive action-input assertions.
🪄 Autofix

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: 36525f9f-ffec-420f-84d0-0bebc9239118

📥 Commits

Reviewing files that changed from the base of the PR and between bc57de5 and 14c96e5.

📒 Files selected for processing (42)
  • .github/actions/build-base-image-platform/action.yaml
  • .github/actions/ci-build-typecheck/action.yaml
  • .github/actions/ci-cli-coverage-shard/action.yaml
  • .github/actions/ci-install-dependencies.sh
  • .github/actions/ci-installer-integration/action.yaml
  • .github/actions/ci-plugin-coverage/action.yaml
  • .github/actions/ci-reviewed-npm-audit/action.yaml
  • .github/actions/ci-wechat-runtime-audit/action.yaml
  • .github/actions/publish-base-image-manifest/action.yaml
  • .github/scripts/select-regression-e2e-jobs.sh
  • .github/workflows/base-image.yaml
  • .github/workflows/code-scanning.yaml
  • .github/workflows/commit-lint.yaml
  • .github/workflows/docker-pin-check.yaml
  • .github/workflows/docs-cli-parity-pr.yaml
  • .github/workflows/docs-links-pr.yaml
  • .github/workflows/macos-e2e.yaml
  • .github/workflows/managed-images.yaml
  • .github/workflows/pr-merge-conflict-fixer.yaml
  • .github/workflows/pr-review-advisor.yaml
  • .github/workflows/pr-self-hosted.yaml
  • .github/workflows/pr.yaml
  • .github/workflows/regression-e2e.yaml
  • .github/workflows/release-latest-tag.yaml
  • .github/workflows/sandbox-images-and-e2e.yaml
  • .github/workflows/wsl-e2e.yaml
  • agents/openclaw/dependency-review.md
  • ci/source-shape-test-budget.json
  • test/ci-install-dependencies.test.ts
  • test/dcode-base-image-workflow.test.ts
  • test/managed-image-publication-workflow.test.ts
  • test/pr-merge-conflict-fixer-workflow-boundary.test.ts
  • test/regression-e2e-selector.test.ts
  • test/sandbox-base-image-layout.test.ts
  • test/wechat-runtime-audit-workflow.test.ts
  • tools/e2e/base-image-publication.mts
  • tools/e2e/cli-artifact-workflow-boundary.mts
  • tools/e2e/prepare-e2e-workflow-boundary.mts
  • tools/e2e/sandbox-images-workflow-boundary.mts
  • tools/e2e/upload-e2e-artifacts-workflow-boundary.mts
  • tools/e2e/workflow-boundary.mts
  • tools/e2e/workflow-contract-registry.mts
💤 Files with no reviewable changes (3)
  • test/sandbox-base-image-layout.test.ts
  • test/wechat-runtime-audit-workflow.test.ts
  • ci/source-shape-test-budget.json
🚧 Files skipped from review as they are similar to previous changes (2)
  • agents/openclaw/dependency-review.md
  • .github/workflows/regression-e2e.yaml

Comment thread .github/workflows/base-image.yaml Outdated
Comment thread test/ci-install-dependencies.test.ts Outdated
@cv
cv merged commit 290eb94 into main Aug 9, 2026
68 of 71 checks passed
@cv
cv deleted the ci/cleanup-workflow-tests branch August 9, 2026 01:12
@github-actions github-actions Bot added the v0.0.106 Release target label Aug 9, 2026
apurvvkumaria added a commit that referenced this pull request Aug 9, 2026
<!-- markdownlint-disable MD041 -->
## Summary

Automatic main-push generic GPU E2E runs currently activate risk-signal
reporting with `github.sha` even though no correlation UUID exists, so
Vitest exits before the live test starts. Keep reporting inactive when
`checkout_sha` is absent, bind source attestation to a separate
candidate SHA, and preserve the exact SHA and lowercase UUIDv4 contract
for manual PR qualification.

## Changes

- Bind the generic GPU reporter identity only to `inputs.checkout_sha`,
leaving automatic main pushes inactive.
- Bind the generic GPU live test and its qualification evidence to a
separate exact candidate SHA on both trusted-main and PR self-hosted
paths.
- Keep manual PR expected-SHA and correlation inputs exact and fail
closed for missing or invalid active identities.
- Refresh the immutable CLI artifact workflow digest and add focused
workflow and reporter contract coverage.

## Failure Evidence

- Trusted-main run [31287291324, job
93178468730](https://github.com/NVIDIA/NemoClaw/actions/runs/31287291324/job/93178468730)
restored the exact `c3bbad78306030ea650073372c0d9f8f82974a15` CLI
artifact and OpenShell v0.0.99, then failed at Vitest startup with a
nonempty expected SHA, empty correlation ID, and `risk signal requires a
lowercase UUIDv4 correlation id`.
- The same signature recurred in jobs
[93145932176](https://github.com/NVIDIA/NemoClaw/actions/runs/31273410722/job/93145932176),
[93152683289](https://github.com/NVIDIA/NemoClaw/actions/runs/31274918401/job/93152683289),
and
[93169163210](https://github.com/NVIDIA/NemoClaw/actions/runs/31279100533/job/93169163210).
- The repair is based on `290eb94884eb29bc8aac89685e18525bb1292ed3`
after inspecting merged PR #8632. PR #8632 did not change or supersede
this risk-signal contract.

## Type of Change

- [x] 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

- [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: This repairs internal trusted
CI identity wiring. It does not change a public CLI, configuration, API,
policy schema, documented default, or supported runtime behavior.
- [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: Independent Codex
Desktop nine-category review of `e9b4613ef` passed with no findings.
- [ ] 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: `no-docs-needed`
- Evidence: Reviewed all seven changed files. The change only affects
internal workflow risk-signal activation, candidate identity,
validators, and regression coverage; public documentation does not
expose this lane or environment contract.
- Agent: Codex Desktop
<!-- docs-review-head-sha: e9b4613 -->
<!-- docs-review-agents-blob-sha: c4923a3 -->

## 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 — `48` E2E operations workflow tests,
`40` CLI artifact workflow tests, `20` risk-signal reporter tests, and
all `441` path-selected tests passed; `npm run validate:pr` passed.
- [ ] Applicable broad gate passed — `npm test` for broad
runtime/test-harness changes; `npm run check` for repo-wide
validation/coverage changes — command/result: Not run locally; fresh PR
automation will provide the repository-wide gates.
- [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: Apurv Kumaria <akumaria@nvidia.com>


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

## Summary by CodeRabbit

* **Bug Fixes**
  * Improved validation of generic GPU end-to-end qualification commits.
* Added fail-closed handling for missing or invalid correlation
identifiers.
  * Corrected workflow identity and risk-signal environment validation.

* **Tests**
* Expanded coverage for disabled configurations, candidate commit
identity, and workflow boundaries.
  * Updated qualification evidence and completion metadata checks.

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

Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

v0.0.106 Release target

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant