Skip to content

fix(setup): download Nemotron Bolt from public model repositories - #1749

Closed
RyanUnderhill wants to merge 1 commit into
openclaw:mainfrom
RyanUnderhill:codex/fix-bolt-public-downloads
Closed

RyanUnderhill wants to merge 1 commit into
openclaw:mainfrom
RyanUnderhill:codex/fix-bolt-public-downloads

Conversation

@RyanUnderhill

Copy link
Copy Markdown
Contributor

What Problem This Solves

Fresh Nemotron Bolt setup fails with HTTP 401 because the catalog still points to prerelease Hugging Face repositories. Both original payload URLs reject anonymous requests. The published target and LiLiCorr drafter are available under the nvidia organization with different repository names, filenames, and revision pins.

Related: #1718.

User Impact

Bolt setup requests the publicly accessible payloads without an HF token. This fixes the catalog inputs to acquisition; a complete cold installation and inference run on qualified hardware remain unverified.

Why This Change Was Made

Update both immutable artifact locations and the existing independent catalog expectations. The target model retains its original byte length and SHA-256. The published drafter is 384 bytes larger and has a different SHA-256, so update both verification fields and the expected total download size to 23,016,569,088 bytes. Runtime, sampling, and context settings are unchanged.

Evidence

The published model card identifies the 24GB model as IQ2, with IQ2-XXS expert weights. The 24GB name describes its memory target. Its published target-file SHA-256 and length exactly match the prior IQ2 catalog pin; the separate drafter does not have the old hash.

Anonymous HEAD requests to both exact new catalog URLs, including ?download=true and redirects, returned HTTP 200. Their response lengths and Hugging Face LFS metadata at the pinned revisions match the source pins. Both repositories report private=false and gated=false.

Artifact Bytes SHA-256
Target 22,018,326,528 91d63363e782c8a3d5f4be42816eba8e0d42dd2530bd07a7d0d2dc440599af75
LiLiCorr drafter 998,242,560 080e1ea41c9562a7804dbf30c6fbd4d17e216c6b8ff666f88e6edb1816010194

These hashes were checked against published metadata, not computed from fully downloaded payloads.

Change Type

  • Bug fix
  • Tests or validation

Scope

  • Setup or onboarding
  • Tests, CI, or docs

Required proof pools

  • windows-11-arm64: verify the newly published drafter with the pinned Bolt runtime on qualified ARM64 RTX Spark hardware.
  • windows-wsl-dgx-blackwell: verify fresh model acquisition and inference on qualified hardware if using the WSL path. Not executed here.

Validation

  • Full ./build.ps1: passed Shared, CLI, WinNode CLI, SetupEngine, and WinUI; documentation validation passed 63 Markdown files.
  • dotnet test ./tests/OpenClaw.Shared.Tests/OpenClaw.Shared.Tests.csproj --filter FullyQualifiedName~Bolt_PinsIndependentlyVerifiedTargetAndDrafter: before production fix, 1 failed / 0 passed for the expected old repository mismatch.
  • dotnet test ./tests/OpenClaw.Shared.Tests/OpenClaw.Shared.Tests.csproj --no-restore --filter FullyQualifiedName~NemotronBolt: 24 passed, 0 failed, 0 skipped after fix.
  • dotnet test ./tests/OpenClaw.Shared.Tests/OpenClaw.Shared.Tests.csproj --no-restore: 4,310 passed, 3 failed, 36 existing opt-in skips. The three failures were unchanged ExecReusableCommandBinderTests cases that insert an unquoted test-host path into a cmd payload; this checkout's parent directory contains spaces.
  • Re-ran those same compiled tests through a temporary Q: alias with no spaces: 3/3 passed. Re-ran the full identical Shared test binary with dotnet vstest Q:\tests\OpenClaw.Shared.Tests\bin\Debug\net10.0\OpenClaw.Shared.Tests.dll: 4,313 passed, 0 failed, 36 skips. No source, assertions, or filters were changed for the full rerun; the alias was removed afterward.
  • dotnet test ./tests/OpenClaw.Tray.Tests/OpenClaw.Tray.Tests.csproj: 4,083 passed, 0 failed, 0 skipped. Restore included for this fresh checkout.
  • git diff --check: passed.

Real Behavior Proof

  • Environment tested: Windows x64, workspace-local .NET SDK 10.0.402 and Node.js 24.22.0; isolated tray data.
  • PR head or commit tested: 7041e653f8eb88b2e6126a93e59954ef66353a9d
  • Exact steps: read the two artifact pins from the edited catalog; query https://huggingface.co/api/models/{repository}/revision/{revision}?blobs=true; compare filename, byte length, and LFS SHA-256; send anonymous HEAD requests to https://huggingface.co/{repository}/resolve/{revision}/{filename}?download=true, following redirects.
  • Observed result: both exact source URLs returned 200 with matching lengths and metadata. The updated catalog test failed against the old implementation at the repository assertion and passed after the fix; all 24 focused Bolt tests passed.
  • Screenshot or artifact links verified: N/A. No UI change or visual proof claim.
  • Not verified / blocked: full payload download and locally computed hashes, cold product setup, changed-drafter inference, and upgrade from a prerelease Bolt receipt. This host is not qualified ARM64 RTX Spark hardware. Draft pending hardware proof.
  • Rubber-duck review: not required for this bounded artifact-pin and existing-expectation update; no setup control-flow changes.

Security Impact

  • New permissions or capabilities: No.
  • Secrets or tokens handling changed: No.
  • New or changed network calls: Yes. Existing verified downloader targets two public NVIDIA Hugging Face repositories at immutable revisions.
  • Command or tool execution surface changed: No.
  • Data access scope changed: No.
  • Existing downloader size, SHA-256, and redirect checks remain enabled.

Compatibility and Migration

  • Other model recipes are unchanged.
  • Existing prerelease Bolt receipts contain the old repository/revision, filenames, and drafter hash. They do not match the new catalog's strict receipt checks. Such installations need a fresh Bolt setup; this PR does not migrate or weaken acceptance of those receipts.
  • No new environment variables or authentication configuration.

Review Conversations

  • I replied to or resolved every bot review conversation addressed by this PR.
  • I left unresolved only conversations that still need maintainer judgment.

@clawsweeper

clawsweeper Bot commented Oct 16, 2026 •

Copy link
Copy Markdown

🦞👀
ClawSweeper picked this up.

Pull request received. I will update this pull request when review starts.

ClawSweeper review complete

ClawSweeper finished reviewing this revision. The review result is being finalized.

View the workflow run.

@clawsweeper clawsweeper Bot added clawsweeper:intake:bug Preliminary submission classification; full source review pending. clawsweeper:intake:needs-repro Preliminary submission classification; full source review pending. P1 Urgent regression or broken agent/channel workflow affecting real users now. merge-risk: 🚨 compatibility 🚨 Merging this PR could break existing users, config, migrations, defaults, or upgrades. rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. and removed clawsweeper:intake:bug Preliminary submission classification; full source review pending. clawsweeper:intake:needs-repro Preliminary submission classification; full source review pending. labels Oct 16, 2026
@clawsweeper

clawsweeper Bot commented Oct 16, 2026

Copy link
Copy Markdown

Codex review: needs real behavior proof before merge.

What this changes

Update Nemotron Bolt target and drafter pins to public NVIDIA repositories and adjust the drafter checksum and size.

Example: Fresh setup downloads the 22,018,326,528-byte Bolt target.

  • Before: The prerelease repository returns anonymous HTTP 401.
  • After: The catalog requests NVIDIA-Nemotron-3.5-Bolt-74B-A9B-24GB.gguf from the public nvidia repository.

Review scores

Measure Result What it means
Overall readiness 🧂 unranked krab (1/6) A focused, useful acquisition repair with an introduced installed-receipt regression and no shipped-entry-point proof of the changed artifacts.
Proof confidence 🧂 unranked krab (1/6) Real behavior proof is necessary before merge. See Before merge.
Patch quality 🦪 silver shellfish (2/6) 1 actionable review finding remain.

Product

Kind: Bug fix · Worth it: Yes · Fix scope: Complete
User problem: Fresh Bolt setup cannot download its model artifacts without Hugging Face credentials.
Reason: Public anonymous acquisition fulfills the existing credential-free setup contract and the original feature's intended eventual availability.

Merge readiness

⛔ Blocked before merge - 3 items remain

This PR addresses a confirmed acquisition failure still present on main, but changing the existing recipe in place also prevents verified prerelease Bolt installations from launching.

Priority: P1
Reviewed head: 7041e653f8eb88b2e6126a93e59954ef66353a9d

Before merge

  • Add real behavior proof - The submitted metadata and anonymous HEAD checks exercise the new URLs but bypass the shipped downloader and runtime; cold product acquisition and inference with the different drafter remain explicitly unverified. After adding proof, update the PR body, then request a new review with @clawsweeper re-review. The PR author or someone with repository write access can request it.
  • Preserve existing Bolt receipts when replacing artifact pins (P1) - A valid prerelease Bolt installation retains the same ModelCatalogId but records the old repository, revision, filename, and drafter hash. ResolveInstalledPlan selects this newly changed recipe, and ValidateArtifactReceipts rejects the stored identity before llama-server launches. Setup reruns also call that validator before incomplete-install repair, then terminate with an uninstall instruction. Thus an application update strands working cached installations documented in the original feature proof. Preserve the exact old recipe for installed receipts or implement a verified transition before replacing these pins, with regression coverage using a literal old receipt.
  • Add data-model compatibility proof - The review found that existing stored data may not work after upgrade. Show that existing data still loads and works with this change.

Findings

  • [P1] Preserve existing Bolt receipts when replacing artifact pins — src/OpenClaw.Shared/Inference/Catalog/LocalModelCatalog.NemotronBolt.cs:14-16

Tests

  • Missing end-to-end proof: Provide current-head cold product download and hash-verification output followed by inference with the changed drafter on qualified hardware; redact private endpoints and credentials.
Agent review details

How this fits together

The model catalog supplies immutable download and verification inputs to setup and supplies expected artifact identities to installed-receipt validation before llama-server launches.

flowchart LR
Catalog[Model catalog] --> Setup[Setup acquisition]
Setup --> Download[Verified downloader]
Download --> Receipt[Installation receipt]
Catalog --> Validation[Receipt validation]
Receipt --> Validation
Validation --> Runtime[Managed llama server]
Loading

Technical review

Best possible solution:

Use the public pins for fresh installs while preserving verified prerelease installations and providing an in-product upgrade path.

Do we have a high-confidence way to reproduce the issue?

The original acquisition failure is independently documented in the merged feature discussion; source tracing also establishes that an old valid Bolt receipt fails launch and reconciliation after these pin changes.

Is this the best way to solve the issue?

Updating immutable public locations is the right acquisition repair, but replacing the installed recipe in place requires compatibility handling rather than an uninstall requirement.

Full review comments:

  • [P1] Preserve existing Bolt receipts when replacing artifact pins — src/OpenClaw.Shared/Inference/Catalog/LocalModelCatalog.NemotronBolt.cs:14-16
    A valid prerelease Bolt installation retains the same ModelCatalogId but records the old repository, revision, filename, and drafter hash. ResolveInstalledPlan selects this newly changed recipe, and ValidateArtifactReceipts rejects the stored identity before llama-server launches. Setup reruns also call that validator before incomplete-install repair, then terminate with an uninstall instruction. Thus an application update strands working cached installations documented in the original feature proof. Preserve the exact old recipe for installed receipts or implement a verified transition before replacing these pins, with regression coverage using a literal old receipt.
    Confidence: 0.99

Overall correctness: patch is incorrect
Overall confidence: 0.97

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning medium; reviewed against f9ce47d2cf3e.

Provenance checked

  • Bolt target and drafter artifact pins changes intended behavior with a stated reason (5f6b292: Offer a qualified optional Bolt recipe using verified prerelease payloads while explicitly accepting temporary anonymous HTTP 401 responses.)
  • Catalog pin expectations keeps the original intent (5f6b292: Protect independently qualified artifact identities, sizes, hashes, and recipe constraints.)

Testing

Proof path: unit tests only.

Security

None.

Evidence

Acceptance criteria:

  • ./build.ps1
  • dotnet test ./tests/OpenClaw.Shared.Tests/OpenClaw.Shared.Tests.csproj --no-restore
  • dotnet test ./tests/OpenClaw.Tray.Tests/OpenClaw.Tray.Tests.csproj --no-restore
  • dotnet test ./tests/OpenClaw.Connection.Tests/OpenClaw.Connection.Tests.csproj --filter FullyQualifiedName~LocalAiBoltRuntimeTests
  • dotnet test ./tests/OpenClaw.SetupEngine.Tests/OpenClaw.SetupEngine.Tests.csproj --filter FullyQualifiedName~NemotronBoltSetupAdmissionTests

What I checked:

Labels

Label changes:

  • add P1: The patch addresses broken Bolt acquisition but introduces a launch and setup-recovery regression for existing verified Bolt installations.
  • add merge-risk: 🚨 compatibility: Existing persisted Bolt receipts no longer match the catalog under their unchanged model ID.
  • add rating: 🧂 unranked krab: Overall readiness is 🧂 unranked krab; proof is 🧂 unranked krab and patch quality is 🦪 silver shellfish.
  • add status: 📣 needs proof: The PR needs real behavior proof before ClawSweeper can clear the contributor ask.

Label justifications:

  • P1: The patch addresses broken Bolt acquisition but introduces a launch and setup-recovery regression for existing verified Bolt installations.
  • merge-risk: 🚨 compatibility: Existing persisted Bolt receipts no longer match the catalog under their unchanged model ID.
  • rating: 🧂 unranked krab: Overall readiness is 🧂 unranked krab; proof is 🧂 unranked krab and patch quality is 🦪 silver shellfish.
  • status: 📣 needs proof: The PR needs real behavior proof before ClawSweeper can clear the contributor ask.

Rating scale

6/6 🦀 challenger crab · 5/6 🦞 diamond lobster · 4/6 🐚 platinum hermit · 3/6 🦐 gold shrimp · 2/6 🦪 silver shellfish · 1/6 🧂 unranked krab. Overall follows the weaker of proof and patch quality; ✨ marks media proof (a screenshot, video, or linked artifact) that directly shows the changed behavior.

Workflow

ClawSweeper edits this one comment on every review. Comment @clawsweeper re-review for a fresh review only. Repair and merge execution lanes are retired.

Reviewed October 16, 2026, 4:06 PM ET / 20:06 UTC.

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

Labels

merge-risk: 🚨 compatibility 🚨 Merging this PR could break existing users, config, migrations, defaults, or upgrades. P1 Urgent regression or broken agent/channel workflow affecting real users now. rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant