feat(release): preflight E2E evidence in parallel - #7655
Conversation
Signed-off-by: Carlos Villela <cvillela@nvidia.com>
📝 WalkthroughWalkthroughThe release process now performs E2E preflight planning, readiness-based dispatch, candidate-SHA validation, trusted receipt collection, and attempt-aware evidence ledger generation. Release guidance, orchestration, CLI tooling, workflow validation, and tests are updated. ChangesRelease E2E qualification
Estimated code review effort: 4 (Complex) | ~60 minutes Sequence Diagram(s)sequenceDiagram
participant Maintainer
participant ReleaseE2eEvidence
participant MaintainerE2E
participant GitHubActions
Maintainer->>ReleaseE2eEvidence: build candidate-SHA preflight
ReleaseE2eEvidence-->>Maintainer: return dispatch groups and expected executions
Maintainer->>MaintainerE2E: dispatch release coverage group
MaintainerE2E->>GitHubActions: dispatch default and explicit lanes
GitHubActions-->>MaintainerE2E: return receipts and job attempts
Maintainer->>ReleaseE2eEvidence: build ledger from manifest
ReleaseE2eEvidence-->>Maintainer: return green and missing execution counts
Possibly related PRs
Suggested labels: Suggested reviewers: 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
|
🌿 Preview your docs: https://nvidia-preview-pr-7655.docs.buildwithfern.com/nemoclaw |
Code Coverage OverviewLanguages: TypeScript TypeScript / code-coverage/pluginThe overall coverage in commit 0173d70 in the TypeScript / code-coverage/cliThe overall coverage in commit 0173d70 in the Show a code coverage summary of the most impacted files.
Updated |
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (3)
test/release-e2e-evidence.test.ts (1)
78-83: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winAvoid asserting selector ordering.
parallelExplicit.jobsrepresents selected jobs, not an ordered behavior. Compare sets (or sorted arrays) so harmless workflow/inventory reordering does not fail this test.Proposed fix
- expect(plan.dispatches.parallelExplicit.jobs.split(",")).toEqual([ + expect(new Set(plan.dispatches.parallelExplicit.jobs.split(","))).toEqual(new Set([ "openshell-gateway-auth-contract", "mcp-bridge-dev", "hermes-gpu-startup", "sandbox-rlimits-connect", - ]); + ]));🤖 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/release-e2e-evidence.test.ts` around lines 78 - 83, Update the assertion for parallelExplicit.jobs in the release evidence test to compare the selected job names order-independently, such as by sorting both arrays or comparing sets. Preserve validation of the same four job identifiers without requiring their declaration order.Source: Path instructions
.agents/skills/nemoclaw-maintainer-cut-release-tag/scripts/release-e2e-evidence.mts (1)
258-264: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick winFragile job-classification via whole-object string search.
isQualificationJob/requiresConfirmedJetsonRunnerstringify the entire job definition and substring-search for input names, rather than inspecting the specific field (e.g.job.if) that actually gates dispatch. A step name, comment, or unrelated script line mentioninginclude_staging_brev_launchable/allow_jetson_runner_queuewould falsely match. The qualification-job case is guarded by thelength !== 1check (Line 284-288), butconditionalJobshas no equivalent safety net — a false match there would silently misclassify a job into the wrong dispatch group.Consider inspecting
job.if(or another specific field) directly instead of stringifying the whole job.🤖 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 @.agents/skills/nemoclaw-maintainer-cut-release-tag/scripts/release-e2e-evidence.mts around lines 258 - 264, Update isQualificationJob and requiresConfirmedJetsonRunner to inspect the job.if dispatch condition directly, rather than JSON.stringify(job), and match the relevant input names only within that field. Preserve the existing classification behavior while preventing matches from step names, comments, or unrelated job content..agents/skills/nemoclaw-maintainer-e2e/SKILL.md (1)
199-206: 🚀 Performance & Scalability | 🔵 Trivial | ⚡ Quick winPossible duplicate job-attempt collection with
cut-release-tag/SKILL.md.This block paginates
jobs?filter=allintojobs-all-$RUN_ID.jsonper run "for the matrix-preserving ledger."cut-release-tag/SKILL.md(Lines 183-192) separately runs the identicalgh api --paginate --slurp ... jobs?filter=all ...call for "every accepted default, explicit, and conditional run" to buildjobs-$RUN_ID.jsonfor its manifest. If both steps run against the same release-coverage-group runs, this doubles the paginated GitHub API calls per run and creates two evidence files with overlapping purpose but no clear single source of truth for the ledger.Please clarify whether this file's
jobs-all-$RUN_ID.jsonoutput is meant to be handed back tocut-release-tag(avoiding its own re-fetch), or whether the two collection points are intentionally independent for different callers.🤖 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 @.agents/skills/nemoclaw-maintainer-e2e/SKILL.md around lines 199 - 206, Clarify the ownership of the paginated jobs collection between this release-coverage flow and cut-release-tag: either make jobs-all-$RUN_ID.json the shared input handed to cut-release-tag so it reuses the existing response instead of fetching jobs?filter=all again, or explicitly document why both collections are independent and preserve distinct evidence purposes. Update the surrounding instructions and filenames/references consistently.
🤖 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 299-312: Exclude the special-cased "live" job from defaultJobIds
alongside "shared-e2e" and explicit jobs. Update the filter in the executions
construction so jobExecutions("live", ...) remains the sole source of live
executions and execution IDs stay unique.
In @.agents/skills/nemoclaw-maintainer-policies/references/release-train.md:
- Around line 54-62: Update the protected qualification trigger in the
release-train policy so full-mode nemoclaw-maintainer-e2e dispatch occurs
whenever no applicable exact Brev Launchable evidence exists for the candidate
SHA, rather than merely when no full-mode run exists. Keep the existing
requirements for the successful Exact staging Brev Launchable job and its
receipts unchanged.
---
Nitpick comments:
In
@.agents/skills/nemoclaw-maintainer-cut-release-tag/scripts/release-e2e-evidence.mts:
- Around line 258-264: Update isQualificationJob and
requiresConfirmedJetsonRunner to inspect the job.if dispatch condition directly,
rather than JSON.stringify(job), and match the relevant input names only within
that field. Preserve the existing classification behavior while preventing
matches from step names, comments, or unrelated job content.
In @.agents/skills/nemoclaw-maintainer-e2e/SKILL.md:
- Around line 199-206: Clarify the ownership of the paginated jobs collection
between this release-coverage flow and cut-release-tag: either make
jobs-all-$RUN_ID.json the shared input handed to cut-release-tag so it reuses
the existing response instead of fetching jobs?filter=all again, or explicitly
document why both collections are independent and preserve distinct evidence
purposes. Update the surrounding instructions and filenames/references
consistently.
In `@test/release-e2e-evidence.test.ts`:
- Around line 78-83: Update the assertion for parallelExplicit.jobs in the
release evidence test to compare the selected job names order-independently,
such as by sorting both arrays or comparing sets. Preserve validation of the
same four job identifiers without requiring their declaration order.
🪄 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: a01a45b8-4d0c-4ca0-8e23-4ef2d3eeafb2
📒 Files selected for processing (9)
.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-e2e/SKILL.md.agents/skills/nemoclaw-maintainer-evening/SKILL.md.agents/skills/nemoclaw-maintainer-policies/references/daily-flow.md.agents/skills/nemoclaw-maintainer-policies/references/release-train.mdpackage.jsontest/maintainer-skills-policy.test.tstest/release-e2e-evidence.test.ts
| const defaultJobIds = inventory.workflowJobs.filter( | ||
| (jobId) => jobId !== "shared-e2e" && !explicitJobs.has(jobId), | ||
| ); | ||
| const executions = [ | ||
| ...defaultJobIds.flatMap((jobId) => | ||
| jobExecutions(jobId, record(jobs[jobId], `workflow.jobs.${jobId}`), "default", plan), | ||
| ), | ||
| ...jobExecutions("live", record(jobs.live, "workflow.jobs.live"), "default", plan), | ||
| ...jobExecutions( | ||
| "shared-e2e", | ||
| record(jobs["shared-e2e"], "workflow.jobs.shared-e2e"), | ||
| "default", | ||
| plan, | ||
| ), |
There was a problem hiding this comment.
🎯 Functional Correctness | 🔴 Critical | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Locate the relevant symbols and files.
git ls-files | rg 'release-e2e-evidence\.mts$|free-standing|workflowJobs|readFreeStandingJobsInventory|buildE2eWorkflowPlan'
# Map the target file first.
ast-grep outline .agents/skills/nemoclaw-maintainer-cut-release-tag/scripts/release-e2e-evidence.mts --view expanded || true
# Search for the inventory type/source and the job list construction.
rg -n "workflowJobs|readFreeStandingJobsInventory|FreeStandingJobsInventory|shared-e2e|live" .agents/skills/nemoclaw-maintainer-cut-release-tag/scripts/release-e2e-evidence.mtsRepository: NVIDIA/NemoClaw
Length of output: 3292
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Inspect the inventory source and the preflight job construction.
ast-grep outline tools/e2e/workflow-boundary.mts --view expanded || true
rg -n "readFreeStandingJobsInventory|workflowJobs|shared-e2e|live" tools/e2e/workflow-boundary.mts .agents/skills/nemoclaw-maintainer-cut-release-tag/scripts/release-e2e-evidence.mts
# Read the relevant sections with line numbers.
sed -n '1,260p' tools/e2e/workflow-boundary.mts
sed -n '266,320p' .agents/skills/nemoclaw-maintainer-cut-release-tag/scripts/release-e2e-evidence.mtsRepository: NVIDIA/NemoClaw
Length of output: 50371
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Read the inventory derivation and the preflight assembly around the relevant lines.
sed -n '409,510p' tools/e2e/workflow-boundary.mts
printf '\n---\n'
sed -n '270,315p' .agents/skills/nemoclaw-maintainer-cut-release-tag/scripts/release-e2e-evidence.mtsRepository: NVIDIA/NemoClaw
Length of output: 5646
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Find the live job definition and its free-standing markers.
rg -n -A20 -B8 '^\s*live:' .github/workflows/e2e.yaml
printf '\n---\n'
rg -n -A6 -B6 'E2E_JOB|E2E_TARGET_ID|E2E_DEFAULT_ENABLED' .github/workflows/e2e.yamlRepository: NVIDIA/NemoClaw
Length of output: 50371
Exclude live from the generic default job list.
inventory.workflowJobs includes live (it carries E2E_JOB=1), so this filter and the later explicit jobExecutions("live", ...) both add it. That creates duplicate execution IDs and hits the uniqueness check, breaking default preflight generation. Add jobId !== "live" here, or derive the default list from jobs that are neither special-cased nor explicitly appended.
🤖 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
@.agents/skills/nemoclaw-maintainer-cut-release-tag/scripts/release-e2e-evidence.mts
around lines 299 - 312, Exclude the special-cased "live" job from defaultJobIds
alongside "shared-e2e" and explicit jobs. Update the filter in the executions
construction so jobExecutions("live", ...) remains the sole source of live
executions and execution IDs stay unique.
PR Review Advisor — No blocking findings reportedAdvisor assessment: No blocking advisor findings reported Model lanes
Nemotron output stays in workflow artifacts and does not change the assessment above. E2E guidanceAdvisory only. E2E / PR Gate selects and runs jobs independently. Recommended E2E: 1 optional E2E recommendation
This automated review informs maintainers. Warnings and suggestions do not require a response. A maintainer decides whether to merge. |
Signed-off-by: Carlos Villela <cvillela@nvidia.com>
There was a problem hiding this comment.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
.agents/skills/nemoclaw-maintainer-cut-release-tag/SKILL.md (2)
194-219: 🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy liftInclude all required acceptance evidence in
manifest.json.The manifest only links run/job JSON and selector metadata, but full-mode acceptance also requires the trusted dispatch receipt, qualification identity, and cleanup result. Those artifacts cannot be proven from GitHub run/job JSON alone, so
--manifestcannot reliably enforce the exact Brev evidence contract.Proposed manifest extension
{ "runJson": "run-123.json", "jobsJson": "jobs-123.json", "defaultSuiteSelected": true, - "selectedJobs": [] + "selectedJobs": [], + "dispatchReceiptJson": "dispatch-123.json", + "qualificationJson": "qualification-123.json", + "cleanupJson": "cleanup-123.json" }🤖 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 @.agents/skills/nemoclaw-maintainer-cut-release-tag/SKILL.md around lines 194 - 219, Extend the manifest schema and the instructions around the release:e2e-evidence workflow to include trusted dispatch receipt, qualification identity, and cleanup result artifacts alongside run/job and selector metadata. Ensure the ledger builder validates and records these required acceptance-evidence fields for full-mode runs, rather than relying solely on GitHub run/job JSON.
219-232: 🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy liftRerun every candidate-bound coverage group after SHA drift.
The helper binds all runs to the candidate SHA, so a changed
origin/maininvalidates prior default, explicit, conditional, and qualification evidence—not only full-mode evidence. Regenerating the plan and rebuilding the ledger is insufficient; explicitly rerun preflight and all required dispatch groups, then capture a new manifest before confirmation.Proposed wording
-If it moved, regenerate the plan and rebuild the ledger for the new SHA; +If it moved, discard all prior candidate-bound evidence, regenerate the plan, +rerun preflight and every required dispatch group for the new SHA, capture a +new manifest, and rebuild the ledger;🤖 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 @.agents/skills/nemoclaw-maintainer-cut-release-tag/SKILL.md around lines 219 - 232, Update the SHA-drift handling in the release confirmation procedure so that, after refreshing origin/main and detecting a changed SHA, it regenerates the plan, reruns preflight and every required candidate-bound dispatch group—including default, explicit, conditional, and exact Brev qualification groups—and captures a new evidence manifest before rebuilding the ledger and requesting confirmation.
🤖 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/release-e2e-evidence.test.ts`:
- Around line 78-85: Update the dispatch assertion in the release evidence test
to preserve order-independent comparison while also asserting that the actual
jobs list length equals the expected jobs list length. Keep the existing Set
comparison and expected job IDs unchanged, and derive the actual list from
plan.dispatches.parallelExplicit.jobs.
---
Outside diff comments:
In @.agents/skills/nemoclaw-maintainer-cut-release-tag/SKILL.md:
- Around line 194-219: Extend the manifest schema and the instructions around
the release:e2e-evidence workflow to include trusted dispatch receipt,
qualification identity, and cleanup result artifacts alongside run/job and
selector metadata. Ensure the ledger builder validates and records these
required acceptance-evidence fields for full-mode runs, rather than relying
solely on GitHub run/job JSON.
- Around line 219-232: Update the SHA-drift handling in the release confirmation
procedure so that, after refreshing origin/main and detecting a changed SHA, it
regenerates the plan, reruns preflight and every required candidate-bound
dispatch group—including default, explicit, conditional, and exact Brev
qualification groups—and captures a new evidence manifest before rebuilding the
ledger and requesting confirmation.
🪄 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: 958d8ae0-8961-4a70-af01-730a64ceedeb
📒 Files selected for processing (6)
.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-e2e/SKILL.md.agents/skills/nemoclaw-maintainer-policies/references/release-train.mdtest/maintainer-skills-policy.test.tstest/release-e2e-evidence.test.ts
🚧 Files skipped from review as they are similar to previous changes (4)
- .agents/skills/nemoclaw-maintainer-policies/references/release-train.md
- .agents/skills/nemoclaw-maintainer-e2e/SKILL.md
- test/maintainer-skills-policy.test.ts
- .agents/skills/nemoclaw-maintainer-cut-release-tag/scripts/release-e2e-evidence.mts
Signed-off-by: Carlos Villela <cvillela@nvidia.com>
<!-- markdownlint-disable MD041 --> ## Summary Add the canonical dated changelog entry for NemoClaw v0.0.97 before the release plan captures `origin/main`. The entry groups the user-visible and maintainer-facing changes since v0.0.96 while preserving the Deferred dual-Station status, experimental runtime-identity boundary, and pending physical IGX validation. ## Changes - Add `docs/changelog/2026-07-28.mdx` with the parser-safe MDX SPDX comment and exact `## v0.0.97` heading. - Summarize the 43 merged PRs in the release range, omitting internal-only changes from the public entry and linking each grouped change to its most specific published documentation. - Keep the experimental Okta reference explicitly opt-in and outside normal onboarding, keep the two-Station path Deferred, and state that physical IGX Orin validation remains pending. ### Source summary - [#7440](#7440), [#7443](#7443), and [#7445](#7445) -> `docs/changelog/2026-07-28.mdx`: Document read-only host readiness reports and fail-closed platform qualification. - [#7030](#7030) -> `docs/changelog/2026-07-28.mdx`: Document the Deferred trusted two-Station vLLM evaluation. - [#7265](#7265) -> `docs/changelog/2026-07-28.mdx`: Document the bounded experimental direct-runner Okta runtime-identity reference. - [#7711](#7711) and [#7648](#7648) -> `docs/changelog/2026-07-28.mdx`: Document compatible-endpoint reasoning effort and retired NVIDIA Build model paths. - [#7746](#7746), [#7763](#7763), and [#7681](#7681) -> `docs/changelog/2026-07-28.mdx`: Document safe compatible-provider creation, replacement refusal, and narrow OpenShell bridge URL handling. - [#7641](#7641), [#7690](#7690), [#7631](#7631), and [#7710](#7710) -> `docs/changelog/2026-07-28.mdx`: Document paused-container recovery, recreation journaling, pre-mutation uninstall checks, and source-checkout OpenShell selection. - [#7624](#7624) and [#7762](#7762) -> `docs/changelog/2026-07-28.mdx`: Document Jetson release diagnostics and bounded render-device group propagation. - [#7639](#7639), [#7760](#7760), [#7721](#7721), and [#7761](#7761) -> `docs/changelog/2026-07-28.mdx`: Document Telegram, MCP media-type, Hermes image-mode, and locked-restart fixes. - [#7653](#7653) and [#7680](#7680) -> `docs/changelog/2026-07-28.mdx`: Document Deep Agents policy tasks and the bounded Claude Code OAuth path. - [#7679](#7679) -> `docs/changelog/2026-07-28.mdx`: Document the checksum-bound libssh2 and Python HTMLParser backports. - [#7655](#7655), [#7651](#7651), [#7664](#7664), [#7666](#7666), [#7670](#7670), [#7719](#7719), and [#7741](#7741) -> `docs/changelog/2026-07-28.mdx`: Document exact candidate E2E evidence, Launchable selection, diagnostic consolidation, and trusted WSL validation. ## Type of Change - [ ] Code change (feature, bug fix, or refactor) - [ ] Code change with doc updates - [x] Doc only (prose changes, no code sample modifications) - [ ] Doc only (includes code sample changes) ## Quality Gates - [ ] Tests added or updated for changed behavior - [x] Existing tests cover changed behavior — justification: `test/changelog-docs.test.ts` validates the dated changelog contract, MDX header, heading uniqueness, and release-entry structure. - [ ] Tests not applicable — justification: - [x] Docs updated for user-facing behavior changes - [ ] Docs not applicable — justification: - [ ] Sensitive paths changed (security, policy, credentials, preflight, onboarding, inference, runner, sandbox, or messaging) - [ ] Sensitive-path review completed or maintainer-approved waiver recorded — reviewer/approval link/justification: - [ ] Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue: ## Documentation Writer Review - [x] Documentation writer subagent reviewed the completed changes - Result: `docs-updated` - Evidence: The committed `docs/changelog/2026-07-28.mdx` blob exactly matches the reviewed file. Completeness, factual accuracy, link shape, parser-safe MDX header, one-sentence-per-line style, `.docs-skip` compliance, and bounded product claims passed. - Agent: Codex Desktop documentation writer subagent <!-- docs-review-head-sha: da6aa27 --> <!-- docs-review-agents-blob-sha: be20a09 --> ## DGX Station Hardware Evidence - [ ] Tested on DGX Station - Tested commit: Not applicable; this PR changes only the dated changelog. - Station profile/scenario: Not applicable. - Result: Not applicable. - Supporting evidence: Not applicable. ## Verification - [x] PR description includes a `Signed-off-by:` line and every commit appears as `Verified` in GitHub - [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — `npx vitest run test/changelog-docs.test.ts` passed 6/6. - [ ] Applicable broad gate passed — `npm test` for broad runtime/test-harness changes; `npm run check` for repo-wide validation/coverage changes — not applicable to this doc-only release entry. - [x] Quality Gates section completed with required justifications or waivers - [x] No secrets, API keys, or credentials committed - [ ] `npm run docs` builds without warnings (doc changes only) — completed with 0 errors and 2 pre-existing Fern warnings. - [x] Doc pages follow the [style guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md) (doc changes only) - [ ] New doc pages include SPDX header and frontmatter (new pages only) — native changelog entries use the required parser-safe MDX SPDX comment and intentionally have no frontmatter. --- Signed-off-by: Charan Jagwani <cjagwani@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added improved host readiness reporting and Jetson onboarding guidance. * Added controls for reasoning effort with compatible endpoints and enhanced managed MCP discovery. * Improved Deep Agents task publication and preset support. * **Bug Fixes** * Hardened provider switching, sandbox recovery, uninstall behavior, and Telegram connectivity. * Improved container image integrity checks, media-type handling, and checksum validation. * Enhanced vLLM evaluation behavior and release diagnostics. * **Documentation** * Added the NemoClaw v0.0.97 changelog. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
Summary
Release preparation now derives the candidate E2E denominator before dispatch and runs independent default and explicit-only coverage concurrently. It preserves each matrix execution across runs and attempts, gates conditional hardware dispatch on authoritative availability, and keeps the final release decision bound to the latest
origin/maincandidate.Changes
test/release-e2e-evidence.test.tsprotects the contract.mainduring preflight work.Type of Change
Quality Gates
docs/source changes; the canonical internal maintainer skills and release policy are updated in this PR.Documentation Writer Review
no-docs-neededdocs/source requires an update. The reviewer verified latest-existing receipt discovery for partial reruns, manifest path consistency, exact-Brev validation ownership, SHA-drift reruns, and writing and policy consistency.DGX Station Hardware Evidence
Verification
Signed-off-by:line and every commit appears asVerifiedin GitHubpre-commit,commit-msg, andpre-pushhooks passed, ornpm run check:diffpassed when hooks were skipped or unavailablenpm run test:changed— 30 files and 299 tests passed; focused release and policy integration — 3 files and 27 tests passed; workflow and artifact contracts — 2 files and 57 tests passed; source-shape and test-size budgets passed.npm testfor broad runtime/test-harness changes;npm run checkfor repo-wide validation/coverage changes — command/result:npm run docsbuilds without warnings (doc changes only)Signed-off-by: Carlos Villela cvillela@nvidia.com
Summary by CodeRabbit
npm run release:e2e-evidence.