v0.27.0
Preserve extra batch metadata across a re-frame
An intermediary that re-serializes a request — e.g. the Cedar proxy stripping an argument or injecting a row filter — rebuilds the request batch's custom_metadata and would drop any application keys the client set on it. Most importantly this loses the result-cache (M6) conditional-revalidation validators (vgi.cache.if_none_match / if_modified_since), which ride the request batch, not the payload — so the worker recomputes instead of answering 304 not_modified.
write_request / _write_request gain an extra_metadata parameter that merges additional custom_metadata into the request batch. Framework keys (method / version / shm / trace) always win, so a caller can never forge them.
Tolerate empty IPC buffers from lenient producers
deserialize_record_batch now decodes a schema-only / empty IPC stream to a zero-row batch instead of raising IPCError. Lenient producers (the Rust / Go / Java SDKs, tolerated by the DuckDB C++ client) omit the batch for an empty nested value, so a strict consumer must accept it rather than fail closed on a legitimate response.