Root cause: embedding generation could break the DB transaction via a failed SQL statement. The except block caught the Python error but left the transaction in a failed state. Subsequent queries (_record_usage → subscription lookup) then failed with InFailedSQLTransactionError. Fixes: - session_embedding_service: use begin_nested() savepoint so failures don't poison the parent transaction - ai_sessions.py: add db.rollback() before _record_usage in all 3 error handlers (create, respond, pickup) to recover from broken transactions Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
5.7 KiB
5.7 KiB