Repository navigation
Local AI upgrade can strand old model receipts; migrate known IDs or offer confirmed recovery #1881
Description
Bug
The Local AI "receipt" is the app-owned installation manifest at <LocalDataDirectory>\LocalAI\state.json. It records the installed model ID, runtime, and artifact information so setup can verify and reconcile the existing installation.
#1760 renamed the Bolt model ID from nemotron-3.5-bolt-74b-a9b-iq2-lilicorr to nemotron-3.5-bolt-74b-a9b-24gb without a compatibility alias or receipt migration. It has merged. Existing installations can retain the old ID because local app data persists through Store updates. The current reconciler requires an exact match between the receipt's ModelCatalogId and the selected model ID. A mismatch fails setup and directs the user to uninstall.
This issue concerns the portable Local AI artifact manifest (state.json). The native Gateway ownership record (gateway-binding.json) and the clean-state setup warning shown in the screenshot are tracked separately in #1882. #1883 was a later duplicate and is closed; that screenshot is not evidence of an old-model-ID mismatch.
#1869 introduced a second upgrade incompatibility: its Bolt vision recipe adds a required projector asset, so earlier public text-only Bolt receipts lack the new asset record and cannot be reconciled as that recipe. The PR explicitly accepted this breaking behavior without a migration or reset path. This is another existing-install case for the same recovery problem; it does not explain #1882's reported clean-AppData failure.
This is an upgrade compatibility gap. The app should recover a known valid old recipe without destroying its verified artifacts. If an installation genuinely cannot be reused, it should explain the problem and offer a confirmed, Local-AI-only reset.
Reproduction
- Install Bolt with a build before fix(inference): rename Bolt model ID to public 24gb name #1760, leaving a valid Local AI manifest with the old model ID.
- Update to a build containing fix(inference): rename Bolt model ID to public 24gb name #1760 without clearing local app data.
- Start Local AI or retry its setup against the current catalog.
Source-level evidence: the old ID is absent from the current catalog, and LocalAiInstallReconciler.ValidateRecipeMatch compares manifest.ModelCatalogId to plan.Model.Id exactly. A current-head Windows upgrade reproduction still needs to be captured.
Expected behavior
- Recognize known old model IDs and migrate or accept their receipts after validating the installed artifacts and ownership.
- If a receipt cannot be safely reused, explain why and offer a reset with an explicit confirmation that names what will be removed and preserved.
- Make recovery available on first app launch or Local AI setup after an update for both Store and Inno installations. Do not rely on an interactive Store installation step.
- Reset only app-owned Local AI state and Gateway route. Preserve the WSL Gateway, pairing, and download cache. If route ownership cannot be proved, fail safely and give actionable recovery guidance.
Actual behavior
A stale model ID can prevent reconciliation. Setup reports that the managed installation does not match the selected recipe and instructs the user to uninstall. Neither the Store update path nor installer.iss validates and repairs this manifest. Inno's post-install hook currently handles legacy background-launch migration.
Environment
- Version: pre-fix(inference): rename Bolt model ID to public 24gb name #1760 Bolt installation updated to a build containing fix(inference): rename Bolt model ID to public 24gb name #1760
- Platform: Windows; Store and Inno upgrade paths need coverage
- Live affected-machine reproduction: not yet captured
Evidence and related work
- fix(inference): rename Bolt model ID to public 24gb name #1760 explicitly states that old-ID receipts need recreation or an update and says reset handling should merge first; it merged while that work remained open.
- fix(inference): Nemotron Bolt downloads fail with 401 from prerelease repos #1751 preserved compatibility for a particular prerelease Bolt recipe. That does not alias the old model ID introduced by fix(inference): rename Bolt model ID to public 24gb name #1760.
- Draft feat(local-ai): reset an unusable Local AI install without uninstalling #1771 adds a manual, confirmed Local AI reset. It has no installer or automatic post-update recovery changes. Its latest review flags a setup-lock conflict that can prevent the reset button from completing, plus route-ownership safety cases.
- feat: change the Local AI model in settings and choose the Gateway default model #1744 adds model selection; chore: add scripts/wipe_openclaw_state.py #1734 is a manual development wipe script. Neither handles this upgrade path.
Acceptance criteria
- Regression coverage for valid pre-fix(inference): rename Bolt model ID to public 24gb name #1760 Bolt ID receipts and pre-fix(setup): Nemotron Bolt is hidden below 33 GB free and cannot read images #1869 public text-only Bolt receipts upgraded to the current catalog, including startup and setup behavior.
- A known-compatible receipt is preserved and migrated or accepted without redownloading or resetting Local AI.
- An irreconcilable receipt produces a clear, user-confirmed recovery path on first launch/setup after upgrade; cancellation leaves data intact.
- Confirmed reset works from the setup UI without lock contention and does not delete state when Gateway route ownership is uncertain.
- Verify the recovery path on both Store and Inno upgrades.
Metadata
Metadata
Assignees
Labels
Type
Fields
Priority
Projects
- StatusShow more project fieldsBacklog
Activity
clawsweeper commentedon Oct 26, 2026
Codex review: this still needs some work.
Summary
Keep this issue open: current main still rejects both historical Bolt identities and earlier public text-only receipts, while the open reset PR covers only part of recovery; collaborator authorship also prevents automatic closure.
Reproducibility: Current source establishes old-ID lookup and reconciliation failures plus missing-projector rejection for historical public receipts; no tests or live upgrade reproduction ran during this read-only review.
Regression provenance
Possible regression — suspected (reviewed change). No predecessor PR is attributed.
Next step
Establish failing historical-receipt startup/setup regressions and coordinate verified preservation with the inline confirmed recovery work in #1771.
Review details
Best possible solution:
Preserve verified historical recipes and offer an inline, confirmed Local AI-only Fix or Reset action when safe reuse fails.
Do we have a high-confidence way to reproduce the issue?
Current source establishes old-ID lookup and reconciliation failures plus missing-projector rejection for historical public receipts; no tests or live upgrade reproduction ran during this read-only review.
Is this the best way to solve the issue?
Receipt-aware compatibility is safer than deleting valid artifacts, and irreconcilable state should use the existing guarded ownership and cleanup services with explicit confirmation.
AGENTS.md: found and applied where relevant.
Remaining risk / open question:
Codex review notes: model internal, reasoning medium; reviewed against ed1444b0de69.
Label changes
Label changes:
No label changes.
Label justifications:
P0: The source-proven upgrade incompatibility can block ordinary users from resuming Local AI, with setup directing them to uninstall and no verified in-product recovery.impact:ux-release-blocker: Recovery currently requires uninstall, manual state intervention, or support; an inline repair or confirmed reset is needed.Evidence reviewed
Acceptance criteria:
What I checked:
src/OpenClaw.Shared/Inference/Catalog/LocalModelCatalog.cs:536, ed1444b0de69)src/OpenClaw.SetupEngine/LocalAiInstallReconciler.cs:470, ed1444b0de69)src/OpenClaw.Connection/LocalAi/LlamaServerRouterConfiguration.cs:179, ed1444b0de69)tests/OpenClaw.Connection.Tests/LocalAiBoltRuntimeTests.cs:58, ed1444b0de69)src/OpenClaw.Shared/Inference/Catalog/LocalModelCatalog.cs:185, 62ef247fe6b9)How this review workflow works
@clawsweeper re-reviewcomments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.@clawsweeper re-reviewor@clawsweeper re-runon an open PR or issue to request a fresh review only.@clawsweeper reviewto request a fresh review only.@clawsweeper explainto ask for more context, or@clawsweeper stopto stop active automation.Reviewed October 26, 2026, 7:02 PM ET / 23:02 UTC.