You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
v2026.6.11 source contains commit d2da8c79d9 ("fix(auto-reply): serialize reply session initialization"), which adds reentrant: true to commitReplySessionInitialization's updateSessionStore call AND the matching AsyncLocalStorage reentrancy support in src/shared/store-writer-queue.ts.
However, the published npm v2026.6.11 bundle ships the dist for session-accessor with the reentrant: true call, but ships store-writer-queue as a 72-line pre-fix module without any AsyncLocalStorage / isActiveStoreWriter / runActiveStoreWriter implementation.
This means at runtime the reentrant: true option passed by commitReplySessionInitialization is silently dropped by runExclusiveSessionStoreWrite (which doesn't even accept an opts argument in the dist), and the reentrancy guard never activates. The fix in d2da8c79d9 is therefore not effective in the published v2026.6.11 artifact, even though it is "in the release" by source-tree presence.
Environment
OpenClaw version: 2026.6.11 (npm global install)
Source tag for 6.11: 66e676d29b (2026-06-30 10:49 -0700)
Fix commit: d2da8c79d9 (Ayaan Zaidi, 2026-06-25 12:11 -0700) — included in 6.11 by ancestry
OS: Ubuntu 24.04, Linux x64, Node v24.18.0
Channel: webchat (agent:main:main)
Trigger: short-turn webchat conversation, no thinking mode, model replies in <1s
which is 72 lines and contains the OLD queue logic with no AsyncLocalStorage, no isActiveStoreWriter, no runActiveStoreWriter. The runQueuedStoreWrite signature in the dist is the pre-fix form:
i.e. opts is not forwarded to runExclusiveSessionStoreWrite, which in turn does not accept an opts argument. The reentrant: true is therefore silently dropped on the floor.
The reentrant field is read in exactly zero places in the dist.
Expected behavior
The fix in d2da8c79d9 should be effective in the published v2026.6.11 artifact: a transient reply-session initialization stale-snapshot conflict should not block the user-facing message, and commitReplySessionInitialization should be able to call updateSessionStore reentrantly from inside the initSessionStateAttempt writer queue without dropping the reentrant: true hint.
Actual behavior
In the published v2026.6.11 dist:
commitReplySessionInitialization passes reentrant: true to updateSessionStore
The guarded reply-session initialization throws reply session initialization conflicted for <sessionKey>, and the inbound message is dropped
Impact
High for any user on 6.11 who is not on the main branch — i.e. every npm install of 6.11. Webchat / Signal / Telegram / WhatsApp / DM-bound channels are all affected to the extent they use commitReplySessionInitialization. From the GitHub issue tracker, reports of this exact symptom on 6.11 (not beta) include:
So far, at least 7 GitHub issues report this exact error string. The bundling divergence is, in our view, a release blocker for 6.11.
Suggested fix paths (for maintainers)
Any of the following would restore parity with the source:
Re-bundle src/shared/store-writer-queue.ts for the next npm release, including the AsyncLocalStorage / isActiveStoreWriter / runActiveStoreWriter block from d2da8c79d9 (~+43 lines), and add the opts parameter to runExclusiveSessionStoreWrite in src/config/sessions/store-writer.ts.
Add a release-bundle smoke test that asserts the dist store-writer-queue module exports a reentrant-aware runQueuedStoreWrite whenever the source has it; this would have caught the divergence.
We have locally tried two mitigations; both are workarounds only:
Hot-patch the dist with the missing reentrant plumbing. Requires hand-editing minified code; high regression risk; does not survive npm i -g openclaw@latest.
Increase the conflict retry budget in the dist. Found in the wild to make Signal inbound reachable in our install, but again does not survive reinstall and does not address the root cause (transient stale snapshot becomes a hard failure under any concurrent write).
We are happy to assist in a release-blocking patch, validation against the existing src/config/sessions/store-writer.test.ts and src/auto-reply/reply/session.test.ts tests, and a fresh CHANGELOG entry that clearly calls out the 6.11 dist vs source divergence.
Reported by the maintainers of A380 on 6.11 npm install. Same maintainer previously contributed #85704 (memory vector degradation guard) which was merged into main as 16ffc2507.
Summary
v2026.6.11source contains commitd2da8c79d9("fix(auto-reply): serialize reply session initialization"), which addsreentrant: truetocommitReplySessionInitialization'supdateSessionStorecall AND the matchingAsyncLocalStoragereentrancy support insrc/shared/store-writer-queue.ts.However, the published npm
v2026.6.11bundle ships the dist forsession-accessorwith thereentrant: truecall, but shipsstore-writer-queueas a 72-line pre-fix module without anyAsyncLocalStorage/isActiveStoreWriter/runActiveStoreWriterimplementation.This means at runtime the
reentrant: trueoption passed bycommitReplySessionInitializationis silently dropped byrunExclusiveSessionStoreWrite(which doesn't even accept anoptsargument in the dist), and the reentrancy guard never activates. The fix ind2da8c79d9is therefore not effective in the publishedv2026.6.11artifact, even though it is "in the release" by source-tree presence.Environment
66e676d29b(2026-06-30 10:49 -0700)d2da8c79d9(Ayaan Zaidi, 2026-06-25 12:11 -0700) — included in 6.11 by ancestryagent:main:main)Observed behavior
Webchat
agent:main:mainsessions fail with:The error appears after 1–2 short turns and remains until the gateway is restarted. The session is unusable afterwards;
/resethits the same error.Reproduction frequency in our install: ~13 errors in a single minute at the peak:
Root cause analysis
Step 1: source vs dist divergence
The 6.11 source
src/shared/store-writer-queue.ts(tag66e676d29b) contains 4 occurrences ofAsyncLocalStorage/isActiveStoreWriter, added byd2da8c79d9:The pre-fix 6.10 source has 0:
Step 2: dist file inspection
The published npm package contains:
which is 72 lines and contains the OLD queue logic with no
AsyncLocalStorage, noisActiveStoreWriter, norunActiveStoreWriter. TherunQueuedStoreWritesignature in the dist is the pre-fix form:There is no
params.reentranthandling.The
runExclusiveSessionStoreWritewrapper in the dist is also the pre-fix two-arg form:So the dist does not even forward an
optsargument to the queue.Step 3: the only
reentrant: truesite in the distThe dist file
session-accessor-DvSc996e.jsdoes contain areentrant: trueline at the expected call site insidecommitReplySessionInitialization:But this option is passed as the third argument of
updateSessionStore, and the distupdateSessionStoresignature is:i.e.
optsis not forwarded torunExclusiveSessionStoreWrite, which in turn does not accept anoptsargument. Thereentrant: trueis therefore silently dropped on the floor.Step 4: confirmation
The
reentrantfield is read in exactly zero places in the dist.Expected behavior
The fix in
d2da8c79d9should be effective in the publishedv2026.6.11artifact: a transient reply-session initialization stale-snapshot conflict should not block the user-facing message, andcommitReplySessionInitializationshould be able to callupdateSessionStorereentrantly from inside theinitSessionStateAttemptwriter queue without dropping thereentrant: truehint.Actual behavior
In the published
v2026.6.11dist:commitReplySessionInitializationpassesreentrant: truetoupdateSessionStoreupdateSessionStorediscards itstale-snapshotis returned fromcommitReplySessionInitializationon benign concurrent session-row churn (delivery timestamps, token/session status, restart recovery, active-memory/compaction metadata — see Signal direct inbound can be dropped on reply session initialization conflict in 2026.6.11 release #98234 for a detailed list)reply session initialization conflicted for <sessionKey>, and the inbound message is droppedImpact
High for any user on 6.11 who is not on the
mainbranch — i.e. every npm install of 6.11. Webchat / Signal / Telegram / WhatsApp / DM-bound channels are all affected to the extent they usecommitReplySessionInitialization. From the GitHub issue tracker, reports of this exact symptom on 6.11 (not beta) include:agent:main:main, 6.11)So far, at least 7 GitHub issues report this exact error string. The bundling divergence is, in our view, a release blocker for 6.11.
Suggested fix paths (for maintainers)
Any of the following would restore parity with the source:
src/shared/store-writer-queue.tsfor the next npm release, including theAsyncLocalStorage/isActiveStoreWriter/runActiveStoreWriterblock fromd2da8c79d9(~+43 lines), and add theoptsparameter torunExclusiveSessionStoreWriteinsrc/config/sessions/store-writer.ts.store-writer-queuemodule exports areentrant-awarerunQueuedStoreWritewhenever the source has it; this would have caught the divergence.75db48a175follow-up (compare reply init revisions using persisted shape, PR fix: prevent stale skill snapshots blocking Discord replies #97657) alongside the re-bundle to also reduce false-conflict frequency from runtime-only field churn.Local mitigation (not a real fix)
We have locally tried two mitigations; both are workarounds only:
reentrantplumbing. Requires hand-editing minified code; high regression risk; does not survivenpm i -g openclaw@latest.We are happy to assist in a release-blocking patch, validation against the existing
src/config/sessions/store-writer.test.tsandsrc/auto-reply/reply/session.test.tstests, and a fresh CHANGELOG entry that clearly calls out the 6.11 dist vs source divergence.Reproduction (very short)
[email protected]vianpm i -g [email protected].journalctl --user -u openclaw-gateway | grep "reply session initialization conflicted".Evidence checklist
AsyncLocalStorage(4 hits instore-writer-queue.ts)store-writer-queue-Cs_NM_XG.jsis 72 lines and contains 0 hitssession-accessor-DvSc996e.js:1848hasreentrant: true(the call site is patched)updateSessionStoredoes not forwardoptstorunExclusiveSessionStoreWriterunExclusiveSessionStoreWrite(storePath, fn)has only 2 argsgrepforparams.reentrant|opts.reentrant|.reentrantin the dist store-writer code returns 0 hitsLocal environment log (anonymized)
Reported by the maintainers of A380 on 6.11 npm install. Same maintainer previously contributed #85704 (memory vector degradation guard) which was merged into main as
16ffc2507.