(Last Updated: 2026-05-09T01:25:00+08:00) Open Source

OpenClaw Accepted Our PR #76024: A Windows EBUSY Fix That Made It Upstream

A practical postmortem on PR #76024, a Windows memory atomic reindex fix accepted by OpenClaw. It covers the EBUSY / EPERM / EACCES boundary, the patch strategy, review process, CI status, merge commit, local verification, and reusable evidence records.

#OpenClaw#Windows#Open Source#AI Agent#Agent Workflow#Upstream Contribution
Quick Summary

Main answer

OpenClaw merged PR #76024, a focused Windows fix for transient EBUSY / EPERM / EACCES rename failures during memory atomic reindex file swaps.

Who should read this

Developers running OpenClaw or other AI agent tools on Windows, and teams that want to turn local debugging into upstreamable engineering contributions.

Key check

PR #76024 was merged by steipete on 2026-05-02 18:07:49 +08:00. The merge commit is f3fd0eedff215967eb75361d241dd5e6cea602e8. The related issue is #64187.

Next step

When you hit a Windows-only stability issue, record the failure boundary, reproduction context, local commands, review thread, CI state, and final upstream status.

What You'll Learn

  • + What exact Windows boundary PR #76024 fixed
  • + Why the patch used a small retry window instead of changing global SQLite behavior
  • + How issue, PR, bot review, CI checks, merge commit, and screenshots form an evidence chain
  • + How to write an upstream contribution postmortem without exaggerating the fix

OpenClaw PR #76024 cover

A Small Fix, But a Real Upstream Loop

PR #76024 is not a grand story about making OpenClaw fully stable on Windows.

It is smaller, and that is why it is useful.

The PR fixed one concrete boundary in OpenClaw: during memory atomic reindex on Windows, the file swap step can briefly fail when fs.rename hits a transient file lock. The error may appear as EBUSY, EPERM, or EACCES.

That kind of Windows failure is annoying because it is often timing-dependent. It may happen on one machine and disappear on another. It may fail once, then pass on the next run. If you turn it into a broad rewrite, you risk changing behavior far outside the real problem.

So the fix stayed narrow.

What Was Fixed

OpenClaw’s memory atomic reindex flow builds a new SQLite index and then swaps a group of files into place.

On Windows, another process can briefly hold one of those files. That process may be the runtime, a scanner, an indexer, or something else touching the filesystem at the wrong moment.

The patch did not change the whole storage layer. It did not change global SQLite settings. It did not try to solve every Windows stability issue.

It only handled the transient file swap boundary:

memory atomic reindex
-> index file swap
-> transient fs.rename failure
-> EBUSY / EPERM / EACCES
-> bounded retry

Problem and PR summary

In plain terms: if Windows briefly says “this file is busy” during the swap, OpenClaw now gets a short retry window instead of immediately failing the whole reindex path.

The Patch Strategy

The PR title was:

fix(memory): retry transient index swaps on Windows

The key decision was to keep the retry small and local.

  • retry only transient file-swap errors: EBUSY, EPERM, EACCES
  • keep the retry budget limited
  • preserve the existing missing-sidecar behavior
  • do not swallow unrelated errors
  • do not change global SQLite behavior

This matters because a Windows workaround can easily grow into a hidden behavior change. A maintainer reviewing the patch needs to see that the fix is scoped to the observed failure and that other errors still surface normally.

The Review Trail

The PR was linked to the related OpenClaw issue:

The bot review asked for maintainer attention and helped frame the risk boundary.

Bot review

After that, we followed up with local verification and PR notes. The important part was not only saying “it works on my machine”, but writing down the exact checks in a form someone else could inspect later.

Author follow-up and verification

That is the difference between a local workaround and an upstreamable fix. A workaround can live in your own notes. An upstream patch needs enough context for maintainers and future contributors.

CI and Merge Evidence

The PR reached a clean enough state for OpenClaw to merge it.

Evidence itemValue
PRopenclaw/openclaw#76024
Related issueopenclaw/openclaw#64187
StatusMerged / Closed
Merged bysteipete
Merged at2026-05-02 18:07:49 +08:00
Merge commitf3fd0eedff215967eb75361d241dd5e6cea602e8
Head commit2b53246ab5cc75a0e46309c52cdc653afcc40d04

The check-run summary we recorded for the head commit was:

Check stateCount
completed79
success71
skipped8
failure0
cancelled0

I would not describe that as “every CI job succeeded”, because 8 checks were skipped. The accurate wording is: 79 check runs completed, 71 succeeded, 8 were skipped, and no failure or cancellation was observed.

CI and no-conflict state

The final merge screenshot closes the public loop.

Official merged state

Local Verification Commands

The local verification included the focused memory test:

pnpm exec vitest run extensions/memory-core/src/memory/manager.atomic-reindex.test.ts

Result:

1 test file passed
6 tests passed

We also verified under Node 22:

$env:Path = 'D:\nvm4w\nodejs;' + $env:Path
node --version
pnpm exec vitest run extensions/memory-core/src/memory/manager.atomic-reindex.test.ts

Result:

v22.22.2
1 test file passed
6 tests passed

Additional checks included:

pnpm lint:extensions -- extensions/memory-core/src/memory/manager-atomic-reindex.ts extensions/memory-core/src/memory/manager.atomic-reindex.test.ts
pnpm check:changed
git diff --check

These are not decoration. They make the postmortem reproducible.

What This Means for Windows Users

If you run OpenClaw on Windows, the practical meaning is simple:

When memory reindex swaps SQLite index files and Windows briefly reports a file as busy, OpenClaw has a small retry window before giving up.

This does not mean all Windows issues are gone.

It does not cover:

  • all SQLite read/write problems;
  • all OpenClaw memory search problems;
  • gateway startup failures;
  • listener or port issues;
  • enterprise policy restrictions;
  • every file-lock situation on Windows.

It covers one narrow failure path, and that is enough for this PR.

Why We Keep These Records

We keep this type of upstream contribution record because it is useful for both engineering and content.

For engineering, it prevents vague memory. We can point to the PR, issue, CI state, merge commit, screenshots, and local commands.

For writing, it keeps the story honest. The post does not need to claim that one patch solved everything. It only needs to explain what happened, what was fixed, what was not fixed, and how the evidence chain closed.

This PR is now part of our longer-running upstream contribution topic:

For future OpenClaw and Windows stability work, this is the record shape we want to keep:

problem screenshot
-> reproduction context
-> local commands
-> patch boundary
-> PR and issue links
-> review thread
-> CI state
-> final merge or close status

That is slower than dropping a quick note in chat. It is also much easier to reuse, review, translate, and trust later.

Key Takeaways

  • - The fix is narrow by design: memory atomic reindex file swaps on Windows, not all OpenClaw Windows stability issues.
  • - A small retry budget can be safer than a broad storage behavior change when the failure is a transient file lock.
  • - Upstream contribution is not just code. Maintainers need scope, tests, risk boundaries, and reproducible evidence.
  • - Screenshots and public links should support the story, but the primary source should remain the GitHub PR, issue, CI, and commit history.

Need another practical guide?

Search for related tools, error messages, setup guides, and engineering notes across the site.

FAQ

Was PR #76024 merged by OpenClaw?

Yes. The PR was merged by steipete on 2026-05-02 18:07:49 +08:00, with merge commit f3fd0eedff215967eb75361d241dd5e6cea602e8.

Does this fix every Windows problem in OpenClaw?

No. It fixes a specific transient rename failure during memory atomic reindex file swaps. It does not fix every SQLite, gateway, listener, permission, or process-management issue on Windows.

Why not change SQLite journal mode or busy_timeout globally?

Because the observed problem was at the file swap boundary. The patch keeps the behavior local: retry only transient rename failures such as EBUSY, EPERM, and EACCES.

Comments