Agent’s spoken transcript is not saved to chat context and conversation_item_added event does not fire when user disconnects during speech

Issue: Agent’s spoken transcript is not saved to chat context and conversation_item_added event does not fire when user disconnects during speech
In my voice agent, I call session.say() with an intro message and allowed_interruptions set to false in the on_enter method. When the agent is actively speaking this intro message and the user disconnects (hangs up the call), the following happens:
The assistant message that was being spoken is never added to the chat context (chat_ctx)

  1. The session.on("conversation_item_added") event never fires

  2. No error or warning is logged — the transcript is silently lost

This happens even though the agent had already started speaking and the user heard part of the message before disconnecting.
What I expect: When the user disconnects mid-speech, the portion of the message that was spoken (or the full message if it completed) should still be added to the chat context, and the conversation_item_added event should still fire.
What actually happens: The transcript is completely lost. Downstream logic that depends on conversation_item_added (logging, analytics, etc.) never executes.
How to reproduce:
In Agent.on_enter(), call await self.session.say("Hello, welcome to our service...", allow_interruptions=False)
Listen for session.on("conversation_item_added", handler)
Have the user disconnect while the agent is speaking

  1. Observe that the handler is never called and the message is not in chat_ctx

If you close the session when the participant disconnects, it will flush the buffer and update the chat context:

    @ctx.room.on("participant_disconnected")
    def on_participant_disconnected(participant: rtc.RemoteParticipant, *_):
        logger.info(
            f"Participant disconnected - identity: {participant.identity}, "
            f"sid: {participant.sid}, reason: {getattr(participant, 'disconnection_reason', 'N/A')}"
        )
        asyncio.create_task(session.aclose())

I just tried it quickly, and the conversation_item_added handler fired with the partial transcript