- 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.
