You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix(msteams): a proactive send keeps the buttons its result carries (#330)
Crew finding F6 from the #327 review, the one with a user-visible
consequence.
The courier rendered through `text_reply_message`, which drops every
interactive component. This feature exists to deliver a FINISHED
long-running operation back to the conversation that started it, and the
archetypal such result asks for approval — so the approval prompt
arrived as prose with nothing to click. The captured activity before the
fix, in full:
{"conversation":{"id":"a:conv-1"},"from":{"id":"28:bot-1"},
"recipient":{"id":"29:1abc"},
"text":"The migration finished. Approve the cutover?",
"textFormat":"plain","type":"message"}
The button is simply gone. A render error was worse still: the literal
text `(no content)`, posted with `result: ok`.
It now uses `build_reply_body` — the inbound reply path's own renderer.
That also closes the security half of the finding: `render_card_content`
binds each control's correlation token to (tenant, recipient), so a
proactively delivered card is a capability for its recipient rather than
for whoever can see it (#250/#287). The recipient is the stored
`user_id`.
Red first: `a_proactive_send_delivers_the_buttons_the_result_carries`
sends a result carrying an approval button and asserts the captured
activity contains it, carries a correlation token (`ct` — proof it went
through the SIGNING path rather than being rendered as decoration), and
never contains `(no content)`.
cargo test --workspace --no-fail-fast: 925 passed, 0 failed.
0 commit comments