Branch: refs/heads/main Home: https://github.com/xwiki-contrib/ai-llm Commit: fad89391925b2097fd295561617e861960c79781 https://github.com/xwiki-contrib/ai-llm/commit/fad89391925b2097fd295561617e8... Author: Paul Pantiru <[email protected]> Date: 2026-08-07 (Fri, 07 Aug 2026) Changed paths: M application-ai-llm-mcp/application-ai-llm-mcp-server/src/main/java/org/xwiki/contrib/llm/mcp/internal/tool/MCPDeleteObjectTool.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/main/java/org/xwiki/contrib/llm/mcp/internal/tool/MCPEditDocumentTool.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/main/java/org/xwiki/contrib/llm/mcp/internal/tool/MCPWriteDocumentTool.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/main/java/org/xwiki/contrib/llm/mcp/internal/tool/MCPWriteObjectTool.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/main/java/org/xwiki/contrib/llm/mcp/internal/tool/MCPWriteSchemaTool.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/main/java/org/xwiki/contrib/llm/mcp/internal/tool/MCPWriteSupport.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/test/java/org/xwiki/contrib/llm/mcp/internal/tool/AbstractMCPWriteToolTest.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/test/java/org/xwiki/contrib/llm/mcp/internal/tool/MCPDeleteObjectToolTest.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/test/java/org/xwiki/contrib/llm/mcp/internal/tool/MCPEditDocumentToolTest.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/test/java/org/xwiki/contrib/llm/mcp/internal/tool/MCPWriteDocumentToolTest.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/test/java/org/xwiki/contrib/llm/mcp/internal/tool/MCPWriteObjectToolTest.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/test/java/org/xwiki/contrib/llm/mcp/internal/tool/MCPWriteSchemaToolTest.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/test/java/org/xwiki/contrib/llm/mcp/internal/tool/MCPWriteSupportTest.java Log Message: ----------- [Misc] Recover parallel-write save failures into teaching refusals * A failed save with the platform's storage module/code pair no longer always returns the generic could-not-save message: a create that lost a parallel-create race (fresh post-failure re-load shows the document now exists) is re-routed to the tool's existing already-exists guard incl. the translation-row variant; a cause chain carrying an SQLException with SQLSTATE class 23 or 40 returns a new retry message naming concurrent writes; everything else keeps the generic message * Ladder single-sourced in MCPWriteSupport (isStorageSaveError, isConcurrencyCollision walking the whole cause chain, existsFresh best-effort re-check, reroutedSaveFailure); per-tool catches sit at the save site with a rethrow to the untouched generic catch. edit_document, which can create but has no exists-guard, gains its own just-created re-route message; delete_object gets the collision branch only. Guard messages extracted into shared per-tool helpers so the pre-save guard and the re-route can never drift * The exists-guard re-route deliberately carries no version number: read-before-modify stays mandatory * Tests: platform-shaped failure builders in the abstract write-tool base, create-race/collision/opaque-failure suites per tool with exact message pins; mcp-server 896, checkstyle 0, jacoco met Commit: afc16b237f3cd5d72e8400b207ab65e97b86bb0b https://github.com/xwiki-contrib/ai-llm/commit/afc16b237f3cd5d72e8400b207ab6... Author: Paul Pantiru <[email protected]> Date: 2026-08-07 (Fri, 07 Aug 2026) Changed paths: M application-ai-llm-mcp/application-ai-llm-mcp-server/src/main/java/org/xwiki/contrib/llm/mcp/internal/tool/MCPQueryObjectsTool.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/main/java/org/xwiki/contrib/llm/mcp/internal/tool/MCPWriteSupport.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/test/java/org/xwiki/contrib/llm/mcp/internal/tool/MCPQueryObjectsToolTest.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/test/java/org/xwiki/contrib/llm/mcp/internal/tool/MCPWriteDocumentToolTest.java M application-ai-llm-mcp/application-ai-llm-mcp-server/src/test/java/org/xwiki/contrib/llm/mcp/internal/tool/MCPWriteSupportTest.java Log Message: ----------- [Misc] Per-document write lock and query_objects select hint * MCPWriteSupport serializes every load-check-persist sequence on a 256-stripe ReentrantLock pool keyed on the locale-free wiki-qualified reference, making base_version an actual optimistic lock for writes through one server instance: the second of two writers carrying the same stale version now loads after the first one's save and is refused with the version-conflict message instead of silently overwriting. All six persistence tools are covered through the shared scaffold. Single-JVM scope by design: cross-node writers fall back to the platform baseline (the database primary key arbitrates creates, updates are last-write-wins, matching the platform's own node-local save lock); fixed striping keeps memory bounded * query_objects appends a hint line when select is absent and object rows rendered: field values are not shown, pass select, get_schema lists the fields. Class-scoped mode only - the document-inventory mode refuses select and keeps its no-values design * Tests: end-to-end lost-update closure (latch-parked writer A, writer B with the same stale base blocks then gets the conflict refusal, one-save counter), lock release on failure and sequential reacquisition both cross-thread, hint present/absent/empty pins; mcp-server 902, checkstyle 0, jacoco met Compare: https://github.com/xwiki-contrib/ai-llm/compare/e3f0ce5fd317...afc16b237f3c To unsubscribe from these emails, change your notification settings at https://github.com/xwiki-contrib/ai-llm/settings/notifications