ci(e2e): add periodic runner-pressure telemetry - #7457
Conversation
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
📝 WalkthroughWalkthroughRunner comparison telemetry now uses bounded v2 JSONL ledgers with strict validation, profiled resource collection, progress-triggered sampling, finalized summaries, workflow-boundary checks, and expanded E2E coverage. ChangesRunner comparison telemetry v2
Estimated code review effort: 5 (Critical) | ~120 minutes Sequence Diagram(s)sequenceDiagram
participant E2EProgress
participant RunnerComparison
participant ResourceSnapshot
participant RunnerLedger
participant Summary
E2EProgress->>RunnerComparison: emit sampling event
RunnerComparison->>ResourceSnapshot: collect profile-specific evidence
ResourceSnapshot-->>RunnerComparison: return normalized snapshot
RunnerComparison->>RunnerLedger: append v2 sample
RunnerComparison->>Summary: finalize ledger
Summary-->>RunnerComparison: write validated summary
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
PR Review Advisor — InformationalAdvisor assessment: Informational / high confidence 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: This automated review informs maintainers. Warnings and suggestions do not require a response. A maintainer decides whether to merge. |
There was a problem hiding this comment.
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 `@test/e2e/support/e2e-progress-resource-sampling.test.ts`:
- Around line 1-385: Reduce branching in the progress sampling tests by removing
the newly added inline if statements, especially in progressHarness timer
handling and the parameterized fallback and blocking scenarios. Extract behavior
into named helpers or separate test cases so each test body remains linear while
preserving all existing assertions and coverage.
🪄 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: c4d24e02-2eb3-4a13-8801-c8c1d4bf9ec5
📒 Files selected for processing (20)
test/e2e/README.mdtest/e2e/fixtures/e2e-test.tstest/e2e/fixtures/progress.tstest/e2e/support/agent-turn-latency-progress.test.tstest/e2e/support/bedrock-runtime-compatible-anthropic-progress.test.tstest/e2e/support/e2e-progress-resource-sampling.test.tstest/e2e/support/observed-child-process.test.tstest/e2e/support/rebuild-hermes-progress.test.tstest/e2e/support/rebuild-hermes-timing.test.tstest/e2e/support/runner-comparison-workflow-boundary.test.tstest/e2e/support/runner-comparison.test.tstest/e2e/support/runner-pressure.test.tstools/e2e/runner-comparison-collection.mtstools/e2e/runner-comparison-core.mtstools/e2e/runner-comparison-schema.mtstools/e2e/runner-comparison-summary.mtstools/e2e/runner-comparison-workflow-boundary.mtstools/e2e/runner-comparison.mtstools/e2e/runner-pressure-core.mtstools/e2e/runner-pressure.mts
Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com>
Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com>
prekshivyas
left a comment
There was a problem hiding this comment.
Approved at exact head 419182d after code, nine-category security, telemetry privacy/schema, focused-test, CI, CodeRabbit, and advisor review. The final selected E2E job and required gate are still running and remain merge requirements.
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com> # Conflicts: # test/e2e/support/observed-child-process.test.ts
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (3)
test/e2e/README.md (1)
187-203: 🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick winClarify the
scenario-startguarantee against the sample cap.
The 255-sample limit means long executions can stop emittingscenario-startentries before all tests finish, so “for every test” is too strong without a caveat. Qualify it to runs that still have ledger capacity, or reserve slots for boundary markers.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@test/e2e/README.md` around lines 187 - 203, Qualify the “distinct scenario-start for every test” guarantee in the test execution documentation to apply only while the v2 ledger has available capacity, consistent with the 255-record ordinary-sampling limit and reserved finalize slot. Do not change the sampling behavior or add slot reservation; update the guarantee wording near the sample-cap description.Source: Path instructions
test/e2e/support/observed-child-process.test.ts (2)
191-191: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winUse a guaranteed-missing executable path.
The bare command is resolved through inherited
PATH; if a matching binary exists, this test will not exercise the spawn-failure path. Use a nonexistent absolute path in a temporary directory and remove the directory infinally.As per path instructions, this test should provide deterministic behavioral confidence; the current command is not hermetic.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@test/e2e/support/observed-child-process.test.ts` at line 191, Update the missing-binary test around spawnObservedChild to use a guaranteed-nonexistent absolute executable path created under a temporary directory rather than a bare command resolved through PATH. Ensure the temporary directory is removed in a finally block while preserving the existing spawn-failure assertions.Source: Path instructions
209-258: 🔒 Security & Privacy | 🟡 Minor | ⚡ Quick winAssert privacy across all captured progress output.
The test checks for the secret only after filtering to lifecycle lines, so a leak through activity or other progress logging would pass unnoticed. Also avoid putting the secret in the activity label and temporary-directory prefix.
Suggested fix
- const workdir = fs.mkdtempSync(path.join(os.tmpdir(), `${secret}-`)); + const workdir = fs.mkdtempSync(path.join(os.tmpdir(), "observed-child-")); ... - activityLabel: `command: ${secret}`, + activityLabel: "command: content-boundary-child", ... - expect(checkpoints.join("\n")).not.toContain(secret); + expect(lines.join("\n")).not.toContain(secret);As per path instructions, this test should prove the observable privacy boundary; the supplied telemetry contract forbids secrets in diagnostic evidence.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@test/e2e/support/observed-child-process.test.ts` around lines 209 - 258, Update the “keeps lifecycle checkpoints ordinal, idempotent, frozen, and content-free” test to use non-secret values for the activityLabel and temporary-directory prefix, then assert the secret is absent from all captured progress output in lines, not only the filtered lifecycleLines result. Preserve the existing lifecycle ordering and content-free assertions while checking the complete telemetry boundary.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/e2e/README.md`:
- Around line 187-203: Qualify the “distinct scenario-start for every test”
guarantee in the test execution documentation to apply only while the v2 ledger
has available capacity, consistent with the 255-record ordinary-sampling limit
and reserved finalize slot. Do not change the sampling behavior or add slot
reservation; update the guarantee wording near the sample-cap description.
In `@test/e2e/support/observed-child-process.test.ts`:
- Line 191: Update the missing-binary test around spawnObservedChild to use a
guaranteed-nonexistent absolute executable path created under a temporary
directory rather than a bare command resolved through PATH. Ensure the temporary
directory is removed in a finally block while preserving the existing
spawn-failure assertions.
- Around line 209-258: Update the “keeps lifecycle checkpoints ordinal,
idempotent, frozen, and content-free” test to use non-secret values for the
activityLabel and temporary-directory prefix, then assert the secret is absent
from all captured progress output in lines, not only the filtered lifecycleLines
result. Preserve the existing lifecycle ordering and content-free assertions
while checking the complete telemetry boundary.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: 1c90b590-51b4-49f3-916e-c64c8ca436f5
📒 Files selected for processing (4)
test/e2e/README.mdtest/e2e/fixtures/e2e-test.tstest/e2e/fixtures/progress.tstest/e2e/support/observed-child-process.test.ts
🚧 Files skipped from review as they are similar to previous changes (2)
- test/e2e/fixtures/e2e-test.ts
- test/e2e/fixtures/progress.ts
Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com>
<!-- markdownlint-disable MD041 --> ## Summary This PR adds the canonical dated release entry for NemoClaw v0.0.94 before the tag is cut. The entry reconciles all 26 commits since v0.0.93 and links each user-visible change to its owning documentation. ## Changes - Add `docs/changelog/2026-07-24.mdx` with the exact `## v0.0.94` heading, parser-safe SPDX comment, release summary, and detailed bullets. - Record sandbox restore and update behavior, onboarding and inference changes, network policy behavior, security evidence, Hermes build performance, DGX Station guidance, and E2E validation changes. - Preserve `docs/` as the source of truth without changing the AI-agent documentation routing skill. - Use [E2E run 30075443016](https://github.com/NVIDIA/NemoClaw/actions/runs/30075443016) for release QA evidence at exact tested SHA `04e6dfa883071dda9df429c66e73168e1a995cba`. ### Source summary - [#7461](#7461) -> `docs/changelog/2026-07-24.mdx`: Record the ownership-preserving Hermes image layer reduction and hosted timing comparison. - [#7460](#7460) -> `docs/changelog/2026-07-24.mdx`: Record removal of candidate Hermes swap setup from E2E validation. - [#7458](#7458) -> `docs/security/fern-5.80.1-dependency-review.md`, `docs/changelog/2026-07-24.mdx`: Record the reviewed Fern CLI update. - [#7457](#7457) -> `docs/changelog/2026-07-24.mdx`: Record periodic runner-pressure telemetry. - [#7455](#7455) -> `docs/changelog/2026-07-24.mdx`: Record non-blocking absent Fern previews. - [#7450](#7450) -> `docs/changelog/2026-07-24.mdx`: Record stable cancellation handling for live-test child processes. - [#7449](#7449) -> `docs/changelog/2026-07-24.mdx`: Record parallel plugin EXDEV coverage. - [#7448](#7448) -> `docs/changelog/2026-07-24.mdx`: Record isolated long-running E2E lanes. - [#7444](#7444) -> `docs/changelog/2026-07-24.mdx`: Record exact-head Hermes swap validation. - [#7437](#7437) -> `docs/manage-sandboxes/backup-restore.mdx`, `docs/changelog/2026-07-24.mdx`: Record gateway pairing and authenticated verification after cross-sandbox restore. - [#7436](#7436) -> `docs/manage-sandboxes/backup-restore.mdx`, `docs/reference/commands.mdx`, `docs/changelog/2026-07-24.mdx`: Record selected stale-state cleanup and Hermes virtual-environment access repair. - [#7385](#7385) -> `docs/network-policy/customize-network-policy.mdx`, `docs/changelog/2026-07-24.mdx`: Record the read-only agent-variant route check. - [#7371](#7371) -> `docs/changelog/2026-07-24.mdx`: Record host-artifact verification for session exports. - [#7359](#7359) -> `docs/changelog/2026-07-24.mdx`: Record platform validation for managed vLLM model overrides. - [#7356](#7356) -> `docs/changelog/2026-07-24.mdx`: Record token-shaped value redaction for `sandbox doctor --json`. - [#7354](#7354) -> `docs/security/advisory-early-warning.md`, `docs/changelog/2026-07-24.mdx`: Record advisory correlation and retained audit provenance. - [#7352](#7352) -> `docs/network-policy/customize-network-policy.mdx`, `docs/network-policy/integration-policy-examples.mdx`, `docs/reference/commands.mdx`, `docs/changelog/2026-07-24.mdx`: Record preset reapplication and bounded `tls: skip` guidance. - [#7345](#7345) -> `docs/security/openclaw-2026.6.10-dependency-review.md`, `docs/security/openclaw-2026.7.1-dependency-review.md`, `docs/changelog/2026-07-24.mdx`: Record reviewed npm audit exception enforcement. - [#7340](#7340) -> `docs/network-policy/customize-network-policy.mdx`, `docs/changelog/2026-07-24.mdx`: Record the repaired CLI-reference route. - [#7334](#7334) -> `docs/get-started/dgx-station-preparation.mdx`, `docs/changelog/2026-07-24.mdx`: Record the qualified OTA metadata fallback and narrowed override wording. - [#7322](#7322) -> `docs/changelog/2026-07-24.mdx`: Reconcile the gateway source tag added to plugin registration banners. - [#7284](#7284) -> `docs/manage-sandboxes/update-sandboxes.mdx`, `docs/changelog/2026-07-24.mdx`: Record read-only `upgrade-sandboxes --check` behavior and recorded-gateway selection. - [#7277](#7277) -> `docs/changelog/2026-07-24.mdx`: Reconcile deterministic gateway TCP refusal coverage. - [#7234](#7234) -> `docs/reference/troubleshooting.mdx`, `docs/changelog/2026-07-24.mdx`: Record preserved DGX Spark managed vLLM Express intent on resume. - [#7185](#7185) -> `docs/reference/troubleshooting.mdx`, `docs/changelog/2026-07-24.mdx`: Record IPv4 fallback DNS selection and exact resolver probing. - [#6820](#6820) -> `docs/reference/commands.mdx`, `docs/changelog/2026-07-24.mdx`: Record the versioned, redacted `--events=jsonl` onboarding stream. ## 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: `npx vitest run test/changelog-docs.test.ts` passed 6/6 tests. - [ ] 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: `docs/changelog/2026-07-24.mdx`; the writing rules, documentation style, exact release range, skip terms, published routes, and product scope were reviewed; the changelog test passed 6/6; `npm run docs` passed with route checking OK, zero errors, and two existing warnings. - Agent: Codex Desktop <!-- docs-review-head-sha: 65368f9 --> <!-- docs-review-agents-blob-sha: 9c9b36d --> ## DGX Station Hardware Evidence - [ ] Tested on DGX Station - Tested commit: Not applicable - Station profile/scenario: Not applicable - Result: Not applicable - Supporting evidence: Not applicable. This PR does not change `scripts/prepare-dgx-station-host.sh`. ## 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 tests. - [ ] Applicable broad gate passed — `npm test` for broad runtime/test-harness changes; `npm run check` for repo-wide validation/coverage changes — command/result: Not applicable to the dated changelog 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). The build passed with zero errors and two 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 dated changelog entries use the required parser-safe MDX SPDX comment and no frontmatter. --- Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * Added the v0.0.94 release changelog. * Documented improvements to sandbox snapshot and restore behavior. * Added updates for gateway selection, policy comparisons, onboarding event output, and DGX recovery workflows. * Documented enhanced diagnostics redaction, npm audit provenance, image assembly performance, and validation stability improvements. <!-- end of auto-generated comment: release notes by coderabbit.ai --> Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com>
Summary
This adds bounded periodic and phase-aware resource telemetry to the canonical runner-comparison ledger for trusted heavy E2E executions. It reuses the existing progress pulse and records only numeric or fixed-enum evidence, improving runner-pressure diagnosis without changing failure classification or retry policy.
Related Issue
Related to #7145 and #7146 (parent epic: #7140).
Changes
0600files, a reserved final sample, v1 read compatibility, and deterministic summaries.common-egress-agenttopology merged in ci(e2e): isolate long-running scenario lanes #7448.Type of Change
Quality Gates
419182d89found no actionable issues.Documentation Writer Review
docs-updatedtest/e2e/README.mdDGX 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 check:diffpassed. The MCP removal subprocess suite then passed 10 consecutive focused runs (20/20 test executions) with the global timeout environment held at 5 seconds; the final exact-headnpm run check:diffpassed after building the required local CLI artifacts.npm testfor broad runtime/test-harness changes;npm run checkfor repo-wide validation/coverage changes — command/result: A broad E2E-support run exposed only parallel-load timeouts and one macOS lifecycle failure reproduced unchanged onorigin/main; scoped exact-head gates are listed above.npm run docsbuilds without warnings (doc changes only)Signed-off-by: Apurv Kumaria akumaria@nvidia.com
Summary by CodeRabbit