Skip to content

feat(ci): add onboard performance budget signal - #5686

Merged
ericksoa merged 43 commits into
mainfrom
3776-define-onboard-performance-budget-and-ci-regression-signal
Jul 4, 2026
Merged

feat(ci): add onboard performance budget signal#5686
ericksoa merged 43 commits into
mainfrom
3776-define-onboard-performance-budget-and-ci-regression-signal

Conversation

@amata-human

@amata-human amata-human commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

Summary

This PR adds a data-backed advisory performance budget for warm-system cloud onboarding and surfaces regressions in the unified E2E scorecard without making timing itself merge-blocking. It also makes malformed or ambiguous timing evidence explicit and routes relevant changes through deterministic E2E review.

Related Issue

Fixes #3776

Changes

  • Add ci/onboard-performance-budget.json with a 390000 ms warm-system total budget, calibrated from ten successful main samples using p95 plus a 25% buffer rounded to 30 seconds.
  • Evaluate total duration and phase diagnostics in the scorecard, emitting advisory GitHub Actions warnings instead of failing solely on timing variance.
  • Parse the production-shaped multi-entry GitHub artifact without extraction; require exactly one root timing summary and validate its ZIP metadata, size, compression, local header, inflated size, and CRC.
  • Emit only a fixed sanitized warning when timing-artifact validation fails, and pass core through the workflow analyzer so the warning is visible.
  • Wire the budget through the current .github/workflows/e2e.yaml scorecard path and keep E2E Advisor routing deterministic for onboarding, timing, scorecard, workflow, and budget changes.
  • Add schema/runtime validation, an emitter/sanitizer/scorecard phase contract, focused scorecard/workflow/advisor tests, and E2E maintainer documentation.
  • Preserve ci/onboard-performance-budget.json and test/e2e/README.md as the durable record for the budget and advisory policy; closed parent issue perf: investigate and reduce networking latency during onboard and validation #2001 remains historical context.
  • Merge current main with signed commits, including perf(cli): reuse validated sandbox base images #6254's validated Hermes base-image resolution fix, and apply a signed hardening commit on top. The protected contributor branch forbids history rewrites, so its historical commits remain intact.

Calibration rationale

The initial cap is intentionally based on the ten durable successful main samples available on 2026-06-23; the checked-in $comment records every sample, the p95 interpolation, the 25% buffer, and why the original #3769 traces were unavailable. That is a limited baseline, so this PR keeps the signal advisory: distribution drift can warn maintainers but cannot block a merge. We accept that bounded calibration risk to establish a measured signal now and will rebaseline from a wider durable sample set as it accumulates rather than delay the non-blocking instrumentation.

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: focused tests were added or updated instead
  • Tests not applicable — justification: tests are applicable and included
  • Docs updated for user-facing behavior changes
  • Docs not applicable — justification: E2E maintainer documentation changed
  • 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: exact-head maintainer approval on ed6eb53ccc3ebef49c7ec31798fa29150985528a
  • Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue: full default E2E passed all 69 default jobs; the five skips are the workflow's documented explicit-only jobs (openshell-gateway-auth-contract, mcp-bridge-dev, hermes-gpu-startup, sandbox-rlimits-connect, and jetson-nvmap-gpu)

Verification

  • PR description includes the DCO sign-off declaration and every commit appears as Verified in GitHub — new commits e09e88445, 38ea88760, and ed6eb53cc are Verified; the protected branch retains eight historical unverified commits that cannot be rewritten
  • Git hooks passed during commit and push, or npx prek run --from-ref main --to-ref HEAD passes — all applicable hooks pass; the local monolithic CLI coverage hook was skipped after unrelated tests timed out under concurrent full-suite load, while the exact-head GitHub aggregate and all five CLI shards passed
  • Targeted tests pass for changed behavior — 258 focused tests, all three TypeScript checks, config validation, source-shape budget, CLI build, and production-artifact parsing pass on exact final tree d79bc43cc45b6665dd93b7b5c11c16eb3efe8b66
  • Full default E2E recommendation satisfied — attempt 2 passed all 69 default jobs on the exact head with only five documented explicit-only skips; cloud-onboard, all three MCP agent scenarios, scorecard, and PR reporting passed, and the scorecard emitted zero annotations. The fresh cloud trace was 156944 ms against the advisory 390000 ms cap.
  • Full npm test passes (broad runtime changes only) — not run as one local monolith; the exact-head GitHub aggregate, CLI shards 1-5, plugin tests, and full default E2E all passed
  • Quality Gates section completed with required justifications or waivers — required CI, GPT advisor, documented Nemotron calibration rationale, exact-head approval, and full default E2E are complete
  • No secrets, API keys, or credentials committed
  • npm run docs builds without warnings (doc changes only) — not applicable; this is not doc-only
  • Doc pages follow the style guide (doc changes only) — not applicable; no doc page changed
  • New doc pages include SPDX header and frontmatter (new pages only) — not applicable; no new doc page

Signed-off-by: Angel Mata amata@nvidia.com
Signed-off-by: Julie Yaunches jyaunches@nvidia.com
Signed-off-by: Aaron Erickson aerickson@nvidia.com

@copy-pr-bot

copy-pr-bot Bot commented Jun 23, 2026

Copy link
Copy Markdown

This pull request requires additional validation before any workflows can run on NVIDIA's runners.

Pull request vetters can view their responsibilities here.

Contributors can view more details about this message here.

@coderabbitai

coderabbitai Bot commented Jun 23, 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

Adds an advisory onboard performance budget (ci/onboard-performance-budget.json) evaluated in the nightly scorecard via new parsing, validation, and evaluation logic in analyze-trace-timing.ts. The workflow emits a core.warning when the budget is exceeded. Separately, the E2E advisor gains a deterministic post-normalization rule that requires cloud-onboard-e2e for PRs touching timing/scorecard/onboard-related files.

Changes

Onboard Performance Budget

Layer / File(s) Summary
Budget config file and data model types
ci/onboard-performance-budget.json, scripts/scorecard/analyze-trace-timing.ts
Adds the advisory warm-system budget JSON (totalBudgetMs: 390000, regressionWarning, phaseRegressionWarning) and defines Threshold, OnboardPerformanceBudget, BudgetEvaluation, BudgetLoadResult types plus the ONBOARD_PERFORMANCE_BUDGET_FILE constant.
Budget parsing, validation, and evaluation logic
scripts/scorecard/analyze-trace-timing.ts
Adds readOnboardPerformanceBudget (parses JSON, returns BudgetLoadResult for loaded/unavailable/invalid), normalizeThreshold/normalizeOnboardPerformanceBudget validators, percentDelta/exceedsThreshold primitives, and evaluateOnboardPerformanceBudget which aggregates advisory warnings for warm total cap, total regression, and top-3 phase regressions into markdown.
buildTraceSummaryLines signature and composition updates
scripts/scorecard/analyze-trace-timing.ts
Updates buildTraceSummaryLines to accept optional BudgetEvaluation parameter. Changes early-return behavior to allow budget-only output when phaseRows is empty but budget evaluation exists. Phase timing table is emitted only when phaseRows.length > 0, and budgetEvaluation.summaryLines are appended when present.
buildTraceTimingResult budget integration and exports
scripts/scorecard/analyze-trace-timing.ts
Reworks buildTraceTimingResult to load the budget once, evaluate it in all major branches (missing artifact/tag/run, normal comparison), pass BudgetEvaluation into buildTraceSummaryLines, and return budgetExceeded and budgetWarningMessage in every code path. Updates module.exports with budget symbols.
Workflow wiring for budget checks
.github/workflows/nightly-e2e.yaml
Adds ci/onboard-performance-budget.json to scorecard job sparse-checkout. Updates scorecard generation script to destructure budgetExceeded and emit core.warning when true.
Test infrastructure and type contract updates
test/e2e-script-workflow.test.ts
Extends imports formatting and updates TraceTimingAnalyzer type contract with budgetExceeded property and new evaluateOnboardPerformanceBudget, readOnboardPerformanceBudget methods.
Scorecard test assertions and new budget evaluation tests
test/e2e-script-workflow.test.ts
Adds step discovery for "Checkout scorecard builder", asserts sparse-checkout of ci/onboard-performance-budget.json, and verifies script references to budgetExceeded, budgetWarningMessage, and core.warning. Introduces three new budget evaluation test cases (direct evaluation, no-baseline comparison, malformed config). Loosens five fallback assertions from exact equality to stringContaining for no-tag/no-run/artifact-not-found/invalid-JSON cases. Updates no-phase-overlap case to expect budget section in traceSummaryLines.
Budget documentation and guidance
test/e2e/README.md
Documents the "Onboard Performance Budget" evaluation in nightly scorecard, budget signals, advisory nature, exceptions for cold/incidental slowdowns, GitHub/Slack reporting, and PR guidance for timing-related changes.

E2E Advisor Deterministic cloud-onboard-e2e Rule

Layer / File(s) Summary
Deterministic recommendation logic and integration
tools/e2e-advisor/analyze.mts
Introduces fixed cloud-onboard-e2e recommendation template and regex patterns for timing/scorecard/onboard/workflow files. Implements requiresCloudOnboardE2e (pattern matching), applyDeterministicRecommendations (appends required test, nulls noE2eReason, upgrades confidence to medium). Updates normalizeAdvisorResult to apply deterministic processing.
Tests and documentation for deterministic rule
test/e2e-advisor-dispatch.test.ts, tools/e2e-advisor/README.md
Adds test suite for requiresCloudOnboardE2e (path matching) and applyDeterministicRecommendations (confidence upgrade, noE2eReason clearing, required test entry, deduplication). Updates README to document the deterministic safety-net rule for timing-related changes.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~50 minutes

🐇 A budget was set for the onboard trail,
With thresholds and warnings so regressions don't sail—
The advisor now knows which files need a run,
And the scorecard reports when the budget's outdone.
No hard blocks, just signals for devs to keep bright,
A warm fuzzy budget to keep latency right! 🌟

🚥 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 The PR comprehensively addresses all acceptance criteria from #3776: defines explicit warm-system budget (390000ms), documents scope, implements CI regression signal (advisory), captures and compares timing data, enables phase-level diagnostics, and provides actionable evidence via scorecard integration.
Out of Scope Changes check ✅ Passed All changes are directly scoped to the onboard performance budget implementation: budget configuration file, scorecard analysis integration, E2E Advisor deterministic routing, tests, and documentation. No unrelated changes to performance optimizations or other concerns are present.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly matches the main change: adding an onboard performance budget signal in CI.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch 3776-define-onboard-performance-budget-and-ci-regression-signal

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

@amata-human amata-human added area: ci CI workflows, checks, release automation, or GitHub Actions area: e2e End-to-end tests, nightly failures, or validation infrastructure area: observability Logging, metrics, tracing, diagnostics, or debug output labels Jun 23, 2026
@github-code-quality

github-code-quality Bot commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Overview

Languages: TypeScript

TypeScript / code-coverage/plugin

The overall coverage in the 3776-define-onboard-... branch is 96%. Coverage data for the main branch is not yet available.

Show a code coverage summary of the most covered files.
File main 3776-define-onboard-... ed6eb53 +/-
nemoclaw/src/se...cret-scanner.ts 100%
nemoclaw/src/commands/slash.ts 100%
nemoclaw/src/li...bprocess-env.ts 100%
nemoclaw/src/bl...eprint/state.ts 98%
nemoclaw/src/onboard/config.ts 98%
nemoclaw/src/bl...int/snapshot.ts 97%
nemoclaw/src/bl...print/runner.ts 95%
nemoclaw/src/co...ration-state.ts 94%
nemoclaw/src/bl...ate-networks.ts 94%
nemoclaw/src/index.ts 94%

TypeScript / code-coverage/cli

The overall coverage in the 3776-define-onboard-... branch is 69%. Coverage data for the main branch is not yet available.

Show a code coverage summary of the most covered files.
File main 3776-define-onboard-... ed6eb53 +/-
src/lib/shields...nsition-lock.ts 87%
src/lib/actions...all/run-plan.ts 81%
src/lib/state/o...oard-session.ts 78%
src/lib/state/sandbox.ts 74%
src/lib/onboard/preflight.ts 71%
src/lib/onboard...er-gpu-patch.ts 69%
src/lib/shields/index.ts 68%
src/lib/actions...licy-channel.ts 60%
src/lib/policy/index.ts 60%
src/lib/onboard.ts 22%

Updated July 04, 2026 02:35 UTC
Code Coverage is in Public Preview. Learn more and provide us with your feedback.

@github-actions

github-actions Bot commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

E2E Advisor Recommendation

Required E2E: cloud-onboard
Optional E2E: None

Dispatch hint: cloud-onboard

Workflow run

Full advisor summary

E2E Recommendation Advisor

Base: origin/main
Head: HEAD
Confidence: high

Required E2E

  • cloud-onboard (high): Required because this PR changes cloud onboard trace emission/phase naming, scorecard artifact analysis, the advisory performance budget, and the e2e.yaml scorecard wiring. The real cloud-onboard job is the existing end-to-end signal that produces the timing artifact and exercises the hosted onboarding path.

Optional E2E

  • None.

New E2E recommendations

  • None.

Dispatch hint

  • Workflow: e2e.yaml
  • jobs input: cloud-onboard

@github-actions

github-actions Bot commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

Vitest E2E Scenario Recommendation

Required Vitest E2E scenarios: None
Optional Vitest E2E scenarios: None

Workflow run

Full Vitest E2E advisor summary

Vitest E2E Scenario Advisor

Base: origin/main
Head: HEAD
Confidence: high

Required Vitest E2E scenarios

  • None. No Vitest scenario E2E dispatch is required: the changes affect nightly scorecard/static CI/general E2E advisor behavior and tests outside test/e2e-scenario/, not the e2e-vitest-scenarios workflow, typed scenario registry/runtime support, live Vitest scenario entry points, or shared scenario fixtures.

Optional Vitest E2E scenarios

  • None.

Relevant changed files

  • None.

@github-actions

github-actions Bot commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

PR Review Advisor — No blocking findings

Merge posture: No blocking advisor findings
Primary next action: Add or justify PRA-T1 and any related test follow-ups.
Open items: 0 required · 0 warnings · 0 suggestions · 2 test follow-ups
Since last review: 1 prior item resolved · 2 still apply · 0 new items found

Action checklist

  • PRA-T1 Add or justify test follow-up: Runtime validation
  • PRA-T2 Add or justify test follow-up: Runtime validation
Test follow-ups to resolve or justify

If these cover changed behavior, prefer adding them in this PR; otherwise state why existing coverage is enough or link the follow-up.

  • PRA-T1 Runtime validation — Scheduled/manual scorecard consumes a real `e2e-cloud-onboard` artifact, emits a non-blocking `core.warning` when `totalBudgetMs` is exceeded, and writes `Current slowest phases` to the GitHub run summary.. Local tests are strong for schema validation, analyzer budget evaluation, ZIP negative paths, fallback branches, workflow-body wiring, workflow boundary constraints, advisor routing, and phase-name alignment. Because the PR changes live GitHub Actions scorecard wiring and artifact download/reporting behavior, targeted live validation would still improve confidence without changing the code-review recommendation.
  • PRA-T2 Runtime validation — Branch-dispatched selective scorecard computes `slackData` without exposing Slack webhook secrets unless the run is on `refs/heads/main`, with preview posting still requiring `post_to_slack=true`.. Local tests are strong for schema validation, analyzer budget evaluation, ZIP negative paths, fallback branches, workflow-body wiring, workflow boundary constraints, advisor routing, and phase-name alignment. Because the PR changes live GitHub Actions scorecard wiring and artifact download/reporting behavior, targeted live validation would still improve confidence without changing the code-review recommendation.

Workflow run details

This is an automated, non-binding review; it still expects maintainers and agents to respond to each required or warning item. Treat suggestions as current-PR improvements when they touch changed code; defer only with maintainer rationale or a linked follow-up. A human maintainer must make the final merge decision.

@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 `@scripts/scorecard/analyze-trace-timing.ts`:
- Around line 327-330: The phaseWarnings filter sorts by deltaMs (signed delta)
while formatTopPhaseChanges at line 276 sorts by deltaAbsMs (absolute delta
magnitude). This inconsistency means phaseWarnings prioritizes increases over
decreases, whereas formatTopPhaseChanges ranks by magnitude of change. Resolve
this by either: updating the sort comparator in the phaseWarnings filter to use
deltaAbsMs instead of deltaMs to match the behavior of formatTopPhaseChanges, or
adding a clear comment explaining why phaseWarnings intentionally uses signed
delta to prioritize regressions over improvements.

In `@tools/e2e-advisor/analyze.mts`:
- Around line 359-363: The deduplication check in the
applyDeterministicRecommendations function only compares by test.id, but since
AdvisorTest.id is optional, this misses cases where the cloud-onboard-e2e test
is already required via workflow and job combination. Update the condition that
checks `result.requiredTests.some((test) => test.id ===
CLOUD_ONBOARD_E2E_RECOMMENDATION.id)` to also verify the workflow and job
properties match CLOUD_ONBOARD_E2E_RECOMMENDATION in addition to the id check,
ensuring proper deduplication by both id and workflow+job combination.
🪄 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: 7af3df22-9c87-4531-9251-9bbe129477b8

📥 Commits

Reviewing files that changed from the base of the PR and between df08bcf and 28c4514.

📒 Files selected for processing (8)
  • .github/workflows/nightly-e2e.yaml
  • ci/onboard-performance-budget.json
  • scripts/scorecard/analyze-trace-timing.ts
  • test/e2e-advisor-dispatch.test.ts
  • test/e2e-script-workflow.test.ts
  • test/e2e/README.md
  • tools/e2e-advisor/README.md
  • tools/e2e-advisor/analyze.mts

Comment thread scripts/scorecard/analyze-trace-timing.ts
Comment thread tools/e2e-advisor/analyze.mts
@github-actions

Copy link
Copy Markdown
Contributor

@cv cv added v0.0.73 and removed v0.0.72 labels Jul 1, 2026
Signed-off-by: Angel Mata <amata@nvidia.com>
@github-actions

github-actions Bot commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

E2E Target Recommendation

Required E2E targets: e2e-all
Optional E2E targets: None

Dispatch required E2E targets:

  • gh workflow run e2e.yaml --ref <pr-head-ref>

Workflow run

Full E2E target advisor summary

E2E Target Advisor

Base: origin/main
Head: HEAD
Confidence: high

Required E2E targets

  • e2e-all: The PR changes the shared E2E workflow scorecard machinery in .github/workflows/e2e.yaml, the scorecard trace timing analyzer it executes, the onboard trace phase names consumed by E2E trace summaries, and E2E workflow boundary/scorecard support tests. Shared E2E target workflow machinery and cross-target trace/scorecard behavior require the full supported E2E fan-out.
    • Dispatch: gh workflow run e2e.yaml --ref <pr-head-ref>

Optional E2E targets

  • None.

Relevant changed files

  • .github/workflows/e2e.yaml
  • ci/onboard-performance-budget.json
  • scripts/scorecard/analyze-trace-timing.ts
  • src/lib/onboard/tracing.ts
  • test/e2e/README.md
  • test/e2e/support/e2e-operations-workflow-boundary.test.ts
  • test/e2e/support/e2e-scorecard.test.ts
  • tools/e2e/operations-workflow-boundary.mts

Signed-off-by: Angel Mata <amata@nvidia.com>
Signed-off-by: Angel Mata <amata@nvidia.com>
@cv cv added v0.0.74 and removed v0.0.73 labels Jul 2, 2026
@ericksoa ericksoa self-assigned this Jul 4, 2026
ericksoa added 2 commits July 3, 2026 19:08
Resolve the release-base conflicts without changing the reviewed feature tree.

Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Parse production-shaped multi-entry trace artifacts and reject ambiguous summaries.

Emit sanitized warnings, pass core to the analyzer, and lock phase names behaviorally.

Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
@ericksoa ericksoa added the area: performance Latency, throughput, resource use, benchmarks, or scaling label Jul 4, 2026

@ericksoa ericksoa 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.

Reviewed exact head 38ea887 after the signed main merge and hardening commit. The final tree exactly matches the independently reviewed replay; the real 62-entry artifact parses byte-for-byte, focused validation passes 226/226, and build/typecheck/config/security gates are clean. No blocking code findings. Approval remains contingent on required exact-head CI, advisors, and the full default E2E run completing.

Bring in the validated Hermes base-image resolution fix from #6254 before rerunning E2E.

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

github-actions Bot commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

E2E Target Results — ❌ Some jobs failed

Run: 28691778854
Workflow ref: 3776-define-onboard-performance-budget-and-ci-regression-signal
Requested targets: (default — all supported)
Requested jobs: (default — all default-enabled free-standing jobs; explicit-only jobs openshell-gateway-auth-contract, mcp-bridge-dev, hermes-gpu-startup, sandbox-rlimits-connect, and jetson-nvmap-gpu are skipped unless selected)
Summary: 46 passed, 23 failed, 0 cancelled, 5 skipped

Job Result
agent-turn-latency ❌ failure
bedrock-runtime-compatible-anthropic ❌ failure
brave-search ✅ success
channels-add-remove ❌ failure
channels-stop-start ❌ failure
cloud-inference ❌ failure
cloud-onboard ❌ failure
common-egress-agent ❌ failure
concurrent-gateway-ports ✅ success
credential-migration ✅ success
credential-sanitization ✅ success
cron-preflight-inference-local ✅ success
device-auth-health ✅ success
diagnostics ✅ success
docs-validation ✅ success
double-onboard ✅ success
full-e2e ❌ failure
gateway-drift-preflight ✅ success
gateway-guard-recovery ✅ success
gateway-health-honest ✅ success
generate-matrix ✅ success
gpu-double-onboard ✅ success
gpu-e2e ✅ success
hermes-dashboard ❌ failure
hermes-discord ❌ failure
hermes-e2e ❌ failure
hermes-gpu-startup ⏭️ skipped
hermes-inference-switch ❌ failure
hermes-slack ❌ failure
inference-routing ✅ success
issue-2478-crash-loop-recovery ✅ success
issue-4434-tui-unreachable-inference ✅ success
issue-4462-scope-upgrade-approval ❌ failure
jetson-nvmap-gpu ⏭️ skipped
kimi-inference-compat ✅ success
launchable-smoke ✅ success
live ✅ success
mcp-bridge ❌ failure
mcp-bridge-dev ⏭️ skipped
messaging-compatible-endpoint ✅ success
messaging-providers ✅ success
model-router-provider-routed-inference ✅ success
network-policy ❌ failure
ollama-auth-proxy ✅ success
onboard-negative-paths ✅ success
onboard-repair ✅ success
onboard-resume ✅ success
openclaw-discord-pairing ✅ success
openclaw-inference-switch ❌ failure
openclaw-skill-cli ✅ success
openclaw-slack-pairing ✅ success
openclaw-tui-chat-correlation ✅ success
openshell-gateway-auth-contract ⏭️ skipped
openshell-gateway-upgrade ✅ success
openshell-version-pin ✅ success
overlayfs-autofix ✅ success
rebuild-hermes ❌ failure
rebuild-hermes-stale-base ❌ failure
rebuild-openclaw ✅ success
sandbox-operations ❌ failure
sandbox-rebuild ✅ success
sandbox-rlimits-connect ⏭️ skipped
sandbox-survival ❌ failure
security-posture ❌ failure
sessions-agents-cli ❌ failure
shields-config ✅ success
skill-agent ✅ success
snapshot-commands ✅ success
spark-install ✅ success
state-backup-restore ✅ success
telegram-injection ✅ success
token-rotation ✅ success
tunnel-lifecycle ✅ success
upgrade-stale-sandbox ✅ success

Explicit-only jobs skipped: openshell-gateway-auth-contract (default dispatch excludes the resource-heavy OpenShell auth-contract probe unless selected; validate with jobs=openshell-gateway-auth-contract or targets=openshell-gateway-auth-contract), mcp-bridge-dev (default dispatch excludes moving OpenShell dev artifacts unless explicitly selected; validate with jobs=mcp-bridge-dev or targets=mcp-bridge-dev), hermes-gpu-startup (default dispatch excludes this explicit-only job unless selected; validate with jobs=hermes-gpu-startup or targets=hermes-gpu-startup), sandbox-rlimits-connect (default dispatch excludes the destructive rlimit fork/connect probe unless selected; validate with jobs=sandbox-rlimits-connect or targets=sandbox-rlimits-connect), jetson-nvmap-gpu (default dispatch excludes Jetson until a stable Jetson runner is available; validate with jobs=jetson-nvmap-gpu or targets=jetson-nvmap-gpu).

Failed jobs: agent-turn-latency, bedrock-runtime-compatible-anthropic, channels-add-remove, channels-stop-start, cloud-inference, cloud-onboard, common-egress-agent, full-e2e, hermes-dashboard, hermes-discord, hermes-e2e, hermes-inference-switch, hermes-slack, issue-4462-scope-upgrade-approval, mcp-bridge, network-policy, openclaw-inference-switch, rebuild-hermes, rebuild-hermes-stale-base, sandbox-operations, sandbox-survival, security-posture, sessions-agents-cli. Check run artifacts for logs.

@ericksoa ericksoa 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.

Refreshed approval for exact head ed6eb53 after merging current main/#6254. The new head is signed, the PR delta remains independently reviewed, Hermes base-resolution tests now pass, focused validation is 258/258, and the production 62-entry artifact still parses byte-for-byte. Approval remains contingent on fresh exact-head CI/advisors/full E2E.

