Skip to content

memory status always reports "Vector search: paused" with blank expected model (2026.6.1) #90413

@colinmac-boop

Description

@colinmac-boop

Summary

openclaw memory status always prints Index identity: index was built for model <X>, expected (with a blank expected) and Vector search: paused until memory is rebuilt, even immediately after a successful openclaw memory index --force. memory_search tool calls return disabled: true, error: "index metadata is missing" as a result.

openclaw memory status --deep reports the system as healthy (Embeddings: ready, Vector store: ready, Semantic vectors: ready) — only the plain status path is broken.

Version: OpenClaw 2026.6.1 (2e08f0f), installed via Homebrew on macOS 15.5 arm64.

Reproduction

Any agent with the default agents.<id>.memorySearch.model (empty string "") and a working embedding provider whose adapter exposes a non-empty defaultModel (e.g. OpenAI text-embedding-3-small) reproduces it.

openclaw memory index --agent main --force      # reports success
openclaw memory status                          # prints "paused" with blank expected
openclaw memory status --deep                   # reports healthy
openclaw memory search "anything" --agent main # works (returns semantic hits)

Root cause

In MemoryIndexManager.resolveCurrentIndexIdentityState (dist/manager-*.js), configuredProvider.model is assigned directly from this.settings.model:

const configuredProvider = this.settings.provider === "none" ? null : {
  id: resolveEmbeddingProviderAdapterId(this.settings.provider, this.cfg) ?? this.settings.provider,
  model: this.settings.model
};

this.settings.model is the empty string "" by default (not undefined or unset). It only gets resolved against the adapter's defaultModel during provider initialization, which happens on the --deep / --index paths but not on the plain memory status path (providerInitialized: false, this.provider === undefined).

Result: configuredProvider.model = "", identity validation compares meta.model ("text-embedding-3-small") !== "", mismatch declared, message printed with empty "expected".

Empty string survives ?? (nullish-coalescing); only || falls through. The existing code uses neither — direct assignment.

Confirmed with diagnostic logging in a local patched build:

[identity:debug] {"hasOverride":false,"configuredProvider":{"id":"openai","model":""},
                 "settingsModel":"","settingsProvider":"openai","providerInit":false}

Suggested fix

Resolve the adapter's default model up front in resolveCurrentIndexIdentityState (the helper resolveEmbeddingProviderFallbackModel already exists in the same module and does exactly this):

const configuredProviderModel = this.settings.model && this.settings.model.trim()
  ? this.settings.model.trim()
  : resolveEmbeddingProviderFallbackModel(this.settings.provider, "", this.cfg);
const configuredProvider = this.settings.provider === "none" ? null : {
  id: resolveEmbeddingProviderAdapterId(this.settings.provider, this.cfg) ?? this.settings.provider,
  model: configuredProviderModel
};

A symmetric guard in refreshIndexIdentityDirty for the case where this.providerInitialized is true but this.provider.model is still falsy is also recommended:

const providerModelFallback = this.settings.model;
const provider = this.settings.provider === "none" ? null
  : this.providerInitialized
    ? this.provider ? { id: this.provider.id, model: this.provider.model || providerModelFallback } : null
    : void 0;

Verification after patching

  • openclaw memory status no longer prints Index identity or Vector search: paused lines
  • openclaw memory search "<query>" --agent main returns semantic results
  • memory_search MCP/tool calls succeed (in new sessions; existing session-cached disabled state clears on next session boot)

Happy to send a PR if useful — the change is two small edits in one file.

Metadata

Metadata

Assignees

No one assigned

    Labels

    P1High-priority user-facing bug, regression, or broken workflow.clawsweeper:fix-shape-clearClawSweeper found a clear likely implementation shape for this issue.clawsweeper:queueable-fixClawSweeper marked this issue as an existing queue_fix_pr work candidate.clawsweeper:source-reproClawSweeper found a high-confidence source-level issue reproduction.impact:auth-providerAuth, provider routing, model choice, or SecretRef resolution may break.impact:session-stateSession, memory, transcript, context, or agent state can drift or corrupt.issue-rating: 🦞 diamond lobsterVery strong issue quality with high-confidence source-level or clear reproduction.

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions