Voicemail on the timeline — before/after

Perry from A&K Appliances was transferred to the property line on 2026-07-15, reached a mailbox, and left a message about a fridge in unit 210 — today the thread says he talked to a person; after PR #5580 it says where the call actually went and whose words those are.

Conversation conv_voice_9fab584f · times shown 8:22–8:25 AM.

Before — today

Filed connected. The mailbox's words are attributed to the property team, and Perry reads like ordinary dialogue.

Perry — A&K Appliances
(720) 415-XXXX
resolved Voice · 4:07 Transferred · 0:33
Jul 15 · Maintenance · Voice
Let me get you over to the property team — one moment.
C8:22 AM
Transferred to property team · 8:22 AM · 0:33 with PM
Listen to transfer · 0:33
Hang up or press # for further options.
PM8:23 AM
Hi, this is Perry with A and K Appliances. Uh, looks like I'm coming out to take a look at the refrigerator in unit 210. Have you guys on the schedule between 11:00 and 1:00. Callback number is 720-415-XXXX.
8:23 AMP

What's wrong here. The mailbox prompt sits in a property-team bubble with the human-agent avatar, so the record says a person spoke. Perry's message reads as one half of a conversation nobody actually had. The thread is stamped resolved with no outcome, and nobody was told to call him back.

After — PR #5580

Outcome voicemail_message_left. The machine's words never enter the thread; Perry's message is the only human content, and it is labeled as a voicemail.

Perry — A&K Appliances
(720) 415-XXXX
resolved Voice · 4:07 Voicemail · 0:33
Jul 15 · Maintenance · Voice
Let me get you over to the property team — one moment.
C8:22 AM
Went to voicemail · 8:22 AM · 0:33
Listen to transfer · 0:33
Transfer was not answered by a person. The caller left a message.
Hi, this is Perry with A and K Appliances. Uh, looks like I'm coming out to take a look at the refrigerator in unit 210. Have you guys on the schedule between 11:00 and 1:00. Callback number is 720-415-XXXX.
8:23 AMP

Faithful mock of the merged code, not a screenshot. The divider pill, its wording, the Voicemail · 0:33 header badge and the kept audio player are literally what ConversationThread.tsx renders on this outcome; the machine's turn is dropped upstream in post-transfer.ts, which writes only the caller's sentences after the greeting. Colors, spacing and avatars are the app's existing thread tokens.

Two honest gaps this mock exposes. (1) The plain-English voicemail note is written as a tool_result row named transfer_voicemail_note, but the thread's tool-row filter only lets transferMarker, tour_auto_created and voicemail_greeting through — so as merged it is stored and not displayed. It is drawn above as the centered chip it would be once allow-listed. (2) The outcome basis is persisted for analytics only; no thread element renders it today.

Under the hood — stored, not drawn on the thread

transferOutcome
voicemail_message_left
basis
transcript
reason
machine_greeting
transferOutcomeAt
2026-07-15 08:25 AM
PM email
sent — vendor lane matched no open job, so the property inbox gets the verbatim message and “nobody has called them back”

Callback number masked. Mocks built from the PR branch d25f21d — component: src/components/domain/conversations/ConversationThread.tsx; writer: agents/clara/lib/voice/post-transfer.ts.

PropFlow Docs