Skip to content

ci(images): bootstrap inert protected multiarch lane - #8226

Merged
ericksoa merged 17 commits into
mainfrom
feat/managed-image-protected-lane-batch
Aug 4, 2026
Merged

ci(images): bootstrap inert protected multiarch lane#8226
ericksoa merged 17 commits into
mainfrom
feat/managed-image-protected-lane-batch

Conversation

@ericksoa

@ericksoa ericksoa commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Summary

Hardens managed-image publication evidence and adds the trusted protected multi-architecture qualification lane while keeping it fail-closed and inert. This is the consolidated B3-B batch stacked on #8225; it does not add the activation marker, select the lane for candidate changes, or advertise buildless support.

Related Issue

Refs #7744

Depends on #8225.

Changes

  • Pass bounded reviewed Git pathspec families directly and keep publication assertions semantic.
  • Share the complete OpenClaw, Hermes, and DCode base-image contract export through one fail-closed helper.
  • Define the exact all-agent linux/amd64 and linux/arm64 protected build, platform-digest, cohort, and evidence contracts.
  • Add the trusted protected workflow graph and direct-start harness for both architectures.
  • Keep risk selection limited to the absent future ci/protected-managed-image-multiarch-activation-v1.json marker, so this candidate cannot select or execute its own newly introduced trusted lane.
  • Keep the dormant lane out of the release E2E denominator until its exact candidate activation path exists, using a generic workflow-declared activation contract rather than a lane-specific release switch.
  • Preserve source heads under backup/podman-stack/pr8065-source-2860766e, backup/podman-stack/pr8065-public-head-eea54e92, backup/podman-stack/pr8068-source-2060e9cc, backup/podman-stack/pr8075-source-5976d9d0, and backup/podman-stack/pr3-14b2a-source-c9a92ae7.

The shared publication and protected-lane contracts are required by all three managed-image consumers. Per-agent workflow copies or candidate-authored dispatch would allow schema drift or weaken the trusted-main boundary. The managed base-contract, publication workflow, protected contract, risk-plan, direct-input, workflow-boundary, release-evidence, and publication-support tests protect the shared seam.

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:
  • 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-authored B3-B scope under [Epic] Support native Podman with buildless managed onboarding #7744; exact-head advisors, CodeRabbit, CI, and protected workflow review must still clear before merge.
  • 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/skills/nemoclaw-maintainer-cut-release-tag/SKILL.md and .agents/skills/nemoclaw-maintainer-policies/references/release-train.md. Both now define that RELEASE_E2E_ACTIVATION_PATH admits an explicit-only job and its matrix executions into the release denominator only when the exact relative path exists at the candidate SHA. They consistently direct maintainers not to dispatch or require evidence for a dormant lane.
  • Agent: Codex Desktop

DGX Station Hardware Evidence

  • Tested on DGX Station
  • Tested commit:
  • Station profile/scenario:
  • Result:
  • Supporting evidence:

Verification

  • PR description includes a Signed-off-by: line and every commit appears as Verified in GitHub
  • Normal pre-commit, commit-msg, and pre-push hooks passed, or npm run 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 — command/result or justification: Focused image, workflow, release, parity, and policy tests passed 172/172; the final release-policy subset passed 30/30 at b166aebdd.
  • Applicable broad gate passed — npm test for broad runtime/test-harness changes; npm run check for repo-wide validation/coverage changes — command/result: Authoritative sharded CI is pending for the exact head.
  • 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: Aaron Erickson aerickson@nvidia.com

Summary by CodeRabbit

  • New Features

    • Added protected multi-architecture startup validation for managed images on AMD64 and ARM64.
    • Added verified image contracts, digest-pinned base images, and agent-specific contract publication.
    • Added stricter managed base-image index and workflow validation.
  • Bug Fixes

    • Dormant release E2E jobs are excluded when activation markers are missing.
    • Strengthened release evidence, dispatch validation, and workflow integrity checks.
  • Tests

    • Added coverage for image contracts, activation gating, multi-architecture startup, and release preflight behavior.

Reconstruct the net #8077 terminal-outcome slice on current main.

Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
(cherry picked from commit ce6f313e9f7705aa9374c0184710ca995dafdfa8)
Reconstruct the net #8078 shared-state authority slice on current main.

Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
(cherry picked from commit 31236f767aa79c9e110be55bc1bf56b5396b227a)
Reconstruct the net #8080 journal-compatibility slice on current main.

Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
(cherry picked from commit c52370db1119ec1b8f3365a0ce4c22beebdd28e4)
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
(cherry picked from commit c3fea51)
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
(cherry picked from commit 2060e9c)
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
(cherry picked from commit 5976d9d)
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
(cherry picked from commit c9a92ae)
@coderabbitai

coderabbitai Bot commented Aug 4, 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 adds activation-aware release E2E preflight, managed-image contract publication, protected multiarch image builds with strict validation, workflow boundary checks, evidence tests, and risk-plan coverage.

Changes

Managed image release qualification

Layer / File(s) Summary
Activation-aware release preflight
.agents/skills/nemoclaw-maintainer-cut-release-tag/scripts/release-e2e-evidence.mts, .agents/skills/nemoclaw-maintainer-cut-release-tag/SKILL.md, .agents/skills/nemoclaw-maintainer-policies/references/release-train.md, test/release-e2e-evidence.test.ts, test/maintainer-skills-policy.test.ts
Explicit jobs with RELEASE_E2E_ACTIVATION_PATH are dormant when the path is absent at the candidate SHA. Preflight validates activation paths using Git or an injectable checker, filters explicit jobs, and excludes them from dispatch and missing-evidence counts. Release policy and tests cover activation-gated dispatch and evidence selection.
Managed base-image contract publication
.github/workflows/base-image.yaml, scripts/export-managed-base-image-contract.sh, scripts/checks/validate-managed-base-index.sh, tools/e2e/base-image-publication.mts, test/managed-base-image-contract.test.ts, test/managed-image-publication-workflow.test.ts, test/dcode-base-image-workflow.test.ts, test/helpers/vitest-watch-triggers.ts, test/vitest-watch-triggers.test.ts, test/e2e/support/base-image-publication.test.ts
Publication jobs now disable checkout credential persistence, expose agent metadata via AGENT environment variable, use Buildx manifest digest format, validate managed base indexes, and delegate contract generation to a shared script. The shared export script generates versioned platform-specific contracts. Git glob expansion now converts reviewed patterns to pathspecs and sorts results without history lookup. Watch triggers connect workflow changes to base-image and publication tests.
Protected image contracts and builds
scripts/checks/protected-managed-image-contract.ts, scripts/checks/build-protected-managed-images.sh, scripts/checks/run-managed-image-direct-e2e.ts, test/protected-managed-image-contract.test.ts, test/validate-managed-base-index.test.ts
A new contract module defines agents, platforms, activation metadata, image contracts, evidence types, and strict validators. The module exports constants for protected agents, platforms, job ID, activation path, and SHA patterns. Build script validates base-image byte integrity, builds all managed agents with contract labels, verifies digests and metadata, and produces validated JSON output. Type updates make ManagedImageDirectE2eInputs.platform use the shared ProtectedManagedImagePlatform type.
Protected multiarch workflow and evidence flow
.github/workflows/e2e.yaml, tools/e2e/managed-image-multiarch-workflow-boundary.mts, tools/e2e/workflow-boundary.mts, tools/e2e/prepare-e2e-workflow-boundary.mts, tools/e2e/upload-e2e-artifacts-workflow-boundary.mts, test/e2e/live/managed-image-multiarch-startup-helpers.ts, test/e2e/live/managed-image-multiarch-startup.test.ts, test/e2e/mock-parity.json, test/e2e/support/managed-image-multiarch-startup-helpers.test.ts, tools/advisors/risk-plan.mts, test/pr-risk-plan.test.ts
A new explicit-only E2E job validates controller actor and exact SHAs, resolves platform-specific base images, builds protected managed images for three agents, directly executes all contracts, generates evidence with digest integrity, cleans the registry, uploads artifacts, and contributes to report-to-pr. The job requires native runner routing, Buildx setup, Docker authentication, strict step ordering, and environment binding validation. A 287-line workflow boundary validator enforces these requirements. Test helpers load dispatch configuration from environment variables and safely read artifact files. Live tests validate activation metadata, contract integrity, and evidence binding. Risk plan increments version to 13 and adds a managed-image-multiarch family matching the protected activation path, requiring digest-pinned builds, direct startup, shard evidence, and registry cleanup. Mock parity maps the live test to six related fast tests.

Estimated code review effort: 5 (Critical) | ~120 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Controller
  participant ManagedImageMultiarchStartup
  participant Buildx
  participant LocalRegistry
  participant DirectE2e
  participant EvidenceTest
  Controller->>ManagedImageMultiarchStartup: dispatch with SHA, platform, cohort, run identity
  ManagedImageMultiarchStartup->>Buildx: resolve bases and extract platform digests
  ManagedImageMultiarchStartup->>LocalRegistry: start isolated registry
  ManagedImageMultiarchStartup->>LocalRegistry: build and push three managed agents
  ManagedImageMultiarchStartup->>DirectE2e: execute contract for each agent
  DirectE2e->>EvidenceTest: validate and emit evidence
  ManagedImageMultiarchStartup->>LocalRegistry: cleanup and verify ownership
  ManagedImageMultiarchStartup->>Controller: upload shard artifacts and report result
Loading

Possibly related PRs

  • NVIDIA/NemoClaw#8047: Established protected managed-image infrastructure and direct E2E testing framework that this PR's activation gating controls.
  • NVIDIA/NemoClaw#6012: Related explicit-only E2E job handling in workflow and reporting.
  • NVIDIA/NemoClaw#7931: Related E2E workflow selection, reporting, and risk-plan behavior updates.

Suggested labels: area: ci, area: e2e, area: packaging, area: security, platform: container, feature

Suggested reviewers: prekshivyas, cv, jason-ma-nv

🚥 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
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely describes the main change: bootstrapping an inert protected multi-architecture image lane.
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 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/managed-image-protected-lane-batch

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

@github-code-quality

github-code-quality Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Overview

Languages: TypeScript

TypeScript / code-coverage/plugin

The overall coverage in commit 6a18088 in the feat/managed-image-p... branch remains at 96%, unchanged from commit 8683777 in the main branch.

TypeScript / code-coverage/cli

The overall coverage in commit 6a18088 in the feat/managed-image-p... branch remains at 81%, unchanged from commit 8683777 in the main branch.

Show a code coverage summary of the most impacted files.
File main 8683777 feat/managed-image-p... 6a18088 +/-
src/lib/policy/...ne-exclusion.ts 96% 92% -4%
src/lib/private-networks.ts 93% 90% -3%
src/lib/shields/index.ts 71% 70% -1%
src/lib/credentials/store.ts 56% 55% -1%
src/lib/inferen...y-production.ts 48% 48% 0%
src/lib/sandbox...rce-identity.ts 87% 87% 0%
src/lib/inferen...er-discovery.ts 87% 88% +1%
src/lib/domain/.../connect-env.ts 89% 97% +8%

Updated August 04, 2026 18:01 UTC

Comment thread test/e2e/live/managed-image-multiarch-startup.test.ts Fixed
Comment thread test/e2e/live/managed-image-multiarch-startup.test.ts Fixed
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

PR Review Advisor — No blocking findings reported

Advisor assessment: No blocking advisor findings reported
Next action: No advisor follow-up needed.
Findings: 0 blockers · 0 warnings · 0 suggestions

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 terminology decisions differ; normalized E2E selections differ; severity counts match.
5 terminology differences from the second opinion

Advisory only. These are normalized differences from the primary terminology receipt.

  • cohort at .github/workflows/e2e.yaml:1736: selected only by the second-opinion lane as established.
  • protected managed-image at .github/workflows/e2e.yaml:1710: selected only by the second-opinion lane as justified.
  • RELEASE_E2E_ACTIVATION_PATH at .agents/skills/nemoclaw-maintainer-cut-release-tag/SKILL.md:146: selected only by the second-opinion lane as justified.
  • activation-gated at .agents/skills/nemoclaw-maintainer-policies/references/release-train.md:64: selected only by the second-opinion lane as justified.
  • exact-head dispatch at .github/workflows/e2e.yaml:1744: selected only by the second-opinion lane as justified.
3 additional E2E selections from the second opinion

Advisory only. The primary lane did not select these E2E jobs or targets.

  • full-e2e: The completed second-opinion lane identified E2E coverage that the primary lane omitted.
  • hermes-e2e: The completed second-opinion lane identified E2E coverage that the primary lane omitted.
  • openclaw-inference-switch: The completed second-opinion lane identified E2E coverage that the primary lane omitted.

Second-opinion terminology and E2E selections are advisory. They do not change the primary assessment or E2E / PR Gate.

3 semantic terminology decisions

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

  • justified — dormant lane at .agents/skills/nemoclaw-maintainer-cut-release-tag/SKILL.md:146: Keep “dormant lane”. The changed policy defines the activation-path contrast and its release-evidence effect.
  • established — activation path at .agents/skills/nemoclaw-maintainer-cut-release-tag/scripts/release-e2e-evidence.mts:303: Keep “activation path”. The repository already uses the term, and this use adds a candidate-SHA constraint without conflicting with its established meaning.
  • define — release-eligible at .agents/skills/nemoclaw-maintainer-policies/references/release-train.md:64: Keep “release-eligible” with the surrounding activation-path rule, which defines inclusion and exclusion for release evidence.

E2E guidance

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

Recommended E2E: cloud-inference, cloud-onboard, security-posture

Workflow run details

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

Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Comment thread test/e2e/live/managed-image-multiarch-startup-helpers.ts Fixed
@ericksoa
ericksoa changed the base branch from feat/managed-bootstrap-durable-ownership-batch to hold/podman-stack/b3b-base-b3973ceb August 4, 2026 15:11
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
@ericksoa
ericksoa changed the base branch from hold/podman-stack/b3b-base-b3973ceb to main August 4, 2026 15:19

@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: 4

🧹 Nitpick comments (4)
test/e2e/live/managed-image-multiarch-startup-helpers.ts (1)

12-13: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Share the SHA and cohort patterns with the contract module.

SHA_PATTERN and COHORT_PATTERN here duplicate the private patterns in scripts/checks/protected-managed-image-contract.ts (lines 64-66). The helper validates dispatch identity and the contract module validates evidence identity, so both must agree. If one copy changes, the two validators disagree and the mismatch appears only as a confusing runtime failure. Export the patterns from the contract module and import them here.

🤖 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/live/managed-image-multiarch-startup-helpers.ts` around lines 12 -
13, Export SHA_PATTERN and COHORT_PATTERN from
protected-managed-image-contract.ts, then import and reuse those symbols in the
managed-image startup helpers instead of defining duplicate local patterns. Keep
both validators aligned through the shared contract-module definitions.
test/pr-risk-plan.test.ts (1)

316-330: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Scope the dormancy assertion to this family and cover the other new protected paths.

The negative case proves dormancy for one runtime file only. This PR adds several other protected paths, including scripts/checks/build-protected-managed-images.sh, scripts/checks/protected-managed-image-contract.ts, and test/e2e/live/managed-image-multiarch-startup.test.ts. The last path is matched by the e2e-control-plane rule, so toEqual([]) cannot express dormancy for it.

Assert instead that no family with id managed-image-multiarch is selected for each pre-activation path. That assertion states the real claim and does not fail when an unrelated family starts matching scripts/checks/.

♻️ Proposed change to a family-scoped dormancy assertion
-    const preActivationRuntime = plan("scripts/checks/run-managed-image-direct-e2e.ts");
+    const preActivationPaths = [
+      "scripts/checks/run-managed-image-direct-e2e.ts",
+      "scripts/checks/build-protected-managed-images.sh",
+      "scripts/checks/protected-managed-image-contract.ts",
+      "test/e2e/live/managed-image-multiarch-startup.test.ts",
+    ];
@@
     expect(riskPlanRequiredJobIds(result)).toEqual(["managed-image-multiarch-startup"]);
-    expect(preActivationRuntime.families).toEqual([]);
+    for (const file of preActivationPaths) {
+      expect(plan(file).families.map((family) => family.id)).not.toContain(
+        "managed-image-multiarch",
+      );
+    }
   });
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/pr-risk-plan.test.ts` around lines 316 - 330, Update the dormancy test
around the activation marker to cover each protected pre-activation path,
including the managed-image build script, contract file, and startup E2E test.
For every path, assert that no selected family has id "managed-image-multiarch"
rather than requiring families to be empty, preserving unrelated matches such as
"e2e-control-plane".

Source: Path instructions

tools/advisors/risk-plan.mts (1)

52-53: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

The protected job id and activation path are re-declared in two places instead of imported. scripts/checks/protected-managed-image-contract.ts exports PROTECTED_MANAGED_IMAGE_MULTIARCH_JOB_ID and PROTECTED_MANAGED_IMAGE_ACTIVATION_PATH as the canonical identity for this lane. Both files below copy those values as local string literals. A rename in the canonical contract leaves the advisor matching a stale path and the boundary validator asserting a stale job id, with no failing check to expose the drift.

  • tools/advisors/risk-plan.mts#L52-L53: replace the MANAGED_IMAGE_MULTIARCH_ACTIVATION literal with the imported PROTECTED_MANAGED_IMAGE_ACTIVATION_PATH, and set requiredJobs on line 393 from PROTECTED_MANAGED_IMAGE_MULTIARCH_JOB_ID.
  • tools/e2e/managed-image-multiarch-workflow-boundary.mts#L15-L21: replace the JOB_ID and ACTIVATION_PATH literals with the same two imported constants, and build SELECTOR from the imported job id.

As per path instructions: "Derive inventories and limits from a canonical source where possible; flag duplicated lists that can silently drift."

🤖 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 `@tools/advisors/risk-plan.mts` around lines 52 - 53, Replace duplicated string
literals with the canonical constants exported from
scripts/checks/protected-managed-image-contract.ts to prevent silent drift. In
tools/advisors/risk-plan.mts at lines 52-53, replace the
MANAGED_IMAGE_MULTIARCH_ACTIVATION literal with the imported
PROTECTED_MANAGED_IMAGE_ACTIVATION_PATH constant, and update the requiredJobs
assignment on line 393 to use the imported
PROTECTED_MANAGED_IMAGE_MULTIARCH_JOB_ID. In
tools/e2e/managed-image-multiarch-workflow-boundary.mts at lines 15-21, replace
the local JOB_ID and ACTIVATION_PATH string literals with the same two imported
constants, and derive the SELECTOR from the imported
PROTECTED_MANAGED_IMAGE_MULTIARCH_JOB_ID.

Source: Path instructions

test/e2e/mock-parity.json (1)

5-13: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Add focused fast parity tests for the managed-image boundary and startup helper. test/e2e/support/e2e-workflow.test.ts runs in e2e-support and calls the validator, but it is not listed here and does not test managed-image mutations. No fast test covers managed-image-multiarch-startup-helpers.ts. Add focused tests and list them in this entry.

🤖 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/mock-parity.json` around lines 5 - 13, Add focused fast parity tests
for managed-image mutation boundaries and the helpers in
managed-image-multiarch-startup-helpers.ts, including the validator flow
exercised by test/e2e/support/e2e-workflow.test.ts. Add the new test paths to
the fast array for the live managed-image-multiarch-startup.test.ts entry in
test/e2e/mock-parity.json.
🤖 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
@.agents/skills/nemoclaw-maintainer-cut-release-tag/scripts/release-e2e-evidence.mts:
- Around line 293-303: Update candidatePathExists to distinguish a confirmed
missing path from failures inspecting the candidate commit: return false only
for Git’s expected absent-path result, and propagate errors indicating a missing
candidate object, executable failure, or repository problem. Add a regression
test covering an inspection failure and preserve the preflight behavior at the
caller around candidatePathExists.

In @.github/workflows/base-image.yaml:
- Around line 551-571: The mutable first_tag can be retagged between imagetools
create and imagetools inspect, causing digest to reference a different valid
index than this run's images. At the anchor site
(.github/workflows/base-image.yaml lines 551-571), after the imagetools inspect
of "$reference" succeeds, extract the linux/amd64 and linux/arm64 child
descriptors from the raw index data and reject with an error if they do not
equal platform_digests[linux/amd64] and platform_digests[linux/arm64]
respectively, then pass this validation check before calling
export-managed-base-image-contract.sh. Apply the identical child-descriptor
equality validation check at the sibling sites
(.github/workflows/base-image.yaml lines 695-715 and 841-861) before their
respective export script invocations, ensuring all three contract exports only
proceed when the manifest's platform children match this run's built digests.

In @.github/workflows/e2e.yaml:
- Around line 1727-1741: Add NEMOCLAW_E2E_EXPECTED_SHA to the job-level env
block with the value from inputs.checkout_sha, alongside the existing protected
managed-image identity variables such as
NEMOCLAW_PROTECTED_MANAGED_IMAGE_BASE_SHA and
NEMOCLAW_PROTECTED_MANAGED_IMAGE_WORKFLOW_SHA, so
protectedManagedImageDispatchEnvironment() receives the required value.

In `@tools/advisors/risk-plan.mts`:
- Line 397: Update the invariant text near the amd64 and arm64 shard requirement
to remove the duplicated “base” term, preserving one occurrence and the
remaining evidence-field wording unchanged.

---

Nitpick comments:
In `@test/e2e/live/managed-image-multiarch-startup-helpers.ts`:
- Around line 12-13: Export SHA_PATTERN and COHORT_PATTERN from
protected-managed-image-contract.ts, then import and reuse those symbols in the
managed-image startup helpers instead of defining duplicate local patterns. Keep
both validators aligned through the shared contract-module definitions.

In `@test/e2e/mock-parity.json`:
- Around line 5-13: Add focused fast parity tests for managed-image mutation
boundaries and the helpers in managed-image-multiarch-startup-helpers.ts,
including the validator flow exercised by test/e2e/support/e2e-workflow.test.ts.
Add the new test paths to the fast array for the live
managed-image-multiarch-startup.test.ts entry in test/e2e/mock-parity.json.

In `@test/pr-risk-plan.test.ts`:
- Around line 316-330: Update the dormancy test around the activation marker to
cover each protected pre-activation path, including the managed-image build
script, contract file, and startup E2E test. For every path, assert that no
selected family has id "managed-image-multiarch" rather than requiring families
to be empty, preserving unrelated matches such as "e2e-control-plane".

In `@tools/advisors/risk-plan.mts`:
- Around line 52-53: Replace duplicated string literals with the canonical
constants exported from scripts/checks/protected-managed-image-contract.ts to
prevent silent drift. In tools/advisors/risk-plan.mts at lines 52-53, replace
the MANAGED_IMAGE_MULTIARCH_ACTIVATION literal with the imported
PROTECTED_MANAGED_IMAGE_ACTIVATION_PATH constant, and update the requiredJobs
assignment on line 393 to use the imported
PROTECTED_MANAGED_IMAGE_MULTIARCH_JOB_ID. In
tools/e2e/managed-image-multiarch-workflow-boundary.mts at lines 15-21, replace
the local JOB_ID and ACTIVATION_PATH string literals with the same two imported
constants, and derive the SELECTOR from the imported
PROTECTED_MANAGED_IMAGE_MULTIARCH_JOB_ID.
🪄 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: 2f21654e-117d-485b-95cb-5a53ef9c4ec3

📥 Commits

Reviewing files that changed from the base of the PR and between c7f69a9 and 3cd73f5.

📒 Files selected for processing (29)
  • .agents/skills/nemoclaw-maintainer-cut-release-tag/SKILL.md
  • .agents/skills/nemoclaw-maintainer-cut-release-tag/scripts/release-e2e-evidence.mts
  • .agents/skills/nemoclaw-maintainer-policies/references/release-train.md
  • .github/workflows/base-image.yaml
  • .github/workflows/e2e.yaml
  • scripts/checks/build-protected-managed-images.sh
  • scripts/checks/protected-managed-image-contract.ts
  • scripts/checks/run-managed-image-direct-e2e.ts
  • scripts/export-managed-base-image-contract.sh
  • test/dcode-base-image-workflow.test.ts
  • test/e2e/live/managed-image-multiarch-startup-helpers.ts
  • test/e2e/live/managed-image-multiarch-startup.test.ts
  • test/e2e/mock-parity.json
  • test/e2e/support/base-image-publication.test.ts
  • test/e2e/support/e2e-cross-runtime-compatibility.test.ts
  • test/helpers/vitest-watch-triggers.ts
  • test/maintainer-skills-policy.test.ts
  • test/managed-base-image-contract.test.ts
  • test/managed-image-publication-workflow.test.ts
  • test/pr-risk-plan.test.ts
  • test/protected-managed-image-contract.test.ts
  • test/release-e2e-evidence.test.ts
  • test/vitest-watch-triggers.test.ts
  • tools/advisors/risk-plan.mts
  • tools/e2e/base-image-publication.mts
  • tools/e2e/managed-image-multiarch-workflow-boundary.mts
  • tools/e2e/prepare-e2e-workflow-boundary.mts
  • tools/e2e/upload-e2e-artifacts-workflow-boundary.mts
  • tools/e2e/workflow-boundary.mts

Comment thread .github/workflows/base-image.yaml
Comment thread .github/workflows/e2e.yaml
Comment thread tools/advisors/risk-plan.mts Outdated
@ericksoa
ericksoa marked this pull request as draft August 4, 2026 15:42
@ericksoa
ericksoa marked this pull request as ready for review August 4, 2026 15:43
@copy-pr-bot

copy-pr-bot Bot commented Aug 4, 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.

@copy-pr-bot

copy-pr-bot Bot commented Aug 4, 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.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Caution

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

⚠️ Outside diff range comments (1)
test/managed-image-publication-workflow.test.ts (1)

125-133: 📐 Maintainability & Code Quality | 🟠 Major | 🏗️ Heavy lift

Test the workflow package resolver through its executable boundary.

isStrictChildPath is a test-local copy of the path-confinement algorithm. The later assertions inspect workflow text fragments. These checks can pass if the workflow stops applying the resolver or changes its effective behavior.

Extract the workflow resolver into a repository entrypoint that the workflow invokes. Test that entrypoint with the symlink fixture. Keep workflow-boundary tests focused on the workflow invocation and inputs.

As per path instructions, “Prefer observable outcomes through the public boundary over source-text, private-shape, or mock-call assertions” and “Flag copied production algorithms.”

Also applies to: 266-282, 297-325

🤖 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 125 - 133,
Replace the test-local isStrictChildPath algorithm and workflow text-fragment
assertions with an executable repository entrypoint for the workflow resolver.
Update the workflow to invoke that entrypoint, then test the entrypoint using
the existing symlink fixture and keep workflow-boundary tests limited to
invocation inputs and observable outcomes.

Source: Path instructions

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@test/managed-image-publication-workflow.test.ts`:
- Around line 125-133: Replace the test-local isStrictChildPath algorithm and
workflow text-fragment assertions with an executable repository entrypoint for
the workflow resolver. Update the workflow to invoke that entrypoint, then test
the entrypoint using the existing symlink fixture and keep workflow-boundary
tests limited to invocation inputs and observable outcomes.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 684738d9-7ca4-4877-8a50-3667be359fdd

📥 Commits

Reviewing files that changed from the base of the PR and between 3cd73f5 and 1a77059.

📒 Files selected for processing (1)
  • test/managed-image-publication-workflow.test.ts

Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
@ericksoa ericksoa self-assigned this Aug 4, 2026
@ericksoa

ericksoa commented Aug 4, 2026

Copy link
Copy Markdown
Contributor Author

Addressed the prior advisor PRA-1 warning in 99b09ae. The checked-in subprocess test now runs both risk-plan and managed-image workflow-boundary consumers under the exact node --import tsx loader, proves the protected job ID selects correctly, and proves the activation path survives the normalized CJS/ESM import shape. The focused test and repository growth guards pass locally.

Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
@ericksoa ericksoa added feature PR adds or expands user-visible functionality area: ci CI workflows, checks, release automation, or GitHub Actions area: e2e End-to-end tests, nightly failures, or validation infrastructure area: packaging Packages, images, registries, installers, or distribution area: security Security controls, permissions, secrets, or hardening area: skills Skills, agent behaviors, prompts, or skill packaging platform: container Affects Docker, containerd, Podman, or images platform: arm64 Affects ARM64 or aarch64 architecture integration: openclaw OpenClaw integration behavior integration: hermes Hermes integration behavior integration: dcode LangChain Deep Code integration behavior v0.0.102 labels Aug 4, 2026
@ericksoa
ericksoa merged commit 08435d3 into main Aug 4, 2026
52 of 55 checks passed
@ericksoa
ericksoa deleted the feat/managed-image-protected-lane-batch branch August 4, 2026 18:12
ericksoa added a commit that referenced this pull request Aug 4, 2026
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
@wscurran wscurran added the chore Build, CI, dependency, or tooling maintenance label Aug 4, 2026
ericksoa added a commit that referenced this pull request Aug 4, 2026
## Summary

- activates the already-trusted exact-head all-agent managed-image
startup lane for native amd64 and arm64
- adds an exact-image production managed-bootstrap harness for OpenClaw,
Hermes, and Deep Agents Code
- adds a dormant protected amd64 runtime lane covering real NVIDIA GPU
access, host-local Ollama, NVIDIA NIM, vLLM, transactional bootstrap
rollback, and exact owned cleanup for every agent
- keeps the new runtime lane explicit-only until a follow-on activation
marker can qualify it from trusted main

## Stack

- based on merged #8226 commit
`08435d31e45ce91391d884a94f5ae59caf5701d5`; signed merge
`beeb0d990f38b4db5809a7ad8a87aaaf39215947` preserves B3-C patch ID
`784174a359c3f95d1898eef01075e5bd6c995afd`, and exact repair head
`59fbc1af816b759c102f391ec289cc0f2023a231` refreshes the two intended
workflow/risk-plan compatibility hashes
- tracks #7744
- does not advertise or activate user-visible buildless support

## Validation

- `npm run checks:repository`
- `npm run typecheck:cli`
- `npm run source-shape:check`
- `npm run test-size:check`
- `npm run test-conditionals:scan -- --top 25`
- `npm run test:e2e-phases:check`
- 9 protected runtime contract tests
- 4 protected runtime workflow-boundary tests
- 95 risk-plan and runtime contract tests
- 50 E2E workflow, upload, preparation, mock-parity, and PR-gate tests

## Safety boundary

The trusted workflow and its fail-closed validator land before
activation. The NVIDIA credential is scoped only to host-side NGC/NIM
setup; managed sandboxes receive generated local route tokens, and the
E2E artifact sink redacts the workflow secret.

Signed-off-by: Aaron Erickson <aerickson@nvidia.com>


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

- **New Features**
- Added protected managed-image GPU qualification for local inference,
startup, rollback, cleanup, and container health.
- Added multi-architecture activation for Linux AMD64 and ARM64
environments.
  - Added support for Ollama, NVIDIA NIM, and vLLM inference runtimes.
  - Added isolated runtime validation and qualification artifacts.

- **Security**
- Strengthened safeguards for trusted sources, credentials, immutable
images, and cleanup.

- **Tests**
- Expanded end-to-end, contract, workflow, risk-plan, and mock-parity
coverage.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
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 area: packaging Packages, images, registries, installers, or distribution area: security Security controls, permissions, secrets, or hardening area: skills Skills, agent behaviors, prompts, or skill packaging chore Build, CI, dependency, or tooling maintenance feature PR adds or expands user-visible functionality integration: dcode LangChain Deep Code integration behavior integration: hermes Hermes integration behavior integration: openclaw OpenClaw integration behavior platform: arm64 Affects ARM64 or aarch64 architecture platform: container Affects Docker, containerd, Podman, or images

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants