Skip to content

test(inference): stage OpenClaw llama.cpp qualification - #8532

Merged
ericksoa merged 6 commits into
mainfrom
feat/llamacpp-openclaw-qualification-8144
Aug 7, 2026
Merged

test(inference): stage OpenClaw llama.cpp qualification#8532
ericksoa merged 6 commits into
mainfrom
feat/llamacpp-openclaw-qualification-8144

Conversation

@ericksoa

@ericksoa ericksoa commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Summary

Stages the execution-disabled, YAML-authored qualification path for running OpenClaw against the existing llama.cpp/Nemotron single-DGX-Spark recipe through inference.local. This lands the trusted compiler, protected runner wiring, and evidence contract without claiming support; the shipped recipe still declares agents: [], and a later YAML-only activation can exercise the tuple after this code is on main.

Related Issue

Advances #8144.

Changes

  • Adds a strict standalone AgentQualification YAML that pins the OpenClaw image digest, Docker runtime, route, bounds, prompts, sessions, tool fixture, and required probes while keeping execution disabled.
  • Extends the trusted DGX Spark plan and runner to conditionally install OpenShell, route the already-qualified llama.cpp server through inference.local, execute synchronous/streaming and real agent/tool/multi-turn probes, and emit sanitized identity-bound evidence.
  • Keeps the existing llama.cpp image manifest and shipped recipe unchanged, preserves the trusted-main/candidate-config boundary, restores operation-scoped process state, and requires exact cleanup.
  • Updates risk selection and focused tests so changing the qualification YAML selects the protected Spark lane and cannot silently bypass the declarative plan.

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: execution remains disabled, the shipped recipe still declares no qualified agents, and current docs already state that support requires protected qualification and activation.
  • 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: author threat review covered strict candidate parsing, trusted-main execution, credential non-disclosure, immutable image/model identities, loopback-only host exposure, no direct sandbox GPU access, bounded evidence, and exact cleanup; automated security and review advisors remain required 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: no-docs-needed
  • Evidence: This PR adds an execution-disabled protected OpenClaw and llama.cpp qualification path and strengthens its evidence, cleanup, and trusted-workflow controls. The shipped recipe still declares no qualified agents, and existing documentation already states that support requires protected qualification and activation.
  • 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 — npm run typecheck -- --pretty false; 233 focused qualification, workflow, and risk tests.
  • Applicable broad gate passed — GitHub's broad Linux CI is required; the local macOS aggregate run was stopped after unrelated watcher tests exceeded their existing time budgets.
  • 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 optional OpenClaw agent qualification for llama.cpp managed inference.
    • Added declarative chat, streaming, tool-use, and continuation probes.
    • Added local llama.cpp routing and protected runtime support.
    • Qualification results now include structured agent evidence and execution details.
    • CI now conditionally installs required sandbox tooling and exposes qualification status.
  • Bug Fixes

    • Improved validation of image identity, revisions, routes, cleanup, and runtime behavior.
    • Prevented unauthorized or incorrectly configured qualification execution.
  • Tests

    • Expanded end-to-end coverage for qualification workflows, probes, routing, and failure handling.

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

coderabbitai Bot commented Aug 7, 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 declarative OpenClaw qualification for llama.cpp DGX Spark. It defines qualification contracts, bounded probes, managed-image execution, llama.cpp routing, workflow gating, receipt validation, and risk-plan activation.

Changes

llama.cpp OpenClaw qualification

Layer / File(s) Summary
Qualification manifest and contracts
managed-inference/qualifications/*, scripts/checks/llama-cpp-dgx-spark-qualification-contract.mts, scripts/checks/export-llama-cpp-image-config.mts, scripts/checks/export-llama-cpp-dgx-spark-qualification-plan.mts, test/llama-cpp-*
Adds the OpenClaw manifest, strict plan parsing, execution-plan export, receipt evidence, and contract coverage.
OpenClaw probe execution
scripts/checks/llama-cpp-openclaw-agent-qualification.mts, scripts/checks/run-managed-image-openshell-e2e.ts, scripts/checks/managed-image-protected-runtime-contract.ts, test/llama-cpp-openclaw-agent-qualification.test.ts, test/managed-image-protected-runtime-contract.test.ts
Adds bounded synchronous, streaming, tool-call, continuation, and session-log probes. Adds llama.cpp local-route support and structured probe results.
Managed qualification orchestration
scripts/checks/run-llama-cpp-dgx-spark-qualification.mts, test/e2e/live/*, test/llama-cpp-dgx-spark-qualification-runner.test.ts
Validates OpenClaw image labels and routes, publishes the configured host port, runs qualification, restores environment variables, and records evidence.
Workflow activation and risk selection
.github/workflows/e2e.yaml, tools/e2e/*, tools/advisors/risk-plan.mts, test/e2e/support/*, test/pr-risk-plan.test.ts
Exposes the agent execution output, conditionally installs OpenShell, validates workflow boundaries, and activates the qualification manifest in the risk plan.

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

Sequence Diagram(s)

sequenceDiagram
  participant Workflow
  participant QualificationPlan
  participant DgxSparkRunner
  participant OpenShellE2E
  participant OpenClaw
  participant LlamaCpp

  Workflow->>QualificationPlan: export agent_qualification_execution
  Workflow->>OpenShellE2E: install OpenShell when enabled
  DgxSparkRunner->>OpenClaw: validate image and run probes
  OpenClaw->>LlamaCpp: send synchronous and streaming requests
  OpenShellE2E-->>DgxSparkRunner: return probe evidence and cleanup status
  DgxSparkRunner-->>Workflow: record validated receipt
Loading

Possibly related issues

Possibly related PRs

  • NVIDIA/NemoClaw#8515: Shares the qualification contract, plan export, runner, and bounded receipt validation changes.
  • NVIDIA/NemoClaw#8477: Shares the llama.cpp qualification workflow and boundary validation.

Suggested labels: area: inference

Suggested reviewers: cv

🚥 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 describes the staged OpenClaw qualification work for llama.cpp.
✨ 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/llamacpp-openclaw-qualification-8144

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

@github-code-quality

github-code-quality Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Overview

Languages: TypeScript

TypeScript / code-coverage/plugin

The overall coverage in commit 39b66e9 in the feat/llamacpp-opencl... branch remains at 96%, unchanged from commit df56c02 in the main branch.

TypeScript / code-coverage/cli

The overall coverage in commit 39b66e9 in the feat/llamacpp-opencl... branch remains at 81%, unchanged from commit df56c02 in the main branch.

Show a code coverage summary of the most impacted files.
File main df56c02 feat/llamacpp-opencl... 39b66e9 +/-
src/lib/onboard...flight-ports.ts 67% 33% -34%
src/lib/inferen...a/model-size.ts 96% 83% -13%
src/lib/messagi...ink-base-url.ts 100% 90% -10%
src/lib/messagi...onfig-parser.ts 100% 93% -7%
src/lib/platform.ts 89% 84% -5%
src/lib/trace.ts 94% 90% -4%
src/lib/credentials/store.ts 56% 55% -1%
src/lib/messagi...flow-planner.ts 91% 91% 0%
src/lib/actions...air-approval.ts 89% 90% +1%
src/lib/core/pr...mpt-activity.ts 67% 92% +25%

Updated August 07, 2026 07:03 UTC

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

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

🧹 Nitpick comments (5)
tools/advisors/risk-plan.mts (1)

100-101: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Consider deriving the qualification path from one canonical constant.

This path literal now exists in at least three places: here, in scripts/checks/export-llama-cpp-image-config.mts (Lines 154-159 and 913-916), and in test/pr-risk-plan.test.ts Line 475. If the manifest is renamed and only the export script is updated, this rule silently stops selecting the protected DGX Spark lane while the file still drives qualification behavior. The failure is silent because no check compares the two literals.

Export the path constant from the contract module and import it in both the advisor and the export script. Keep the test literal as an independent copy so it still detects an unintended path change.

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 100 - 101, Export the
qualification path from the contract module that defines the canonical manifest
contract, then replace the duplicated literal in the advisor constant
LLAMA_CPP_DGX_SPARK_AGENT_QUALIFICATION and the export script’s corresponding
references with that imported constant. Leave the independent literal in
test/pr-risk-plan.test.ts unchanged so the test continues detecting unintended
path changes.

Source: Path instructions

test/pr-risk-plan.test.ts (1)

490-492: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Add a false-positive case for the new qualification path.

This assertion proves detection. It does not prove the rule stays narrow. A neighbouring file such as managed-inference/qualifications/other.yaml or managed-inference/recipes/llama-cpp.nemotron-3-nano-30b-a3b.spark-single.v1.yaml must not select llama-cpp-dgx-spark-qualification, because the rule uses exact equality rather than a prefix. Add one negative assertion to lock that boundary.

As per path instructions: "Require focused tests for both detection and false-positive behavior."

🤖 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 490 - 492, Add a focused negative
assertion alongside the existing riskPlanRequiredJobIds test, using a
neighbouring non-matching qualification or recipe path, and verify it does not
include "llama-cpp-dgx-spark-qualification". Preserve the existing positive
detection assertion to cover both exact-match detection and prefix-based
false-positive prevention.

Source: Path instructions

test/managed-image-protected-runtime-contract.test.ts (1)

148-196: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Add the llama-cpp plus --gpu rejection case.

The title claims llama.cpp runs "without direct sandbox GPU access". The three cases prove llama.cpp is accepted without --gpu, vLLM is rejected without --gpu, and failure injection is rejected. None of them proves that llama.cpp with --gpu fails. The parser guard at scripts/checks/run-managed-image-openshell-e2e.ts line 183 covers that rule and stays untested. The same guard also rejects llama.cpp without --model.

Add a case for each branch so the guard cannot be removed without a test failure.

🤖 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-protected-runtime-contract.test.ts` around lines 148 -
196, Extend the test in “allows only llama.cpp local inference without direct
sandbox GPU access” to assert that llama-cpp with --gpu throws the expected
rejection, and that llama-cpp without --model also throws. Keep the existing
accepted llama-cpp case and unrelated rejection cases unchanged, using
parseManagedImageOpenShellE2eInputs for both new assertions.
scripts/checks/run-managed-image-openshell-e2e.ts (1)

921-923: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Confirm that skipping assertProtectedLocalInference is intended.

When a caller supplies afterLocalInference, this runner no longer asserts protected local inference itself. The callback becomes the only inference proof. The current llama.cpp callback does probe inference.local, so the guarantee holds today. A future callback that does not probe inference would silently lose the assertion.

Consider running assertProtectedLocalInference in both paths, or document why the callback replaces it.

🤖 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/checks/run-managed-image-openshell-e2e.ts` around lines 921 - 923,
Ensure protected local inference is asserted for every local-provider run,
including when afterLocalInference is supplied, by updating the conditional
around assertProtectedLocalInference in the runner. Preserve the callback
execution while preventing it from being the sole inference guarantee.
test/llama-cpp-dgx-spark-qualification-runner.test.ts (1)

390-410: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Cover the revision and malformed-JSON rejections.

The test proves one of the five label checks in validateOpenClawQualificationImageLabels. A wrong org.opencontainers.image.revision is the check that binds the image to the declarative source revision, and it stays untested. The malformed-JSON path that throws "labels are invalid" is also untested.

Add a case that passes a different expected revision, and a case that passes a non-JSON string.

🤖 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/llama-cpp-dgx-spark-qualification-runner.test.ts` around lines 390 -
410, Extend the test for validateOpenClawQualificationImageLabels with a case
using a different expected revision and asserting the declarative-source
revision error, plus a case passing malformed JSON and asserting the “labels are
invalid” error. Keep the existing valid-label and agent-identity assertions
unchanged.
🤖 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 `@scripts/checks/llama-cpp-openclaw-agent-qualification.mts`:
- Around line 25-37: Redact child-process output before it reaches the thrown
error in requireSuccess. Replace the raw stdout/stderr handling in detail with
the audited managed-image redaction helper used by sibling probes, or limit
failures to the label and exit status; preserve the response-size check while
ensuring credentials, tokens, prompts, request data, and model output cannot
enter CI logs.
- Around line 13-16: Update the qualification evidence type and return value in
the plan-derived tool-call flow around agentToolCall to use the configured tool
name from config.tool.name instead of the literal "read"; ensure
parseLlamaCppDgxSparkQualificationReceipt continues receiving the same
configured name that the session probe validated.

In `@scripts/checks/run-llama-cpp-dgx-spark-qualification.mts`:
- Around line 1012-1016: Move the docker startup-log retrieval and
validateStartupLog call to immediately after waitForHealth, before the OpenClaw
qualification probes run. Store the validated result and reuse it at the current
qualification point instead of reading docker logs again, preserving the
existing maximumBytes and UTF-8 decoding.

In `@scripts/checks/run-managed-image-openshell-e2e.ts`:
- Around line 1081-1089: Update the gateway cleanup logic in the finally block
to inspect the result of stopping/removing the gateway, and append a descriptive
failure to cleanupErrors when removal cannot be verified. Only set
cleanup.gatewayRemoved to true after successful verification, while preserving
the existing cleanup receipt structure and qualification flow.

In `@test/llama-cpp-openclaw-agent-qualification.test.ts`:
- Around line 36-45: Remove the if statement in runSandbox that checks !output,
and replace it with an expression that still throws on unexpected qualification
invocations while preserving the existing output handling and returned status,
stdout, and stderr values.

In `@tools/e2e/llama-cpp-dgx-spark-qualification-workflow-boundary.mts`:
- Around line 331-353: Add the same explicit negative check used by the
`compile` and `qualify` validation paths to the `installOpenShell` step: reject
its `run` body when it contains `.candidate-llama-cpp/scripts`. Keep the
existing `requireFragments` assertions and gate validation unchanged.

---

Nitpick comments:
In `@scripts/checks/run-managed-image-openshell-e2e.ts`:
- Around line 921-923: Ensure protected local inference is asserted for every
local-provider run, including when afterLocalInference is supplied, by updating
the conditional around assertProtectedLocalInference in the runner. Preserve the
callback execution while preventing it from being the sole inference guarantee.

In `@test/llama-cpp-dgx-spark-qualification-runner.test.ts`:
- Around line 390-410: Extend the test for
validateOpenClawQualificationImageLabels with a case using a different expected
revision and asserting the declarative-source revision error, plus a case
passing malformed JSON and asserting the “labels are invalid” error. Keep the
existing valid-label and agent-identity assertions unchanged.

In `@test/managed-image-protected-runtime-contract.test.ts`:
- Around line 148-196: Extend the test in “allows only llama.cpp local inference
without direct sandbox GPU access” to assert that llama-cpp with --gpu throws
the expected rejection, and that llama-cpp without --model also throws. Keep the
existing accepted llama-cpp case and unrelated rejection cases unchanged, using
parseManagedImageOpenShellE2eInputs for both new assertions.

In `@test/pr-risk-plan.test.ts`:
- Around line 490-492: Add a focused negative assertion alongside the existing
riskPlanRequiredJobIds test, using a neighbouring non-matching qualification or
recipe path, and verify it does not include "llama-cpp-dgx-spark-qualification".
Preserve the existing positive detection assertion to cover both exact-match
detection and prefix-based false-positive prevention.

In `@tools/advisors/risk-plan.mts`:
- Around line 100-101: Export the qualification path from the contract module
that defines the canonical manifest contract, then replace the duplicated
literal in the advisor constant LLAMA_CPP_DGX_SPARK_AGENT_QUALIFICATION and the
export script’s corresponding references with that imported constant. Leave the
independent literal in test/pr-risk-plan.test.ts unchanged so the test continues
detecting unintended path changes.
🪄 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: ec4d68e8-8558-4970-9e71-8fcadee41a89

📥 Commits

Reviewing files that changed from the base of the PR and between a38fe35 and 4ef36c7.

📒 Files selected for processing (21)
  • .github/workflows/e2e.yaml
  • managed-inference/qualifications/llama-cpp.openclaw.spark-single.v1.yaml
  • scripts/checks/export-llama-cpp-dgx-spark-qualification-plan.mts
  • scripts/checks/export-llama-cpp-image-config.mts
  • scripts/checks/llama-cpp-dgx-spark-qualification-contract.mts
  • scripts/checks/llama-cpp-openclaw-agent-qualification.mts
  • scripts/checks/managed-image-protected-runtime-contract.ts
  • scripts/checks/run-llama-cpp-dgx-spark-qualification.mts
  • scripts/checks/run-managed-image-openshell-e2e.ts
  • test/e2e/live/llama-cpp-dgx-spark-qualification.test.ts
  • test/e2e/support/e2e-cross-runtime-compatibility.test.ts
  • test/e2e/support/llama-cpp-dgx-spark-qualification-workflow.test.ts
  • test/llama-cpp-dgx-spark-qualification-contract.test.ts
  • test/llama-cpp-dgx-spark-qualification-plan.test.ts
  • test/llama-cpp-dgx-spark-qualification-runner.test.ts
  • test/llama-cpp-image.test.ts
  • test/llama-cpp-openclaw-agent-qualification.test.ts
  • test/managed-image-protected-runtime-contract.test.ts
  • test/pr-risk-plan.test.ts
  • tools/advisors/risk-plan.mts
  • tools/e2e/llama-cpp-dgx-spark-qualification-workflow-boundary.mts

Comment thread scripts/checks/llama-cpp-openclaw-agent-qualification.mts
Comment thread scripts/checks/llama-cpp-openclaw-agent-qualification.mts Outdated
Comment thread scripts/checks/run-llama-cpp-dgx-spark-qualification.mts Outdated
Comment on lines +1081 to +1089
return {
cleanup: {
gatewayRemoved: true,
networkRemoved: true,
sandboxRemoved: true,
stateRemoved: true,
},
...(probeEvidence === undefined ? {} : { probeEvidence }),
};

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.

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

gatewayRemoved: true is asserted, not proven.

The returned cleanup record is a literal. The caller copies it into the qualification receipt at scripts/checks/run-llama-cpp-dgx-spark-qualification.mts line 991, and the receipt parser accepts it as cleanup evidence. Three of the four fields have a matching verification in the finally block: the container, the network, and the state directory each push to cleanupErrors when removal cannot be proven. The gateway does not. Lines 963-966 stop the gateway process and run gateway remove without inspecting the result, so gatewayRemoved: true records an outcome that was never checked.

Verify gateway removal and push a cleanup error when it fails, so the receipt reports measured cleanup.

🤖 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/checks/run-managed-image-openshell-e2e.ts` around lines 1081 - 1089,
Update the gateway cleanup logic in the finally block to inspect the result of
stopping/removing the gateway, and append a descriptive failure to cleanupErrors
when removal cannot be verified. Only set cleanup.gatewayRemoved to true after
successful verification, while preserving the existing cleanup receipt structure
and qualification flow.

Comment thread test/llama-cpp-openclaw-agent-qualification.test.ts
Comment thread tools/e2e/llama-cpp-dgx-spark-qualification-workflow-boundary.mts
@github-actions

github-actions Bot commented Aug 7, 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.
8 terminology differences from the second opinion

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

  • inference.local at managed-inference/qualifications/llama-cpp.openclaw.spark-single.v1.yaml:23: selected only by the second-opinion lane as established.
  • llama-cpp-local at managed-inference/qualifications/llama-cpp.openclaw.spark-single.v1.yaml:21: selected only by the second-opinion lane as established.
  • NEMOCLAW_LLAMACPP_LOCAL_TOKEN at scripts/checks/managed-image-protected-runtime-contract.ts:23: selected only by the second-opinion lane as established.
  • agent-multi-turn at managed-inference/qualifications/llama-cpp.openclaw.spark-single.v1.yaml:31: selected only by the second-opinion lane as define.
  • agent-tool-result-continuation at managed-inference/qualifications/llama-cpp.openclaw.spark-single.v1.yaml:30: selected only by the second-opinion lane as define.
  • agent-normal-turn at managed-inference/qualifications/llama-cpp.openclaw.spark-single.v1.yaml:28: selected only by the second-opinion lane as define.
  • AgentQualification at managed-inference/qualifications/llama-cpp.openclaw.spark-single.v1.yaml:5: selected only by the second-opinion lane as define.
  • agent-tool-call at managed-inference/qualifications/llama-cpp.openclaw.spark-single.v1.yaml:29: 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.

  • snapshot-commands: The completed second-opinion lane identified E2E coverage that the primary lane omitted.
  • openshell-gateway-upgrade: The completed second-opinion lane identified E2E coverage that the primary lane omitted.
  • rebuild-openclaw: The completed second-opinion lane identified E2E coverage that the primary lane omitted.

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.

  • define — declarative agent qualification at tools/e2e/llama-cpp-dgx-spark-qualification-workflow-boundary.mts:342: Define this at first explanatory use as an AgentQualification manifest, or use agent qualification manifest.
  • established — protected local inference at scripts/checks/run-managed-image-openshell-e2e.ts:946: Retain the established term for the post-route probe.

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, managed-image-protected-runtime, security-posture, inference-routing, llama-cpp-dgx-spark-qualification, network-policy

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>
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>

@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 `@tools/advisors/risk-plan.mts`:
- Line 5: Update the contract imports and risk-selection logic around
llamaCppDgxSparkQualificationContract to destructure and use
LLAMA_CPP_DGX_SPARK_QUALIFICATION_ACTIVATION_PATH alongside the agent path,
replacing the local activation-path comparison. Add focused coverage for both
protected paths and one unrelated path, using the canonical contract paths
rather than duplicating them.
🪄 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: ae048266-513c-48e2-9a35-776650b4a05a

📥 Commits

Reviewing files that changed from the base of the PR and between a25073c and 0da5641.

📒 Files selected for processing (12)
  • scripts/checks/export-llama-cpp-image-config.mts
  • scripts/checks/llama-cpp-dgx-spark-qualification-contract.mts
  • scripts/checks/llama-cpp-openclaw-agent-qualification.mts
  • scripts/checks/run-llama-cpp-dgx-spark-qualification.mts
  • scripts/checks/run-managed-image-openshell-e2e.ts
  • test/e2e/support/llama-cpp-dgx-spark-qualification-workflow.test.ts
  • test/llama-cpp-dgx-spark-qualification-runner.test.ts
  • test/llama-cpp-openclaw-agent-qualification.test.ts
  • test/managed-image-protected-runtime-contract.test.ts
  • test/pr-risk-plan.test.ts
  • tools/advisors/risk-plan.mts
  • tools/e2e/llama-cpp-dgx-spark-qualification-workflow-boundary.mts
🚧 Files skipped from review as they are similar to previous changes (9)
  • test/pr-risk-plan.test.ts
  • tools/e2e/llama-cpp-dgx-spark-qualification-workflow-boundary.mts
  • test/llama-cpp-dgx-spark-qualification-runner.test.ts
  • test/llama-cpp-openclaw-agent-qualification.test.ts
  • scripts/checks/export-llama-cpp-image-config.mts
  • test/managed-image-protected-runtime-contract.test.ts
  • scripts/checks/run-llama-cpp-dgx-spark-qualification.mts
  • scripts/checks/llama-cpp-dgx-spark-qualification-contract.mts
  • scripts/checks/llama-cpp-openclaw-agent-qualification.mts

Comment thread tools/advisors/risk-plan.mts Outdated
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
@ericksoa
ericksoa merged commit cabe038 into main Aug 7, 2026
101 checks passed
@ericksoa
ericksoa deleted the feat/llamacpp-openclaw-qualification-8144 branch August 7, 2026 07:46
@github-actions github-actions Bot added the v0.0.105 Release target label Aug 7, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

v0.0.105 Release target

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant