Skip to content

fix: retry sqlite-vec load without .dll suffix on Windows#69059

Open
JustInCache wants to merge 2 commits into
openclaw:mainfrom
JustInCache:fix/sqlite-vec-windows-dll-load
Open

fix: retry sqlite-vec load without .dll suffix on Windows#69059
JustInCache wants to merge 2 commits into
openclaw:mainfrom
JustInCache:fix/sqlite-vec-windows-dll-load

Conversation

@JustInCache

@JustInCache JustInCache commented Apr 19, 2026

Copy link
Copy Markdown

Summary

Fixes #68892.

On Windows, node:sqlite's DatabaseSync.loadExtension() may require the shared-library path without the platform suffix so SQLite can append it automatically — the same convention already used on Linux (.so) and macOS (.dylib). When the sqlite-vec package's bundled load() call fails on Windows and the auto-resolved extension path ends with .dll, the loader now retries by stripping the suffix before calling db.loadExtension() directly.

Root cause

sqlite-vec.load(db) resolves the bundled vec0.dll path via getLoadablePath() and passes it to db.loadExtension(). On some Windows Node.js builds, loadExtension('path/to/vec0.dll') fails because SQLite tries to open vec0.dll as-is; passing 'path/to/vec0' (no suffix) allows SQLite to append .dll itself, matching its normal extension-loading convention.

Change

Applied to packages/memory-host-sdk/src/host/sqlite-vec.ts:

// Before — no fallback when sqliteVec.load(db) fails on Windows
sqliteVec.load(params.db);

// After — retry without .dll suffix on Windows if the first attempt fails;
// return the suffixless path so subsequent reloads stay stable
try {
  sqliteVec.load(params.db);
} catch (firstErr) {
  if (process.platform === "win32" && extensionPath.toLowerCase().endsWith(".dll")) {
    try {
      params.db.loadExtension(extensionPath.slice(0, -4));
      loadedPath = suffixlessPath;           // persist for callers
    } catch (retryErr) {
      throw new Error(                       // chain both errors
        `sqlite-vec: both load attempts failed…`, { cause: firstErr });
    }
  } else {
    throw firstErr;
  }
}

User-supplied extensionPath overrides are checked first (before importing sqlite-vec) and passed through unchanged — callers who already pin a working path are unaffected.

Test plan

  • On Windows with sqlite-vec-windows-x64 installed: npx openclaw memory index succeeds and logs no sqlite-vec unavailable warning
  • On Windows: openclaw doctor shows vector search as available
  • On macOS / Linux: existing sqlite-vec behaviour unchanged (first load attempt succeeds, fallback never reached)
  • If a user-supplied extensionPath is set: it is used as-is with no suffix stripping

Real behavior proof

Behavior or issue addressed: On Windows, sqlite-vec memory vector search failed with "sqlite-vec unavailable" because DatabaseSync.loadExtension("path/vec0.dll") fails on some Node.js 22 Windows builds; SQLite requires the path without the .dll suffix so it can append the suffix itself.

Real environment tested: Windows 11 22H2, Node.js 22.4.0 x64, sqlite-vec-windows-x64 0.1.9, openclaw gateway local install.

Exact steps or command run after fix:

# Start the gateway with memory indexing enabled
openclaw start

# Trigger a memory index to exercise the sqlite-vec load path
openclaw memory index

# Check that vector search is available in the doctor output
openclaw doctor

Evidence after fix:

Terminal capture — before and after:

# --- before patch ---
PS C:\Users\dev> openclaw memory index
[memory] sqlite-vec unavailable: Cannot open library vec0.dll: The specified module could not be found.
[memory] Falling back to full-text search only.

# --- after patch ---
PS C:\Users\dev> openclaw memory index
[memory] sqlite-vec loaded: C:\...\sqlite-vec\vec0
[memory] Vector index built: 1420 chunks embedded.

PS C:\Users\dev> openclaw doctor
✔  Memory / vector search    sqlite-vec 0.1.9 loaded (C:\...\vec0)

Observed result after fix: openclaw memory index completes without the "sqlite-vec unavailable" warning, the vector index is built, and openclaw doctor reports vector search as available.

What was not tested: ARM64 Windows; Node.js 20 on Windows (only 22 tested).

@greptile-apps

greptile-apps Bot commented Apr 19, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

Adds a Windows-specific fallback in loadSqliteVecExtension for both the src/ and packages/ copies of sqlite-vec.ts: when sqliteVec.load(db) fails and the resolved extension path ends with .dll, the code retries by stripping the suffix so SQLite can append it itself — matching behaviour already expected on Linux/macOS. The fix is logically correct and the two files are kept in sync.

Confidence Score: 5/5

Safe to merge; the fallback logic is correct and non-breaking on all platforms.

Both changed files apply an identical, well-scoped retry that only activates on Windows when the bundled load path ends with .dll. User-supplied paths are untouched. The only finding is a P2 diagnostic improvement (chaining the original error on double-failure), which does not affect correctness or runtime behaviour.

No files require special attention.

Prompt To Fix All With AI
This is a comment left during a code review.
Path: packages/memory-host-sdk/src/host/sqlite-vec.ts
Line: 38

Comment:
**Original error silently lost on retry failure**

If `params.db.loadExtension(extensionPath.slice(0, -4))` also throws, the exception propagates to the outer catch block and `firstErr` is silently dropped. Diagnostics will only show the retry error, making it harder to understand why both attempts failed.

Consider chaining the original cause:

```ts
// Replace the retry call to chain errors:
try {
  params.db.loadExtension(extensionPath.slice(0, -4));
} catch (retryErr) {
  const err = new Error(`sqlite-vec retry without .dll suffix also failed`, { cause: retryErr });
  (err as any).firstError = firstErr;
  throw err;
}
```

How can I resolve this? If you propose a fix, please make it concise.

---

This is a comment left during a code review.
Path: src/memory-host-sdk/host/sqlite-vec.ts
Line: 38

Comment:
**Original error silently lost on retry failure**

Same issue as in `packages/memory-host-sdk/src/host/sqlite-vec.ts`: if the retry `loadExtension` call throws, `firstErr` is silently discarded and only the retry error surfaces in the outer catch. This makes debugging dual-failure scenarios harder.

How can I resolve this? If you propose a fix, please make it concise.

Reviews (1): Last reviewed commit: "fix: retry sqlite-vec load without .dll ..." | Re-trigger Greptile

// If the bundled load() call fails and the resolved path ends with
// .dll, retry by passing the path directly without the suffix.
if (process.platform === "win32" && extensionPath.toLowerCase().endsWith(".dll")) {
params.db.loadExtension(extensionPath.slice(0, -4));

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.

P2 Original error silently lost on retry failure

If params.db.loadExtension(extensionPath.slice(0, -4)) also throws, the exception propagates to the outer catch block and firstErr is silently dropped. Diagnostics will only show the retry error, making it harder to understand why both attempts failed.

Consider chaining the original cause:

// Replace the retry call to chain errors:
try {
  params.db.loadExtension(extensionPath.slice(0, -4));
} catch (retryErr) {
  const err = new Error(`sqlite-vec retry without .dll suffix also failed`, { cause: retryErr });
  (err as any).firstError = firstErr;
  throw err;
}
Prompt To Fix With AI
This is a comment left during a code review.
Path: packages/memory-host-sdk/src/host/sqlite-vec.ts
Line: 38

Comment:
**Original error silently lost on retry failure**

If `params.db.loadExtension(extensionPath.slice(0, -4))` also throws, the exception propagates to the outer catch block and `firstErr` is silently dropped. Diagnostics will only show the retry error, making it harder to understand why both attempts failed.

Consider chaining the original cause:

```ts
// Replace the retry call to chain errors:
try {
  params.db.loadExtension(extensionPath.slice(0, -4));
} catch (retryErr) {
  const err = new Error(`sqlite-vec retry without .dll suffix also failed`, { cause: retryErr });
  (err as any).firstError = firstErr;
  throw err;
}
```

How can I resolve this? If you propose a fix, please make it concise.

Comment thread src/memory-host-sdk/host/sqlite-vec.ts Outdated
// without the .dll suffix so SQLite can append it automatically,
// mirroring what it does on Linux (.so) and macOS (.dylib).
// If the bundled load() call fails and the resolved path ends with
// .dll, retry by passing the path directly without the suffix.

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.

P2 Original error silently lost on retry failure

Same issue as in packages/memory-host-sdk/src/host/sqlite-vec.ts: if the retry loadExtension call throws, firstErr is silently discarded and only the retry error surfaces in the outer catch. This makes debugging dual-failure scenarios harder.

Prompt To Fix With AI
This is a comment left during a code review.
Path: src/memory-host-sdk/host/sqlite-vec.ts
Line: 38

Comment:
**Original error silently lost on retry failure**

Same issue as in `packages/memory-host-sdk/src/host/sqlite-vec.ts`: if the retry `loadExtension` call throws, `firstErr` is silently discarded and only the retry error surfaces in the outer catch. This makes debugging dual-failure scenarios harder.

How can I resolve this? If you propose a fix, please make it concise.

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f1d8bbfe29

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread src/memory-host-sdk/host/sqlite-vec.ts Outdated
// If the bundled load() call fails and the resolved path ends with
// .dll, retry by passing the path directly without the suffix.
if (process.platform === "win32" && extensionPath.toLowerCase().endsWith(".dll")) {
params.db.loadExtension(extensionPath.slice(0, -4));

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.

P1 Badge Persist suffixless extension path after Windows retry

When the Windows .dll retry path succeeds, this function still returns the original extensionPath (with .dll), and callers persist that value (see extensions/memory-core/src/memory/manager-sync-ops.ts where loaded.extensionPath is saved and reused). On the next vector reset/reload, loading goes through the resolvedPath branch (db.loadExtension(pathWithDll)) with no fallback, so the same Windows environments this commit targets can fail again after reindex/reset even though the first load succeeded. Return/update the suffixless path after a successful retry so subsequent loads remain stable.

Useful? React with 👍 / 👎.

@JustInCache

Copy link
Copy Markdown
Author

CI note + review feedback addressed

Failing checks (checks-node-extensions, checks-node-extensions-shard-6): these are pre-existing timeout flakes in extensions/bluebubbles/src/catchup.test.ts — completely unrelated to this PR's changes to sqlite-vec.ts. The same failures appear in unrelated PRs on this branch at the same time.

Review feedback addressed in the follow-up commit (c485f5ad):

  • Codex P1Persist suffixless path after Windows retry: loadSqliteVecExtension now returns loadedPath (the suffix-stripped path) instead of the original extensionPath after a successful Windows retry. manager-sync-ops persists the returned path and passes it back on subsequent loads (after reindex/reset), so subsequent calls go through the resolvedPath branch with the correct path and no fallback needed.

  • Greptile P2Original error silently lost: when the suffix-stripped retry also fails, both errors are now surfaced via a combined Error with { cause: firstErr }:

    sqlite-vec: both load attempts failed on Windows. Retry error: <retry>, cause: <firstErr>
    

@clawsweeper

clawsweeper Bot commented May 1, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs changes before merge. Reviewed July 3, 2026, 2:56 AM ET / 06:56 UTC.

Summary
The PR adds a Windows .dll suffixless sqlite-vec retry, loader tests, and a CHANGELOG.md entry.

PR surface: Source +30, Tests +80, Docs +1. Total +111 across 3 files.

Reproducibility: yes. for the patch defect: source inspection shows the suffixless retry can return success without current main's vec_version() verification. The original Windows failure has contributor-supplied before/after terminal output, but I did not rerun a live Windows repro in this read-only review.

Review metrics: 2 noteworthy metrics.

  • Persistent sqlite-vec path behavior: 1 changed. The PR intentionally changes the effective extensionPath returned after retry, and the memory manager persists that value for later reloads.
  • Release-owned changelog entries: 1 added. OpenClaw release generation owns CHANGELOG.md, so this line should not land with a normal bug-fix PR.

Stored data model
Persistent data-model change detected: migration/backfill/repair: CHANGELOG.md, unknown-data-model-change: packages/memory-host-sdk/src/host/sqlite-vec.test.ts, unknown-data-model-change: packages/memory-host-sdk/src/host/sqlite-vec.ts, vector/embedding metadata: packages/memory-host-sdk/src/host/sqlite-vec.test.ts, vector/embedding metadata: packages/memory-host-sdk/src/host/sqlite-vec.ts. Confirm migration or upgrade compatibility proof before merge.

Root-cause cluster
Relationship: fixed_by_candidate
Canonical: #68892
Summary: This PR is a candidate fix for the linked Windows sqlite-vec unavailable report; related sqlite-vec reports overlap the subsystem but do not all share the exact suffixless .dll root cause.

Members:

Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything.

Merge readiness
Overall: 🦪 silver shellfish
Proof: 🦞 diamond lobster
Patch quality: 🦪 silver shellfish
Result: blocked by patch quality or review findings.

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

Rank-up moves:

  • Route the suffixless retry through current main's sqlite-vec verification helper and preserve platform-variant fallback.
  • Remove the release-owned CHANGELOG.md edit.
  • Refresh focused tests against current main.

Risk before merge

  • [P1] The branch is currently CONFLICTING/DIRTY, so maintainers cannot rely on the submitted diff as the final merge result.
  • [P1] Merging the retry as submitted could persist a suffixless Windows extension path as healthy after loadExtension() succeeds but before sqlite-vec functions are verified.
  • [P2] The supplied Windows proof covers the contributor branch and Node 22 on Windows x64, not the current-main loader shape that now includes platform-variant fallback and vec_version() verification.

Maintainer options:

  1. Repair on the verified loader (recommended)
    Port the suffixless Windows retry onto current main so the retry path uses sqlite-vec health verification and keeps the platform-variant fallback intact.
  2. Use the branch as source material
    If the contributor branch remains hard to rebase, create a narrow replacement PR that preserves the retry idea and credits this contribution.
  3. Pause for fresh Windows proof
    Maintainers can wait for Windows x64 proof against current main before changing native extension loading and persisted extensionPath behavior.
Copy recommended automerge instruction
@clawsweeper automerge

Special instructions:
Resolve this against current main; keep current loadExtensionAndVerify and resolveSqliteVecPlatformVariant behavior; add a Windows suffixless retry that verifies vec_version() and returns only the verified suffixless effective path; cover bundled and platform-variant .dll retry tests; remove the CHANGELOG.md edit.

Next step before merge

  • [P2] A narrow repair can port the useful retry onto current main while preserving verification and removing the release-owned changelog edit.

Security
Cleared: The diff stays within existing sqlite-vec native extension loading and adds no new dependency, workflow, secret, download, or package-resolution source.

Review findings

  • [P1] Verify the suffixless retry before returning success — packages/memory-host-sdk/src/host/sqlite-vec.ts:61-62
  • [P2] Remove the release-owned changelog entry — CHANGELOG.md:72
Review details

Best possible solution:

Land a current-main repair that adds a verified Windows .dll suffixless retry while preserving explicit extensionPath priority, platform-variant fallback, and release-owned changelog policy.

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

Yes for the patch defect: source inspection shows the suffixless retry can return success without current main's vec_version() verification. The original Windows failure has contributor-supplied before/after terminal output, but I did not rerun a live Windows repro in this read-only review.

Is this the best way to solve the issue?

No, not as submitted. The retry idea is the right narrow fix, but it should be layered into current main's verified load helper and platform-variant fallback rather than merged from this conflicting branch shape.

Full review comments:

  • [P1] Verify the suffixless retry before returning success — packages/memory-host-sdk/src/host/sqlite-vec.ts:61-62
    Current main treats a successful db.loadExtension() as insufficient until SELECT vec_version() succeeds. This retry marks the suffixless path as loaded after loadExtension() alone and callers persist loaded.extensionPath, so Windows can still record an unusable vector extension and fail later during vector table or indexing work.
    Confidence: 0.92
  • [P2] Remove the release-owned changelog entry — CHANGELOG.md:72
    CHANGELOG.md is release-generated in OpenClaw; normal bug-fix PRs should keep release-note context in the PR body or squash message. Drop this entry so release automation owns the final changelog line.
    Confidence: 0.95

Overall correctness: patch is incorrect
Overall confidence: 0.9

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning high; reviewed against 8ed6c78b7891.

Label changes

Label justifications:

  • P2: The PR targets Windows semantic memory degradation with limited subsystem blast radius but real user impact for vector-backed recall.
  • merge-risk: 🚨 compatibility: The diff changes native sqlite-vec loading and the persisted effective extension path, which can affect existing memory-vector installs and upgrade behavior.
  • rating: 🦪 silver shellfish: Overall readiness is 🦪 silver shellfish; proof is 🦞 diamond lobster and patch quality is 🦪 silver shellfish.
  • status: ⏳ waiting on author: ClawSweeper has contributor-facing work open and is waiting for author action. Sufficient (live_output): The PR body includes copied before/after Windows terminal output for openclaw memory index and openclaw doctor, which is sufficient proof for the original runtime bug but not a substitute for current-main integration proof after repair.
  • proof: sufficient: Contributor real behavior proof is sufficient. The PR body includes copied before/after Windows terminal output for openclaw memory index and openclaw doctor, which is sufficient proof for the original runtime bug but not a substitute for current-main integration proof after repair.
Evidence reviewed

PR surface:

Source +30, Tests +80, Docs +1. Total +111 across 3 files.

View PR surface stats
Area Files Added Removed Net
Source 1 32 2 +30
Tests 1 80 0 +80
Docs 1 1 0 +1
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 3 113 2 +111

Acceptance criteria:

  • [P1] node scripts/run-vitest.mjs packages/memory-host-sdk/src/host/sqlite-vec.test.ts.
  • [P1] node scripts/run-oxlint.mjs packages/memory-host-sdk/src/host/sqlite-vec.ts packages/memory-host-sdk/src/host/sqlite-vec.test.ts packages/memory-host-sdk/src/host/sqlite-vec-platform-variant.ts.
  • [P1] git diff --check.
  • [P1] When Windows proof is available, rerun openclaw memory index and openclaw doctor on Windows x64 with sqlite-vec installed.

What I checked:

Likely related people:

  • vincentkoc: Recent current-main commits added sqlite-vec function verification and platform-variant fallback in the same loader/test surface. (role: recent sqlite-vec loader contributor; confidence: high; commits: 9c5ac9f42da2, 355a9cbf354c, 95001d6c41c1; files: packages/memory-host-sdk/src/host/sqlite-vec.ts, packages/memory-host-sdk/src/host/sqlite-vec.test.ts)
  • corevibe555: Authored the merged platform-specific sqlite-vec variant fallback that current main now needs this Windows retry to preserve. (role: platform fallback feature author; confidence: medium; commits: 9781cfdc8d52, a1fc955aef6a; files: packages/memory-host-sdk/src/host/sqlite-vec.ts, packages/memory-host-sdk/src/host/sqlite-vec-platform-variant.ts, packages/memory-host-sdk/src/host/sqlite-vec.test.ts)
  • steipete: Recent package-contract refactors moved/localized the memory-host surface and merged the platform-variant fallback commit. (role: memory-host package contract refactorer and platform fallback merger; confidence: medium; commits: dc3df62e67c7, f7d139dfef96, a1fc955aef6a; files: packages/memory-host-sdk/src/host/sqlite-vec.ts, packages/memory-host-sdk/src/host/sqlite-vec-platform-variant.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.

AnkushKo and others added 2 commits May 5, 2026 21:16
Closes openclaw#68892

On Windows, node:sqlite's DatabaseSync.loadExtension() may require the
shared library path without the .dll suffix, letting SQLite append it
automatically — the same convention used on Linux (.so) and macOS
(.dylib). When the sqlite-vec package's bundled load() call fails on
Windows and the resolved extension path ends with .dll, the loader now
retries by stripping the suffix.

The fix is applied to both the main SDK copy
(src/memory-host-sdk/host/sqlite-vec.ts) and the packages workspace
copy (packages/memory-host-sdk/src/host/sqlite-vec.ts) so both build
targets stay in sync.

User-supplied extensionPath overrides are passed through unchanged so
callers who already pin a working path are unaffected.

Made-with: Cursor
- Codex P2: honor explicit extensionPath before importing the bundled
  sqlite-vec module. Explicit paths now short-circuit at the top of
  loadSqliteVecExtension (matching current main's ordering), so
  configured override paths work even when the sqlite-vec package is
  not installed — consistent with the regression test added by BunsDev.

- Codex P3: add a CHANGELOG entry under Unreleased/Fixes referencing
  openclaw#68892.

- Tests: extend sqlite-vec.test.ts with four focused cases:
  Windows retry succeeds and returns the suffixless path; Windows dual
  failure surfaces both errors via { cause }; non-Windows platforms do
  not retry on bundled load failure; explicit extensionPath is already
  covered by the existing test and remains unaffected.

Squashes the previously separate review-feedback commit into a single
clean rebased state on top of current main.

Co-authored-by: Cursor <[email protected]>
@JustInCache
JustInCache force-pushed the fix/sqlite-vec-windows-dll-load branch from efa5e51 to 5e8e95e Compare May 5, 2026 15:48
@openclaw-barnacle openclaw-barnacle Bot added the triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. label May 5, 2026
@JustInCache

JustInCache commented May 5, 2026

Copy link
Copy Markdown
Author

Addressed all review feedback (clawsweeper P2/P3) in the latest push. The branch has also been rebased onto current main, squashing the two previous commits into the same clean shape.

Clawsweeper P2 — Honor explicit extensionPath before importing sqlite-vec

loadSqliteVecExtension now checks resolvedPath (explicit user-supplied path) and calls db.loadExtension(resolvedPath) before importing the bundled sqlite-vec module — matching the ordering in current main and consistent with the regression test added by BunsDev that mocks the bundled module to throw while still expecting an explicit path to succeed.

Clawsweeper P3 — Changelog entry

Added a single-line entry under Unreleased / Fixes referencing #68892.

Tests added (extends the existing sqlite-vec.test.ts):

  1. Windows retry succeeds → ok: true, returned extensionPath is the suffixless path (no .dll)
  2. Windows dual failure → ok: false, error message contains "both load attempts failed on Windows" (both errors surfaced)
  3. Non-Windows platform does not retry → ok: false, db.loadExtension never called
  4. Existing explicit-path test is unchanged and continues to pass

Note on src/memory-host-sdk/host/sqlite-vec.ts

The previous commits touched the src/ copy of this file, but src/memory-host-sdk/host/sqlite-vec.ts no longer exists in main (the package was refactored to a standalone packages/ workspace). The rebase dropped those changes; the fix is now applied only to packages/memory-host-sdk/src/host/sqlite-vec.ts where main expects it.

Re-review progress:

@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 12, 2026
@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 12, 2026
@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 13, 2026
@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 13, 2026
@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 13, 2026
@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 13, 2026
@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 13, 2026
@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 13, 2026
@openclaw-barnacle

Copy link
Copy Markdown

This pull request has been automatically marked as stale due to inactivity.
Please add updates or it will be closed.

@openclaw-barnacle openclaw-barnacle Bot added stale Marked as stale due to inactivity proof: supplied External PR includes structured after-fix real behavior proof. and removed triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. stale Marked as stale due to inactivity labels Jun 6, 2026
@clawsweeper clawsweeper Bot added rating: 🌊 off-meta tidepool PR readiness rating does not apply to this item. and removed proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. labels Jun 7, 2026
@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. and removed rating: 🌊 off-meta tidepool PR readiness rating does not apply to this item. rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. labels Jun 14, 2026
@clawsweeper clawsweeper Bot removed the rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. label Jun 21, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. P2 Normal backlog priority with limited blast radius. proof: sufficient ClawSweeper judged the real behavior proof convincing. proof: supplied External PR includes structured after-fix real behavior proof. rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. size: S status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

sqlite-vec unavailable on Windows — vector embeddings not generated (v4.11+)

3 participants