Skip to content

fix(onboard): rebuild on messaging credential drift - #7853

Open
HOYALIM wants to merge 49 commits into
NVIDIA:mainfrom
HOYALIM:codex/issue-3631-credential-drift
Open

fix(onboard): rebuild on messaging credential drift#7853
HOYALIM wants to merge 49 commits into
NVIDIA:mainfrom
HOYALIM:codex/issue-3631-credential-drift

Conversation

@HOYALIM

@HOYALIM HOYALIM commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

Summary

Detect an explicitly supplied messaging credential whose hash differs from the durable sandbox plan before a ready sandbox is reused. The resume flow validates the replacement credential and enters sandbox recreation instead of retaining the old credential binding.

Replacement credentials are validated before backup, deletion, or recreation. Missing or unchanged credentials preserve reuse, and channels stopped or disabled in durable state remain inactive.

Related Issue

Fixes #3631

Changes

  • compare explicitly supplied messaging credential hashes with the registry plan without persisting or logging raw credentials
  • carry credential drift through sandbox recreation so validation finishes before destructive work
  • preserve current registry authority, provider-effect recovery, and stopped or disabled channel state
  • document that recreation restores only supported workspace and manifest-declared state
  • cover changed, missing, unchanged, rejected, stopped, disabled, recovery, and concurrent-registry-update behavior

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:
  • 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: The nine-category security review for the maintained implementation reported no findings: fix(onboard): rebuild on messaging credential drift #7853 (review). The current-main refresh retained the same effective changes, and the refreshed local audit also found no issues.
  • Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue:

Documentation Writer Review

  • Documentation writer subagent reviewed the completed changes
  • Result: docs-updated
  • Evidence: docs/security/credential-rotation.mdx and docs/reference/troubleshooting.mdx describe validation-before-mutation, sandbox recreation, active credential bindings, and the supported-state preservation boundary. The independent final review found the lifecycle, data-safety boundary, credential-family coverage, OpenClaw/Hermes scope, and Deep Agents exclusion complete and accurate, with no edits needed. The focused documentation contract passed 6/6 and the strict documentation build completed with 0 errors and 2 existing warnings.
  • Agent: Codex Desktop

DGX Station Hardware Evidence

  • Tested on DGX Station
  • Tested commit: Not applicable; scripts/prepare-dgx-station-host.sh is unchanged.
  • Station profile/scenario: Not applicable.
  • Result: Not applicable.
  • Supporting evidence: Not applicable.

Verification

  • PR description includes a Signed-off-by: line and every previously published commit appears as Verified in GitHub; the current-main merge commit is signed and will be rechecked after push
  • Normal commit hooks passed
  • Targeted behavior tests pass — 175/175 across the focused onboarding, messaging, and documentation suites
  • Applicable broad local gates passed — CLI and plugin builds, CLI type-checking, repository hooks, project membership, test-title, source-shape, test-size, and strict documentation validation
  • 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) — 2 existing warnings remain
  • Doc pages follow the style guide (doc changes only)
  • New doc pages include SPDX header and frontmatter (new pages only)

GitHub Actions

Fresh repository CI, protected E2E evidence, review clearance, and independent approval are required for the current branch revision. No prior result is waived or carried forward as a merge gate.


Signed-off-by: Ho Lim subhoya@gmail.com
Signed-off-by: Charan Jagwani cjagwani@nvidia.com
Signed-off-by: Apurv Kumaria akumaria@nvidia.com

Signed-off-by: Ho Lim <subhoya@gmail.com>
Copilot AI review requested due to automatic review settings July 29, 2026 20:38
@copy-pr-bot

copy-pr-bot Bot commented Jul 29, 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.

Copilot AI 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.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@coderabbitai

coderabbitai Bot commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Sandbox resume compares stored messaging credential hashes with environment credentials for active channels. Detected changes prevent reuse, validate replacement credentials, recreate the sandbox when required, and leave disabled channels unchanged.

Changes

Messaging credential drift

Layer / File(s) Summary
Credential drift detection
src/lib/onboard/machine/handlers/sandbox-messaging.ts, src/lib/onboard/machine/handlers/sandbox-messaging.test.ts
Adds active-channel credential hash comparison, durable-plan selection, forced validation support, and tests for changed, unchanged, and disabled-channel credentials.
Resume decision and recreation wiring
src/lib/onboard/machine/handlers/sandbox.ts, src/lib/onboard/machine/handlers/sandbox-resume.ts
Loads registry messaging plans, propagates credential drift through resume decisions, and enables credential validation during sandbox recreation.
Drift integration and validation
src/lib/onboard/machine/handlers/sandbox-credential-drift.test.ts, src/lib/onboard/machine/handlers/sandbox-resume.test.ts, docs/reference/troubleshooting.mdx
Tests successful and rejected Telegram token rotation, disabled checkpoint channels, recreation decisions, and active-channel troubleshooting behavior.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Possibly related PRs

Suggested labels: area: security

Suggested reviewers: cv

Sequence Diagram(s)

sequenceDiagram
  participant Onboard
  participant SandboxResume
  participant CredentialDrift
  participant SandboxRegistry
  participant SandboxRuntime
  Onboard->>SandboxResume: resume existing sandbox
  SandboxResume->>SandboxRegistry: load registry messaging plan
  SandboxResume->>CredentialDrift: compare active-channel hashes with environment
  CredentialDrift-->>SandboxResume: messaging credential drift
  SandboxResume->>SandboxRuntime: validate credentials and recreate sandbox
  SandboxRuntime->>SandboxRegistry: store updated messaging plan
Loading
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Linked Issues check ✅ Passed The changes detect Telegram credential drift, validate replacements before destructive actions, preserve disabled channels, and trigger sandbox recreation for issue #3631.
Out of Scope Changes check ✅ Passed The code, tests, and troubleshooting updates directly support messaging credential drift handling and issue #3631.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely describes rebuilding onboarding sandboxes when messaging credential drift occurs.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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

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

🧹 Nitpick comments (2)
src/lib/onboard/machine/handlers/sandbox-credential-drift.test.ts (2)

18-20: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Document the hoisted module mock.

This import-time vi.mock setup has no explanation. Add a short comment stating that messaging discovery is mocked to isolate credential-drift resume behavior. As per coding guidelines, import-time stubs must be documented.

🤖 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 `@src/lib/onboard/machine/handlers/sandbox-credential-drift.test.ts` around
lines 18 - 20, Add a short explanatory comment immediately above the import-time
vi.mock for detectMessagingChannelsFromEnv, stating that messaging discovery is
mocked to isolate credential-drift resume behavior.

Source: Coding guidelines


64-72: 🗄️ Data Integrity & Integration | 🔵 Trivial | ⚡ Quick win

Assert the durable registry result after recreation.

These assertions verify the session hash and mocked remove/create calls, but not the PR’s durable contract: one registry entry for saved containing only the replacement hash and no raw credential. Add a public-boundary assertion against the resulting registry state.
As per path instructions, tests should prove observable behavior through the public boundary.

🤖 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 `@src/lib/onboard/machine/handlers/sandbox-credential-drift.test.ts` around
lines 64 - 72, The test currently verifies session state and mocked sandbox
calls but not the durable registry contract. Extend the test around the
recreation flow to inspect the resulting registry through its public boundary,
asserting exactly one entry for “saved” containing only the replacement
credential hash and no raw credential; keep the existing session and call
assertions unchanged.

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.

Nitpick comments:
In `@src/lib/onboard/machine/handlers/sandbox-credential-drift.test.ts`:
- Around line 18-20: Add a short explanatory comment immediately above the
import-time vi.mock for detectMessagingChannelsFromEnv, stating that messaging
discovery is mocked to isolate credential-drift resume behavior.
- Around line 64-72: The test currently verifies session state and mocked
sandbox calls but not the durable registry contract. Extend the test around the
recreation flow to inspect the resulting registry through its public boundary,
asserting exactly one entry for “saved” containing only the replacement
credential hash and no raw credential; keep the existing session and call
assertions unchanged.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 60303fae-3b03-4bc2-beb8-8a5ceb5a50cd

📥 Commits

Reviewing files that changed from the base of the PR and between cd49b2f and d44c709.

📒 Files selected for processing (6)
  • src/lib/onboard/machine/handlers/sandbox-credential-drift.test.ts
  • src/lib/onboard/machine/handlers/sandbox-messaging.test.ts
  • src/lib/onboard/machine/handlers/sandbox-messaging.ts
  • src/lib/onboard/machine/handlers/sandbox-resume.test.ts
  • src/lib/onboard/machine/handlers/sandbox-resume.ts
  • src/lib/onboard/machine/handlers/sandbox.ts

@github-actions

github-actions Bot commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

PR Review Advisor — Informational

Advisor assessment: Informational / low confidence
Next action: No advisor follow-up needed.
Findings: 0 blockers · 0 warnings · 0 suggestions
Status: Partial review preserved 0 canonical finding(s) and 3 terminology decision(s) before the advisor stopped.

Model lanes

  • GPT-5.6 Terra (primary): Failed after a partial review · low confidence · 0 blockers · 0 warnings · 0 suggestions
  • Nemotron 3 Ultra (second opinion): Failed

Second-opinion terminology and E2E selections are advisory. They do not change the primary assessment or E2E / PR Gate.

3 semantic terminology decisions

Terminology decisions are advisory. They affect the assessment only when a separate finding identifies concrete semantic impact.

  • justified — active messaging credential at docs/security/credential-rotation.mdx:32: Use “active messaging credential” when the active-channel condition affects validation or recreation behavior.
  • established — manifest-declared state at docs/security/credential-rotation.mdx:15: Keep the established term and state the applicable preservation boundary.
  • established — credential drift at src/lib/onboard/machine/handlers/sandbox-credential-drift.test.ts:72: Keep the established term for the recorded-versus-supplied credential difference.

E2E guidance

Advisory only. E2E / PR Gate selects and runs jobs independently.

Recommended E2E: cloud-onboard, managed-image-multiarch-startup, channels-add-remove, channels-stop-start, onboard-repair, onboard-resume

Workflow run details

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

@cjagwani cjagwani left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maintainer security review — exact head f17c8894aff2552c08add35d4d1e674b7ca395aa against base 795de982e26b400009bf1fc0f3826845d79acc4d: PASS. No security findings. Diff fingerprint: 12d36c86f39aef3a93fe3f5a2771338c2dac662ce3c166e698e78f69a7184900.

  1. Secrets and credentials — PASS. The change compares only SHA-256 credential hashes. Raw token values are neither persisted nor logged, and disabled-channel bindings are excluded from drift-triggered recreation.
  2. Input validation and sanitization — PASS. Drift is bounded to canonical active channel IDs from the durable messaging plan; missing credentials remain non-events, and explicitly changed active credentials enter the existing validation flow.
  3. Authentication and authorization — PASS. Replacement credentials are validated through the existing channel setup before any sandbox deletion or recreation. No role, permission, or pairing boundary changes.
  4. Dependencies and third-party code — PASS. No dependency, lockfile, registry, image-source, or license changes.
  5. Error handling and logging — PASS. Validation failures occur before the destructive recreation edge; existing rollback behavior remains intact. Messages disclose only that drift occurred, never credential content.
  6. Cryptography and data protection — PASS. The existing credential-hash primitive is reused without algorithm or storage changes.
  7. Configuration and infrastructure — PASS. No new command, option, environment variable, network policy, capability, or filesystem-permission surface. Paused channels retain their current sandbox without unrelated churn.
  8. Security testing — PASS. Focused tests cover changed active credentials, unchanged/missing credentials, disabled-channel replacement credentials, and resume decision behavior. Three focused files passed 38/38; CLI typecheck, Biome, diff checks, secret scan, and npm run check:diff passed.
  9. Holistic security posture — PASS. The patch strengthens the fail-closed credential-rotation path by coupling the active-channel drift decision to validation before recreation while preventing unneeded destructive work for inactive channels.

Documentation writer result: docs-updated; npm run docs passed with 0 errors and 2 pre-existing warnings.

@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 `@docs/reference/troubleshooting.mdx`:
- Around line 726-728: Rewrite the new troubleshooting text around NemoClaw so
it addresses the reader directly in active voice and present tense, replacing
third-person references with second-person wording while preserving the existing
credential validation, backup, recreation, restore, and paused-channel behavior.
🪄 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: e0864382-415a-4fc2-a2ab-c57490c8738b

📥 Commits

Reviewing files that changed from the base of the PR and between d44c709 and f17c889.

📒 Files selected for processing (5)
  • docs/reference/troubleshooting.mdx
  • src/lib/onboard/machine/handlers/sandbox-credential-drift.test.ts
  • src/lib/onboard/machine/handlers/sandbox-messaging.test.ts
  • src/lib/onboard/machine/handlers/sandbox-messaging.ts
  • src/lib/onboard/machine/handlers/sandbox.ts
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/lib/onboard/machine/handlers/sandbox-messaging.test.ts

Comment thread docs/reference/troubleshooting.mdx Outdated
Signed-off-by: Ho Lim <subhoya@gmail.com>
@wscurran wscurran added area: messaging Messaging channels, bridges, manifests, or channel lifecycle area: onboarding Onboarding FSM, provider setup, sandbox launch, or first-run flow area: sandbox OpenShell sandbox lifecycle, runtime, config, or recovery bug-fix PR fixes a bug or regression integration: telegram Telegram integration or channel behavior labels Jul 29, 2026
@wscurran

Copy link
Copy Markdown
Contributor

✨ Thanks for the PR. This fixes credential drift detection by comparing explicitly supplied messaging credential hashes against the durable sandbox plan and entering the reconciliation path when they differ. Maintainers will review the hash comparison logic, registry cleanup, and test coverage for missing, unchanged, and replacement credentials.


Related open issues:

@HOYALIM

HOYALIM commented Jul 30, 2026

Copy link
Copy Markdown
Contributor Author

Current-head CI note for 8d144240adabbbe36901a32dd633af8312203a27: cli-test-shards (4) failed in the unchanged shared test test/mcp-lifecycle-lock.test.ts:436 because the expected corrupt lock file disappeared after the timeout assertion (ENOENT). This PR does not modify the MCP lifecycle lock implementation or test. On the exact head, the failing file passes 25/25 locally, and the three credential-drift/resume files pass 38/38. The failure is consistent with a loaded-run timing race between the 30 ms test timeout and 100 ms corrupt-lock grace, rather than this diff. I attempted to rerun only job 90742116177, but GitHub requires repository admin rights. Could a maintainer please rerun that failed shard? No code or no-op commit is warranted from the PR diff.

@cjagwani cjagwani left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved exact head 8d144240adabbbe36901a32dd633af8312203a27 against base 795de982e26b400009bf1fc0f3826845d79acc4d (diff fingerprint faba59c22c4ae37d4b3f2500598c449c83a2b3cd4c876db845d3977aad811520). The credential-drift rebuild path was reviewed end to end: reconciliation validates messaging inputs before destructive recreation, completed checkpoints still detect drift before recreation, and rejected placeholder handling preserves the existing hash contract. Final security verdict is PASS; the last delta after that receipt is documentation only. All four commits are GitHub-verified, DCO/docs receipt/primary advisor/current threads are clean, normal CI passed after one unrelated temporary-lock retry, and protected E2E run 30503257538 passed cloud-onboard, onboard-repair, and onboard-resume with controller verification 30503239150.

@cjagwani cjagwani left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved exact head 0e10adf14b9238a7f85592a40a4339b0ab6dd8f5 against current base d52d4599a18490e7f8efc6e8062296fffcbea4a7 (diff fingerprint faba59c22c4ae37d4b3f2500598c449c83a2b3cd4c876db845d3977aad811520). The only delta after the previously reviewed 8d144240a head is the current-main merge; the credential-drift behavior and prior PASS security verdict are unchanged. The current-main merge gate reports all 41 checks green, clean/mergeable state, no unresolved major CodeRabbit findings, risky-path test coverage, DCO compliance, and all five commits GitHub-verified. Protected E2E child run 30505198308 passed cloud-onboard, onboard-repair, and onboard-resume; controller run 30505176269 and the native exact-head gate both succeeded. Contributor/approver overlap for @cjagwani is surfaced as the repository's non-blocking advisory.

cjagwani
cjagwani previously approved these changes Jul 30, 2026

@cjagwani cjagwani left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Exact-head approval after refresh onto current main. Deterministic maintainer gate passes with all 41 current checks green, clean merge state, verified history, and no unresolved major findings. Protected cloud-onboard, onboard-repair, and onboard-resume all passed on this head.

@github-actions github-actions Bot added v0.0.99 and removed v0.0.98 labels Jul 30, 2026
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
@apurvvkumaria

Copy link
Copy Markdown
Collaborator

Addressed the remaining documentation-review gap in commit 0e6176d:

  • the troubleshooting guidance now says recreation backs up only supported workspace and manifest-declared state
  • it explicitly warns that files outside those state paths are not preserved
  • the independent documentation-writer follow-up found no remaining documentation issue

Validation passed: the documentation build completed with 0 errors (2 existing warnings), the focused credential-rotation documentation contract passed 6/6, and the diff check passed. The earlier rotation lifecycle and terminology requests remain resolved. Fresh repository CI and protected E2E are still pending; no check is being waived.

@cjagwani cjagwani left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Security review — exact head 0e6176d28cbe41397a341a5114147f2851e18bdd against base c176af5f08595ed748b4eeac8988c554e180183e: PASS with no findings.

  1. Secrets and credentials — PASS. Raw messaging credentials are neither persisted nor logged; comparisons use recorded hashes and replacement values remain confined to the existing validation and apply path.
  2. Input validation and injection resistance — PASS. Only explicitly supplied active-channel credentials are compared. Changed values are validated before backup, deletion, or recreation; missing and unchanged values preserve reuse.
  3. Authentication and authorization — PASS. Manifest and registry authority, channel ownership, and stopped or disabled channel state remain authoritative. No identity or permission surface is widened.
  4. Dependencies and supply chain — PASS. No dependency, lockfile, image source, download, or external repository change occurs in this effective patch.
  5. Error handling and information exposure — PASS. Validation failure leaves the existing sandbox unchanged. Recreation errors remain explicit and recoverable; credential values are not exposed.
  6. Cryptography and data protection — PASS. Hash comparison semantics are unchanged. The latest child commit narrows the documentation to supported workspace and manifest-declared state and explicitly states that files outside those paths are not preserved.
  7. Configuration and infrastructure — PASS. Credential drift uses the existing backup, recreation, and restore workflow. Provider-effect recovery, sandbox intent boundaries, and channel configuration authority remain intact.
  8. Security testing — PASS. The implementation revision passed the prior exact nine-category review. At this exact head, the credential-rotation documentation contract passes 6/6 and strict docs validation passes with 0 errors and 2 existing warnings. Fresh GitHub Actions remains authoritative for the full revision.
  9. System security — PASS. Destructive work occurs only after validation through the owned-sandbox lifecycle. Cleanup targets and preserved paths are not broadened, stopped integrations are not revived, and the documentation now matches the actual preservation boundary.

The only change after the prior exact security review is the verified, signed-off documentation commit 0e6176d28cbe41397a341a5114147f2851e18bdd. It does not change executable behavior and resolves the preservation-boundary ambiguity without expanding the supported state surface. The exact effective patch has raw SHA-256 c39c00fb381bca3cdfebab5d145d7f1db62f753b8a5d548ab57f5483161fd515 and stable patch ID b8d0a2851a22171d859475206abeb49d44aabca9.

Fresh CI, protected E2E, original-reviewer resolution, and independent exact-head approval remain mandatory; this review waives none of those gates.

@apurvvkumaria

Copy link
Copy Markdown
Collaborator

The OpenClaw managed-startup failure is classified as transient startup timing, not a PR-related code failure:

  • this PR does not change the managed-image entrypoint or direct-start harness
  • the image build and contract validation passed
  • the Hermes and Deep Agents direct-start jobs passed
  • only OpenClaw failed to reach the forwarded test command within the harness window, while the same base’s OpenClaw lane has passed on other current PR runs

I requested the single bounded failed-job retry for this branch revision: https://github.com/NVIDIA/NemoClaw/actions/runs/31033638864. The earlier action_required state was the normal fork-workflow approval step, not a test execution. I will not retry this failure again if it recurs. Protected E2E and human review clearance remain separate requirements.

Signed-off-by: Charan Jagwani <cjagwani@nvidia.com>

@cjagwani cjagwani left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Verdict

Security review — exact head 303e92e1511eac489bb3c4fe7870d6609b8f344a against base 3b208d79e5d3bda4183704145ee5c28d79876ae1: PASS with no findings. The effective patch is safe from the reviewed security perspective, subject to every repository merge gate.

Findings Table

No findings.

Detailed Analysis

  1. Secrets and Credentials — PASS. Raw messaging credentials are neither persisted nor logged; comparisons use recorded hashes and replacement values remain confined to the existing validation and apply path.

  2. Input Validation and Data Sanitization — PASS. Only explicitly supplied active-channel credentials are compared. Changed values are validated before backup, deletion, or recreation; missing and unchanged values preserve reuse.

  3. Authentication and Authorization — PASS. Manifest and registry authority, channel ownership, and stopped or disabled channel state remain authoritative. No identity or permission surface is widened.

  4. Dependencies and Third-Party Libraries — PASS. No dependency, lockfile, image source, download, or external repository change occurs in this effective patch.

  5. Error Handling and Logging — PASS. Validation failure leaves the existing sandbox unchanged. Recreation errors remain explicit and recoverable; credential values are not exposed.

  6. Cryptography and Data Protection — PASS. Hash comparison semantics are unchanged. The latest child commit narrows the documentation to supported workspace and manifest-declared state and explicitly states that files outside those paths are not preserved.

  7. Configuration and Security Headers — PASS. Credential drift uses the existing backup, recreation, and restore workflow. Provider-effect recovery, sandbox intent boundaries, and channel configuration authority remain intact.

  8. Security Testing — PASS. The implementation revision passed the prior exact nine-category review. At this exact head, the credential-rotation documentation contract passes 6/6 and strict docs validation passes with 0 errors and 2 existing warnings. Fresh GitHub Actions remains authoritative for the full revision.

  9. System Security — PASS. Destructive work occurs only after validation through the owned-sandbox lifecycle. Cleanup targets and preserved paths are not broadened, stopped integrations are not revived, and the documentation now matches the actual preservation boundary.

Files Reviewed

  • docs/reference/troubleshooting.mdx
  • docs/security/credential-rotation.mdx
  • src/lib/messaging/applier/host-state-applier.ts
  • src/lib/onboard/machine/handlers/sandbox-create-intent-boundary.test.ts
  • src/lib/onboard/machine/handlers/sandbox-credential-drift.test.ts
  • src/lib/onboard/machine/handlers/sandbox-messaging.test.ts
  • src/lib/onboard/machine/handlers/sandbox-messaging.ts
  • src/lib/onboard/machine/handlers/sandbox-resume.test.ts
  • src/lib/onboard/machine/handlers/sandbox-resume.ts
  • src/lib/onboard/machine/handlers/sandbox.ts
  • src/lib/onboard/messaging-channel-setup.test.ts
  • src/lib/onboard/messaging-channel-setup.ts
  • test/credential-rotation-docs.test.ts

Provenance and Required Gates

The signed refresh merge is conflict-free and preserves the effective 13-file patch byte-for-byte (raw SHA-256 c39c00fb381bca3cdfebab5d145d7f1db62f753b8a5d548ab57f5483161fd515; stable patch ID b8d0a2851a22171d859475206abeb49d44aabca9). Base PR #8372 changes the canonical security rubric and PR Review Advisor machinery only; it does not alter any effective PR file or runtime trust boundary. This review independently applies the new rubric.

Fresh CI, protected E2E, documentation receipt, unresolved-review resolution, and independent exact-head approval remain mandatory. This security review waives none of those gates.

@apurvvkumaria

Copy link
Copy Markdown
Collaborator

Current revision 303e92e151 gate disposition:

  • Ordinary CI is green: 33 checks pass and 15 are correctly skipped, including all eight CLI shards, DCO, documentation receipt, security scanning, managed-image startup, macOS, and WSL.
  • Terra attempt 1 in advisor run 31035273514 stopped on a provider HTTP 429 during finding reconciliation after preserving zero findings. The single bounded failed-job retry then stopped because the advisor omitted its required internal CI/operations handoff, again after preserving zero findings. Both failures are advisor infrastructure/protocol failures, not branch failures; no further retry will be launched for this revision.
  • The completed Nemotron lane reports high confidence with zero blockers, warnings, or suggestions. The published advisor assessment remains informational because the primary lane did not complete.
  • The protected E2E gate selected cloud onboarding, managed-image multi-architecture startup, channel add/remove and stop/start, onboarding repair, and onboarding resume. No selected E2E job has run yet: the gate is waiting for first-attempt maintainer approval of the fork risk plan.

The remaining human gates are the explicitly unchecked independent security receipt, clearance of the historical changes-requested review, and authorization/execution of the selected protected E2E plan. No gate bypass, reviewer request, or additional retry is being attempted, and the merge freeze remains active.

Signed-off-by: Charan Jagwani <cjagwani@nvidia.com>

@cjagwani cjagwani left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Verdict

Security review — exact head 9a17d24874bb7cc5efb9453ccea6f8042f3ac231 against base c6713c9dd17a9682654713ccb6829b8714f1b307: PASS with no findings. The effective patch is safe from the reviewed security perspective, subject to every repository merge gate.

Findings Table

No findings.

Detailed Analysis

  1. Secrets and Credentials — PASS. Raw messaging credentials are neither persisted nor logged; comparisons use recorded hashes and replacement values remain confined to the existing validation and apply path.

  2. Input Validation and Data Sanitization — PASS. Only explicitly supplied active-channel credentials are compared. Changed values are validated before backup, deletion, or recreation; missing and unchanged values preserve reuse.

  3. Authentication and Authorization — PASS. Manifest and registry authority, channel ownership, and stopped or disabled channel state remain authoritative. No identity or permission surface is widened.

  4. Dependencies and Third-Party Libraries — PASS. No dependency, lockfile, image source, download, or external repository change occurs in this effective patch.

  5. Error Handling and Logging — PASS. Validation failure leaves the existing sandbox unchanged. Recreation errors remain explicit and recoverable; credential values are not exposed.

  6. Cryptography and Data Protection — PASS. Hash comparison semantics are unchanged. The latest child commit narrows the documentation to supported workspace and manifest-declared state and explicitly states that files outside those paths are not preserved.

  7. Configuration and Security Headers — PASS. Credential drift uses the existing backup, recreation, and restore workflow. Provider-effect recovery, sandbox intent boundaries, and channel configuration authority remain intact.

  8. Security Testing — PASS. The implementation revision passed the prior exact nine-category review. At this exact head, the credential-rotation documentation contract passes 6/6 and strict docs validation passes with 0 errors and 2 existing warnings. Fresh GitHub Actions remains authoritative for the full revision.

  9. System Security — PASS. Destructive work occurs only after validation through the owned-sandbox lifecycle. Cleanup targets and preserved paths are not broadened, stopped integrations are not revived, and the documentation now matches the actual preservation boundary.

Files Reviewed

  • docs/reference/troubleshooting.mdx
  • docs/security/credential-rotation.mdx
  • src/lib/messaging/applier/host-state-applier.ts
  • src/lib/onboard/machine/handlers/sandbox-create-intent-boundary.test.ts
  • src/lib/onboard/machine/handlers/sandbox-credential-drift.test.ts
  • src/lib/onboard/machine/handlers/sandbox-messaging.test.ts
  • src/lib/onboard/machine/handlers/sandbox-messaging.ts
  • src/lib/onboard/machine/handlers/sandbox-resume.test.ts
  • src/lib/onboard/machine/handlers/sandbox-resume.ts
  • src/lib/onboard/machine/handlers/sandbox.ts
  • src/lib/onboard/messaging-channel-setup.test.ts
  • src/lib/onboard/messaging-channel-setup.ts
  • test/credential-rotation-docs.test.ts

Provenance and Required Gates

The signed refresh merge is conflict-free and preserves the effective 13-file patch byte-for-byte (raw SHA-256 c39c00fb381bca3cdfebab5d145d7f1db62f753b8a5d548ab57f5483161fd515; stable patch ID b8d0a2851a22171d859475206abeb49d44aabca9). Base PR #8383 adds only the v0.0.103 release-note page and does not alter any effective PR file or reviewed runtime trust boundary. Base PR #8372 changes the canonical security rubric and PR Review Advisor machinery only; it does not alter any effective PR file or runtime trust boundary. This review independently applies the new rubric.

Fresh CI, protected E2E, documentation receipt, unresolved-review resolution, and independent exact-head approval remain mandatory. This security review waives none of those gates.

Signed-off-by: Charan Jagwani <cjagwani@nvidia.com>

@cjagwani cjagwani left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Verdict

Security revalidation — exact head 34fcbe1feefc5ccdc7ee0e2b4801f47f64089818 against current base 1608281462923ff8282151c7be1a109ee262b4e9: PASS with no findings, subject to every repository merge gate.

Findings Table

No findings.

Detailed Analysis

  1. Secrets and Credentials — PASS. The effective PR patch is unchanged from the prior exact review. The base refresh adds no overlapping secret, credential, environment, or sensitive-logging path.

  2. Input Validation and Data Sanitization — PASS. The reviewed validation and command/path construction are unchanged. The new base delta does not alter an effective PR file.

  3. Authentication and Authorization — PASS. No identity, ownership, permission, or authorization boundary changed in the PR patch or its integration with the refreshed base.

  4. Dependencies and Third-Party Libraries — PASS. The PR's reviewed dependency and artifact identities are unchanged. Base PR #8387 adds verified llama.cpp GGUF acquisition in eight disjoint files and does not change this PR's dependency surface.

  5. Error Handling and Logging — PASS. The reviewed fail-closed behavior and diagnostics are unchanged; the base refresh introduces no overlapping error or logging path.

  6. Cryptography and Data Protection — PASS. The PR's reviewed cryptographic and protected-data behavior is unchanged. No new cross-patch data flow exists.

  7. Configuration and Security Headers — PASS. The effective PR patch preserves its reviewed configuration, network, privilege, capability, port, and header boundaries.

  8. Security Testing — PASS. Raw patch SHA-256 remains c39c00fb381bca3cdfebab5d145d7f1db62f753b8a5d548ab57f5483161fd515 and stable patch ID remains b8d0a2851a22171d859475206abeb49d44aabca9. Documentation writer revalidation passed at this exact head; the existing PR documentation remains accurate. Prior targeted test evidence remains applicable; fresh exact-head GitHub Actions is authoritative.

  9. System Security — PASS. The signed refresh is conflict-free, preserves the reviewed patch byte-for-byte, and introduces no new runtime trust-boundary interaction with the disjoint base delta.

Provenance and Required Gates

This exact-head revalidation supplements the full prior nine-category review at #7853 (review). It applies the current rubric from .agents tree 7320c9e331ddbcd9ff83e0fce9387a004e3bd1aa.

Fresh required CI, protected E2E, the exact documentation receipt, unresolved-review resolution, GitHub commit verification, and an independent exact-head approval remain mandatory. This review waives none of those gates.

@cjagwani cjagwani left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Verdict

Security review — exact head ebd14c8d4fbbce1153f780b3c2d64db215807793 against current base b148bc13ee53b7a1f612d07e42275ec732e71877: PASS with no findings, subject to every repository merge gate.

Findings Table

No findings.

Detailed Analysis

  1. Secrets and Credentials — PASS. The effective PR patch is unchanged and adds no secret, credential source, environment exposure, or sensitive logging. The refreshed base introduces no overlapping credential path.

  2. Input Validation and Data Sanitization — PASS. Reviewed validation, command construction, and path handling remain unchanged. The portable-profile base delta has no exact file overlap with this PR.

  3. Authentication and Authorization — PASS. No identity, ownership, permission, or authorization boundary is widened by the PR patch or its integration with the refreshed base.

  4. Dependencies and Third-Party Libraries — PASS. The PR's reviewed dependency and artifact identities are unchanged. Base PRs #8333 and #8376 add disjoint E2E artifact restoration and portable experimental onboarding behavior.

  5. Error Handling and Logging — PASS. Reviewed fail-closed behavior and diagnostics remain unchanged; the signed integrations add no overlapping error or logging path.

  6. Cryptography and Data Protection — PASS. Reviewed cryptographic and protected-data behavior remains unchanged, with no new cross-patch data flow.

  7. Configuration and Security Headers — PASS. The effective PR patch preserves its reviewed configuration, network, privilege, capability, port, and header boundaries. The hidden portable profile does not bypass this PR's authority checks.

  8. Security Testing — PASS. Raw patch SHA-256 remains c39c00fb381bca3cdfebab5d145d7f1db62f753b8a5d548ab57f5483161fd515 and stable patch ID remains b8d0a2851a22171d859475206abeb49d44aabca9. Adjacent portable-profile integration was rechecked locally: 7 focused files and 163 tests pass, including credential drift, messaging, resume, intent-boundary, and documentation contracts. Exact-head documentation writer revalidation passed; fresh GitHub Actions is authoritative.

  9. System Security — PASS. Both signed refreshes are conflict-free, preserve the effective patch byte-for-byte, and introduce no new runtime trust-boundary interaction. For #7853 specifically, the portable profile supplies onboarding defaults but neither stages messaging credentials nor bypasses registry-driven credential-drift validation.

Provenance and Required Gates

The exact head preserves contributor history through signed merge commits and applies the current rubric from .agents tree 7320c9e331ddbcd9ff83e0fce9387a004e3bd1aa. This supplements the full prior nine-category review at #7853 (review).

Fresh required CI, protected E2E, the exact documentation receipt, unresolved-review resolution, GitHub commit verification, and an independent exact-head approval remain mandatory. This review waives none of those gates.

@apurvvkumaria

Copy link
Copy Markdown
Collaborator

Review follow-up for revision ebd14c8d4f:

  • The latest human change request asked the credential-rotation guide to define the preservation boundary before the first messaging command and protect it with a regression test.
  • The guide now states that onboarding backs up supported workspace and manifest-declared state, and that files outside those paths are not preserved. The same boundary appears in the summary table and the messaging procedure.
  • test/credential-rotation-docs.test.ts requires both statements and rejects the broader “restores the sandbox” wording.
  • GitHub reports no unresolved inline threads. The required branch checks, documentation receipt, code scanning, managed-image checks, and ordinary CI pass for this revision. The nine-category security review also reports no findings.

No additional code or documentation change is indicated. The CHANGES_REQUESTED state remains until the original reviewer clears the completed request; I am not overriding that human review. The protected fork E2E rollup also remains pending its repository authorization, and advisor attempt 2 ended in external analysis failures with zero preserved findings. No further advisor retry or branch refresh is warranted during the release freeze.

@apurvvkumaria

Copy link
Copy Markdown
Collaborator

Current blocker disposition: ordinary CI, documentation review, security scanning, DCO, and the complete test suite are green. Both advisor lanes failed only because their inference services returned HTTP 429 during analysis; the publisher preserved zero findings, and the already-used attempt will not be retried again. After confirming the fork branch still has the reviewed five-file patch and changes no workflow or credential-exposure path, I authorized the first protected E2E run through the repository controller: https://github.com/NVIDIA/NemoClaw/actions/runs/31057671147. The prior actionable documentation feedback remains addressed. A fresh human review is still required because the earlier change request remains recorded.

@apurvvkumaria

Copy link
Copy Markdown
Collaborator

Maintainer gate disposition for revision ebd14c8:

  • Protected E2E completed successfully: all 10 selected jobs passed, and 69 non-selected jobs skipped as planned.
  • The gate controller downloaded and verified the evidence and completed successfully.
  • No unresolved review threads remain. Two advisor analysis jobs remain red from the previously documented external analysis failure; this revision’s bounded transient retry was already used, so no additional rerun was made.

The release freeze is lifted, but GitHub still records CHANGES_REQUESTED. This PR must not merge until an independent human reviewer approves the addressed changes.

Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
@apurvvkumaria

Copy link
Copy Markdown
Collaborator

Maintainer follow-up for the current branch revision 99ce11152:

  • Current main was integrated cleanly; the effective 13-file credential-drift change remains semantically unchanged.
  • The outstanding documentation request is addressed: the rotation guide covers all active credential bindings, validates before backup or mutation, uses sandbox-recreation terminology, and states that only supported workspace and manifest-declared state are preserved. The troubleshooting page covers changed, missing, unchanged, stopped, and disabled credential cases.
  • The automated-review follow-ups are present: the import-time mock has an explanatory comment, and the durable-registry test re-reads one saved entry, verifies the replacement hash, and rejects both raw credential values.
  • Local validation passed: 175 focused tests, CLI and plugin builds, CLI type-checking, repository hooks, project/title/source-shape/test-size checks, the documentation contract (6/6), and the strict docs build (0 errors; 2 existing warnings).
  • The independent documentation review passed with no edits. The refreshed nine-category security audit found no issues. The signed merge commit is GitHub Verified and includes DCO.

Fresh repository CI and protected E2E are starting. GitHub still records CHANGES_REQUESTED; this PR will remain unmerged until that review state is cleared, an independent approval is present, and every required gate passes.

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

Labels

area: messaging Messaging channels, bridges, manifests, or channel lifecycle area: onboarding Onboarding FSM, provider setup, sandbox launch, or first-run flow area: sandbox OpenShell sandbox lifecycle, runtime, config, or recovery bug-fix PR fixes a bug or regression integration: telegram Telegram integration or channel behavior release-target v0.0.104 Release target

Projects

None yet

8 participants