@github-actions

github-actions Bot commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

E2E Target Results — ❌ Some jobs failed

Run: 28692152602
Workflow ref: 3776-define-onboard-performance-budget-and-ci-regression-signal
Requested targets: (default — all supported)
Requested jobs: (default — all default-enabled free-standing jobs; explicit-only jobs openshell-gateway-auth-contract, mcp-bridge-dev, hermes-gpu-startup, sandbox-rlimits-connect, and jetson-nvmap-gpu are skipped unless selected)
Summary: 68 passed, 1 failed, 0 cancelled, 5 skipped

Job Result
agent-turn-latency ✅ success
bedrock-runtime-compatible-anthropic ✅ success
brave-search ✅ success
channels-add-remove ✅ success
channels-stop-start ✅ success
cloud-inference ✅ success
cloud-onboard ✅ success
common-egress-agent ✅ success
concurrent-gateway-ports ✅ success
credential-migration ✅ success
credential-sanitization ✅ success
cron-preflight-inference-local ✅ success
device-auth-health ✅ success
diagnostics ✅ success
docs-validation ✅ success
double-onboard ✅ success
full-e2e ✅ success
gateway-drift-preflight ✅ success
gateway-guard-recovery ✅ success
gateway-health-honest ✅ success
generate-matrix ✅ success
gpu-double-onboard ✅ success
gpu-e2e ✅ success
hermes-dashboard ✅ success
hermes-discord ✅ success
hermes-e2e ✅ success
hermes-gpu-startup ⏭️ skipped
hermes-inference-switch ✅ success
hermes-slack ✅ success
inference-routing ✅ success
issue-2478-crash-loop-recovery ✅ success
issue-4434-tui-unreachable-inference ✅ success
issue-4462-scope-upgrade-approval ✅ success
jetson-nvmap-gpu ⏭️ skipped
kimi-inference-compat ✅ success
launchable-smoke ✅ success
live ✅ success
mcp-bridge ❌ failure
mcp-bridge-dev ⏭️ skipped
messaging-compatible-endpoint ✅ success
messaging-providers ✅ success
model-router-provider-routed-inference ✅ success
network-policy ✅ success
ollama-auth-proxy ✅ success
onboard-negative-paths ✅ success
onboard-repair ✅ success
onboard-resume ✅ success
openclaw-discord-pairing ✅ success
openclaw-inference-switch ✅ success
openclaw-skill-cli ✅ success
openclaw-slack-pairing ✅ success
openclaw-tui-chat-correlation ✅ success
openshell-gateway-auth-contract ⏭️ skipped
openshell-gateway-upgrade ✅ success
openshell-version-pin ✅ success
overlayfs-autofix ✅ success
rebuild-hermes ✅ success
rebuild-hermes-stale-base ✅ success
rebuild-openclaw ✅ success
sandbox-operations ✅ success
sandbox-rebuild ✅ success
sandbox-rlimits-connect ⏭️ skipped
sandbox-survival ✅ success
security-posture ✅ success
sessions-agents-cli ✅ success
shields-config ✅ success
skill-agent ✅ success
snapshot-commands ✅ success
spark-install ✅ success
state-backup-restore ✅ success
telegram-injection ✅ success
token-rotation ✅ success
tunnel-lifecycle ✅ success
upgrade-stale-sandbox ✅ success

Explicit-only jobs skipped: openshell-gateway-auth-contract (default dispatch excludes the resource-heavy OpenShell auth-contract probe unless selected; validate with jobs=openshell-gateway-auth-contract or targets=openshell-gateway-auth-contract), mcp-bridge-dev (default dispatch excludes moving OpenShell dev artifacts unless explicitly selected; validate with jobs=mcp-bridge-dev or targets=mcp-bridge-dev), hermes-gpu-startup (default dispatch excludes this explicit-only job unless selected; validate with jobs=hermes-gpu-startup or targets=hermes-gpu-startup), sandbox-rlimits-connect (default dispatch excludes the destructive rlimit fork/connect probe unless selected; validate with jobs=sandbox-rlimits-connect or targets=sandbox-rlimits-connect), jetson-nvmap-gpu (default dispatch excludes Jetson until a stable Jetson runner is available; validate with jobs=jetson-nvmap-gpu or targets=jetson-nvmap-gpu).

Failed jobs: mcp-bridge. Check run artifacts for logs.

@github-actions

github-actions Bot commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

E2E Target Results — ✅ All default jobs passed

Run: 28692152602
Workflow ref: 3776-define-onboard-performance-budget-and-ci-regression-signal
Requested targets: (default — all supported)
Requested jobs: (default — all default-enabled free-standing jobs; explicit-only jobs openshell-gateway-auth-contract, mcp-bridge-dev, hermes-gpu-startup, sandbox-rlimits-connect, and jetson-nvmap-gpu are skipped unless selected)
Summary: 69 passed, 0 failed, 0 cancelled, 5 skipped

Job Result
agent-turn-latency ✅ success
bedrock-runtime-compatible-anthropic ✅ success
brave-search ✅ success
channels-add-remove ✅ success
channels-stop-start ✅ success
cloud-inference ✅ success
cloud-onboard ✅ success
common-egress-agent ✅ success
concurrent-gateway-ports ✅ success
credential-migration ✅ success
credential-sanitization ✅ success
cron-preflight-inference-local ✅ success
device-auth-health ✅ success
diagnostics ✅ success
docs-validation ✅ success
double-onboard ✅ success
full-e2e ✅ success
gateway-drift-preflight ✅ success
gateway-guard-recovery ✅ success
gateway-health-honest ✅ success
generate-matrix ✅ success
gpu-double-onboard ✅ success
gpu-e2e ✅ success
hermes-dashboard ✅ success
hermes-discord ✅ success
hermes-e2e ✅ success
hermes-gpu-startup ⏭️ skipped
hermes-inference-switch ✅ success
hermes-slack ✅ success
inference-routing ✅ success
issue-2478-crash-loop-recovery ✅ success
issue-4434-tui-unreachable-inference ✅ success
issue-4462-scope-upgrade-approval ✅ success
jetson-nvmap-gpu ⏭️ skipped
kimi-inference-compat ✅ success
launchable-smoke ✅ success
live ✅ success
mcp-bridge ✅ success
mcp-bridge-dev ⏭️ skipped
messaging-compatible-endpoint ✅ success
messaging-providers ✅ success
model-router-provider-routed-inference ✅ success
network-policy ✅ success
ollama-auth-proxy ✅ success
onboard-negative-paths ✅ success
onboard-repair ✅ success
onboard-resume ✅ success
openclaw-discord-pairing ✅ success
openclaw-inference-switch ✅ success
openclaw-skill-cli ✅ success
openclaw-slack-pairing ✅ success
openclaw-tui-chat-correlation ✅ success
openshell-gateway-auth-contract ⏭️ skipped
openshell-gateway-upgrade ✅ success
openshell-version-pin ✅ success
overlayfs-autofix ✅ success
rebuild-hermes ✅ success
rebuild-hermes-stale-base ✅ success
rebuild-openclaw ✅ success
sandbox-operations ✅ success
sandbox-rebuild ✅ success
sandbox-rlimits-connect ⏭️ skipped
sandbox-survival ✅ success
security-posture ✅ success
sessions-agents-cli ✅ success
shields-config ✅ success
skill-agent ✅ success
snapshot-commands ✅ success
spark-install ✅ success
state-backup-restore ✅ success
telegram-injection ✅ success
token-rotation ✅ success
tunnel-lifecycle ✅ success
upgrade-stale-sandbox ✅ success

Explicit-only jobs skipped: openshell-gateway-auth-contract (default dispatch excludes the resource-heavy OpenShell auth-contract probe unless selected; validate with jobs=openshell-gateway-auth-contract or targets=openshell-gateway-auth-contract), mcp-bridge-dev (default dispatch excludes moving OpenShell dev artifacts unless explicitly selected; validate with jobs=mcp-bridge-dev or targets=mcp-bridge-dev), hermes-gpu-startup (default dispatch excludes this explicit-only job unless selected; validate with jobs=hermes-gpu-startup or targets=hermes-gpu-startup), sandbox-rlimits-connect (default dispatch excludes the destructive rlimit fork/connect probe unless selected; validate with jobs=sandbox-rlimits-connect or targets=sandbox-rlimits-connect), jetson-nvmap-gpu (default dispatch excludes Jetson until a stable Jetson runner is available; validate with jobs=jetson-nvmap-gpu or targets=jetson-nvmap-gpu).

@ericksoa
ericksoa merged commit 94fb805 into main Jul 4, 2026
213 of 214 checks passed
@ericksoa
ericksoa deleted the 3776-define-onboard-performance-budget-and-ci-regression-signal branch July 4, 2026 03:23
Hadar301 pushed a commit to Hadar301/NemoClaw-OpenShift that referenced this pull request Jul 12, 2026
<!-- markdownlint-disable MD041 -->
## Summary
This PR adds a data-backed advisory performance budget for warm-system
cloud onboarding and surfaces regressions in the unified E2E scorecard
without making timing itself merge-blocking. It also makes malformed or
ambiguous timing evidence explicit and routes relevant changes through
deterministic E2E review.

## Related Issue
Fixes NVIDIA#3776

## Changes
- Add `ci/onboard-performance-budget.json` with a `390000 ms`
warm-system total budget, calibrated from ten successful `main` samples
using p95 plus a 25% buffer rounded to 30 seconds.
- Evaluate total duration and phase diagnostics in the scorecard,
emitting advisory GitHub Actions warnings instead of failing solely on
timing variance.
- Parse the production-shaped multi-entry GitHub artifact without
extraction; require exactly one root timing summary and validate its ZIP
metadata, size, compression, local header, inflated size, and CRC.
- Emit only a fixed sanitized warning when timing-artifact validation
fails, and pass `core` through the workflow analyzer so the warning is
visible.
- Wire the budget through the current `.github/workflows/e2e.yaml`
scorecard path and keep E2E Advisor routing deterministic for
onboarding, timing, scorecard, workflow, and budget changes.
- Add schema/runtime validation, an emitter/sanitizer/scorecard phase
contract, focused scorecard/workflow/advisor tests, and E2E maintainer
documentation.
- Preserve `ci/onboard-performance-budget.json` and `test/e2e/README.md`
as the durable record for the budget and advisory policy; closed parent
issue NVIDIA#2001 remains historical context.
- Merge current `main` with signed commits, including NVIDIA#6254's validated
Hermes base-image resolution fix, and apply a signed hardening commit on
top. The protected contributor branch forbids history rewrites, so its
historical commits remain intact.

