From dfef70b61b98382a1f78fc6d970fb24ac86c4e36 Mon Sep 17 00:00:00 2001 From: Agando Date: Fri, 23 Oct 2026 20:30:20 +0200 Subject: fix(chat): three concurrency holes found reviewing my own patch (v4.6.77) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. chat.py renamed the temp file AFTER releasing the flock, so two writers could each read the pre-replace snapshot and the later rename silently dropped the earlier message. os.replace now happens inside the lock. 2. The agent cursor was global. After hermes-reset it pointed past the end of the new empty thread, so every read returned nothing — the agent would think it had been ignored. Key is now per thread and reset clears every chat cursor. 3. chat-relay.sh had no overlap guard: a slow agent run (up to 5 min) could collide with the next tick and answer the same thread twice. flock -n on /tmp/chat-relay.lock. Verified: stale cursor 'webx11_chat_agent_cursor_oldthread00000' set to 9999999999999, hermes-reset -> zero cursor keys remain, read returns {messages:[], note:'no new messages...'}. --- main.html | 6 +++--- modules/core/core-bundle.js | 9 +++++++-- modules/core/module-aiassist.js | 5 +++-- modules/core/module-debug-supervisor.js | 4 ++++ modules/core/module-loader.js | 2 +- scripts/chat.py | 4 +++- 6 files changed, 21 insertions(+), 9 deletions(-) diff --git a/main.html b/main.html index 23ab761..8cc0848 100644 --- a/main.html +++ b/main.html @@ -1349,13 +1349,13 @@ - + - + - +