On main at 18f2554, the beta streaming accumulator assigns encrypted_content from every compaction_delta. The decoded model defaults an absent field to None, so a later content-only update clears metadata received earlier.
Reproduction: send the existing compaction fixture's populated delta, followed by {"type":"compaction_delta","content":"Updated summary."} for the same block. Both synchronous and asynchronous streams return encrypted_content=None in the final block and in the second BetaCompactionEvent, despite no metadata update being present.
An absent field should retain the previous metadata. A present null must still clear it, and empty or nonempty strings must replace it.
The regression parameterizes all four cases through the public beta streaming APIs. Only the omitted-field cases fail on main. This is separate from #1830 and #1665, which change compaction summary text accumulation; this report does not propose changing summary text behavior.
On main at 18f2554, the beta streaming accumulator assigns encrypted_content from every compaction_delta. The decoded model defaults an absent field to None, so a later content-only update clears metadata received earlier.
Reproduction: send the existing compaction fixture's populated delta, followed by {"type":"compaction_delta","content":"Updated summary."} for the same block. Both synchronous and asynchronous streams return encrypted_content=None in the final block and in the second BetaCompactionEvent, despite no metadata update being present.
An absent field should retain the previous metadata. A present null must still clear it, and empty or nonempty strings must replace it.
The regression parameterizes all four cases through the public beta streaming APIs. Only the omitted-field cases fail on main. This is separate from #1830 and #1665, which change compaction summary text accumulation; this report does not propose changing summary text behavior.