Port of the vgi-python 0.16 delta. Aligns the Java SDK with vgi-python 0.16.0 and the vgi C++ extension. Integration suite: 255 pass / 0 fail across launch, http, and shm lanes.
- Blended ("UNNEST-style") table-in-out: RowTransformFunction interface (subtyping = blended signal), FunctionInfo.input_from_args, arity/varargs overload resolution; fixtures geo_encode, row_sum, blended_drop, projectable_blended, hostile_provenance.
- Per-output-row provenance for batched correlated LATERAL: RowTransformFunction.PARENT_ROW_KEY + parentRows() helper; blended_explode fixture.
- substream_id + parallel per-substream finalize: InitRequest.substream_id, TableInOutFunction.hasFinalize()/finish()/maxWorkers(); FINALIZE-phase producer over materialized finish(); table-in-out max_workers no longer hardcoded to 1 (unblocks the C++ exchange cache's parallel_safe requirement).
- Result-cache surfaces: cache-control on buffered finalize emits, scalar cacheControl() (CACHE_CONTROL), conditional-revalidation validators; cached_* fixtures.
- fix(blended): exchange states are named classes so init-baked args survive HTTP state tokens (anonymous-class captured locals are synthetic fields, which StateSerializer skips).