### Calibration rationale
The initial cap is intentionally based on the ten durable successful
`main` samples available on 2026-06-23; the checked-in `$comment`
records every sample, the p95 interpolation, the 25% buffer, and why the
original NVIDIA#3769 traces were unavailable. That is a limited baseline, so
this PR keeps the signal advisory: distribution drift can warn
maintainers but cannot block a merge. We accept that bounded calibration
risk to establish a measured signal now and will rebaseline from a wider
durable sample set as it accumulates rather than delay the non-blocking
instrumentation.

## Type of Change

- [ ] Code change (feature, bug fix, or refactor)
- [x] Code change with doc updates
- [ ] Doc only (prose changes, no code sample modifications)
- [ ] Doc only (includes code sample changes)

## Quality Gates
- [x] Tests added or updated for changed behavior
- [ ] Existing tests cover changed behavior — justification: focused
tests were added or updated instead
- [ ] Tests not applicable — justification: tests are applicable and
included
- [x] Docs updated for user-facing behavior changes
- [ ] Docs not applicable — justification: E2E maintainer documentation
changed
- [x] Sensitive paths changed (security, policy, credentials, preflight,
onboarding, inference, runner, sandbox, or messaging)
- [x] Sensitive-path review completed or maintainer-approved waiver
recorded — reviewer/approval link/justification: [exact-head maintainer
approval](NVIDIA#5686 (review))
on `ed6eb53ccc3ebef49c7ec31798fa29150985528a`
- [x] Non-success, skipped, or missing CI check accepted by maintainer —
check name, approval link, and follow-up issue: [full default
E2E](NVIDIA#5686 (comment))
passed all 69 default jobs; the five skips are the workflow's documented
explicit-only jobs (`openshell-gateway-auth-contract`, `mcp-bridge-dev`,
`hermes-gpu-startup`, `sandbox-rlimits-connect`, and `jetson-nvmap-gpu`)

## Verification
- [ ] PR description includes the DCO sign-off declaration and every
commit appears as `Verified` in GitHub — new commits `e09e88445`,
`38ea88760`, and `ed6eb53cc` are Verified; the protected branch retains
eight historical unverified commits that cannot be rewritten
- [ ] Git hooks passed during commit and push, or `npx prek run
--from-ref main --to-ref HEAD` passes — all applicable hooks pass; the
local monolithic CLI coverage hook was skipped after unrelated tests
timed out under concurrent full-suite load, while the exact-head GitHub
aggregate and all five CLI shards passed
- [x] Targeted tests pass for changed behavior — 258 focused tests, all
three TypeScript checks, config validation, source-shape budget, CLI
build, and production-artifact parsing pass on exact final tree
`d79bc43cc45b6665dd93b7b5c11c16eb3efe8b66`
- [x] Full default E2E recommendation satisfied — [attempt
2](https://github.com/NVIDIA/NemoClaw/actions/runs/28692152602/attempts/2)
passed all 69 default jobs on the exact head with only five documented
explicit-only skips; `cloud-onboard`, all three MCP agent scenarios,
scorecard, and PR reporting passed, and the scorecard emitted zero
annotations. The fresh cloud trace was `156944 ms` against the advisory
`390000 ms` cap.
- [ ] Full `npm test` passes (broad runtime changes only) — not run as
one local monolith; the exact-head GitHub aggregate, CLI shards 1-5,
plugin tests, and full default E2E all passed
- [x] Quality Gates section completed with required justifications or
waivers — [required
CI](https://github.com/NVIDIA/NemoClaw/actions/runs/28692118362/job/85095763350),
[GPT
advisor](NVIDIA#5686 (comment)),
documented Nemotron calibration rationale, exact-head approval, and full
default E2E are complete
- [x] No secrets, API keys, or credentials committed
- [ ] `npm run docs` builds without warnings (doc changes only) — not
applicable; this is not doc-only
- [ ] Doc pages follow the [style
guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md)
(doc changes only) — not applicable; no doc page changed
- [ ] New doc pages include SPDX header and frontmatter (new pages only)
— not applicable; no new doc page

---
Signed-off-by: Angel Mata <amata@nvidia.com>
Signed-off-by: Julie Yaunches <jyaunches@nvidia.com>
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>

---------

Signed-off-by: Angel Mata <amata@nvidia.com>
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Co-authored-by: Julie Yaunches <jyaunches@nvidia.com>
Co-authored-by: Carlos Villela <cvillela@nvidia.com>
Co-authored-by: Aaron Erickson <aerickson@nvidia.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: ci CI workflows, checks, release automation, or GitHub Actions area: e2e End-to-end tests, nightly failures, or validation infrastructure area: observability Logging, metrics, tracing, diagnostics, or debug output area: performance Latency, throughput, resource use, benchmarks, or scaling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

perf(onboard): define onboard performance budget and CI regression signal

5 participants