KamoCRM

A widget turn is not one transaction, so a swallowed read no longer fails the send at commit

FixAIService
Shipped
September 29, 2026 at 1:13 AM UTC
Author
Kamo
Commit
c36f881

SP98-A-9. PublicAiChatService.sendMessage ran the whole visitor turn in one @Transactional. The hand-off tool's escalation titles (the persona's version or agent, or the Operating Brief) are read inside it and a failed read is swallowed (a generic hand-off still works), but the failing repository call had already marked the transaction rollback-only: the send failed at commit with UnexpectedRollbackException, and the visitor's message and the answer were rolled back. The widget's integration read, the router's candidate loop and the provider-health write swallow their failures the same way, and the transaction also spanned the provider's HTTP calls (up to 60 s a round, several rounds). The send now runs as the member's REST and socket turns already do, which run the same orchestration with no transaction: each write commits on its own. PublicChatTurnCommitTest runs the widget behind its own transaction advice and each repository behind Spring Data's, over a real transaction manager and an in-memory database: with the brief's or the version's read failing, the visitor gets the answer, the hand-off is offered with its generic description, and both rows are committed.

All changes

Like what you see shipping?

All of it arrives in your workspace on its own. Start on the free plan and read this page again in a month.

Start Free ForeverView Pricing