Skip to content

fix(memory): accept local default model path migration#92954

Merged
vincentkoc merged 3 commits into
openclaw:mainfrom
mushuiyu886:feat/issue-92808
Jun 15, 2026
Merged

fix(memory): accept local default model path migration#92954
vincentkoc merged 3 commits into
openclaw:mainfrom
mushuiyu886:feat/issue-92808

Conversation

@mushuiyu886

@mushuiyu886 mushuiyu886 commented Jun 14, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Problem: local memory indexes built with the official default hf: GGUF model identity were treated as mismatched when the upgraded local provider reported the same downloaded GGUF by filesystem path.
  • Solution: memory index identity now accepts only the official local default model across the hf: URI and downloaded GGUF path formats, including the corresponding legacy providerKey hash.
  • What did NOT change: this does not auto-install the llama.cpp plugin, make CLI memory indexing load gateway plugins, relax non-local provider/model mismatches, accept arbitrary GGUF filenames, or bypass vector dims/scope/source/chunking checks.
  • Why it matters / User impact: users upgrading local embeddings can keep using their existing memory index when the provider identity format changes for the same official default model instead of getting a paused/mismatched memory_search state that requires manual rebuild discovery.
  • Scope note: this is a focused identity-compatibility repair for the default local model path-format migration, not a full closure of every broader install/CLI/plugin concern discussed on [Bug]: Title: Local embedding provider breaks on upgrade (two consecutive releases) — no migration path, misleading error #92808.
  • Refs [Bug]: Title: Local embedding provider breaks on upgrade (two consecutive releases) — no migration path, misleading error #92808

Real behavior proof

  • Behavior or issue addressed: Local provider upgrade compatibility for the official default embedding model identity: an index stored with the default hf:ggml-org/embeddinggemma-300m-qat-q8_0-GGUF/embeddinggemma-300m-qat-Q8_0.gguf identity remains valid when the current local provider reports the downloaded embeddinggemma-300m-qat-Q8_0.gguf filesystem path, while a different GGUF path still mismatches.
  • Real environment tested: Local Linux worktree /media/vdc/code/ai/aispace/openclaw-worktrees/issue-92808, branch feat/issue-92808.
  • Exact steps or command run after this patch:
mkdir -p /media/vdc/code/ai/aispace/openclaw-issue-92808-evidence/models && curl -L --fail --retry 2 --connect-timeout 30 --max-time 600 -o /media/vdc/code/ai/aispace/openclaw-issue-92808-evidence/models/embeddinggemma-300m-qat-Q8_0.gguf https://huggingface.co/ggml-org/embeddinggemma-300m-qat-q8_0-GGUF/resolve/main/embeddinggemma-300m-qat-Q8_0.gguf
cd /media/vdc/code/ai/aispace/openclaw-worktrees/issue-92808 && OPENCLAW_REPO=/media/vdc/code/ai/aispace/openclaw-worktrees/issue-92808 OPENCLAW_LOCAL_GGUF_MODEL=/media/vdc/code/ai/aispace/openclaw-issue-92808-evidence/models/embeddinggemma-300m-qat-Q8_0.gguf node --import tsx /media/vdc/code/ai/aispace/openclaw-issue-92808-evidence/local-provider-upgrade-real-proof.mjs > /media/vdc/code/ai/aispace/openclaw-issue-92808-evidence/local-provider-upgrade-real-proof.out.json
cd /media/vdc/code/ai/aispace/openclaw-worktrees/issue-92808 && OPENCLAW_TEST_FAST=1 node scripts/run-vitest.mjs extensions/memory-core/src/memory/manager-reindex-state.test.ts extensions/memory-core/src/memory/index.test.ts
cd /media/vdc/code/ai/aispace/openclaw-worktrees/issue-92808 && ./node_modules/.bin/oxfmt --check --threads=1 extensions/memory-core/src/memory/manager-reindex-state.ts extensions/memory-core/src/memory/manager-reindex-state.test.ts extensions/memory-core/src/memory/index.test.ts
cd /media/vdc/code/ai/aispace/openclaw-worktrees/issue-92808 && node scripts/run-tsgo.mjs -p tsconfig.extensions.json --noEmit
git -C /media/vdc/code/ai/aispace/openclaw-worktrees/issue-92808 diff --check
  • Evidence after fix: The independent Node proof below runs outside Vitest, registers the production llama.cpp local provider, uses the real downloaded 328,577,056-byte default GGUF, builds a real SQLite memory index with local path embeddings, rewrites only memory_index_meta_v1 to the legacy default hf: URI identity/providerKey, then reopens the production manager with the local GGUF path and verifies status/search/sync.
{
  "proof": "local-provider-default-model-upgrade-status-search",
  "head": "251d26eec66a9e64962feab2c72a9700e24e7865",
  "runtime": "node --import tsx; production memory manager; registered llama.cpp local provider; real GGUF; real SQLite; no Vitest",
  "model": {
    "defaultHfUri": "hf:ggml-org/embeddinggemma-300m-qat-q8_0-GGUF/embeddinggemma-300m-qat-Q8_0.gguf",
    "localPath": "/media/vdc/code/ai/aispace/openclaw-issue-92808-evidence/models/embeddinggemma-300m-qat-Q8_0.gguf",
    "fileName": "embeddinggemma-300m-qat-Q8_0.gguf",
    "sizeBytes": 328577056
  },
  "providerKeys": {
    "legacyHfUriProviderKey": "a65bf29e73a7aa6d94f94c77377b9d4e17a2298505ddb598523262bdc77ac89b",
    "expectedLocalPathProviderKey": "fbb45b98bdc118c6f23d91a9dfa4f836f3f188d2884900c1e790a5c50908a6d2",
    "keysDiffer": true
  },
  "buildWithLocalPath": {
    "syncElapsedMs": 4076,
    "statusIdentity": "valid",
    "dirty": false,
    "chunks": 1,
    "metaProvider": "local",
    "metaModel": "/media/vdc/code/ai/aispace/openclaw-issue-92808-evidence/models/embeddinggemma-300m-qat-Q8_0.gguf",
    "metaVectorDims": 768
  },
  "legacyRewrite": {
    "beforeModel": "/media/vdc/code/ai/aispace/openclaw-issue-92808-evidence/models/embeddinggemma-300m-qat-Q8_0.gguf",
    "afterModel": "hf:ggml-org/embeddinggemma-300m-qat-q8_0-GGUF/embeddinggemma-300m-qat-Q8_0.gguf",
    "afterProviderKeyMatchesLegacyHfUri": true
  },
  "verifyAfterUpgrade": {
    "statusBeforeSearch": { "identity": "valid", "dirty": true, "chunks": 1 },
    "searchElapsedMs": 3981,
    "searchHits": 1,
    "firstHitPath": "MEMORY.md",
    "statusAfterSearch": { "identity": "valid", "dirty": true, "chunks": 1 }
  },
  "postUpgradeSync": {
    "syncElapsedMs": 4,
    "statusAfterSync": { "identity": "valid", "dirty": false, "chunks": 1 },
    "metaModelAfterSync": "hf:ggml-org/embeddinggemma-300m-qat-q8_0-GGUF/embeddinggemma-300m-qat-Q8_0.gguf",
    "metaProviderKeyAfterSync": "a65bf29e73a7aa6d94f94c77377b9d4e17a2298505ddb598523262bdc77ac89b"
  },
  "acceptedLegacyDefaultIdentity": true
}
Test Files  2 passed (2)
Tests  60 passed (60)
[test] passed 1 Vitest shard in 37.57s
All matched files use the correct format.
Finished in 34ms on 3 files using 1 threads.
node scripts/run-tsgo.mjs -p tsconfig.extensions.json --noEmit exited 0 with no stdout/stderr output.
git diff --check exited 0 with no whitespace errors.
  • Observed result after fix: The real local provider built one vector chunk with the downloaded default GGUF (vectorDims: 768), the legacy hf: URI providerKey and current filesystem-path providerKey were different, and the reopened manager still reported indexIdentity: valid. A real manager.search() returned one MEMORY.md hit before post-upgrade sync, and the follow-up sync settled status to valid/dirty=false without rebuilding from a mismatched/paused state. Unrelated model/provider changes remain mismatched in regression coverage.
  • What was not tested: No live v2026.6.5-to-v2026.6.6 package upgrade, gateway plugin loading, CLI openclaw memory index --force, or desktop app proof was run. The added proof does exercise the native llama.cpp provider with the official default GGUF, production memory manager status/search/sync, and real SQLite files; broader install/CLI/plugin concerns from [Bug]: Title: Local embedding provider breaks on upgrade (two consecutive releases) — no migration path, misleading error #92808 remain outside this focused PR scope.

Regression Test Plan

  • Target test files: extensions/memory-core/src/memory/manager-reindex-state.test.ts and extensions/memory-core/src/memory/index.test.ts.
  • Scenario locked in: A local index created with DEFAULT_LOCAL_MODEL remains valid/searchable when reopened with a filesystem path ending in the same official default GGUF filename; a different GGUF path remains mismatched.
  • Why this is the smallest reliable guardrail: The pure test locks the identity/providerKey rule, and the manager test uses real sqlite files plus the existing manager status/search lifecycle rather than only mocking the final comparator.

Merge risk

  • Risk labels considered: local-only proof boundary, provider identity compatibility, public-contract/open-PR overlap noted on [Bug]: Title: Local embedding provider breaks on upgrade (two consecutive releases) — no migration path, misleading error #92808, broader issue scope not fully closed.
  • Risk explanation: The patch changes index compatibility behavior, which can be risky if it accidentally accepts a different embedding model. The compatibility gate is constrained to provider local, the shared official DEFAULT_LOCAL_MODEL, a non-hf: filesystem-style path with the same default GGUF filename, and the expected legacy providerKey hashes.
  • Why acceptable: Non-local providers, arbitrary GGUF paths, provider changes, providerKey changes outside this default-model migration shape, vector dims, sources, scope, chunking, and FTS tokenizer checks still use the existing strict mismatch behavior. The PR now uses Refs #92808 rather than a closing reference because it does not claim to resolve every install/CLI/plugin concern.

Root Cause

  • Root cause: Local llama.cpp embeddings identify the official default model as an hf: URI when no explicit path is set, but after upgrade/config repair the same downloaded GGUF can be reported as a filesystem path. resolveMemoryIndexIdentityState compared meta.model and providerKey as exact strings, so the same official default model identity was treated as a provider/model change.
  • Why this is root-cause fix: The identity comparator now recognizes this specific local default-model migration shape before declaring model/providerKey mismatch, so status/search do not stay paused for the same default model while still preserving strict identity checks elsewhere.
  • Fix classification: Root-cause compatibility fix for local memory index identity across the official default model path-format migration.
  • Maintainer-ready confidence: High for the local identity/state behavior and native local-provider proof covered here; medium for the full packaged upgrade path because no version-to-version install, gateway plugin loading, CLI, or desktop proof was run.
  • Patch quality notes: The diff adds a narrow helper and regression coverage. It does not add sleeps, fallback rebuilds, auto-install behavior, broad path equivalence, or provider contract expansion beyond the official default local model.
  • Architecture / source-of-truth check: DEFAULT_LOCAL_MODEL, the stored memory_index_meta_v1, and the existing providerKey hash remain the source of truth; the comparator only treats the old and new serialized identity forms as equivalent for this one official local default model.

@openclaw-barnacle openclaw-barnacle Bot added extensions: memory-core Extension: memory-core size: S proof: supplied External PR includes structured after-fix real behavior proof. labels Jun 14, 2026
@clawsweeper

clawsweeper Bot commented Jun 14, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge. Reviewed June 14, 2026, 11:22 AM ET / 15:22 UTC.

Summary
This PR changes memory-core index identity checks so the official local default model's hf: URI and downloaded GGUF filesystem path are treated as equivalent, with identity/status/search regression coverage.

PR surface: Source +72, Tests +100. Total +172 across 3 files.

Reproducibility: no. high-confidence current-main live reproduction was run in this read-only review. Source inspection makes the failure path high-confidence because current main and v2026.6.6 exact-match meta.model/providerKey while llama.cpp can report the same default model as either an hf: URI or a filesystem path.

Review metrics: 1 noteworthy metric.

  • Persisted identity compatibility paths: 1 added. The PR adds one new equivalence for existing memory index metadata, so maintainers should notice and accept the upgrade behavior before merge.

Stored data model
Persistent data-model change detected: migration/backfill/repair: extensions/memory-core/src/memory/index.test.ts, persistent cache schema: extensions/memory-core/src/memory/manager-reindex-state.test.ts, serialized state: extensions/memory-core/src/memory/manager-reindex-state.test.ts, serialized state: extensions/memory-core/src/memory/manager-reindex-state.ts, unknown-data-model-change: extensions/memory-core/src/memory/index.test.ts, unknown-data-model-change: extensions/memory-core/src/memory/manager-reindex-state.test.ts, and 4 more. Migration or upgrade compatibility proof is recorded; maintainers should verify it before merge.

Merge readiness
Overall: 🐚 platinum hermit
Proof: 🦞 diamond lobster
Patch quality: 🐚 platinum hermit
Result: ready for maintainer review.

Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch.

Rank-up moves:

  • Get maintainer acceptance that the basename-limited default GGUF path equivalence is the intended upgrade contract.

Risk before merge

  • [P1] The patch intentionally relaxes persisted memory index identity for one local default-model migration, so maintainers should accept that a path with the official default GGUF filename is equivalent to the default hf: identity for this upgrade contract.
  • [P1] Because the compatibility check is filename/path-identity based rather than file-content based, a different file with the same default GGUF filename could be treated as equivalent if the rest of the stored identity matches the allowed local-default shape.
  • [P1] The related upgrade report remains broader than this PR; plugin install guidance, CLI plugin loading, and full v2026.6.5-to-v2026.6.6 package upgrade validation still need separate tracking or maintainer acceptance.

Maintainer options:

  1. Accept The Scoped Upgrade Contract (recommended)
    Maintainers can land this focused PR if they accept basename-limited equivalence for the official default local GGUF while the broader upgrade issue remains open.
  2. Require Packaged Upgrade Proof
    Ask for an additional redacted v2026.6.5-to-v2026.6.6 package upgrade/status/search proof before merge if source-checkout native-provider proof is not enough.
  3. Pause For Migration Design
    Hold or close this PR if the desired permanent solution is a doctor migration or broader provider identity normalization instead of runtime equivalence.

Next step before merge

  • [P2] The remaining action is maintainer acceptance of the compatibility contract and normal merge review; there is no concrete automated repair left on the branch.

Security
Cleared: No dependency, workflow, lockfile, credential, permission, downloaded-artifact execution, or supply-chain surface changes are present in the diff.

Review details

Best possible solution:

Land this focused compatibility rule only if maintainers accept the default-model equivalence contract, and keep #92808 open for the broader install, CLI, and post-upgrade concerns.

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

No high-confidence current-main live reproduction was run in this read-only review. Source inspection makes the failure path high-confidence because current main and v2026.6.6 exact-match meta.model/providerKey while llama.cpp can report the same default model as either an hf: URI or a filesystem path.

Is this the best way to solve the issue?

Yes for the focused identity slice: the comparator is the path that pauses status/search on model identity mismatch, and the PR keeps non-local, non-default, providerKey, vector dims, source, scope, chunking, and tokenizer checks strict. The remaining question is maintainer acceptance of the upgrade contract, not a different code location.

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning high; reviewed against 3826cda4d854.

Label changes

Label changes:

  • add proof: sufficient: Contributor real behavior proof is sufficient. The PR body supplies copied after-fix live output from a real local llama.cpp provider run using the official default GGUF, production memory manager status/search/sync, and real SQLite metadata.
  • add rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🦞 diamond lobster and patch quality is 🐚 platinum hermit.
  • add status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (live_output): The PR body supplies copied after-fix live output from a real local llama.cpp provider run using the official default GGUF, production memory manager status/search/sync, and real SQLite metadata.
  • remove rating: 🦪 silver shellfish: Current PR rating is rating: 🐚 platinum hermit, so this older rating label is no longer current.
  • remove status: 📣 needs proof: Current PR status label is status: 👀 ready for maintainer look.

Label justifications:

  • P1: The PR targets a recent shipped upgrade regression that can leave local memory search paused after moving between local default-model identity formats.
  • merge-risk: 🚨 compatibility: The patch changes compatibility rules for persisted memory index metadata across upgraded local-provider configurations.
  • merge-risk: 🚨 session-state: The comparator decides whether an existing memory index remains valid or becomes paused/mismatched across sessions and upgrades.
  • rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🦞 diamond lobster and patch quality is 🐚 platinum hermit.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (live_output): The PR body supplies copied after-fix live output from a real local llama.cpp provider run using the official default GGUF, production memory manager status/search/sync, and real SQLite metadata.
  • proof: sufficient: Contributor real behavior proof is sufficient. The PR body supplies copied after-fix live output from a real local llama.cpp provider run using the official default GGUF, production memory manager status/search/sync, and real SQLite metadata.
Evidence reviewed

PR surface:

Source +72, Tests +100. Total +172 across 3 files.

View PR surface stats
Area Files Added Removed Net
Source 1 75 3 +72
Tests 2 103 3 +100
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 3 178 6 +172

What I checked:

Likely related people:

  • Vincent Koc: Blame/log show the current strict identity comparator, llama.cpp provider file, and default local model export carried in recent current-main/tagged commits. (role: recent area contributor; confidence: high; commits: d2c0d3ac9bc2, 8c802aa68351; files: extensions/memory-core/src/memory/manager-reindex-state.ts, extensions/llama-cpp/src/embedding-provider.ts, packages/memory-host-sdk/src/host/embedding-defaults.ts)
  • Peter Steinberger: Git history shows earlier memory embedding provider-plugin and manager test refactor work across the same memory indexing/test surface. (role: adjacent feature-history contributor; confidence: medium; commits: 77e6e4cf87f7, f4d8393bf4c1, 66405d5e8a63; files: extensions/memory-core/src/memory/index.test.ts, extensions/memory-core/src/memory/manager.ts, extensions/memory-core/src/memory/manager-sync-ops.ts)
  • stevenepalmer: An open related PR by this contributor fixes the neighboring local modelPath status-identity path, which overlaps memory-core local identity routing but is distinct from this default-model path migration. (role: adjacent follow-up contributor; confidence: medium; commits: e70b9b47131b, e180c67d9b77, 518b3c25fcb7; files: extensions/memory-core/src/memory/manager-sync-ops.ts, extensions/memory-core/src/memory/index.test.ts)
What the crustacean ranks mean
  • 🦀 challenger crab: rare, exceptional readiness with strong proof, clean implementation, and convincing validation.
  • 🦞 diamond lobster: very strong readiness with only minor maintainer review expected.
  • 🐚 platinum hermit: good normal PR, likely mergeable with ordinary maintainer review.
  • 🦐 gold shrimp: useful signal, but proof or patch confidence is still limited.
  • 🦪 silver shellfish: thin signal; proof, validation, or implementation needs work.
  • 🧂 unranked krab: not merge-ready because proof is missing/unusable or there are serious correctness or safety concerns.
  • 🌊 off-meta tidepool: rating does not apply to this item.

Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics.

How this review workflow works
  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.

@clawsweeper clawsweeper Bot added rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. P1 High-priority user-facing bug, regression, or broken workflow. merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. merge-risk: 🚨 session-state 🚨 May lose, corrupt, stale, or mis-associate session, agent, or context state. proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. and removed rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. labels Jun 14, 2026
@vincentkoc vincentkoc self-assigned this Jun 14, 2026

@vincentkoc vincentkoc left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Deep review found a merge blocker in extensions/memory-core/src/memory/manager-reindex-state.ts:51: basename-only compatibility treats any local file named like the default GGUF as the official default model. A different model with that filename can suppress reindexing and mix incompatible embedding spaces.

Best fix: bind identity compatibility to the canonical resolved model artifact/source, not the basename. The provider identity needs a durable artifact identity seam before this is safe to merge.

mushuiyu886 and others added 3 commits June 15, 2026 09:27
Treat the official local default embedding model's hf URI and downloaded GGUF path identities as equivalent so upgraded local memory indexes do not pause solely on path-format changes.
Avoid filtered array tail access in the local model filename helper while preserving the same compatibility behavior.

@vincentkoc vincentkoc left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Maintainer repair complete. Exact provider-owned aliases preserve both HF-to-path and path-to-HF indexes without making arbitrary paths equivalent. Focused tests, typechecks, lint/format, Plugin SDK baseline check, and fresh branch autoreview are clean.

@vincentkoc

Copy link
Copy Markdown
Member

Maintainer closeout proof:

  • Preserves existing path-keyed and URI-keyed llama.cpp embedding indexes and cache rows through exact provider-owned aliases.
  • Keeps arbitrary and same-basename paths distinct; covers default, custom, and relative cache paths.
  • Focused Vitest: 164/164 passed across llama-cpp and memory-core; final llama-cpp rerun 10/10 passed.
  • Core/extensions and extension-test tsgo passed.
  • oxfmt, oxlint, git diff --check, and Plugin SDK API baseline check passed.
  • Fresh branch autoreview against current main: clean.

Proof gap: no live native model download/load run; full Testbox check:changed was unavailable because the Blacksmith CLI is not installed in this environment.

@vincentkoc
vincentkoc merged commit 44e6caf into openclaw:main Jun 15, 2026
174 of 178 checks passed
github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request Jun 15, 2026
* fix(memory): accept local default model path migration

Treat the official local default embedding model's hf URI and downloaded GGUF path identities as equivalent so upgraded local memory indexes do not pause solely on path-format changes.

* fix(memory): satisfy local identity lint

Avoid filtered array tail access in the local model filename helper while preserving the same compatibility behavior.

* fix(memory): preserve local embedding identity aliases

---------

Co-authored-by: Vincent Koc <[email protected]>
wangmiao0668000666 pushed a commit to wangmiao0668000666/openclaw that referenced this pull request Jun 17, 2026
* fix(memory): accept local default model path migration

Treat the official local default embedding model's hf URI and downloaded GGUF path identities as equivalent so upgraded local memory indexes do not pause solely on path-format changes.

* fix(memory): satisfy local identity lint

Avoid filtered array tail access in the local model filename helper while preserving the same compatibility behavior.

* fix(memory): preserve local embedding identity aliases

---------

Co-authored-by: Vincent Koc <[email protected]>
crh-code pushed a commit to crh-code/openclaw that referenced this pull request Jun 18, 2026
* fix(memory): accept local default model path migration

Treat the official local default embedding model's hf URI and downloaded GGUF path identities as equivalent so upgraded local memory indexes do not pause solely on path-format changes.

* fix(memory): satisfy local identity lint

Avoid filtered array tail access in the local model filename helper while preserving the same compatibility behavior.

* fix(memory): preserve local embedding identity aliases

---------

Co-authored-by: Vincent Koc <[email protected]>
badgerbees pushed a commit to badgerbees/openclaw that referenced this pull request Jul 8, 2026
* fix(memory): accept local default model path migration

Treat the official local default embedding model's hf URI and downloaded GGUF path identities as equivalent so upgraded local memory indexes do not pause solely on path-format changes.

* fix(memory): satisfy local identity lint

Avoid filtered array tail access in the local model filename helper while preserving the same compatibility behavior.

* fix(memory): preserve local embedding identity aliases

---------

Co-authored-by: Vincent Koc <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

extensions: llama-cpp extensions: memory-core Extension: memory-core merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. merge-risk: 🚨 session-state 🚨 May lose, corrupt, stale, or mis-associate session, agent, or context state. P1 High-priority user-facing bug, regression, or broken workflow. proof: sufficient ClawSweeper judged the real behavior proof convincing. proof: supplied External PR includes structured after-fix real behavior proof. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. size: XL status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants