Skip to content

fix(security): extend Perl remediation to sibling images - #7844

Closed
senthilr-nv wants to merge 10 commits into
NVIDIA:mainfrom
senthilr-nv:codex/security-perl-sibling-images
Closed

fix(security): extend Perl remediation to sibling images#7844
senthilr-nv wants to merge 10 commits into
NVIDIA:mainfrom
senthilr-nv:codex/security-perl-sibling-images

Conversation

@senthilr-nv

@senthilr-nv senthilr-nv commented Jul 29, 2026

Copy link
Copy Markdown
Collaborator

Summary

Hermes and Deep Agents Code base images currently retain Debian Perl 5.40.1 even though the OpenClaw base already installs the reviewed Perl 5.44.0 security packages.
This change gives all three managed images the same checksum-pinned, fully tested Perl build and publishes the sibling multi-platform images from native runners.

Product Scope

This remediation stays within NemoClaw's existing managed OpenClaw, Hermes, and Deep Agents Code base-image surface. It does not add a new image, integration, or supported workflow.
NemoClaw maintainers own the temporary Perl packaging lifecycle. Remove it when Debian trixie provides an acceptable fixed package. Compatibility and publication evidence cover native linux/amd64 and linux/arm64 builds, checksum-bound source, the complete selected upstream test set, package and runtime probes, immutable inventory checks, and atomic multi-platform publication.

Changes

  • Move the reviewed Perl source build, complete upstream test selection, and Debian packaging into one shared security builder.
  • Install and runtime-verify Perl 5.44.0 and its corrected module versions in the OpenClaw, Hermes, and Deep Agents Code base images.
  • Build Hermes and Deep Agents Code natively on amd64 and arm64, then publish tags only after both immutable platform digests pass.
  • Add regression coverage for package identity, runtime behavior, workflow trust boundaries, completed-image inventory, and atomic manifest publication.
  • Add the point-in-time Perl dependency and migration review.

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: No command, configuration, API, or supported user workflow changes; the included document records the required point-in-time dependency review.
  • 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: Codex Desktop completed the repository security review. Source integrity, shell input handling, package ownership, secret boundaries, pinned actions, and atomic multi-platform publication pass; maintainer approval remains required.
  • 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: docs/security/managed-base-perl-5.44-dependency-review.md remains accurate and sufficient; no additional user-facing Fern page or changelog entry is needed.
  • Agent: Codex Desktop (/root/documentation_writer_review)

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 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 — 5 focused integration files / 55 tests, the corrected security fixtures / 29 tests, and the Dockerfile attestation contract/lifecycle files / 38 tests passed on head 97c5bbb09.
  • Applicable broad gate passed — npm run check:diff passed against refreshed main.
  • 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) — the security review includes SPDX; Fern frontmatter is not applicable because it is not a published page.

Signed-off-by: Senthil Ravichandran senthilr@nvidia.com

@senthilr-nv senthilr-nv added dependencies Pull requests that update a dependency file integration: hermes Hermes integration behavior area: packaging Packages, images, registries, installers, or distribution area: sandbox OpenShell sandbox lifecycle, runtime, config, or recovery area: security Security controls, permissions, secrets, or hardening bug-fix PR fixes a bug or regression platform: container Affects Docker, containerd, Podman, or images integration: dcode LangChain Deep Code integration behavior security v0.0.98 labels Jul 29, 2026
@senthilr-nv senthilr-nv self-assigned this Jul 29, 2026
@coderabbitai

coderabbitai Bot commented Jul 29, 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 deterministic Perl 5.44 Debian package creation and runtime validation to managed base images, and changes Hermes and Deep Agents Code publication to native per-platform digest builds followed by validated multi-platform manifests.

Changes

Managed base-image Perl remediation

Layer / File(s) Summary
Pinned Perl package build
scripts/security/build-perl-security-packages.sh
Downloads and verifies pinned Perl source, runs upstream tests, and builds validated perl-base and perl packages.
Pinned Perl package build and runtime integration
Dockerfile.base, agents/*/Dockerfile.base, Dockerfile, agents/*/Dockerfile
Managed images install Perl artifacts, verify package and runtime versions, record provenance, clean apt metadata, and run dpkg --audit.
Managed-image remediation verification
test/perl-critical-cve-remediation.test.ts, test/*security*.test.ts, docs/security/..., scripts/check-dcode-profile-import-gate.sh, ci/source-shape-test-budget.json
Tests, gates, and documentation validate pinned inputs, package identity, runtime checks, platform coverage, and remediation markers.
Native platform builds and manifest publication
.github/workflows/base-image.yaml, test/dcode-base-image-workflow.test.ts
Sibling images build immutable architecture-specific digests on native runners, upload digest artifacts, and publish validated amd64,arm64 manifests.

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

Sequence Diagram(s)

sequenceDiagram
  participant NativeRunners
  participant DigestArtifacts
  participant ManifestJob
  NativeRunners->>DigestArtifacts: upload amd64 and arm64 image digests
  DigestArtifacts->>ManifestJob: download platform digests
  ManifestJob->>ManifestJob: generate publication tags
  ManifestJob->>ManifestJob: create validated multi-platform manifest
Loading

Possibly related issues

Suggested reviewers: jyaunches, apurvvkumaria

🚥 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 accurately summarizes the main change: extending Perl security remediation to sibling images.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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

@github-actions

github-actions Bot commented Jul 29, 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 · 1 warning · 0 suggestions
  • Model comparison: normalized findings differ; normalized E2E selections differ; Nemotron reported the same number of blockers, 1 more warning, the same number of suggestions.

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-inference, cloud-onboard, full-e2e, hermes-e2e, security-posture, onboard-repair, onboard-resume, ubuntu-repo-cloud-langchain-deepagents-code

2 optional E2E recommendations
  • rebuild-openclaw
  • rebuild-hermes

Workflow run details

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

@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 (5)
Dockerfile.base (1)

228-229: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Inventory records the Perl packages one layer before they are installed.

security-packages.txt is written in the layer ending at Line 235, while the Perl .deb files are installed and verified in the next RUN (Lines 237-255). The build still fails closed if that later layer fails, so this is only an ordering nit; moving these two entries into the Perl install layer would keep the recorded inventory true at write time.

🤖 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 `@Dockerfile.base` around lines 228 - 229, Move the perl-base and perl entries
from the current security-packages inventory block into the later RUN layer that
installs and verifies the Perl .deb files, so security-packages.txt records them
only after installation in that same layer.
test/perl-critical-cve-remediation.test.ts (1)

227-232: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Documentation-prose assertions add little behavioral confidence.

toContain("This change does not cross an upstream Perl release range") and toContain("vulnerability rescan") lock the review document's wording rather than any contract; a copy edit breaks CI without a defect. The PERL-01/PERL-07 ledger-ID checks are the durable part — consider keeping those and dropping the sentence-level matches.

As per path instructions: "Prefer observable outcomes through the public boundary over source-text, private-shape, or mock-call assertions."

🤖 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/perl-critical-cve-remediation.test.ts` around lines 227 - 232, Update
the test case “records the migration boundary and external proof gates (`#7338`)”
to remove sentence-level dependencyReview assertions for “This change does not
cross an upstream Perl release range” and “vulnerability rescan”. Retain the
durable PERL-01 and PERL-07 ledger-ID assertions, along with the existing
observable platform coverage assertion unless it is similarly wording-dependent.

Source: Path instructions

scripts/security/build-perl-security-packages.sh (1)

30-43: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Comment block describes four unrelated decisions but sits above the download.

Lines 30-43 stack the d_syscallproto rationale, the TEST_JOBS rationale, and the ExtUtils::Constant split rationale directly above the curl invocation they do not describe. Moving each paragraph next to the code it justifies (./Configure, the test_harness invocations) keeps the removal conditions discoverable when those lines change.

🤖 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 `@scripts/security/build-perl-security-packages.sh` around lines 30 - 43,
Reposition the explanatory comment paragraphs in the build script so each
decision is adjacent to the code it governs: place the d_syscallproto rationale
by ./Configure, the TEST_JOBS rationale by the test_harness invocations, and the
ExtUtils::Constant split rationale by its isolated and parallel test commands.
Keep each paragraph’s removal conditions and leave unrelated download steps
without these comments.
test/dcode-base-image-workflow.test.ts (1)

201-202: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Share the expected digest-output literal.

The same type=image,...,push-by-digest=true,... string is repeated at Lines 506-508. A module-level constant keeps both assertions in sync when the output contract changes.

🤖 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 201 - 202, Define a
module-level constant for the shared expected digest-output literal, then
replace the duplicated expected-output strings in the assertions near the
existing declaration and the later digest-output assertion with that constant so
both remain synchronized.
.github/workflows/base-image.yaml (1)

353-399: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Publication script is duplicated verbatim in build-and-push-openclaw.

Lines 353-399 and Lines 439-485 are byte-identical apart from the image expression. The atomicity guarantee now depends on two copies staying in sync. Folding OpenClaw into this matrixed job (or extracting the step into a composite action) removes the divergence risk.

As per path instructions: "Derive job inventories and aggregate dependencies from one source of truth or validate them deterministically."

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

In @.github/workflows/base-image.yaml around lines 353 - 399, The multi-platform
manifest publication script is duplicated between the matrix job and
build-and-push-openclaw, creating divergence risk. Consolidate both paths by
folding OpenClaw into the matrix-driven job or extracting the shared Create and
verify multi-platform manifest logic into a reusable composite action, while
preserving the existing digest validation, tag creation, and platform
verification behavior.

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.

Inline comments:
In @.github/workflows/base-image.yaml:
- Around line 307-310: Change the build-and-push job in
.github/workflows/base-image.yaml (lines 307-310) so each matrix image manifest
depends only on its own amd64 and arm64 builds, rather than the shared
build-sibling-platforms job; use per-image platform jobs or keyed digest
artifacts. Update docs/security/managed-base-perl-5.44-dependency-review.md
(lines 52-54) to retain the per-image atomicity wording and PERL-07 disposition,
and update test/dcode-base-image-workflow.test.ts (line 515) so
manifestJob?.needs expects the narrowed per-image dependency.

In `@scripts/security/build-perl-security-packages.sh`:
- Around line 83-87: Update the grep pattern in the test guard to match the
emitted ../cpan/ExtUtils-Constant/t/Constant.t path, while preserving the
exact-count check and existing build gate behavior.

In `@test/dcode-base-image-workflow.test.ts`:
- Line 515: Update the assertion for manifestJob.needs in the relevant test to
match the per-image dependency behavior instead of requiring the full
build-sibling-platforms matrix. Keep the expectation aligned with the narrowed
needs value defined by the workflow and preserve coverage of manifest job
dependency gating.

In `@test/perl-critical-cve-remediation.test.ts`:
- Around line 92-107: Add assertions in the managed-images loop around
PERL_PACKAGE_REVISION and the perl-builder output to verify the installed
perl-base package version via dpkg-query matches fixedPackageVersion. Ensure the
test catches Dockerfiles whose PERL_PACKAGE_REVISION default differs from the
recorded inventory, while preserving the existing PERL_VERSION, PERL_SHA256, and
builder assertions.

---

Nitpick comments:
In @.github/workflows/base-image.yaml:
- Around line 353-399: The multi-platform manifest publication script is
duplicated between the matrix job and build-and-push-openclaw, creating
divergence risk. Consolidate both paths by folding OpenClaw into the
matrix-driven job or extracting the shared Create and verify multi-platform
manifest logic into a reusable composite action, while preserving the existing
digest validation, tag creation, and platform verification behavior.

In `@Dockerfile.base`:
- Around line 228-229: Move the perl-base and perl entries from the current
security-packages inventory block into the later RUN layer that installs and
verifies the Perl .deb files, so security-packages.txt records them only after
installation in that same layer.

In `@scripts/security/build-perl-security-packages.sh`:
- Around line 30-43: Reposition the explanatory comment paragraphs in the build
script so each decision is adjacent to the code it governs: place the
d_syscallproto rationale by ./Configure, the TEST_JOBS rationale by the
test_harness invocations, and the ExtUtils::Constant split rationale by its
isolated and parallel test commands. Keep each paragraph’s removal conditions
and leave unrelated download steps without these comments.

In `@test/dcode-base-image-workflow.test.ts`:
- Around line 201-202: Define a module-level constant for the shared expected
digest-output literal, then replace the duplicated expected-output strings in
the assertions near the existing declaration and the later digest-output
assertion with that constant so both remain synchronized.

In `@test/perl-critical-cve-remediation.test.ts`:
- Around line 227-232: Update the test case “records the migration boundary and
external proof gates (`#7338`)” to remove sentence-level dependencyReview
assertions for “This change does not cross an upstream Perl release range” and
“vulnerability rescan”. Retain the durable PERL-01 and PERL-07 ledger-ID
assertions, along with the existing observable platform coverage assertion
unless it is similarly wording-dependent.
🪄 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: 7594beef-9c6b-4992-997d-a1113a22ea78

📥 Commits

Reviewing files that changed from the base of the PR and between 7b5e0f7 and 2f1dbc7.

📒 Files selected for processing (9)
  • .github/workflows/base-image.yaml
  • Dockerfile.base
  • agents/hermes/Dockerfile.base
  • agents/langchain-deepagents-code/Dockerfile.base
  • ci/source-shape-test-budget.json
  • docs/security/managed-base-perl-5.44-dependency-review.md
  • scripts/security/build-perl-security-packages.sh
  • test/dcode-base-image-workflow.test.ts
  • test/perl-critical-cve-remediation.test.ts
💤 Files with no reviewable changes (1)
  • ci/source-shape-test-budget.json

Comment thread .github/workflows/base-image.yaml Outdated
Comment thread scripts/security/build-perl-security-packages.sh
Comment thread test/dcode-base-image-workflow.test.ts Outdated
Comment thread test/perl-critical-cve-remediation.test.ts

@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/base-image.yaml:
- Around line 437-483: The Hermes manifest step at
.github/workflows/base-image.yaml lines 437-483 must validate each digest source
resolves to exactly linux/amd64 and linux/arm64 before docker buildx imagetools
create publishes any tags; preserve artifact architecture provenance, reject
duplicates or mismatches, and only then create and inspect the manifest. Apply
the same pre-publication source-platform validation to the Deep Agents Code step
at .github/workflows/base-image.yaml lines 521-567, leaving both publication
flows gated on the exact two required architectures.
🪄 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: 57de819d-55a8-4ab0-9d42-369f23d02ade

📥 Commits

Reviewing files that changed from the base of the PR and between 2f1dbc7 and afee283.

📒 Files selected for processing (8)
  • .github/workflows/base-image.yaml
  • Dockerfile.base
  • agents/hermes/Dockerfile.base
  • agents/langchain-deepagents-code/Dockerfile.base
  • ci/source-shape-test-budget.json
  • scripts/security/build-perl-security-packages.sh
  • test/dcode-base-image-workflow.test.ts
  • test/perl-critical-cve-remediation.test.ts
🚧 Files skipped from review as they are similar to previous changes (5)
  • agents/langchain-deepagents-code/Dockerfile.base
  • scripts/security/build-perl-security-packages.sh
  • test/perl-critical-cve-remediation.test.ts
  • agents/hermes/Dockerfile.base
  • test/dcode-base-image-workflow.test.ts

Comment thread .github/workflows/base-image.yaml
…ibling-images

Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com>
Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com>
@cjagwani

Copy link
Copy Markdown
Collaborator

Product-scope and CI handoff for exact head f2ff362e71b762d7547f458c23a307d51f6114c7 (comment only; no changes-requested review):

The linked #7338 defines early-warning/rescan behavior and explicitly requires product/security ownership for maintained-image scope; it does not accept the separate decision to build, package, install, and publish Perl 5.44 across the Hermes and Deep Agents Code base images. Before this can be approved as canonical NemoClaw behavior, please link an accepted issue/design decision that names those image consumers and defines ownership, lifecycle/removal criteria, architecture compatibility, security validation, and publication evidence. This is the repository Product Scope Gate, so I am not modifying the branch while that decision is missing.

The current head is also materially red: both image builds and CLI test shards fail, the plain-progress/Dockerfile contract rejects the added ARG shape, and the security-package inventory expectations no longer match. Those are implementation failures rather than waivable external flakes. Once scope is accepted and the author produces a quiet green head, I’ll resume the exact dependency-migration/security review and protected E2E babysitting.

@senthilr-nv

Copy link
Copy Markdown
Collaborator Author

ACK — the product-scope and CI findings were valid.

The PR description now records the intended product boundary: this is a security remediation for the existing managed OpenClaw, Hermes, and Deep Agents Code images, not a new image or integration. It also defines NemoClaw ownership, the Debian removal condition, native architecture support, and required security/publication evidence. No code changes were made for product scope.

Head 96f627b6a5716172fa1cafac0dd420bddcbd3e20 is refreshed onto current main and fixes the implementation failures:

  • accept the reviewed public PERL_* source/package identity arguments in the existing build gate;
  • use Perl harness's normalized cpan/... dumptest path;
  • verify the Perl packages, runtime, and immutable inventory in all three completed images;
  • update the hermetic security-package fixtures for the installed Perl state.

Local evidence on the exact head: 5 focused integration files / 55 tests passed, npm run check:diff passed, documentation-writer review passed, gitleaks found no secrets, and GitHub marks the commit Verified. Fresh PR CI is now running.

Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com>
@senthilr-nv

Copy link
Copy Markdown
Collaborator Author

Follow-up head 4b8c23d32dd821b5897efc92fc826497da89a6b2 resolves the deterministic codebase-growth-guardrails failure by keeping the inventory fixture linear; production behavior is unchanged. The focused file passes 18/18, the conditional scan adds no if statements, npm run check:diff passes, GitHub marks the commit Verified, and the exact-head documentation receipt is refreshed.

@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

🤖 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/helpers/base-apt-security-functions.ts`:
- Around line 103-104: Model perl-base and perl installation independently: in
test/helpers/base-apt-security-functions.ts lines 103-104, return each package
version only when its own installation marker is set; in lines 188-202, gate the
runtime double on the perl-base marker. In test/hermes-share-mount-deps.test.ts
lines 81-82 and test/sandbox-base-security-packages.test.ts lines 134-135,
record both package paths independently. In
test/sandbox-base-security-packages.test.ts line 177, initialize both markers
for the completed-image fixture.

In `@test/sandbox-base-security-packages.test.ts`:
- Around line 143-147: Update the test expectations around includesPerl and the
prepared inventory so OpenClaw follows the same Perl inventory and immutable
0444 mode contract as Hermes and Deep Agents Code. Remove the
image-name-specific exception and require the shared Perl inventory for every
managed image.
🪄 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: 32dc9d10-b183-4e1a-98e9-c4cf91864462

📥 Commits

Reviewing files that changed from the base of the PR and between f2ff362 and 96f627b.

📒 Files selected for processing (10)
  • Dockerfile
  • agents/hermes/Dockerfile
  • agents/langchain-deepagents-code/Dockerfile
  • scripts/check-dcode-profile-import-gate.sh
  • scripts/security/build-perl-security-packages.sh
  • test/helpers/base-apt-security-functions.ts
  • test/hermes-share-mount-deps.test.ts
  • test/langchain-deepagents-code-profile-build-gate.test.ts
  • test/perl-critical-cve-remediation.test.ts
  • test/sandbox-base-security-packages.test.ts

Comment thread test/helpers/base-apt-security-functions.ts Outdated
Comment thread test/sandbox-base-security-packages.test.ts Outdated

@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/sandbox-base-security-packages.test.ts (1)

175-175: 🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

Do not pre-seed perl_packages_installed in the completed-image contract mock.

Setting this marker before executing the extracted verification command makes dpkg-query report pinned Perl versions even if the Dockerfile omitted or failed to install the Perl packages. Set the marker only when the mocked install path requests the Perl artifact, or explicitly assert that the completed-image install command contains and executes both pinned Perl packages.

As per path instructions, tests must not use broad mocks that bypass the behavior under test.

🤖 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/sandbox-base-security-packages.test.ts` at line 175, Remove the
pre-seeded perl_packages_installed marker from the completed-image contract
mock. Update the mocked install path to set it only when the Perl artifact is
requested, and ensure the verification asserts both pinned Perl packages are
actually installed without broad mocks bypassing the behavior under test.

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/sandbox-base-security-packages.test.ts`:
- Line 175: Remove the pre-seeded perl_packages_installed marker from the
completed-image contract mock. Update the mocked install path to set it only
when the Perl artifact is requested, and ensure the verification asserts both
pinned Perl packages are actually installed without broad mocks bypassing the
behavior under test.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 5242027c-b1cf-48ed-9a0d-f5a43dd36292

📥 Commits

Reviewing files that changed from the base of the PR and between 96f627b and 4b8c23d.

📒 Files selected for processing (1)
  • test/sandbox-base-security-packages.test.ts

Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com>
Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com>
@senthilr-nv

Copy link
Copy Markdown
Collaborator Author

Superseded by internal PR #7864. The branch now lives directly in NVIDIA/NemoClaw so trusted CI can run without the fork credential-control path; the rebased commits remain signed and GitHub Verified.

@cjagwani

Copy link
Copy Markdown
Collaborator

The exact-head protected run blocks approval at 97c5bbb09b4f1111afdab330674f5475a36407bb.

Two concrete image failures are visible in the selected evidence:

The ordinary suite, both primary review-advisor lanes, DCO, and static security checks are green, and I found no live unresolved review thread. However, the protected image/lifecycle evidence is directly in scope for this three-image remediation and cannot be waived as unrelated infrastructure. The branch also needs refresh onto current main after the failures are fixed; maintainer edits are disabled.

I will re-review the next quiet revision. This is a plain review comment, not Changes Requested.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: packaging Packages, images, registries, installers, or distribution area: sandbox OpenShell sandbox lifecycle, runtime, config, or recovery area: security Security controls, permissions, secrets, or hardening bug-fix PR fixes a bug or regression dependencies Pull requests that update a dependency file integration: dcode LangChain Deep Code integration behavior integration: hermes Hermes integration behavior platform: container Affects Docker, containerd, Podman, or images security

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants