When a program reads Claude Code's output as a live stream through the SDK (the toolkit for driving Claude Code from your own code), each reply ends with a message_stop event. That event can now carry an optional abandoned_blocks field with two parts:
api_message_id: which reply the abandoned content belongs tofrom_block_index: the position from which the content blocks (the separate pieces of a reply) were left unfinished
Claude Code fills this in on a message_stop it produces itself when the stream from the API failed, stalled or ended early. A program can use it to remove half-received content blocks that will never become part of a finished assistant message.
Programs that show a reply as it streams in can now clean up the partial pieces left behind by a broken stream, instead of leaving fragments on screen that nothing will ever finish.