v0.21.0
Serialize embedded bind_call as binary (cross-language wire format)
InitRequest.bind_call — and the TableFunctionCardinality / Statistics / DynamicToString requests — had no ArrowType annotation, so Python serialized the embedded BindRequest as an inline Arrow struct. Every other VGI implementation (the DuckDB C++ client and the Rust / Go / Java SDKs) encodes bind_call as an opaque binary IPC blob (Rust: ipc::read_batch(&dto.bind_call.0)).
Python's deserializer tolerantly read the binary form (so direct C++→Python worked), but its serializer emitted a struct. That asymmetry surfaced through the Cedar proxy: when it re-serialized an attribution-stripped InitRequest and forwarded it to a non-Python worker, the worker rejected it with expected Binary array.
bind_call is now Annotated[BindRequest, ArrowType(pa.binary())] on all four request classes, matching the wire standard and Python's own reader.
Also
ScanBranchesResultaccepts an empty branch list (lenient producers omit the IPC stream for an empty nested value).- Test fixtures: the
vgi-fixture-httpMetaWorker now composes thetwin_a/twin_bcolliding-catalog fixtures (catalog-qualified dispatch).